Vous êtes sur la page 1sur 166

Partie I

Wensdy MOISE wensdy.moise@esih.edu Ecole Suprieure dInfotronique dHaiti

Prsentation Introduction
Systme embarqu Terminal Mobile

J2ME

Environnement de dveloppement MIDP


Lexique

Objectif :

Introduire les tudiants au dveloppement des applications pour tlphones mobiles sous Java ME. Cours Magistraux: 15 Heures (5 sances de 3 heures) Travaux Pratiques: 30 Heures par Groupe
Groupe 1: dfinir Groupe 2: dfinir

Rpartition

Calendrier Annuel

Disponible sur Moodle

Un systme embarqu (ou systme enfoui) est la mise en uvre conjointe dune plateforme matrielle et de son logiciel dexploitation. Il est de plus compltement intgr au systme quil contrle et se diffrencie dun ordinateur essentiellement par la varit rduite dapplications qui peuvent sexcuter. Il est en gnral de petite taille et consomme trs peu dnergie.

12/19/2012

Origines des entres

Capteurs Base de donnes

Destinations des sorties


Utilisateurs Systmes de commandes

Traditionnellement :

Avionique Robotique

Actuellement:

Electronique grand public Tlphonie mobile Transports Domotique Systmes temps rels Multimdia Montique Banque

Taille de la mmoire. Vitesse du processeur. Consommation. Capacit graphique. Capacit de stockage.

Suret de fonctionnement (ordonnancement, synchronisation). Gestion des priphriques dE/S. Dure du temps de traitement qui doit tre la plus courte possible. Adaptation lenvironnement.

Les applications locales cest--dire qui ne ncessitent pas de connexion rseau (ex: jeux, calculatrice, ). Les applications tournant en rseau peer to peer cest--dire de terminal terminal sans lintermdiaire dun serveur (ex: certains jeux, chat direct, certains outils de tlchargements, ). Les applications client-serveur lgres telle que laffichage de contenu transmis par un serveur. Le terminal client ayant une logique applicative limite.

Les applications client-serveur intelligentes qui par rapport aux prcdentes ncessitent un traitement cot client relativement important (ex: application sans fil). Les applications distribues qui tournent sur plusieurs clients sans ncessiter de serveur (certains jeux multi-joueurs, appareil de surveillance, ).

On appellera terminal mobile ou terminal embarqu un systme embarqu monoprocesseur spcialis pour un ensemble rduit de taches (ex: tlphone cellulaire, un PDA, un systme de navigation pour voiture).

J2ME

Historique Caractristiques Configurations et Profiles Packages Optionnels

Historiquement, Sun a propos plusieurs plateformes pour le dveloppement d'applications sur des machines possdant des ressources rduites, typiquement celles ne pouvant excuter une JVM rpondant aux spcifications compltes de la plate-forme Java SE. On peut citer :
JavaCard (1996) : pour le dveloppement sur des cartes puces PersonnalJava (1997) : pour le dveloppement sur des machines possdant au moins 2Mo de mmoire EmbeddedJava (1998) : pour des appareils avec de faibles ressources

En 1999, Sun propose de mieux structurer ces diffrentes plateformes sous l'appellation J2ME (Java 2 Micro Edition). Courant 2000, la plate-forme J2ME est cre pour le dveloppement d'applications sur appareils mobiles ou embarqus tels que des tlphones mobiles, des PDA, des terminaux, ... : elle est donc la descendante des diffrentes plateformes antrieures relatives aux appareils mobiles. Seule la plate-forme JavaCard n'est pas incluse dans Java ME et reste part. Llaboration de J2ME (renomm Java ME en 2005) est la seconde rvolution dans lhistoire du langage Java, la premire tant le concept des servlets, ces bouts de codes Java, scuriss, tournant sur un serveur, en remplacement des scripts CGI (Common Gateway Interface) jugs peu fiable.

Un environnement J2ME est compos de plusieurs lments:


Une machine virtuelle ddie tenant compte des ressources limites du matriel cible. Un ensemble dAPI de base. Des API spcifiques.

Pour rpondre la plus large gamme dappareils cibles, J2ME est modulaire grce 3 types dentits qui sutilisent par composition :
Configurations Profiles Packages optionnels

Dfinition Une configuration concerne un ensemble de produits caractriss par certaines contraintes au niveau de la mmoire et de la puissance du processeur. Elle dfinit galement le type de machine virtuelle qui sera utilise et lensemble minimal de classes de base de lAPI. Types :

CLDC : Connected Limited Device Configuration CDC : Connected Device Configuration

Elle concerne les appareils possdant :

Une connexion rseau limit des ressources faibles :


Une mmoire limite (moins de 512 Ko de mmoire

dont au minimum 128 Ko de ROM et 32 Ko de RAM). Une puissance processeur limite Un cran daffichage rduit Des entres limites Des batteries dautonomie limite

Exemple dappareils : set-top box, PDA haut de gamme Machine virtuelle utilise : KVM (Kilo Virtual Machine). KVM est une machine virtuelle allge et ne possdant pas certaines fonctionnalits de la JVM classique.

L API du CLDC se compose de 4 packages:


java.io : pour la gestion des entres sorties par flux java.lang : classes de base du langage java java.util : classes utilitaires notamment pour grer les collections, la date et lheure javax.microedition.io : classes pour grer des connections gnriques

Elle concerne les appareils possdant :

Au minimum 512 Ko de ROM et 256 Ko de RAM. Un processeur 32 bits, en gnral. Un accs rseau consquent.

Machine Virtuelle : CVM (Convergence Virtual Machine). Elle possde lensemble des fonctionnalits de la JVM Classique mais des capacits rduites.

Dfinition :
Un profile dfinit une spcification des API, cest-dire lensemble des API utiliser dans une application J2ME pour une configuration donne.

Une configuration peut contenir plusieurs profiles.

Types pour la configuration CLDC :

MIDP : Mobile Information Device Profile PDAP : Personal Digital Assistant Profile

Types pour la configuration CDC :


Fundation Profile Personal Basis Profile Personal Profile

Profile standard pour les terminaux lgers. Il requiert :


Un minimum de 256 Ko de ROM en plus de ce que ncessite la configuration CLDC. Un minimum de 512 Ko de RAM + ROM pour Java et ses bibliothques (dont 128 Ko de RAM ddie au tas).

Un cran dau moins 96x54 pixels; Des priphriques dentres tel quun clavier ou cran tactile; Et une connexion rseau bidirectionnelle;

LAPI du MIDP se compose des API du CLDC et de trois packages :


javax.microedition.midlet : cycle de vie de lapplication javax.microedition.lcdui : interface Homme-Machine javax.microedition.rms : persistance des donnes

Ce profile permet lexcution dapplications qui auront au pralable t tlcharges et installes. Les applications peuvent tre de type bureautique, commerciales, de services, des jeux Lcriture de ces applications que lon appellera des MIDlets, sera dtaille par la suite.

Vient juste au dessus de MIDP et requiert :

512 Ko minimum pour Java et ses bibliothques, mais au maximum 16 Mo de ROM + RAM; Un cran daffichage dau moins 20000 pixels Un terminal de pointage Et une entre pour caractre

Ce profile est mi chemin entre les profiles MIDP et le Foundation Profile. Le profile PDAP permet davoir des applications de type MIDlet mais il utilise en plus un sous ensemble de lAWT (Abstract Window Toolkit) du J2SE pour les interfaces graphiques utilisateurs.

Il requiert :

1 Mo de ROM en plus des besoins de lapplication; 512 Ko de RAM en plus des besoins de lapplication; Une connexion rseau riche; Et une IHM (Interface Home Machine) rduite.

Cest le profile de base pour la configuration CDC. Il permet de dvelopper des applications nayant pas besoin dinterface utilisateur mais dune connexion rseau trs riche.

Le profile personnel de base


Il permet de renforcer les fonctionnalits rseau du profile Fundation en lui permettant en plus, dimplmenter des IHM et GUI de base.

Le profile personnel
Cest un profil complet pour ce qui est de la conception dIHM et de GUI. Il repose sur lAWT du J2SE.

Dfinir des API relatives une fonctionnalit spcifique dont le support est facultatif. Lensemble de ces packages permet dutiliser des technologies particulires (Bluetooth, services web, lecteur de code barre). Souvent dpendants du matriel. Ces API ne font pas partie de Java ME mais elles sappuient sur elle ou ltendent pour dfinir des API spcifiques un appareil ou une fonctionnalit.

Environnement de dveloppement MIDP

J2ME Wireless ToolKit (WTK) Dfinitions MIDlets et MIDletSuite Mthodologie de conception dune MIDlet Interface Utilisateur

Boite outil permettant de crer des applications mobiles et autres systmes sans fil. Avec WTK, on peut crer de nouveaux projets, les compiler et les excuter. Mais on ne peut pas diter le ou les codes sources correspondants.

Le mot MIDlet est form partir de MIDP et du suffixe let cher Java (applet, servlet). Une MIDlet est, comme son nom lindique, une application reposant sur le profil MIDP et dont la classe principale tant la classe abstraite javax.microedition.midlet.MIDlet.

Une MIDletSuite est un ensemble de MIDlets runies au sein dun mme paquetage. Ce paquetage se compose dune archive java (fichier .jar ) et dun fichier dcrivant le contenu de cette archive (fichier .jad ).

Une MIDlet peut tre dans les trois tats suivants :


Activation; Veille; Destruction.

Le passage dans une tat se fait par lappel la mthode correspondante, par le gestionnaire dapplications.

Lappel la mthode startApp() permettra daller dans ltat dactivation, lappel pauseApp() dans ltat de veille et lappel destroyApp() dans ltat de destruction. Sur la diapo suivante, les tats dactivation, de veille et de destruction sont respectivement appels Active, Pause et Destroy.

Une MIDlet peut delle-mme passer dans les tats de veille ou de destruction en appelant respectivement les mthodes notifyPaused() et notifyDestroyed(). Lorsquelle est dans ltat de veille, elle continue recevoir des informations comme par exemple les timers, et elle peut dcider de sortir de cet tat en appelant la mthode resumeRequest().

La conception dune MIDlet ncessite plusieurs tapes :


Lcriture; Compilation La pr-vrification; Le test de lapplication; La mise en paquet; Et le test de lapplication aprs la mise en paquet.

3 principes respecter

Le constructeur de la MIDlet ne doit pas faire lhypothse de la disponibilit de ressources systmes, car rien ne garantit leur prsence. Il doit donc comporter le minimum dinformations permettant la MIDlet de se lancer.

3 principes respecter (suite) :

Il faut faire attention ninitialiser le systme quune seule fois. En effet, vu que linitialisation se fait partir de la mthode startApp() et que celle-ci est appele au dbut mais aussi chaque sortie de ltat de veille, il faudra distinguer ces situations.
Une MIDlet en tat de veille ne devra pas bloquer de ressources partages critiques.

La MIDlet prsente la diapo suivante :

Ne contient quun bouton de commande. Et se contente dafficher un message de bienvenue.

La compilation sobtient avec la ligne de commande suivante :


javacd.bootclasspath /home/wensdy/programmation/j2me/midp2.0fcs/classes/MaPremiereMIDlet.java

Loption -d indique que les classes doivent tre gnres dans le rpertoire courant. Loption -bootclasspath indique le rpertoire o se trouvent les classes importer.

La pr-vrification sobtient avec la ligne de commande suivante :


preverify d . classpath home/wensdy/programmation/j2me/midp2.0fcs/classes/MaPremiereMIDlet

Loption -d indique que le fichier rsultat issu de la phase de pr-vrification doit tre mis dans le rpertoire courant. Comme ce fichier porte le mme nom que le fichier de classe utilis en entre, cela revient craser lancien fichier .class par le nouveau.

Remarques :

En labsence de loption (-d) le fichier rsultat est mis dans un rpertoire output cr lors de la prvrification dans le rpertoire de travail. On ne va pas effectuer la pr-vrification sur un fichier .class mais sur une classe, donc en paramtre de loutil de pr-vrification il ne faut pas mettre MaPremiereMIDlet.class , mais MaPremiereMIDlet.

Le test dune application seffectue avec la ligne de commande suivante : midp classpath . MaPremiereMIDlet

Si on essaie dexcuter une application qui na pas t pr-vrifie, on obtient le message derreur suivant : ALERT : Error verifying class MaPremiereMIDlet.

On utilise loutil jar pour crer larchive java (ou encore le paquet). Larchive java va contenir le code de lensemble des classes, et des ressources utilises par la MIDlet comme par exemple des fichiers images (icnes). La ligne de commande est la suivante :
jar cvfm MIDlet1.jar manifest.txt MaPremiereMIDlet.java

Le contenu du fichier manifest.txt est le suivant :


MIDlet-1 : MIDlet1, MIDlet1.png, MaPremiereMIDlet MIDlet-Name : MIDlet1 MIDlet-Vendor : Unknown MIDlet-Version : 1.0 MicroEdition-Configuration : CLDC-1.0 MicroEdition-Profile : MIDP-2.0

Liste des attributs obligatoires du fichier manifest :


MIDlet-<num>, MIDlet-Name, MIDlet-Version, MIDlet-Vendor, MicroEdition-Configuration, MicroEdition-Profile.

Liste des attributs optionnels :

MIDlet-Icon, MIDlet-Description, MIDlet-Info-URL, MIDlet-Jar-URL, MIDlet-Data-Size.

Le test d'une application aprs la phase d'archivage s'effectue avec la ligne de commande suivante : midp classpath. Descriptor MIDlet1.jad Fichier.jad : fichier de description du contenu de la MIDletSuite.

Contenu du .jad : Il contient les mmes proprits que le fichier manifest. La diffrence vient de la proprit MIDletJarSize qui est obligatoire dans le .jad. Le fichier .jad sera utilis par le gestionnaire d'application J2ME pour pouvoir vrifier que l'application est bien conforme au teminal avant de la lancer.

Le fichier MANIFEST.MF dcrit les caractristiques de l'archive .jar tandis que le fichier MIDlet1.jad dcrit les caractristiques de l'application contenue dans l'archive. Il peut ventuellement y avoir plusieurs applications, dans ce cas elles sont toutes dcrites.

Prend en compte :

Un cran tactile Un clavier limit en nombres de touches

L API est regroupe dans le package javax.microedition.lcdui et se compose dlments de haut niveaux et de bas niveaux

Possde des mthodes pour afficher les lments graphiques. La mthode statique getDisplay() renvoie une instance de la classe Display qui encapsule lcran associ la midlet fournie en paramtre de la mthode La mthode getCurrent() pour connaitre lobjet courammant affich et la mthode setCurrent() pour afficher lobjet fourni en paramtre

Les lments de linterface graphique appartiennent une hirarchie dobjets : tous les lments affichables hritent de la classe abstraite Displayable.

Classe Screen: classe mre des lments de haut niveaux Classe Canvas: classe mre des lments de bas niveaux Impossible dajouter un lment directement dans Display sans quil soit inclus dans un objet hritant de Displayable Un seul objet de type Displayable peut tre affich.!

API (Application Programming Interface) : Une API est une bibliothque qui regroupe des fonctions sous forme de classes pouvant tre utilises pour dvelopper. Applet : Une petite application java compile, incluse dans une page html, qui est charge par un navigateur et qui est excute sous le contrle de celui-ci. Pour des raisons de scurit, par dfaut, les applets ont des possibilits trs restreintes. AWT (Abstract Window Toolkit) : Une bibliothque qui regroupe des classes pour dvelopper des interfaces graphiques. Ces composants sont dits lourds car ils utilisent les composants du systme sur lequel ils sexcutent. Ainsi, le nombre des composants est volontairement restreint pour ne conserver que les composants prsents sur tous les systmes.

CGI (Common Gateway Interface) : interface utilise par les serveurs HTTP et est indpendante de tout langage. GUI (Global User Interface) : Dispositif de dialogue Homme-Machine, dans lequel les objets manipuler sont dessins sous forme de pictogrammes lcran, que lutilisateur peut oprer en imitant la manipulation physique des ces objets avec un dispositif de pointage, le plus souvent une souris. JVM (Java Virtual Machine) : Cest la machine virtuelle dans laquelle sexcute le code java. Cest une application native dpendante du systme dexploitation sur laquelle elle sexcute. Elle rpond des normes dictes par Sun pour assurer la portabilit du langage. Il en existe plusieurs dveloppes par diffrents diteurs notamment Sun, IBM, Borland, Microsoft

Partie II
Wensdy MOISE wensdy.moise@esih.edu Ecole Suprieure dInfotronique dHaiti

La P.O.O

Objet Dfinition Encapsulation Dfinition Interface dun Objet Dfinition Classe Dfinition Instanciation Dfinition Hritage - Dfinition

Les Modificateurs Les Threads

Un objet est un ensemble autonome de mthodes et de donnes destin accomplir des tches prcises.

Les mthodes ne peuvent agir que sur les donnes de l'objet auquel elles appartiennent.

L'encapsulation des donnes se traduit par le fait que les donnes d'un objet ne peuvent pas tre modifies directement par les mthodes extrieures l'objet. Pour modifier les donnes d'un objet il faut donc passer par ses mthodes.

L'encapsulation facilite et simplifie la rutilisation d'un objet tout en protgeant ses ressources.

C'est l'ensemble des mthodes visibles de l'extrieur, permettant d'appeler d'autres mthodes ou d'agir sur des donnes, non accessibles directement.

Une classe est un modle utilis pour crer un objet. Elle englobe ncessairement toutes les caractristiques que l'on veut retrouver dans la famille d'objet qu'elle sert crer.

C'est l'action de crer un objet partir d'une classe. Un objet est alors une instance d'une classe.

Le mot cl pour signifier une instanciation est new. Pour instancier l'objet Objet1 partir de la classe Classe1 on crira : Classe1 Objet1 = new Classe1()

C'est le mcanisme permettant une classe d'hriter de tous les comportements et attributs d'une autre classe.

L'hritage de proprits se fera au niveau des classes et non des objets.

Le mot cl pour signifier un hritage est : extends. Lors de la dclaration de la sousclasse on crira : class sousclasse extends superclasse L'hritage multiple n'est pas autoris comme en C++ par exemple. Une classe ne peut avoir qu'une seule superclasse, par contre son nombre de sousclasse n'est pas limit.

Les Modificateurs

Modificateurs Dfinition Modificateurs de contrles daccs Evolution des droits daccs Les types de variables Le modificateur static Le modificateur final Le modificateur abstract

Les threads

Les modificateurs sont des mots cls que l'on place au dbut de la dclaration d'une classe, d'une mthode ou d'une variable, et qui en change le sens. Plusieurs modificateurs peuvent tre appliqus au mme lment.

public: les fonctions de toutes les classes peuvent accder aux donnes ou aux mthodes d'une classe dfinie avec le niveau de visibilit public. Il s'agit du plus bas niveau de protection des donnes. protected: l'accs aux donnes est rserv aux fonctions des classes hritires, c'est--dire par les fonctions membres de la classe ainsi que des classes drives. private: l'accs aux donnes est limit aux mthodes de la classe elle-mme. Il s'agit du niveau de protection des donnes le plus lev.

Lors des hritages successifs :

une mthode public dans une superclasse reste public dans toutes les sousclasses; une mthode protected dans une superclasse ne peut tre dans les sousclasses que protected ou public; une mthode dclare sans modificateur de contrle d'accs dans une superclasse peut voir son accs se restreindre dans les sousclasses.

Variable locale une mthode : elle est dclare et n'est visible qu' l'intrieur de cette mthode.

Variable d'instance : elle est dclare l'intrieur d'une classe, mais en dehors du corps d'une mthode. Par principe elle se trouve juste aprs la premire ligne de dclaration d'une classe. Son contenu peut varier d'une instance l'autre.

Variable de classe : elle est, comme la variable d'instance, dclare l'intrieur d'une classe et en dehors du corps d'une mthode, mais la particularit d'tre commune toutes les instances de classe ( celles qui existe dj ainsi qu' celles qui le seront). De telles variables peuvent par exemple tre utilise pour implmenter des compteurs.

Plac devant une variable, il la transforme en variable de classe. L'appel une variable ou une mthode static peut se faire utilisant non pas le nom de l'instance, mais directement le nom de leur classe. Cela facilite leur utilisation et augmente la lisibilit du code.

Ce modificateur peut tre appliqu des variables, des mthodes et des classes. Il indique d'une manire gnrale que l'lment auquel il est appliqu ne peut tre modifi. De cette particularit peuvent dcouler des optimisations dans l'excution du programme.

Une variable final ne peut tre modifie et se comporte comme une constante. Bien souvent une variable final est galement static car cela ne sert rien de la fournir chaque objet de la classe si sa valeur ne doit jamais changer.

Une mthode final ne peut tre redfinie par la suite, que cela soit au sein de sa classe ou d'une sousclasse de sa classe.

A l'excution son appel peut donc directement tre remplac par son code et l'interprteur ne perd pas de temps rechercher si elle est dfinie ou redfinie dans une superclasse ou une sousclasse.

Une classe final ne peut tre sousclasse. C'est le cas de beaucoup de classes de la bibliothque de classe de Java. C'est un gage de scurit et de cohrence dans le fonctionnement du programme.

Cependant pour les classes dfinies par l'utilisateur l'utilit de ne pouvoir faire hriter une de ces classes est d'un intrt discutable.

Une mthode abstraite est une mthode dont la dclaration (la signature et le type de valeur de retour) est prcde du mot cl abstract, mais qui n'est pas dfinie (le comportement n'est pas spcifi). Par exemple : public abstract void g(n);

Une mthode abstraite est obligatoirement public puisqu'elle a vocation tre redfinie dans les classes drives.

Une classe abstraite ne peut tre instancie pour crer des objets. Elle n'est utilis que dans le mcanisme d'hritage o elle sert de superclasse. Une classe est abstraite si sa dclaration est prcd du modificateur abstract, ou si elle contient au moins une mthode abstraite.

Les threads

Thread Dfinition Les Multitches Thread Cration Etat dun Thread Interruption dun Thread Groupes de Threads Priorits et Threads goistes Synchronisation

Un thread est une portion de code paramtre pour fonctionner de faon autonome. Un thread, la diffrence d'un processus, partage ses donnes avec les autres threads.

C'est parfois risqu, mais cela permet au systme de grer (cration, dtruction,...) beaucoup plus facilement les threads. Les communications entre threads sont aussi moins lentes et moins restrictives qu'entre processus.

Le multitche c'est la possibilit d'avoir plusieurs programmes travaillant en mme temps.

Il existe 2 sortes de multitches :


Le multitche premptif : les programmes sont interrompus sans tre consults. Le multitche coopratif ou non premptif : chaque programme peut tre interrompu quand il en fournit explicitement l'autorisation.

On veut crer un thread avec la classe cidessous :

public class Test implements Runnable { public void run() { //.. } }

Pour crer un objet thread Test, il faut crer une rfrence un objet de la classe Thread: Thread runner;

On cr un objet objTest partir de la classe Test : Test objTest = new Test();

Enfin on cre le thread en appelant la mthode constructeur Thread (Object) avec comme argument l'objet constituant le thread : runner = new Thread(objTest); On lance un thread en appelant sa mthode start() : runner.start();

2me mthode pour crer un thread : tendre la classe Thread : public class Test extends Thread { public void run() { //..} } Puis : Test t = new Test(); Et enfin : t.start();

Le cycle de vie d'un thread contient les tapes suivantes :


Cration Excution Blocage Destruction

Etape de cration :

On y entre par l'appel l'oprateur new.

Etape d'excution :

On y entre par l'appel la mthode start(). Nb : il se peut que soit prt tre excut, mais ne soit pas en cours d'excution.

Etape de blocage :

On y entre quand :
La mthode sleep() du thread est appele. Le thread appelle un opration bloquante sur les E/S. Le thread appel la mthode wait(). Le thread essaie de verrouiller un objet dj verouill

par un autre thread. La mthode suspend() du thread est appele (NB : cette mthode ne doit plus tre utilise).

Etape de blocage :

On en sort en effectuant le chemin inverse de celuimenant au blocage :


Le nombre de millisecondes est coul. L'opration d'E/S est finie. Un autre thread a appel notify ou notifyAll. Le verrou a t rendu. La mthode resume() est appele (NB : cette mthodeen

doit plus tre utilise).

Etape de destruction :

On y entre quand :
Le thread meurt naturellement la fin de mthode

run(). Il meurt soudainement du fait d'une exception nonrcuprable. La mthode stop() du thread est appele (NB : cette mthode ne doit plus tre utilise).

Ce mcanisme remplace la mthode stop().

On appelle la mthode interrupt() sur le thread t : t.interrupt(); Si t est bloqu (avec un sleep ou un wait) t se termine avec l'exception InterruptedException. NB: Cette exception peut tre rattrape avec un catch.

Si t n'tait ni en sommeil ni en attente, il n'y a pas d'exception et le thread doit lui-mme vrifie qu'il n'a pas t interrompu en appelant les mthodes interrupted() ou isInterrupted(). static void interrupted() met false le drapeau indiquant l'interruption du thread courant. boolean isInterrupted() ne change pas le drapeau.

Intrts :

Gestion simultane de plusieurs threads

Construction : ThreadGroup g = new ThreadGroup( groupName ); Thread t = new Thread(g, threadName );

Les priorits vont par ordre croissant de 1 10. Un thread est dit goste s'il n'appelle ni la mthode sleep() ni la mthode yield(). yield() se contente de redonner la main au gestionnaire de thread qui peut la redonner au mme thread. sleep() force le gestionnaire de thread passer la main un autre thread.

Le problme se pose lorsque plusieurs threads doivent partager un accs aux mmes objets. On marque une opration qui ne doit pas tre interrompue par le mot cl synchronized. La synchronisation verrouille une portion de code au niveau d'un objet.

La mthode wait() permet thread excutant du code synchronis de se placer dans une liste d'attente. La mthode notify() pemet un thread de rveiller un autre thread qui s'tait plac dans la liste d'attente. La mthode notifyAll() permet de rveiller tous les threads se trouvant dans la liste d'attente.

Remarques :

Les mthodes wait(), notify() et notifyAll() doivent se trouver au sein du mme objet. L'appel notify() ne permet pas de reveiller un thread en particulier. Il se peut donc que ce ne soit pas le bon thread qui soit rveill.

Partie III
Wensdy MOISE wensdy.moise@esih.edu

Ecole Suprieure dInfotronique dHaiti

Les paquetages Les interfaces Les exceptions

Un paquetage correspond un regroupement logique de classes. Le nom du paquetage est alors l'identificateur commun cet ensemble de classes.

Pour indiquer qu'une classe fait partie d'un paquetage, il faut utiliser en dbut de fichier le mot cl package suivi du nom du paquetage. Pour mettre la classe Classe1 dans le paquetage MonPaquetage, au dbut du fichier contenant le code de la classe on mettra : package MonPaquetage; Il n'y a qu'une utilisation du mot cl package par fichier et il s'applique l'ensemble des classes du fichier.

Physiquement un paquetage correspondra un rpertoire. Prenons par exemple l'arborescence suivant : top/rep1/rep2/rep3. Pour faire rfrence une classe se trouvant dans le rpertoire rep3 on va mettre dans le fichier source de cette classe : Package rep1.rep2.rep3. Notez bien que les / du nom physique correspondent aux . du nom logique.

Pour ce qui est de l'utilisation des classes empaquetes dans un programme, il faut en gnral faire rfrence aux paquetages auxquels elles appartiennent. Par exemple, si on considre le paquetage MonPaquetage qui contient deux classes, Classe1 et Classe2. Alors au sein du programme ces classes seront respectivement dsignes par les identifiants suivants : MonPaquetage.Classe1 et MonPaquetage.Classe2.

Il est possible, grce au mot cl import, d'importer une classe. Cette classe est alors accessible sans que l'on ait faire rfrence au paquetage. Par exemple pour utiliser directement la Classe1 dans le programme, on peut donc au dbut du fichier taper : import MonPaquetage.Classe1;

Il est galement possible, toujours avec le mot cl import, d'importer l'ensemble des classes d'un paquetage. Pour cela on fait suivre le nom du paquetage d'une * . En reprenant l'exemple prcdent, pour utiliser directement les classes Classe1 et Classe2 il suffit au dbut du programme de taper : import MontPaquetage.*;

Remarquez bien que l'instruction import MontPaquetage; sans le * est incorrecte. Car on importe une classe ou un ensemble de classe, et non un paquetage.

Importer l'ensemble des classes d'un paquetage ne signifie pas importer les classes des souspaquetages qu'il contient.

Par exemple, si MonPaquetage contient un souspaquetage MonSousPaquetage qui lui contient une classe : SousClasse. Alors, le chemin d'accs complet cette classe est : MonPaquetage.MonSousPaquetage.SousClasse

Il est possible de donner le mme nom des classes de paquetages diffrents. Toute ambigit est leve en utilisant le nom complet de ces classes. Prcisons bien les choses. L'importation uniquement de classes de mme nom ne gnre pas d'erreur la compilation. En revanche si ces classes sont utilises on aura une erreur l'excution stipulant une rfrence ambige une classe.

Inclure d'un seul coup toutes les classes d'un paquetage y compris celles que l'on n'utilise pas n'est pas prjudiciable pour l'excution du programme, car les classes qui ne sont pas utilises sont cartes la compilation. Il existe des paquetages dit standard et dont les classes n'ont pas besoin d'tre explicitement importes. C'est le cas par exemple du paquetage java.lang dont les classes Math, System, Integer,..., sont directement accessibles.

Les paquetages Les interfaces Les exceptions

Une interface est une classe dont toutes les mthodes sont publiques et abstraites sans que l'on ait besoin de le spcifier par les modificateurs public et abstract. Les attributs sont par contre considres comme static et final.

Il existe deux types de hirarchies :

La hirarchie de classe :
Mot cl extends Une classe hrite des proprits et mthodes d'une

unique classe mre.

La hirarchie de comportement :
Mot cl implements

Une

classe hrite de l'implmentation d'interfaces.

comportements

par

On peut avoir simultanment ces 2 types de hirarchie : Par exemple : public class HeritageMutiple extends MaClasse implements MonInterface1, MonInterface2 { //... }

Une interface se compile comme une classe. La plupart du temps, partout o utilise une classe, on peut utiliser une interface. Une interface ne peut pas tre instancie. Une interface ne fournit que des dclarations de mthodes abstraites. Pour inclure plusieurs interfaces dans une classe, il suffit de sparer leurs noms par des virgules.

Utilisation du mot cl interface. Exemple : interface MonInterface { public static final int v1 = 10; int v2 = 20; public abstract void m1(); void m2(); }

On ne peut pas avoir de mthodes ou d'attributs private ou protected. Les mthodes sont de type public et abstract. Les attributs sont de type public, static et final.

Une interface peut hriter d'autres interfaces. Exemple : interface MonInterface extends Int1, Int2, Int3... { //... } On utilise le mot cl extends et les interfaces mres sont spares par des virgules. L'hritage multiple est autoris.

Les paquetages Les interfaces Les exceptions

Une exception est un vnement pouvant faire chouer un programme. Les exceptions constituent un groupe de classes englobant toutes les erreurs pouvant faire chouer un programme mais aussi d'autres situations inhabituelles.

On va essayer de prvoir tous les cas d'erreurs possibles l'aide des structures if...then...else ou switch...case.

Inconvnients d'une telle mthode :


Il faut prvoir tous les cas possibles. La documentation doit tre prcise. La gestion systmatique de tous les cas est fastidieuse.

int status = loadTextFile(); if (status != 1) { /* description de l'vnement inhabituel */ switch (status) { case 2 : /* fichier non trouv */ break; case 3 : /* erreur disque */ break; case 4 : /* fichier corrompu */ break; default : /* autre erreur */ } } else { /* chargement du fichier ok, le programme peut continuer */ }

Une exception peut tre gnre par :


Le systme; Les classes utilises; Par les programmes intentionnelle.

utilisateurs

de

manire

La classe Throwable possde 2 sous classes : Error et Exception. Les erreurs sont internes l'environnement d'excution java (VirtualMachineError, ThreadDeath, ...) Il existe deux types d'exception :

Les exceptions d'excutions : dues du code fragile (ArrayIndexOutOfBounds, NullPointerException, ...). Les autres exceptions (EOFException, MalformedURLException, ...).

Certaines portions de code dont l'excution est susceptible de gnrer des exceptions doivent tre protges. Par exemple la compilation si on utilise l'instruction Thread.sleep(100) sans protection on a le message d'erreur suivant : Test1.java:23: unreported exception java.lang.InterruptedException; must be caught or declared to be thrown Thread.sleep(100);

La solution consiste donc taper : try { Thread.sleep(100); } catch (InterruptedException e) { System.out.println(e.toString()); }

La clause finally spcifie une portion de code qui devra imprativement tre excute. finally peut tre utilise aprs un catch ou juste aprs un try. On peut aussi l'utiliser pour effectuer du nettoyage aprs un return, un break ou un continue.

Elle indique le type d'exception pouvant ventuellement tre souleve par une mthode. Elle se place aprs la signature de la mthode concerne. Si plusieurs exceptions peuvent tre souleves, on les spare par des virgules.

Au lieu d'utiliser les clauses try et catch dans le corps d'une mthode, on peut dclarer la mthode avec une clause throws et ensuite traiter l'exception dans la mthode appelante. On pourra toujours traiter les autres exceptions l'aide des instructions try et catch dans le corps de la mthode.

On utilise l'instruction throw suivie du nom de l'exception. On peut gnrer des exceptions qui seront traites dans d'autres blocs. L'utilisateur peut dfinir ses propres exceptions en drivant la classe Exception.

Eviter d'utiliser des exceptions si de simples tests suffisent. Eviter les clauses catch vide.

Partie IV
Wensdy MOISE wensdy.moise@esih.edu

Ecole Suprieure dInfotronique dHaiti

Les principales Classes et mthodes

Classe Display et ses principales mthodes Classe Displayable et ses principales mthodes Classe Screen Classe Canvas

Les Commandes

La classe Display dfinit le gestionnaire d'cran d'affichage utilis par la MIDlet et des priphriques d'entre. Il existe une unique instance de Display par MIDlet. Pour crer cette instance, on fait appel la mthode getDisplay(). Cette mthode renvoie une instance de la classe Display qui encapsule lcran associ la midlet fournie en paramtre de la mthode.

La mthode getCurrent() pour connaitre lobjet courammant affich. la mthode setCurrent() pour afficher lobjet fourni en paramtre.

La classe abstraite Displayable dfinit un objet qui a la proprit de pouvoir tre affich. Le contenu de cet objet affichable est dfini par deux sous-classes abstraites :

Screen pour les affichages haut niveau Canvas pour les affichages bas niveau

Les mthodes addCommand() et removeCommand() qui respectivement ajoute ou enlve la commande passe en paramtre dans le Displayable. La mthode setTicker() qui affiche dans le Displayable le Ticker (texte dfilant) pass en paramtre et la mthode getTicker() qui retourne le Ticker contenu dans le Displayable. La mthode setCommandListener() qui cre un couteur des commandes du Displayable.

Elle sert de classe mre aux classes implmentant les composants graphiques de haut niveau :

Alert Form List TextBox

Elle dfinit un composant capable d'afficher et de saisir du texte. Son constructeur :

TextBox(String title, String text, int maxSize, int constraints)

Elle dfinit un composant contenant une liste d'lments. Ses constructeurs sont :
List(String title, int listType) List(String title, int listType, String[] stringElements, Image[] imageElements)

Les diffrents types de listes sont :


List.EXCLUSIVE List.IMPLICIT List.MULTIPLE

Elle dfinit un message d'alerte affich durant un certain dlai avant de laisser la place un autre affichage.

Ses constructeurs :

Alert(String title) Alert(String title, AlertType type)

String

text,

Image

image,

Les types d'alerte :

AlertType.ALARM AlertType.CONFIRMATION AlertType.ERROR AlertType.INFO AlertType.WARNING

Elle dfinit un objet de type formulaire. Ses constructeurs :

Form(String title) Form(String title, Item[] items)

Les lments d'un formulaire :

ChoiceGroup CustomItem DateField Gauge ImageItem Spacer StringItem TextField

Elle dfinit un groupe d'lments devant tre plac dans un formulaire. Ses constructeurs sont :
ChoiceGroup(String label, int choiceType) ChoiceGroup(String label, int choiceType, String[] stringElements, Image[] imageElements)

Les diffrents types de ChoiceGroup sont :


ChoiceGroup.EXCLUSIVE ChoiceGroup.MULTIPLE ChoiceGroup.POPUP

Elle sert de classe mre abstraite pour l'extension de fonctionnalit d'un composant de formulaire.

Le constructeur est :

CustomItem(String label)

Elle dfinit un composant ditable reprsentant la date et l'heure. Ses constructeurs sont :

DateField(String label, int mode) DateField(String label, int mode, timeZone)

TimeZone

Elle dfinit un composant graphique reprsentant une barre d'avancement. Son constructeur est :

Gauge(String label, boolean maxValue, int initialValue)

interactive,

int

Elle dfinit un composant contenant une image. Ses constructeurs sont :

ImageItem(String label, Image image, int layout, String altText) ImageItem(String label, Image image, int layout, String altText, int appearanceMode)

Elle dfinit un composant reprsentant une zone vide. Son constructeur est :

Spacer(int minWidth, int minHeight)

Elle dfinit une chaine de caractre non modifiable, ne pouvant tre qu'affiche. Ses constructeurs sont :

StringItem(String label, String text) StringItem(String text)

Elle dfinit un composant texte ditable et initialisable situ dans un formulaire. Le constructeur est :

TextField(String label, String text, int maxSize, int constraints)

Elle sert de classe mre aux classes implmentant les composants graphiques de bas niveau :

GameCanvas

Canvas possde une mthode repaint() qui appellera la mthode paint(Graphics g) contenant l'affichage graphique bas niveau.

Les principales Classes et mthodes Les Commandes

Un vnement de haut de niveau est constitu de la source de l'vnement et de l'couteur associ.

L'interface CommandListener contient la mthode commandAction(Command c, Displayable s).

La classe Command dfinit le type d'action effectuer. Les instructions excuter sont elles, cods dans la mthode abstraite commandAction de CommandListener. Les constructeurs de la classe Command sont :

Command(String label, int commandType, int priority) Command(String shortLabel, String longLabel, int commandType, int priority)

Les diffrents types de commandes :

Command.BACK Command.EXIT Command.STOP Command.CANCEL Command.OK Command.HELP Command.ITEM Command.SCREEN