JAVA. Illustration d UML et Introduction à la programmation «objet» Juillet 2004 Thierry Leydier Virtualité Réelle

Dimension: px
Commencer à balayer dès la page:

Download "JAVA. Illustration d UML et Introduction à la programmation «objet» Juillet 2004 Thierry Leydier Virtualité Réelle thierry.leydier@gmail."

Transcription

1 JAVA Illustration d UML et Introduction à la programmation «objet» Juillet 2004 Thierry Leydier Virtualité Réelle

2 Historique JAVA est issu d'un projet de recherche chez SUN (fin des années 90) Objectif : faire un langage de programmation de référence sur Internet Propriétés de Java : Orienté objet => continuation logique d UML On retrouve les principaux concepts au niveau du langage Portable : langage standard, indépendant des OS Robuste et sûr : Java est un langage haut niveau Interprété : moins efficace que l autres langages (comme C++) mais plus rapide à la mise en oeuvre Juillet 2004 JAVA 2

3 Un premier programme en JAVA JAVA

4 Structure d un programme JAVA JAVA est un langage orienté objet La structure d un programme JAVA dépend des «objets» présents dans l application Objets applicatifs (ou objets du problème) Exemple : Modélisation d un jeu d échec Les objets applicatifs sont les objets du jeu : Les pièces, Les cases, etc. Certains objets peuvent «contenir d autres objets» L objet Plateau contient les objets cases Certains objets peuvent être abstraits Un déplacement est un objet Une ouverture est un autre objet (un ensemble de déplacements) Réfléchir à la structure d un programme JAVA, c est réfléchir aux objets applicatifs utiles pour traiter le problème Juillet 2004 JAVA 4

5 Notion de classe JAVA Certains objets applicatifs ont le même comportement (ou un comportement équivalent) Par exemple, tous les «pions» ont le même comportement Pour Java, ils appartiennent à la même classe «La classe des Pions» Lorsque l on programme en JAVA, on doit créer les classes correspondant aux objets utiles En JAVA, les objets sont appelés «instances» Classe Pion Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Noir 1 Juillet 2004 JAVA 5

6 Programmation et exécution La programmation est une vue statique du problème Un programme en Java est composé de classes Un fichier JAVA par classe Un programme très simple peut se limiter à une seule classe (donc un seul fichier) Chaque classe permet de créer des instances Les objets L exécution du programme est dynamique On crée les objets On modifie les objets Classe Pion Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Blanc 1 Pion Noir 1 En programmation En exécution Juillet 2004 JAVA 6

7 Exemples de classes et d instances pour un jeu d échec Classe «Pion» 8 Pions blancs et pions noirs Classe «Reine» 1 reine blanche, 1 reine noire Classe «Case» 32 cases blanches, 32 cases noires Classe «Plateau» 1 seul plateau (une seule instance) Une classe qui n a qu une instance s appelle un «singleton» Juillet 2004 JAVA 7

8 Classes techniques Pour traiter complètement le problème, on peut avoir besoin de classes supplémentaires qui ne sont pas liées au problème, mais au traitement informatique du problème On parle de classes techniques (d objets techniques), ou de classes de la solution (ou d objets de la solution) Exemple pour un jeu d échec : Classe Liste : elle permet de garder en mémoire la liste des coups effectués Juillet 2004 JAVA 8

9 Définition d une classe Une classe JAVA peut contenir : Des attributs Les données de la classe Par exemple, les données de la classe «Pion» peuvent être : La couleur du Pion (blanc ou noir) Les coordonnées du Pion (ligne et colonne sur l échiquier) Les attributs caractérisent les objets Chaque pion à sa propre couleur, ses propres coordonnées Les attributs peuvent être : Constants : leur valeur est fixée (elle ne change pas au fil du temps) Exemple : la couleur (un pion blanc reste blanc) Variables : leur valeur peut changer au fil du temps Exemple : les coordonnées d un pion changent lorsque je le déplace Des méthodes Les fonctions utilisées au cours du programme Par exemple, la méthode «Déplacer» de la classe pion permet de déplacer un pion. Juillet 2004 JAVA 9

10 Syntaxe pour définir une classe Pour définir une classe public class <nom de la classe> { Contenue de la classe Exemple : la classe Pion public class Pion { // Gestion d un pion Le mot clé «public» signifie que la classe est utilisable par d autres classes Par exemple, la classe Plateau pourra utiliser la classe Pion Quelques remarques générales JAVA distingue majuscules et minuscule Les caractères autorisés sont les lettres, les chiffres, le sous-ligné Les caractères accentués ne sont pas conseillés pour les noms de classes Il est conseillé de faire une seule classe par fichier Un fichier ne peut contenir qu une classe «publique» Le nom du fichier doit être celui de la classe avec l extension.java Exemple : Pion.java On écrit généralement les noms de classe en minuscule ; seule la première lettre est majuscule. Juillet 2004 JAVA 10

11 Commentaires JAVA Les commentaires en JAVA sont utilisés pour inclure dans les fichiers de code, des éléments de documentation Afin d expliquer le code Afin de donner des informations générales sur la classe, les attributs, les méthodes S ils sont utilisés à bon escient, ils permettent d améliorer la lisibilité Éviter les commentaires redondants avec le code Il existe en JAVA deux types de commentaires // commentaire sur une ligne /* commentaire sur plusieurs lignes */ Juillet 2004 JAVA 11

12 Type des attributs simples Les attributs simples ont un type «standard» défini en JAVA Le type correspond au domaine de définition (au sens mathématique du terme) de l attribut Exemple La coordonnée ligne d un pion est un entier compris entre 1 et 8 En JAVA, l attribut ligne sera considéré comme «entier» On pourra le définir en utilisant le type standard «int» (le type le plus simple pour les machines 32 bits) Les types «standards» de JAVA sont universels Lorsque ces types ne suffisent pas, on peut créer des types supplémentaires par la création de classe (voir ultérieurement) Juillet 2004 JAVA 12

13 Types de base de Java Entiers Utilisés pour un calcul arithmétique Les types sont signés On a 4 types possibles selon la largeur du domaine souhaité byte (1 octet) -128 à 127 short (2 octets) à int (4 octets) à long (8 octets) L à L On travaille principalement sur des entiers 32 bits (int) Booléens Donnée sur 1 seul bit De valeur vraie ou fausse boolean Valeurs : true, false Juillet 2004 JAVA 13

14 Types de base de Java réels Les nombres réels sont codés en JAVA selon la norme IEEE 754 Un nombre réel codé est défini par Un signe (positif ou négatif) Une mantisse (les chiffres significatifs) Un exposant (la puissance de 10) On a deux précisions possibles en JAVA: Simple précision Float Les variables de type double stockent les valeurs entre E+38 et E-38 avec environ 10 chiffres de précision Double précision Double Les variables de type double stockent des valeurs entre -1.7E308 et +1.7E308 avec environ 15 chiffres de précision Juillet 2004 JAVA 14

15 Types de base de Java Caractères Un caractère Encadré par des simples quottes char 'a' Chaînes de caractères Une suite de caractères Encadrée par des doubles quottes String "abcd" Juillet 2004 JAVA 15

16 Syntaxe pour définir les attributs Pour définir un attribut variable : <type> <nom d attribut> = <valeur initiale>; La valeur initiale est optionnelle. Exemples : int ligne=2 ; int colonnedebut ; Pour définir un attribut constant : final <type> <nom d attribut> = <valeur> ; La valeur doit être en accord avec le type Exemples : final int LIGNE_DEBUT = 2 ; final String COULEUR = «Noir» ; Quelques remarques générales sur la syntaxe Les caractères autorisés sont les lettres, les chiffres, le sous-ligné Les caractères accentués sont acceptés dans les noms d attributs On écrit généralement les attributs variables en minuscule ; on utilise une majuscule pour séparer les termes du nom On écrit généralement les attributs constants en majuscule ; on utilise un sous-ligné pour séparer les termes du nom Juillet 2004 JAVA 16

17 Méthodes de classe Les méthodes permettent de décrire des actions associées aux objets Pour effectuer l action associée à la méthode, il faut «appeler» la méthode Par exemple déplacer : la méthode qui permet de déplacer un pion Une méthode peut avoir des paramètres Les paramètres permettent d apporter des informations à la méthode Par exemple, déplacer à 2 paramètres : la ligne destination La colonne destination Une méthode peut avoir un résultat Le résultat n est pas obligatoire (méthode=procédure) Si la méthode a un résultat (méthode=fonction), ce résultat peut être exploité Par exemple, déplacer a un résultat booléen (vrai ou faux) Vrai : le déplacement est correct Faux : le déplacement est impossible Juillet 2004 JAVA 17

18 Méthodes et communication entre les objets Les méthodes sont utilisées pour «communiquer» entre les objets L objet «appelant» appelle (ou invoque) une méthode de l objet appelé L objet appelé exécute la méthode Si la méthode à un résultat: l objet appelé renvoie le résultat L objet appelant consulte ce résultat Joueur Blanc Déplacer (Ligne,Colonne) true Pion Blanc 1 Ligne Colonne Juillet 2004 JAVA 18

19 Méthodes et communication entre les objets (2) Étape 1 Joueur Blanc Pion Blanc 1 Ligne=2 Colonne=4 L appel de la méthode se déroule dans le temps comme un scénario Étape 2 Étape 3 Joueur Blanc Joueur Blanc Déplacer (Ligne=4,Colonne=4) Pion Blanc 1 Ligne=2 Colonne=4 Pion Blanc 1 Ligne=4 Colonne=4 Étape 4 Joueur Blanc true Pion Blanc 1 Ligne=4 Colonne=4 Étape 5 Joueur Blanc Pion Blanc 1 Ligne=4 Colonne=4 Juillet 2004 JAVA 19

20 Syntaxe pour définir une méthode <type> <nom> ( <liste de paramètres> ) { <corps de méthode> Si la méthode n a pas de résultat, type = void, sinon type est le type du résultat Les paramètres sont décrits avec un nom et un type (comme les attributs) ; ils sont séparés par des virgules La liste de paramètres est optionnelle Le corps de méthode est composé d instructions (c est ce que l on appelle le code) Boucles, Conditions, (voir ultérieurement) Si la méthode a un résultat, le corps de méthode contient au moins une instruction return Juillet 2004 JAVA 20

21 Exemple de méthode boolean déplacer (int ligne, int colonne) { // corps de la fonction return true ; Remarques Les caractères autorisés pour le nom des méthodes sont les lettres, les chiffres, le sous-ligné On utilisera des règles de nommage identiques à celles utilisées pour les attributs variables Juillet 2004 JAVA 21

22 Quelques instructions Les instructions sont placées dans les méthodes Elles se terminent par un point virgule Elles forment le corps de la méthode A l intérieur d une méthode, les instructions sont exécutées dans l ordre, du début vers la fin Deux exemples simples d instructions : L affectation On met une valeur dans une variable <variable> = <valeur> ; La condition if <condition> <instruction> ; if <condition> <instruction> else <instruction> ; <condition> est évaluée comme un booléen Juillet 2004 JAVA 22

23 Une première classe très simple Réalisation d un clignotant FlipFlop Le clignotant est soit éteint, soit allumé En JAVA, on code l état du clignotant par un booléen (état) État est Vrai => clignotant allumé État est Faux => clignotant éteint La méthode étatsuivant permet à un clignotant de passer à l état suivant Vrai => on passe à faux Faux => on passe à vrai public class FlipFlop { // Le seul attribut boolean état = true ; // La seule méthode void étatsuivant () { if (état) { état=false ; else { état=true ; Juillet 2004 JAVA 23

24 Fonctionnement de la méthode etatsuivant Lorsque l on démarre la méthode étatsuivant, le booléen etat à une valeur («vrai» ou «faux») Si la valeur est «vrai», JAVA va exécuter la branche 1 de l instruction «if» JAVA exécute alors l affectation et met état à la valeur «faux» Si la valeur est «faux», JAVA va exécuter la branche 2 de l instruction «if» (la partie else) JAVA exécute alors l affectation et met état à la valeur «vrai» Dans les deux cas, il n y a plus d instruction à exécuter : on sort alors de la méthode public class FlipFlop { 1 2 // Le seul attribut boolean état = true ; // La seule méthode void étatsuivant () { if (état) { état=false ; else { état=true ; Juillet 2004 JAVA 24

25 Compléter le clignotant Pour compléter le clignotant, il faut : Créer des instances de FlipFlop Au moins 1 Envoyer au clignotant des messages pour le faire changer d état Par le biais de la méthode étatsuivant Les messages peuvent être envoyés à partir d une autre instance ou du programme principal On choisit d utiliser le programme principal Main étatsuivant FlipFlop A Juillet 2004 JAVA 25

26 Le programme principal JAVA : le main Un programme JAVA comporte un point d entrée unique Le programme principal Il est obligatoire C est une procédure : type=void Le nom est standard (main) Les paramètres sont standard C est une méthode statique (voir ultérieurement) Respecter scrupuleusement la syntaxe! Le programme principal est utilisé pour créer les instances et lancer les traitements public class FlipFlop { public static void main(string[] args) { // a décrire Juillet 2004 JAVA 26

27 Première étape du main : création d une instance La classe FlipFlop ne crée pas un clignotant particulier mais défini le principe de fonctionnement des clignotants en général Pour exécuter notre programme, on a besoin au moins d un clignotant Une instance de clignotant On le crée dans le main grâce à l instruction JAVA new : FlipFlop f1 = new FlipFlop(); «f1» est une référence : c est le moyen que JAVA propose pour désigner une instance Classe FlipFlop new f1 Juillet 2004 JAVA 27

28 Deuxième étape du main : création d autres instances Une classe permet de décrire autant d instances que l on souhaite Pour créer 2 instances supplémentaires, on utilise à nouveau l instruction new FlipFlop f2 = new FlipFlop(); FlipFlop f3 = new FlipFlop(); «f2» et «f3» sont les références qui nous permettons de manipuler les autres clignotants En tout, il y a donc 3 instances Classe FlipFlop new new new f1 f2 f3 Juillet 2004 JAVA 28

29 Scénario de programme Les instances sont indépendantes les unes des autres Lors de leur création, elles sont toutes initialisées avec les mêmes valeur Dans l exemple, état est vrai Par la suite, on peut changer indépendamment l état de chaque instance Exemple de scénario 1. Création des instances f1, f2 et f3 2. f1 passe à l état suivant (donc faux) 3. f2 passe à l état suivant (donc faux) 4. f1 passe à l état suivant (donc vrai) Juillet 2004 JAVA 29

30 Réalisation du scénario en JAVA 1. Création des instances f1, f2 et f3 Utilisation de l instruction new FlipFlop f1 = new FlipFlop(); 2. f1 passe à l état suivant (donc faux) Utilisation de la méthode étatsuivant appliquée au clignotant f1 On utilise la syntaxe «.» : f1.étatsuivant () ; 3. f2 passe à l état suivant (donc faux) Idem étape 2 4. f1 passe à l état suivant (donc vrai) Idem étape 2 Juillet 2004 JAVA 30

31 Le programme complet public class FlipFlop { // Le seul attribut boolean état = true ; // La seule méthode void étatsuivant () { if (état) { état=false ; else { état=true ; public static void main (String [] args) { // Etape 1 su scénario : création des instances FlipFlop f1 = new FlipFlop(); FlipFlop f2 = new FlipFlop(); FlipFlop f3 = new FlipFlop(); // Etape 2 su scénario : passage de f1 à l'état suivant f1.étatsuivant() ; // Etape 3 su scénario : passage de f2 à l'état suivant f2.étatsuivant() ; // Etape 4 su scénario : passage de f1 à l'état suivant f1.étatsuivant() ; Juillet 2004 JAVA 31

32 Trace de l exécution On rajoute des instructions d affichage des attributs System.out.println ( <valeur1> + <valeur2> + ) La syntaxe «.» est de nouveau utilisée pour accéder à l attribut d une instance particulière f1.état est l état du clignotant f1 public static void main (String [] args) { // Etape 1 su scénario : création des instances FlipFlop f1 = new FlipFlop(); FlipFlop f2 = new FlipFlop(); FlipFlop f3 = new FlipFlop(); System.out.println ("Etape 1 : " + f1.état + "," + f2.état + ","+ f3.état ) ; // Etape 2 su scénario : passage de f1 à l'état suivant f1.étatsuivant() ; System.out.println ("Etape 2 : " + f1.état + "," + f2.état + ","+ f3.état ) ; // Etape 3 su scénario : passage de f2 à l'état suivant f2.étatsuivant() ; System.out.println ("Etape 3 : " + f1.état + "," + f2.état + ","+ f3.état ) ; // Etape 4 su scénario : passage de f1 à l'état suivant f1.étatsuivant() ; System.out.println ("Etape 4 : " + f1.état + "," + f2.état + ","+ f3.état ) ; Juillet 2004 JAVA 32

33 Trace de l exécution (2) Lorsque l on exécute en JAVA le programme, le résultat est le suivant : public class FlipFlop { // Le seul attribut boolean état = true ; // La seule méthode void étatsuivant () { if (état) { état=false ; else { état=true ; public static void main (String [] args) { // Etape 1 su scénario : création des instances FlipFlop f1 = new FlipFlop(); FlipFlop f2 = new FlipFlop(); FlipFlop f3 = new FlipFlop(); System.out.println ("Etape 1 : " + f1.état + "," + f2.état + ","+ f3.état ) ; // Etape 2 su scénario : passage de f1 à l'état suivant f1.étatsuivant() ; System.out.println ("Etape 2 : " + f1.état + "," + f2.état + ","+ f3.état ) ; // Etape 3 su scénario : passage de f2 à l'état suivant f2.étatsuivant() ; System.out.println ("Etape 3 : " + f1.état + "," + f2.état + ","+ f3.état ) ; // Etape 4 su scénario : passage de f1 à l'état suivant f1.étatsuivant() ; System.out.println ("Etape 4 : " + f1.état + "," + f2.état + ","+ f3.état ) ; JAVA Etape 1 : true,true,true Etape 2 : false,true,true Etape 3 : false,false,true Etape 4 : true,false,true Juillet 2004 JAVA 33

34 Structuration des classes JAVA

35 Organisation Client / Serveur Dans l organisation Client / Serveur Le serveur fournit des services Sous la forme d une classe Le client utilise ces services Il est client d une classe On a donc 2 classes On aura deux fichiers JAVA On place ces fichiers dans le même répertoire Exemple : Une alarme gère 3 clignotants Alarme = client Clignotant = serveur Client Classe Alarme Serveur Classe FlipFlop Juillet 2004 JAVA 35

36 Répartition Client / Serveur Le client va créer les instances nécessaires concernant le serveur Le client va appeler les méthodes du serveur pour chaque instance Le serveur va exécuter ces méthodes Exemple : Alarme (= client) contient le programme principal Clignotant (= serveur) contient les attributs et méthodes Juillet 2004 JAVA 36

37 Exemple Client Serveur public class Alarme { public class FlipFlop { public static void main (String [] args) { // Etape 1 su scénario : création des instances FlipFlop f1 = new FlipFlop(); FlipFlop f2 = new FlipFlop(); FlipFlop f3 = new FlipFlop(); System.out.println ("Etape 1 : " + f1.état + "," + f2.état + ","+ f3.état ) ; // Etape 2 su scénario : passage de f1 à l'état suivant f1.étatsuivant() ; System.out.println ("Etape 2 : " + f1.état + "," + f2.état + ","+ f3.état ) ; // Etape 3 su scénario : passage de f2 à l'état suivant f2.étatsuivant() ; System.out.println ("Etape 3 : " + f1.état + "," + f2.état + ","+ f3.état ) ; // Le seul attribut boolean état = true ; // La seule méthode void étatsuivant () { if (état) { état=false ; else { état=true ; // Etape 4 su scénario : passage de f1 à l'état suivant f1.étatsuivant() ; System.out.println ("Etape 4 : " + f1.état + "," + f2.état + ","+ f3.état ) ; Juillet 2004 JAVA 37

38 Notion d interface Le serveur doit rendre des services Simples à utiliser pour le client Sans dévoiler la façon dont les services sont réalisés Pour cela, on va devoir «cacher» le fonctionnement du serveur On ne montre que «l interface» Interface Ce que voit le client Ce qu il peut utiliser L interface est «minimale» Elle ne contient que ce qui est vraiment utile du point de vue du client Classe Interface Juillet 2004 JAVA 38

39 «Modifiers» de visibilité En JAVA, pour définir l interface, on va cacher certaines méthodes ou certains attributs en utilisant des «modifiers» Un modifier est un mot «clé» de JAVA utilisé pour préciser une méthode ou un attribut Un modifier est utilisé avant le type dans la définition d une méthode ou d un attribut Il existe des «modifiers» pour préciser la visibilité des attributs et des méthodes «public» : accessible de l extérieur de la classe (à partir des autres classes) Par défaut, les attributs et les méthodes sont «public» ; il est cependant conseillé de mettre le modifier (même s il ne sert à rien) On dit que les attributs et les méthodes «public» sont dans l interface «private» : caché ; attribut et méthodes cachés sont accessible uniquement depuis la classe Les attributs et les méthodes «public» ne sont pas dans l interface Exemple On cache l état du clignotant en rajoutant le modifier «private» private boolean état = true ; Juillet 2004 JAVA 39

40 Conséquence Après avec «caché» l état, le programme n est plus compilé correctement : On tente un accès à une donnée privée du serveur à partir du client Alarme.java [8:1] état has private access in FlipFlop System.out.println ("Etape 1 : " + f1.état + "," + f2.état + ","+ f3.état ) ; Il faut compléter notre programme pour pouvoir afficher l état du clignotant Pour cela on va créer une méthode d accès On appelle méthode d accès, une méthode que l on rajoute dans l interface pour donner un accès à un attribut caché Juillet 2004 JAVA 40

41 Exemple de méthode d accès On donne accès à l état La méthode renvoie une chaîne de caractère (String) L utilisation est plus simple pour le client On renvoie directement une information plus exploitable : l état véritable du clignotant et pas la valeur booléenne utilisée en JAVA par le serveur Le client ne sait pas que l on a utilisé un booléen On aurait pu utiliser un entier pour l état String étatcourant () { if (état) { return "Allumé" ; else { return "Eteint" ; Juillet 2004 JAVA 41

42 Modification du client On modifie le client Pour utiliser la méthode d accès étatcourant public static void main (String [] args) { // Etape 1 su scénario : création des instances FlipFlop f1 = new FlipFlop(); FlipFlop f2 = new FlipFlop(); FlipFlop f3 = new FlipFlop(); System.out.println ("Etape 1 : " + f1.état + "," + f2.état + ","+ f3.état ) ; // Etape 2 su scénario : passage de f1 à l'état suivant f1.étatsuivant() ; System.out.println ("Etape 2 : " + f1.étatcourant() + "," + f2.étatcourant() + ","+ f3.étatcourant() ) ; // Etape 3 su scénario : passage de f2 à l'état suivant f2.étatsuivant() ; System.out.println ("Etape 3 : " + f1.étatcourant() + "," + f2.étatcourant() + ","+ f3.étatcourant() ) ; // Etape 4 su scénario : passage de f1 à l'état suivant f1.étatsuivant() ; System.out.println ("Etape 4 : " + f1.étatcourant() + "," + f2.étatcourant() + ","+ f3.étatcourant() ) ; Juillet 2004 JAVA 42

43 Le nouveau code Client Serveur public class Alarme { public static void main (String [] args) { // Etape 1 su scénario : création des instances FlipFlop f1 = new FlipFlop(); FlipFlop f2 = new FlipFlop(); FlipFlop f3 = new FlipFlop(); System.out.println ("Etape 1 : " + f1.état + "," + f2.état + ","+ f3.état ) ; // Etape 2 su scénario : passage de f1 à l'état suivant f1.étatsuivant() ; System.out.println ("Etape 2 : " + f1.étatcourant() + "," + f2.étatcourant() + ","+ f3.étatcourant() ) ; public class FlipFlop { // Le seul attribut private boolean état = true ; // Les méthodes void étatsuivant () { if (état) { état=false ; else { état=true ; // Etape 3 su scénario : passage de f2 à l'état suivant f2.étatsuivant() ; System.out.println ("Etape 3 : " + f1.étatcourant() + "," + f2.étatcourant() + ","+ f3.étatcourant() ) ; // Etape 4 su scénario : passage de f1 à l'état suivant f1.étatsuivant() ; System.out.println ("Etape 4 : " + f1.étatcourant() + "," + f2.étatcourant() + ","+ f3.étatcourant() ) ; String étatcourant () { if (état) { return "Allumé" ; else { return "Eteint" ; Juillet 2004 JAVA 43

44 Trace de l exécution La logique du programme ne change pas On affiche désormais l état tel qu il est renvoyé par la méthode d accès public class Alarme { // JAVA Etape 1 : Allumé,Allumé,Allumé Etape 2 : Eteint,Allumé,Allumé Etape 3 : Eteint,Eteint,Allumé Etape 4 : Allumé,Eteint,Allumé public class FlipFlop { // Juillet 2004 JAVA 44

45 Organisation des attributs et des méthodes On conseille d utiliser une règle standard pour ordonner les attributs et les méthodes dans une classe Deux organisations sont conseillées (il faut en choisir une) : Soit grouper par visibilité 1. Les attributs publics 2. Les méthodes publiques 3. Les attributs privés 4. Les méthodes privées Soit grouper par nature 1. Les attributs publics 2. Les attributs privés 3. Les méthodes publiques 4. Les méthodes privées Dans les deux cas, Les attributs sont décrits avant les méthodes de même visibilité, car les méthodes les utilisent : cela est donc plus naturel Les éléments publics sont décrits avant les privés de même nature, car ils forment l interface : c est ainsi plus simple pour l utilisateur Juillet 2004 JAVA 45

46 Principe de Masquage d information On appelle information l ensemble des attributs Masquer l information consiste à définir de façon systématique les attributs comme «masqués», c est à dire cachés (avec le modifier private) En complément, pour chaque attribut auquel il va falloir accéder à partir d autres classes, on créé deux méthodes d accès : Une méthode en lecture : on appelle cette méthode un sélecteur Cette méthode n a pas de paramètres Son type est généralement le type de l attribut On la nomme de façon standard : get suivi du nom de l attribut Une méthode en écriture : on appelle cette méthode un modificateur Cette méthode à un paramètre unique dont le type est celui de l attribut Cette méthode est une procédure (type=void) On la nomme de façon standard : set suivi du nom de l attribut Intérêt : le masquage Favorise l évolution des classes Améliore la robustesse : l accès aux données est centralisé dans les méthodes Juillet 2004 JAVA 46

47 Principe de Masquage d information : exemple Application au cas du jeu d échec : public class Pion { // les attributs private int ligne ; private int colonne ; // l accès à ligne int getligne () { return ligne; void setligne (int ligne0) {ligne=ligne0; // l accès à colonne int getcolonne () { return colonne; void setcolonne (int colonne 0) {colonne = colonne 0; Juillet 2004 JAVA 47

48 Structure de choix JAVA

49 Structure de choix La structure de choix est une structure de contrôle JAVA comparable au if < > else < > Alors que le if < > else < > ne propose que deux cas, la structure de choix permet autant de cas que l on souhaite : Syntaxe switch (<numéro de cas>) { Case <cas i> : // code correspondant au cas i break ; Juillet 2004 JAVA 49

50 Exemple de structure de choix : La structure «switch» permet de traiter 3 cas : Choix=1 Choix=2 Choix=3 Chaque choix début par un «case» suivi de la valeur correspondant Le traitement associé à chaque choix est une liste d instructions, placée entre le «case» et le «break» Fonctionnement : JAVA exécute l instruction «switch» : il évalue la valeur de choix et va directement sur le «case» correspondant à cette valeur JAVA exécute le code jusqu à rencontrer le break, puis saute jusqu à la fin du «switch» int choix ; //... switch (choix) { case 1 : // Traitement du cas choix=1 //... break ; case 2 : // Traitement du cas choix=2 //... break ; case 3 : // Traitement du cas choix=3 //.. break ; // fin du switch Juillet 2004 JAVA 50

51 Cas particuliers On a groupé les choix 0 et 1 car le code à exécuter dans ces deux cas est le même On écrit à la suite les deux instructions «case» Pour le cas 2, on a supprimé le «break» ; dans ce cas, si le cas 2 est choisi, on ne sautera pas à la fin du switch, mais on va poursuivre jusqu au break du cas 2. On peut considérer ici que le cas 2 est un surensemble du cas 3 On a placé le cas 1 après le cas 3 : l ordre d intervient pas dans les instructions «case». Par contre, on ne peut pas mettre plusieurs case correspondant à la même valeur Enfin, un cas spécial «default» correspond à toutes les valeurs non présentes dans un case Par exemple, si choix 4, le switch sautera jusqu à default int choix ; //... switch (choix) { case 0 : case 1 : // Traitement des cas choix=1 ou // choix=0 //... break ; case 2 : // Traitement du cas choix=2 //... // Omission du break case 3 : // Traitement du cas choix=3 //.. break ; case -1 : // Traitement du cas choix=-1 //.. break ; default : // Traitement des autres choix //.. break ; // fin du switch Juillet 2004 JAVA 51

52 Illustration Gestion d état civil pour un individu Célibataire, marié ou divorcé On définit l état (civil) de l individu Comme un attribut caché 3 valeurs possibles 0=Célibataire, 1=Marié, 2=Divorcé On définit deux méthodes Mariage Divorce On utilise un switch pour connaître l état courant sous forme de chaîne de caractère public class Civil { // Le seul attribut // 0=Célibataire, 1=Marié, 2=Divorcé private int état = 0 ; // Les méthodes void mariage () { état=1 ; void divorce () { état=2 ; String étatcourant () { String resultat ; switch (état) { case 0: resultat="célibataire" ; break; case 1: resultat="marié" ; break; case 2: resultat="divorcé" ; break; return resultat ; Juillet 2004 JAVA 52

53 Illustration : le client Le client est composé d un simple «main», définit dans une classe séparée CivilClient On crée une seule instance alain Alain est célibataire, puis il se marie, puis il divorce public class CivilClient { public static void main (String [] args) { // Création des instances Civil alain = new Civil(); System.out.println ("Alain est " + alain.étatcourant() + ".") ; alain.mariage (); System.out.println ("Alain est " + alain.étatcourant() + ".") ; alain.divorce (); System.out.println ("Alain est " + alain.étatcourant() + ".") ; JAVA Alain est célibataire. Alain est marié. Alain est divorcé. Juillet 2004 JAVA 53

54 Principe de programmation robuste JAVA

55 Retour à l exemple de l état civil Si l on analyse les transitions possibles sur l exemple de l état civil, on constate que seules 3 transitions sont envisageables On ne redevient jamais célibataire Pour divorcer, il faut être marié Les transitions en rouge sont donc impossibles Le programme JAVA que l on a écrit le permet cependant. On pourrait écrire : Célibataire Marié Divorcé public class CivilClient { public static void main (String [] args) { // Création des instances Civil alain = new Civil(); alain.divorce (); Juillet 2004 JAVA 55

56 Principe de robustesse Un programme robuste continue à fonctionner correctement même si on lui soumet des entrées incohérentes Dans l exemple de l état civil, la robustesse devra interdire les transitions entre états qui sont impossibles La robustesse en JAVA repose sur deux techniques : La mise en place de pré-conditions Le traitement d exception Juillet 2004 JAVA 56

57 La mise en place de pré-conditions Vision mathématique : Une méthode est une fonction dont le domaine de définition est constitué du produit cartésien des sous-ensembles de variation des données en entrée de la méthode Vérifier une pré-condition de ce point de vue consiste à vérifier que les données en entrée de la méthode appartiennent à ces sous-ensembles Vision pratique Pour chaque donnée en entrée d une méthode (paramètre, attribut, variable locale), on vérifie par du code complémentaire que la valeur de la donnée est cohérente avec l objectif de la méthode Juillet 2004 JAVA 57

58 Exemple de pré-condition Méthode «divorce» Pour divorcer, il faut être marié La pré-condition de divorce est donc «être marié» C est à dire état = 1 En JAVA, les pré-conditions seront traitées en début de méthode, et symboliquement détachées du traitement nominal On vérifie dans les pré-conditions chaque donnée Pour chaque donnée, on vérifie le domaine d entrée Dans l exemple, si état est différent de marié (différent se note!= en JAVA), alors on fait un return (on va directement à la fin de la méthode, sans rien faire) void divorce () { // Pré condition if (état!=1) return ; // il faut être marié // Traitement nominal Juillet 2004 JAVA 58

59 Autre exemple de robustesse La méthode «étatcourant» renvoie une chaîne de caractère correspondant à la valeur de l état courant La pré-condition porte sur l attribut état qui doit appartenir à {0,1,2 Une technique de robustesse consiste à compléter le «switch» par un cas «défault» qui correspond aux autres valeurs de l attribut état. String étatcourant () { String resultat ; switch (état) { case 0: resultat="célibataire" ; break; case 1: resultat="marié" ; break; case 2: resultat="divorcé" ; break; default: resultat="inconnu" ; break; return resultat ; Juillet 2004 JAVA 59

60 Le programme robuste complet public class Civil { // Le seul attribut // 0=Célibataire, 1=Marié, 2=Divorcé private int état = 0 ; // Les méthodes void mariage () { // Pré-conditions if (état==1) return ; // polygammie interdite état=1 ; void divorce () { // Pré-conditions if (état!=1) return ; // il faut être marié état=2 ; String étatcourant () { String resultat ; switch (état) { case 0: resultat="célibataire" ; break; case 1: resultat="marié" ; break; case 2: resultat="divorcé" ; break; default: resultat="indéterminé" ; break; return resultat ; Juillet 2004 JAVA 60

61 Exécution du programme robuste On tente un scénario non réaliste Alain divorce sans être marié Alain se marie plusieurs fois public class CivilClient { public static void main (String [] args) { // Création des instances Civil alain = new Civil(); System.out.println ("Alain est " + alain.étatcourant() + ".") ; alain.divorce (); System.out.println ("Alain est " + alain.étatcourant() + ".") ; alain.mariage (); System.out.println ("Alain est " + alain.étatcourant() + ".") ; alain.mariage (); System.out.println ("Alain est " + alain.étatcourant() + ".") ; JAVA Alain est célibataire. Alain est célibataire. Alain est marié. Alain est marié. Juillet 2004 JAVA 61

62 Le traitement d exception Être robuste peut être insuffisant : il faut parfois signaler une anomalie En JAVA ce traitement est effectué à l aide d une exception Une exception est renvoyée par une méthode lorsqu un comportement incorrect est constaté Le renvoie d une exception va interrompre le déroulement de la méthode On interrompt le programme (sans traitement complémentaire) Juillet 2004 JAVA 62

63 Exemple de traitement d exception Méthode «divorce» Pour divorcer, il faut être marié En JAVA, la définition d une exception dans une méthode passe par deux étapes : 1. On complète l entête de la méthode (la première ligne) pour signifier que la méthode est susceptible de renvoyer une exception Rajout de «throws Exception» à la fin de l entête 2. En cas de détection d anomalie, on renvoie effectivement l exception throw new Exception (<description de l anomalie>); On utilise l instruction new car Exception est une classe On crée ainsi une instance d exception void divorce () throws Exception { // Pré-conditions if (état!=1) throw new Exception ("Il faut être marié pour divorcer"); état=2 ; Juillet 2004 JAVA 63

64 Exécution du programme avec les exceptions On tente le même scénario non réaliste Alain divorce sans être marié Alain se marie plusieurs fois Le programme stoppe dès la première erreur Les dernières instructions du main ne sont pas exécutées public class CivilClient { public static void main (String [] args) { // Création des instances Civil alain = new Civil(); System.out.println ("Alain est " + alain.étatcourant() + ".") ; alain.divorce (); System.out.println ("Alain est " + alain.étatcourant() + ".") ; alain.mariage (); System.out.println ("Alain est " + alain.étatcourant() + ".") ; alain.mariage (); System.out.println ("Alain est " + alain.étatcourant() + ".") ; JAVA Alain est célibataire. java.lang.exception: Il faut être marié pour divorcer at Civil.divorce(Civil.java:17) at CivilClient.main(CivilClient.java:7) Exception in thread "main" Juillet 2004 JAVA 64

65 Structures itératives JAVA

66 Principe d itération Itérer c est faire plusieurs fois la même chose En JAVA, il existe 3 syntaxes itératives : «Tant Que» While <condition> <action> Permet de répéter une action tant qu une condition est vraie «Répéter» Do <action> while <condition> Permet de répéter une action jusqu à qu une condition devienne fausse Dans le cas du répéter, l action est faite au moins une fois, même si la condition est fausse au début «Pour» for ( <init> ; <condition> ; <iteration> ) <action> Structure plus élaborée Équivalente à un tant que avec une initialisation et une itération intégrée Juillet 2004 JAVA 66

67 Exemple de while i=0 ; while (i<10) { // Corps de la boucle System.out.println(i); i=i+1 ; JAVA Juillet 2004 JAVA 67

68 Exemple de «do while» i=0 ; do { // Corps de la boucle System.out.println(i); i=i+1 ; while (i<10) ; JAVA Sur cet exemple et sur le précédent, while et «do while» sont équivalents Juillet 2004 JAVA 68

69 Comparaison «while» et «do while» i=10 ; while (i<10) { // Corps de la boucle System.out.println(i); i=i+1 ; La boucle est «sautée» car i est d emblée trop grand JAVA i=10 ; do { // Corps de la boucle System.out.println(i); i=i+1 ; while (i<10) ; On passe une fois dans la boucle même si la condition est fausse JAVA 10 Juillet 2004 JAVA 69

70 Exemple de for for (i=0 ; i < 10 ; i=i+1) { // Corps de la boucle System.out.println(i); JAVA Juillet 2004 JAVA 70

71 Des «for» particuliers Un «for» dans lequel on ne rentre pas Un «for» sans partie initialisation La boucle démarre avec la valeur courante de la donnée i Un «for» sans partie itération Un «for» sans condition Boucle infinie for (i=10 ; i < 10 ; i=i+1) { // Corps de la boucle System.out.println(i); for ( ; i < 10 ; i=i+1) { // Corps de la boucle System.out.println(i); for ( ; i < 10 ;) { // Corps de la boucle System.out.println(i); i=i+1 ; for ( ;;) { // Corps de la boucle Juillet 2004 JAVA 71

72 Variables locales et portée On peut définir des variables locales à une méthode Utilisables uniquement dans le corps de la méthode La variable est inconnue lorsque l on sort de la méthode Si la variable a le même nom qu un attribut (homonymie) ce qui n est pas conseillé -, la variable prime par rapport à l attribut Utilité des variables locales Faire des calculs intermédiaires Faire une itération public static void main (String [] args) { int i=0 ; while (i<10) { // Corps de la boucle System.out.println(i); i=i+1 ; Juillet 2004 JAVA 72

73 Cas particulier de la boucle «for» On peut définir une variable locale au parcours d une boucle directement à l intérieur du «for» public static void main (String [] args) { for (int i=0 ; i < 10 ; i=i+1) { // Corps de la boucle System.out.println(i); Juillet 2004 JAVA 73

74 Instruction «break» L instruction break permet de sortir d une boucle On l utilise souvent dans une condition Utile pour rendre plus lisible une méthode for (int i=0 ; i < 10 ; i=i+1) { System.out.println(i); for (int i=0 ; ; ) { System.out.println(i); i= i+1 ; if (i>= 10) break; Juillet 2004 JAVA 74

75 Instruction «continue» L instruction continue permet de poursuivre une boucle à l itération suivante On l utilise souvent dans une condition Exemple : affiche des nombres pairs On utilise un continue, couplé avec l opérateur % (modulo) i%2 est le modulo de i pour 2 (le reste de la division euclidienne de i par 2) S il vaut 1, c est que la donnée est impaire for (int i=0 ; i < 10 ; i=i+1) { if (i%2==1) continue ; System.out.println(i); JAVA Juillet 2004 JAVA 75

76 Complément : les opérateurs mathématiques en JAVA Les opérateurs simples +,-, *, /, % (modulo) Les opérateurs combinés (avec affectation) +=, -=, *=, /=, %= A += B est équivalent à A = A + B Les opérateurs d incrémentation et décrémentation ++, -- A++ est équivalent à A=A+1 Juillet 2004 JAVA 76

77 Complément : les opérateurs logiques en JAVA Les égalités La comparaison == à ne pas confondre avec l affectation (=) if (a==b) La différence!= if (a!=b) Les inégalités <, <=, >, >= if (a<=b), if (a>b) Les connecteurs logiques ET : && OU : NON :! Conseil : utiliser les parenthèses pour éviter tout problème de priorité lors de l évaluation des expressions Exemple if (!(a!=b) && (c<d) ) Juillet 2004 JAVA 77

78 Tableaux JAVA

79 Les Tableaux en Java Un tableau est un ensemble d éléments de même type Les éléments peuvent avoir un type JAVA simple (exemple un tableau d entier) Les éléments peuvent être des instances (exemple un tableau de pions aux échecs) Les tableaux sont contigus : Les éléments se suivent dans leur implémentation dans la mémoire machine Les tableaux sont limités dans leur taille La taille est fixée lors de l allocation Sur l exemple ci contre, le tableau contient 4 éléments Début du tableau Fin du tableau Juillet 2004 JAVA 79

80 La création d un tableau Tab Il existe deux façons de définir un tableau en JAVA Soit on le définit en allouant l ensemble des éléments On définit ainsi le début du tableau On définit la taille et le type des éléments La fin du tableau est déduite automatiquement du début et de la taille Syntaxe : <type> [] <nom> = new <type> [<nombre>] Exemple int [] Tab = new int [5] ; // tableau de 5 entiers Soit on ne définit que le début du tableau Les éléments ne sont pas alloués (le tableau est «null») Cela permet d allouer les éléments plus tard Exemple : int [] Tab ; // tableau définit mais non alloué Tab = new int [5] ; // allocation séparée Tab Juillet 2004 JAVA 80

81 Accès aux éléments d un tableau Pour manipuler les éléments d un tableau, on va accéder à chaque élément par l opérateur «[]» <nom du tableau> [ <index> ] permet d accéder au index-ième élément du tableau L indexation des tableaux commence à 0 Exemple int [] Tab = new int [5] ; // tableau de 5 entiers Tab [0] est le premier élément Tab [1] est le deuxième élément Tab [4] est le dernier élément For (int i=0 ; i<5 ; i=i+1) Tab[i]=5-i; Tab Juillet 2004 JAVA 81

82 Initialisation des tableaux à l aide de listes de valeurs Lorsque l on connaît a priori le contenu d un tableau, on peut créer ce tableau en donnant la liste des valeurs qu il contient Utile pour les tableaux constants La taille du tableau est calculée automatiquement à partir du nombre d éléments dans la liste d initialisation Syntaxe <type> [] <nom> = { <liste de valeur> Exemple int [] Tab = { 1, 3, 5, 7, 9 ; Tab Juillet 2004 JAVA 82

83 Tableaux multi-dimensionnels Les tableaux multi-dimensionnels sont des tableaux de tableaux Exemple int [ ][ ] plateauechec = new int[8][8]; Juillet 2004 JAVA 83

84 Cas particulier d un tableau d instances Lorsque le tableau n est pas un tableau d élements de type simple (comme des entiers), mais un tableau d instances (comme des pions), il faut compléter la création du tableau, par la création des instances Exemple Création du tableau Pion [ ] lespions =new Pion [8]; // l ensemble des 8 pions Création des instances de pion for (int i=0;i<8;i=i+1) lespions[i] = new Pion (); Juillet 2004 JAVA 84

85 Contrôle d accès aux tableaux La dimension d un tableau peut être connue à partir de l opérateur length : int [] Tab = { 1, 3, 5, 7, 9 ; Tab.length renvoie 5 Java contrôle la cohérence des opérations d accès aux tableaux et empêche ainsi les lectures-écritures en dehors des bornes des tableaux int [ ] vecteur=new int[10]; //un tableau de 10 entiers for (int i=0;i<=10;i=i+1) vecteur[i]=i; //lève l exception ArrayIndexOutOfBoundsException pour i=10 Juillet 2004 JAVA 85

86 Limitation de la taille des tableaux Les tableaux JAVA ont une taille fixée lors de l allocation des éléments Cette taille ne varie plus après l allocation On dit que le tableau est une structure de donnée statique Lorsque l on veut modéliser un ensemble dans un problème, on a plusieurs cas : Soit le cardinal de l ensemble est connu et constant La main contient 5 doigts Le tableau convient parfaitement Soit le cardinal est variable mais on peut trouver un majorant Un promotion d élève contient au maximum 100 élèves Un tableau de longueur 100 permet de traiter toutes les promotions possibles Par contre, pour une promotion ne contenant que 48 élèves, 52 «cases» du tableau ne serviront à rien => perte de place Soit le cardinal est variable et on ne connaît pas de majorant Le nombre d objets dans un sac Le tableau ne sera pas adapté On verra ultérieurement des structures de données plus élaborées qui permettent de combler les carences des tableaux Juillet 2004 JAVA 86

87 Règles de nommage des tableaux Les tableaux sont des ensembles Généralement ce ne sont pas des singletons On pourra utiliser des pluriels Exemple Bille (au singulier) est une classe définissant une bille à jouer Billes (au pluriel) est l ensemble des billes (le sac contenant les billes) C est un tableau On pourra utiliser des noms identifiant des ensembles Exemple Doigt est la classe utilisée pour modéliser un doigt de la main Main est l ensemble des doigts C est un tableau de 5 doigts Juillet 2004 JAVA 87

88 Exemple d utilisation des tableaux : la gestion d une promotion La promotion est composé d élèves Chaque élève a un nom et une note public class Eleve { // Les attributs private String nom ; // le nom de l'élève private int note = 0 ; // sa note // Les méthodes d'accès int getnote () { return note ; void setnote (int n) { note=n; String getnom () { return nom ; void setnom (String s) { nom=s; Juillet 2004 JAVA 88

89 La promotion La promotion est définie comme un tableau de 5 élèves public class Promo { // La promo est l'ensemble des élèves Eleve [ ] eleves = new Eleve [5] ; public static void main (String [] args) { // Création de la promo Promo p1 = new Promo () ; // Création des instances d'élèves dans le tableau for (int i=0 ; i < 5 ; i++) p1.eleves[i] = new Eleve (); // Affectation des attributs pour chaque élève p1.eleves [0]. setnom ("Alain") ; p1.eleves [0]. setnote (12) ; p1.eleves [1]. setnom ("Bern") ; p1.eleves [1]. setnote (10) ; p1.eleves [2]. setnom ("Coco") ; p1.eleves [2]. setnote (14) ; p1.eleves [3]. setnom ("David") ; p1.eleves [3]. setnote (15) ; p1.eleves [4]. setnom ("Éva") ; p1.eleves [4]. setnote (11) ; JAVA Alain :12 Bern :10 Coco :14 David :15 Éva :11 // Affichage des notes for (int i=0 ; i < 5 ; i++) { System.out.println ( p1.eleves [i]. getnom () + " :" + p1.eleves [i]. getnote ()) ; Juillet 2004 JAVA 89

90 Les attributs de classe Les attributs que l on a rencontrés jusqu à présent sont des attributs d instances Chaque instance peut avoir une valeur différente pour ces attributs : le nom, la note pour l exemple de l élève Les attributs de classe en revanche sont communs à toutes les instances On les définit au niveau de la classe Ils sont partagés par toutes les instances On peut les utiliser sans qu une instance soit créée Syntaxe On utilise le mot clé «static» Exemple Une constante (final) commune à tous les élèves static final int NB_ELEVES = 5 ; Très souvent les constantes de classes sont définies comme des attributs de classe Invariants de classe Juillet 2004 JAVA 90

91 Illustration d un attribut de classe Le nombre d élèves est défini par une constante statique public class Promo { // La promo est l'ensemble des élèves static final int NB_ELEVES = 5 ; Eleve [ ] eleves = new Eleve [NB_ELEVES] ; public static void main (String [] args) { // Création de la promo Promo p1 = new Promo () ; // Création des instances d'élèves dans le tableau for (int i=0 ; i < NB_ELEVES ; i++) p1.eleves[i] = new Eleve (); // Affectation des attributs pour chaque élève p1.eleves [0]. setnom ("Alain") ; p1.eleves [0]. setnote (12) ; p1.eleves [1]. setnom ("Bern") ; p1.eleves [1]. setnote (10) ; p1.eleves [2]. setnom ("Coco") ; p1.eleves [2]. setnote (14) ; p1.eleves [3]. setnom ("David") ; p1.eleves [3]. setnote (15) ; p1.eleves [4]. setnom ("Éva") ; p1.eleves [4]. setnote (11) ; // Affichage des notes for (int i=0 ; i < NB_ELEVES ; i++) { System.out.println ( p1.eleves [i]. getnom () + " :" + p1.eleves [i]. getnote ()) ; Juillet 2004 JAVA 91

92 Autre illustration d un attribut de classe L ensemble des élèves est défini par un attribut de classe Cela suppose qu un seul ensemble d élèves est possible La classe Promo permet de traiter une seule promotion C est une limite, mais qui peut être une simplification intéressante si tel est notre problème On dit dans ce cas que la classe est un singleton public class Promo { // La promo est l'ensemble des élèves static final int NB_ELEVES = 5 ; static Eleve [ ] eleves = new Eleve [NB_ELEVES] ; public static void main (String [] args) { // Création des instances d'élèves dans le tableau for (int i=0 ; i < NB_ELEVES ; i++) eleves[i] = new Eleve (); // Affectation des attributs pour chaque élève eleves [0]. setnom ("Alain") ; eleves [0]. setnote (12) ; eleves [1]. setnom ("Bern") ; eleves [1]. setnote (10) ; eleves [2]. setnom ("Coco") ; eleves [2]. setnote (14) ; eleves [3]. setnom ("David") ; eleves [3]. setnote (15) ; eleves [4]. setnom ("Eva") ; eleves [4]. setnote (11) ; // Affichage des notes for (int i=0 ; i < NB_ELEVES ; i++) { System.out.println ( eleves [i]. getnom () + " :" + eleves [i]. getnote ()) ; Juillet 2004 JAVA 92

93 Méthode de classe Les méthodes rencontrées jusqu à présent (mise à part la méthode main) sont des méthodes d instances Pour les utiliser, on les applique sur des instances Exemple : eleves [i]. getnom () Il existe des méthodes de classes Le principe est le même que pour les attributs Elles sont communes à toutes les instances Elles ont donc le même comportement pour toutes les instances On peut les utiliser sans instance Conséquence Une méthode de classe ne peut utiliser que des attributs de classe, et ne peut appeler que des méthodes de classe Syntaxe On utilise le mot clé static Pour utiliser une méthode de classe, on utilise le nom de la classe et non pas celui d une instance (ou sans rien à l intérieur de la classe) <nom de classe>. <nom de méthode> ( < paramètres>) ; Exemple La méthode main est statique Juillet 2004 JAVA 93

94 Illustration d une méthode de classe Le calcul de la moyenne public class Promo { // La promo est l'ensemble des élèves static final int NB_ELEVES = 5 ; static Eleve [ ] eleves = new Eleve [NB_ELEVES] ; static double moyenne () { double somme = 0 ; for (int i=0 ; i < NB_ELEVES ; i++) { somme += eleves [i]. getnote () ; return somme/nb_eleves ; public static void main (String [] args) { // Création des instances d'élèves dans le tableau for (int i=0 ; i < NB_ELEVES ; i++) eleves[i] = new Eleve (); // Affectation des attributs pour chaque élève eleves [0]. setnom ("Alain") ; eleves [0]. setnote (12) ; eleves [1]. setnom ("Bern") ; eleves [1]. setnote (10) ; eleves [2]. setnom ("Coco") ; eleves [2]. setnote (14) ; eleves [3]. setnom ("David") ; eleves [3]. setnote (15) ; eleves [4]. setnom ("Eva") ; eleves [4]. setnote (11) ; JAVA Moyenne : 12.4 System.out.println ( "Moyenne : " + moyenne ()) ; Juillet 2004 JAVA 94

95 Utilisation de la bibliothèque JAVA JAVA

96 Utilisation d autres classes : la classe Standards Math Une classe va communiquer avec d autres classes pour utiliser des services Invocation de méthodes JAVA est livré avec des classes standards Le JDK (JAVA Development Kit) Classes de calcul (dont la classe Math) Classes d IHM Classes de structures de données Ces classes sont directement réutilisables Pour calculer la distance à l origine, on utilise la fonction racine carrée (sqrt) public class Point2D { public double getx() {return x; public double gety() {return y; public double distanceorigine () { return Math.sqrt (x*x+y*y) ; private double x ; private double y ; Juillet 2004 JAVA 96

97 Exemple d utilisation de la classe Math public class Point2D { public double getx() {return x; public void setx(double x0) {x=x0; public double gety() {return y; public void sety(double y0) {y=y0; public double distanceorigine () { return Math.sqrt (x*x+y*y) ; private double x ; private double y ; public static void main (String [] args) { Point2D p1 = new Point2D (); p1.setx(1) ; p1.sety(1) ; System.out.println("Distance à l'origine de ("+p1.getx() +","+p1.getx()+ ")=" + p1.distanceorigine()); JAVA Distance à l'origine de (1.0,1.0)= Juillet 2004 JAVA 97

98 Structure détaillée du programme Classe Point2D { main Instance P1 Réalisé Mon Application Réutilisé Classe Math Classe Z Paquetage Lang D autres Paquetages Juillet 2004 JAVA 98

99 Paquetages JAVA

100 Définition de paquetages Une classe que l on souhaite mettre à disposition peut être placée dans un paquetage afin de faciliter sa réutilisation Le paquetage est un regroupement de classes Une sorte de librairie Le paquetage est utilisé pour le partage de classe On réutilise une classe dans un paquetage Le mot clé «package» permet de définir le paquetage auquel va appartenir la classe courante En première ligne du fichier package Géométrie ; public class Point2D { // Juillet 2004 JAVA 100

101 Paquetages Hiérarchiques Définition Un paquetage peut contenir d'autres paquetages nom complet = liste de noms séparés par '.' exemple : la classe java.io.file est définie dans le paquetage java.io, luimême inclus dans le paquetage java Utilisation de paquetages hiérarchisés Mot clé «import» import java.io.file; // la classe peut utiliser File au lieu de java.io.file import java.io.*; // la classe peut utiliser toutes les classes de java.io sans java.io Juillet 2004 JAVA 101

102 Utilisation d autres classes dans un paquetage Exemple : Réutilisation de la classe Math (Opérations Mathématiques) disponible dans le paquetage standard java.lang Utilisation de la méthode sqrt dans la classe Math JAVA n impose pas l instruction import pour les classes situées dans le paquetage java.lang C est le cas de Math import java.lang.math; public class Point2D { // Math.sqrt ( ) Juillet 2004 JAVA 102

103 Structure détaillée d un programme «paqueté» Classe A { main Classe B Classe C Mon Paquetage Classe X Classe Y Classe Z La communication entre classes correspond à l appel de méthodes publiques ou à l utilisation d attributs publics Paquetage AA Paquetage BB Juillet 2004 JAVA 103

104 Objets et Références JAVA

105 Constructeurs Un constructeur est une méthode spéciale appelée à la création d'un objet pour initialiser son état Un constructeur affecte généralement les attributs de l objet Une classe peut définir plusieurs constructeurs Le langage retrouve tout seul le bon constructeur en fonction : du nombre de paramètres d'appel du type des paramètres d'appels Chaque constructeur correspond à un besoin de construction précis Le constructeur par défaut C est le constructeur sans paramètre Si aucun constructeur n'est défini dans la classe par l'utilisateur, le constructeur par défaut existe Si l'utilisateur définit des constructeurs ayant tous des paramètres, il n'existe plus de constructeur par défaut Juillet 2004 JAVA 105

106 Exemple d utilisation de la classe Math public class Point2D { public double getx() {return x; public void setx(double x0) {x=x0; public double gety() {return y; public void sety(double y0) {y=y0; public double distanceorigine () { return Math.sqrt (x*x+y*y) ; // Les constructeurs public Point2D () { x=0 ; y=0 ; public Point2D (int x0, int y0) { x=x0 ; y=y0 ; private double x ; private double y ; public static void main (String [] args) { Point2D p0 = new Point2D (); System.out.println("Distance à l'origine de ("+p0.getx() +","+p0.getx()+ ")=" + p0.distanceorigine()); Point2D p1 = new Point2D (1,1); System.out.println("Distance à l'origine de ("+p1.getx() +","+p1.getx()+ ")=" + p1.distanceorigine()); JAVA Distance à l'origine de (0.0,0.0)=0.0 Distance à l'origine de (1.0,1.0)= Juillet 2004 JAVA 106

107 Constructeurs particuliers Constructeur de copie Clonage d une instance Ce constructeur a un seul paramètre : L instance de base Le constructeur recopie les attributs d une autre instance Constructeur de conversion Réalise la conversion depuis une autre classe Ce constructeur a un seul paramètre Un objet d une autre classe Le constructeur met à jour les attributs en fonction du paramètre public Point2D (Point2D base) { x=base.x ; y=base.y ; Juillet 2004 JAVA 107

108 Exemple d utilisation de la classe Math public class Point2D { public double getx() {return x; public void setx(double x0) {x=x0; public double gety() {return y; public void sety(double y0) {y=y0; public double distanceorigine () { return Math.sqrt (x*x+y*y) ; // Les constructeurs public Point2D () { x=0 ; y=0 ; public Point2D (int x0, int y0) { x=x0 ; y=y0 ; public Point2D (Point2D base) { x=base.x ; y=base.y ; private double x ; private double y ; public static void main (String [] args) { Point2D base = new Point2D (1,1); Point2D p1 = new Point2D (base); System.out.println("Distance à l'origine de ("+p1.getx() +","+p1.getx()+ ")=" + p1.distanceorigine()); JAVA Distance à l'origine de (1.0,1.0)= Juillet 2004 JAVA 108

109 Détail du mécanisme de création d une instance public class Point2D { public Point2D (int x0, int y0) { x=x0 ; y=y0 ; private double x ; private double y ; public static void main (String [] args) { Point2D p = new Point2D (1,1); Lors de la création de l instance, trois opérations différentes sont effectuées : 1. Création d une référence Moyen de désigner l instance pour sa manipulation future 2. Allocation de l instance en mémoire 3. Appel au constructeur pour initialiser les attributs Juillet 2004 JAVA 109

110 Détail du mécanisme de création d une instance (2) public class Point2D { public Point2D (int x0, int y0) { x=x0 ; y=y0 ; private double x ; private double y ; public static void main (String [] args) { Point2D p ; p = new Point2D (1,1); On peut découper ces actions en deux étapes 1. Création d une référence Moyen de désigner l instance pour sa manipulation future 2. Création de l instance 1. Allocation de l instance en mémoire 2. Appel au constructeur pour initialiser les attributs 3. Affectation de la référence p Juillet 2004 JAVA 110

111 Distinction référence / instance On ne doit pas confondre les instances Qui sont créées par les instructions new et qui sont les objets du problèmes Et les références Qui sont les moyens de désigner les instances On peut par exemple Utiliser plusieurs références pour désigner un même objet Définir des références sans préciser de qu elles désignent Référence nulle public class Point2D { public Point2D (int x0, int y0) { x=x0 ; y=y0 ; private double x ; private double y ; public static void main (String [] args) { Point2D p ; p = new Point2D (1,1); Point2D autre = p; Point2D nonusité ; Juillet 2004 JAVA 111

112 Référence : Compléments Gestion des références et gestion de la mémoire Si une instance n est désignée par aucune référence, elle n est plus utilisable en JAVA JAVA va alors décider de détruire cette instance JAVA gère pour chaque instance, un compteur de référence : il sait en permanence le nombre de références valides sur l instance Si ce nombre est nul, l instance n est plus accessible Elle est détruite Mot clé this : le mot clé this est utilisé dans une méthode non statique pour désigner une référence vers l instance courante Exemple d utilisation : this peut être utilisé pour lever l ambiguïté entre un paramètre et un attribut this.x est l attribut x est le paramètre public class Point2D { public Point2D (int x, int y) { this.x=x ; this.y=y ; private double x ; private double y ; Juillet 2004 JAVA 112

113 programme Instanciation et mémoire Chaque fois que new est utilisé, un nouvel objet est créé en mémoire Point2D p1 = new Point2D(); Point2D p2 = new Point2D(1, 1); On crée aussi en mémoire la référence qui désigne cet objet mémoire p1 p mémoire Juillet 2004 JAVA 113

114 Manipulation de références p2 = p1; p1 p p2 = null; p1 0 0 p2 null 1 1 p1 = null; p1 null p2 null Juillet 2004 JAVA 114

115 Le ramasse-miettes de Java Les objets non référencés sont automatiquement éliminés de la mémoire par le ramasse-miettes p2 = p1; p1 p (1, 1) n'est plus référencé p2 = null; p1 p2 null 0 0 (0, 0) n'est plus référencé par p2 mais reste référencé par p1 p1 = null; p1 null p2 null 0 0 (0, 0) n'est plus référencé Juillet 2004 JAVA 115

116 Référence nulles et NullPointerException Si une référence ne désigne aucune instance, elle vaut «null» L appel d une méthode provoque un arrêt brutal du programme avec un message NullPointerException Point2D p ; p. distanceorigine (); erreur et arrêt du programme avec message java.lang.nullpointerexception Juillet 2004 JAVA 116

117 Attributs et références Une classe peut avoir pour attributs des références Associations UML Point a = new Point(0,0); Point b = new Point(1,1); public class Segment { // références de points private Point2D p0; private Point2D p1; public Segment(Point2D a, Point2D b) { p0 = a; p1 = b; a b Segment s = new Segment(a, b); s Juillet 2004 JAVA 117

118 Illustration de l utilisation des références Recherche du meilleur élève Fonction (statique) dont le résultat est une référence (Eleve) On utilise une référence locale dans la méthode : «elevemeilleur» On initialise la référence locale avec null Pas de meilleur élève On met à jour cette référence lorsque la note obtenue par un élève est supérieure à la note de référence La fonction renvoie la référence static Eleve meilleur () { int notemeilleure = -1 ; Eleve elevemeilleur = null ; for (int i=0 ; i < NB_ELEVES ; i++) { if (eleves [i]. getnote () > notemeilleure) { notemeilleure = eleves [i]. getnote () ; elevemeilleur = eleves [i] ; return elevemeilleur ; Juillet 2004 JAVA 118

119 Illustration de l utilisation des références (suite) public class Promo { // La promo est l'ensemble des élèves static final int NB_ELEVES = 5 ; static Eleve [ ] eleves = new Eleve [NB_ELEVES] ; static Eleve meilleur () { int notemeilleure = -1 ; Eleve elevemeilleur = null ; for (int i=0 ; i < NB_ELEVES ; i++) { if (eleves [i]. getnote () > notemeilleure) { notemeilleure = eleves [i]. getnote () ; elevemeilleur = eleves [i] ; return elevemeilleur ; public static void main (String [] args) { // Création des instances d'élèves dans le tableau for (int i=0 ; i < NB_ELEVES ; i++) eleves[i] = new Eleve (); // Affectation des attributs pour chaque élève eleves [0]. setnom ("Alain") ; eleves [0]. setnote (12) ; eleves [1]. setnom ("Bern") ; eleves [1]. setnote (10) ; eleves [2]. setnom ("Coco") ; eleves [2]. setnote (14) ; eleves [3]. setnom ("David") ; eleves [3]. setnote (15) ; eleves [4]. setnom ("Eva") ; eleves [4]. setnote (11) ; // Affichage des notes for (int i=0 ; i < NB_ELEVES ; i++) { System.out.println ( eleves [i]. getnom () + " :" + eleves [i]. getnote ()) ; System.out.println ( "Meilleur : " + meilleur ().getnom()) ; JAVA Alain :12 Bern :10 Coco :14 David :15 Éva :11 Meilleur : David Juillet 2004 JAVA 119

120 Chaînes de caractères JAVA

121 Les chaînes de Caractères Les chaînes de caractères sont des instances de la classe java.lang.string Initialisation des chaînes de caractères : String message1="bonjour"; String message2= "bon"+"jour"; l opérateur + est la concaténation de chaînes String message=" le résultat est: " ; String message3="bon".concat( "jour "); String message4=new String(message1); String message; //==null Juillet 2004 JAVA 121

122 Tableaux et Les chaînes de Caractères Tableau de caractères et chaîne des caractères sont deux types différents. Exemples de combinaisons : char [ ] tab={ h, e, l, l, o ; String message = new String (tab) ; String message1="bonjour" ; char [ ] message2=message1; //illégal char [ ] message3=message1.tochararray(); //utilisation d une méthode de conversion Juillet 2004 JAVA 122

123 La classe String : Principaux services Longueur d une chaîne: méthode length String ch= "bonjour"; int l = ch.length();//l==6 Conversion d un type de base vers une chaîne de caractères : méthode valueof String dix=string.valueof(10); //dix== "10" String m=string.valueof( a ); // m== "a" Comparaison de deux chaînes: méthodes equals, compareto, comparetoignorecase(), startswith(), endswith(), int i=ch.compareto("hello"); //i<0 boolean b=ch.equals("hello"); //b == false Juillet 2004 JAVA 123

124 La classe String : Principaux services (suite) Extraction de caractères d une chaîne String s="bonjour"; Char c=s.charat(3); //c==j Copie d une sous-chaîne dans un tableau de caractères: char [ ] tab={ b, o, n, s, o, i, r ; s.getchars(3,6,tab,3); Conversion de casse de caractères String msg1=s.touppercase(); String msg2=msg1.tolowercase() Juillet 2004 JAVA 124

125 La classe String : Principaux services (fin) Opérations sur des sous-chaînes d une chaîne de caractères String s1="bonjour"; String s2="le résultat est: " String s3=s1.substring(0,3); //s3=="bon" String s4=s2.subtring(12);//s4=="est: " int i=s1.indexof('o'); //i==1 int j=s1.indexof('o',i+1); //j==4 int k=s1.lastindex('o'); //k==4 int m=s1.indexof("bon"); //m==0 String s5=s2.replace(':','='); String s6=s2.trim(); //suppression des blancs en début et fin de chaîne Juillet 2004 JAVA 125

126 La conversion des types de base JAVA

127 Les Classes et Types de Base Les types de base JAVA ne sont pas des classes : les variables créées avec ces types ne sont pas des instances (des objets) JAVA fournit des classes complémentaires qui permettent d associer des variables simples à des objets Exemple int i= 1 ; integer i2 = new Integer (i) ; Classes disponibles le paquetage java.lang: Integer Short Float Boolean String Long Double Juillet 2004 JAVA 127

128 Les Classes et Types de Base (suite) Les classes complémentaires proposent de nombreuses méthodes de conversion entre types qui facilitent le traitement des données : Exemples : int i= 1 ; integer i2 = new Integer (i) ; i2.doublevalue () ; // la valeur de l entier en flottant i2.doubleshort () ; // la valeur de l entier tronqué i2.tostring () ; // la chaîne de caractère correspondant à la valeur String s = «12» ; Integer::parseInt (s) // la valeur entière à partir de s Juillet 2004 JAVA 128

129 L héritage JAVA

130 Héritage : définition, propriétés Une classe B spécialise une classe A si elle contient tous les attributs et opérations de A ; on dit alors que B hérite de A, et que A généralise B A B Objectif : Réutilisation du code La généralisation tend à factoriser du code commun dans des classes parentes. C'est cette démarche de factorisation qui amène assez naturellement à utiliser classes abstraites et interfaces (voir plus loin). La spécialisation tend à ne modifier dans les classes héritières qu'une partie du code existant dans les classes parentes. Juillet 2004 JAVA 130

131 Arbre d'héritage L'héritage peut servir à classifier (typer) des objets : Les classes que l'on trouve dans les niveaux les plus hauts de l'arbre sont appelées classes de base Animal Invertébré Vertébré Girafe Eléphant Juillet 2004 JAVA 131

132 L'héritage en Java Une classe B définie par : class B extends A {... hérite de tous les attributs et méthodes de la classe A. B est alors une classe dérivée de A un objet de la classe B est aussi un objet de la classe A L'expression booléenne : if (obj instanceof C) {... permet de savoir si un objet obj est de la classe C Juillet 2004 JAVA 132

133 Arbre d'héritage Il y a toujours un héritage par défaut: la classe prédéfinie Object est la classe racine de l'arbre d'héritage Toutes les classes que l on définit héritent de façon implicite de la classe Object du SDK JAVA Cette classe contient les services de base de gestion de la mémoire, en particulier le comptage des références et l appel au ramasse-miettes Object Integer String Throwable Eleve Error Exception RuntimeException Juillet 2004 JAVA 133

134 Visibilité des attributs et méthodes héritées Public un attribut public peut être lu ou écrit par n'importe quel autre objet une méthode publique peut être appelée par n'importe quel autre objet Private un attribut privé ne peut être lu ou écrit que par un objet de même classe une méthode privée ne peut être appelée que par un objet de même classe Protected un attribut protégé ne peut être lu ou écrit que par un objet de même classe ou de classe dérivée (héritage direct ou indirect) une méthode privée ne peut être appelée que par un objet de même classe ou de classe dérivée (héritage direct ou indirect) Juillet 2004 JAVA 134

135 L'extension L'héritage sert souvent à étendre la classe de départ avec des attributs et/ou des méthodes on réutilise ainsi tout le code déjà écrit public class Point { protected double x,y; public double Distance(Point autre) {... public class PointMobile extends Point { protected double vx,vy; Juillet 2004 JAVA 135

136 La spécialisation Souvent une méthode doit elle-même être étendue, voire remplacée on redéfinit la méthode dans la sous-classe Le code de la méthode de la classe parente est réutilisable avec le mot-clef "super" Lorsqu'une méthode est invoquée sur un objet, c'est la dernière redéfinition qui est exécutée (liaison dynamique) c'est-à-dire la première définition trouvée en remontant l'arbre d'héritage, depuis la classe de l'objet jusqu'à la racine de l'arbre (Object) Juillet 2004 JAVA 136

137 La spécialisation : exemple public class Disque { protected double diametre; public double aire() { return Math.PI*Math.pow(diametre/2.0, 2.0)); public class Couronne extends Disque { protected double diametreinterieur; public double aire() { // redéfinition de la méthode aire Disque interieur = new Disque(diametreInterieur); return super.aire() - interieur.aire(); Juillet 2004 JAVA 137

138 Chaînage des constructeurs Le constructeur des super-classes est toujours appelé s'il ne l'est pas explicitement par la première instruction du constructeur, alors un appel implicite à super( ) a lieu appel explicite à super( ) nécessaire si des paramètres sont requis par le constructeur les constructeurs s'enchaînent depuis Object jusqu'à la dernière sous-classe Exemple : L appel du constructeur de vélo entraîne d abord la construction de véhicule. Vélo Vélo () Véhicule Véhicule() Voiture Voiture () Juillet 2004 JAVA 138

139 Exemple d héritage Complément de la classe Élève pour rajouter deux informations Le sexe (masculin ou féminin) L age public class Eleve { // Les attributs private String nom ; // le nom de l'élève private int note = 0 ; // sa note // Les méthodes d'accès int getnote () { return note ; void setnote (int n) { note=n; String getnom () { return nom ; void setnom (String s) { nom=s; // Le constructeur Eleve (String s, int n) { nom=s; note=n; Juillet 2004 JAVA 139

140 Exemple d héritage (suite) On crée la classe ÉlèvePlus qui étend la classe élèves pour rajouter deux informations Le sexe (masculin ou féminin) L age On appelle le super constructeur (celui de Élève) public class ElevePlus extends Eleve { // Les attributs private boolean masculin ; // le sexe de l'élève : vrai pour masculin private int age ; // son age // Les méthodes d'accès int getage () { return age ; void setage (int n) { age=n; String getsexe () { if (masculin) return "M" ; else return "F" ; void setmasculin (boolean b) { masculin=b; // Le constructeur ElevePlus (String s, int n, int a, boolean b) { super (s,n); // redirection vers le constructeur de Eleve masculin=b; age=a; // initialisations propres Juillet 2004 JAVA 140

141 Exemple d héritage : le client On affiche les informations public class Promo { // La promo est l'ensemble des élèves static final int NB_ELEVES = 5 ; static ElevePlus [ ] eleves = new ElevePlus [NB_ELEVES] ; public static void main (String [] args) { // Création des instances d'élèves dans le tableau eleves[0] = new ElevePlus ("Alain",12,22,true); eleves[1] = new ElevePlus ("Bern",10,22,true); eleves[2] = new ElevePlus ("Coco",14,24,false); eleves[3] = new ElevePlus ("David",15,22,true); eleves[4] = new ElevePlus ("Eva",11,23,false); JAVA // Affichage for (int i=0 ; i < NB_ELEVES ; i++) { System.out.println ( eleves [i]. getnom () + "(" + eleves[i].getsexe () + ") : " + eleves [i]. getnote () + "/20 (" + eleves [i]. getage ()+" ans)") ; Alain(M) : 12/20 (22 ans) Bern(M) : 10/20 (22 ans) Coco(F) : 14/20 (24 ans) David(M) : 15/20 (22 ans) Éva(F) : 11/20 (23 ans) Juillet 2004 JAVA 141

142 Le polymorphisme Java

143 Polymorphisme : définition Une entité est polymorphe quand elle peut prendre successivement plusieurs formes Exemple : surcharge de méthode une classe peut avoir plusieurs méthodes de même nom, pourvu qu'elles aient des signatures différentes La classe de System.out fournit plusieurs versions de la méthode println void println(int x) void println(double x) void println(string x) etc. Juillet 2004 JAVA 143

144 Polymorphisme d'héritage Exemple : l'héritage et les types d'un objet Un objet de classe Vélo a 2 types :Vélo et Véhicule Un objet de classe Voiture a 2 types : Voiture et Véhicule Un objet de classe Véhicule a 1 seul type : Véhicule Véhicule rouler() Vélo rouler () Voiture rouler() Juillet 2004 JAVA 144

145 Les différents types d'un objet Pour un objet donné, il faut distinguer le type créé en mémoire, utilisé par new le type déclaré, utilisé par la référence le type créé doit être identique au type déclaré ou en hériter Vehicule b = new Vehicule (); Vehicule c = new Velo(); Velo d = new Vehicule (); // type créé = type déclaré = Vehicule // déclaré = Vehicule ; créé = Velo // interdit Juillet 2004 JAVA 145

146 Liaison dynamique La liaison dynamique consiste à choisir la méthode la plus spécifique possible pour un objet. La liaison dynamique sélectionne la version de méthode définie dans le type créé Vehicule a = new Velo (); Vehicule b = new Voiture(); a.rouler () ; // appel de rouler de velo b.rouler () ; // appel de rouler de voiture b=a; b.rouler () ; // appel de rouler de velo Juillet 2004 JAVA 146

147 Classes abstraites Une méthode abstraite est une méthode dont on définit l interface (le nom et les paramètres), mais pour laquelle on ne peut pas donner d implémentation dans le cas général L implémentation sera définie dans les classes filles Exemple : On peut définir abstraitement l aire d une figure quelconque On ne peut faire le calcul que pour une figure plus précise comme un cercle, un polygone, etc. Une classe contenant une méthode abstraite est alors elle-même abstraite il est alors interdit de créer des objets de cette classe abstraite on peut aussi déclarer une classe abstraite sans avoir de méthode abstraite, pour interdire la création d'objets une classe abstraite doit obligatoirement être déclarée comme telle Les classes abstraites sont en JAVA le principe de base de la programmation générique Juillet 2004 JAVA 147

148 Classes abstraites Syntaxe Java : mot-clé abstract public abstract class Forme { public abstract double surface(); public abstract double perimetre(); public class Rectangle extends Forme { protected double longueur=1.0, largeur=1.0; public double surface() { return longueur*largeur; public double perimetre() { return 2*(longueur+largeur); Juillet 2004 JAVA 148

149 Interfaces Si toutes les méthodes d'une classe sont abstraites et qu'il n'y a pas d'état d'objet (attributs), alors Java fournit la notion d'interface Les interfaces sont en JAVA la base de la programmation distribuée (équipes parallèles) public interface Deplacable { public void deplacer(double dx, double dy); public interface Orientable { public void tourner(double angle); Juillet 2004 JAVA 149

150 Interfaces Une classe peut implémenter une ou plusieurs interfaces : à la différence de l'héritage, on n'hérite d'aucun code et d'aucun attribut, il faut fournir le corps de toutes les méthodes. public class Disque extends Forme implements Deplacable, Orientable { protected double x,y,r; public double surface() { return Math.PI*r*r; public double perimetre() { return Math.PI*2*r; public double deplacer(double dx, double dy) { x=x+dx; y=y+dy; public void tourner(float angle) { Juillet 2004 JAVA 150

151 Application de l héritage : Dessin de Figures Géométriques Figure est une classe abstraite qui propose la possibilité de dessiner une figure géométrique Figure nom xg,yg couleur Figure () dessiner () Classes concrètes que l on peut dessiner en pratique Point Point () dessiner () Segment x0,y0 x1,y1 Carre cote Cercle rayon Segment () dessiner () Carre () dessiner () Cercle () dessiner () Juillet 2004 JAVA 151

152 Dessin de Figures Géométriques : détail ihm AjouteFigure() DessinerTout () setcolor (int couleur) filloval (int x, int y, int dx, int dy) drawoval (int x, int y, int dx, int dy) drawline(int x0, int y0, int x1, int y1) drawstring(string nom, int x, int y) Figure nom xg,yg couleur Figure () dessiner () Prog main () Point Point () dessiner () Segment x0,y0 x1,y1 Carre cote Cercle rayon Segment () dessiner () Carre () dessiner () Cercle () dessiner () Juillet 2004 JAVA 152

153 Classe Figure La classe Figure est abstraite Méthode Dessiner non développée Un constructeur permet d enregistrer la figure dans l ihm afin de faciliter le dessin systématique de toutes les figures public abstract class Figure { protected static final int TAILLE_POINT=4; protected String nom ; protected int couleur = 0; protected int xg, yg ; // Le centre de gravité de la figure Figure (String n, int x, int y, int coul) { nom=n;xg=x;yg=y; if (coul<0) coul=0; if (coul>7) coul=7; couleur=coul; ihm.ajoutefigure (this); abstract void Dessiner () ; Juillet 2004 JAVA 153

154 Classe Point La classe Point est une extension concrète de Figure Méthode Dessiner développée public class Point extends Figure { Point (String n, int x, int y, int coul) { super (n,x,y,coul); void Dessiner () { ihm.setcolor (couleur); ihm.filloval((int)xg-taille_point/2, (int)yg-taille_point/2, TAILLE_POINT,TAILLE_POINT); ihm.drawstring(nom, xg,yg); Juillet 2004 JAVA 154

155 Classe Segment La classe Segment est une extension concrète de Figure Méthode Dessiner développée On a défini deux constructeurs ; on crée le segment : soit à partir de 2 couples de coordonnées Soit à partir de 2 points public class Segment extends Figure { protected int x0,y0,x1,y1; Segment (String n, int _x0, int _y0, int _x1, int _y1, int coul) { super (n,(_x0+_x1)/2,(_y0+_y1)/2,coul); x0=_x0 ; y0=_y0 ; x1=_x1 ; y1=_y1 ; Segment (Point p0, Point p1) { super (p0.nom+p1.nom,(p0.xg+p1.xg)/2,(p0.yg+p1.yg)/2,p0.couleur); x0=p0.xg ; y0=p0.yg ; x1=p1.xg ; y1=p1.yg ; void Dessiner () { ihm.setcolor (couleur); ihm.filloval((int)x0-taille_point/2, (int)y0-taille_point/2, TAILLE_POINT,TAILLE_POINT); ihm.filloval((int)x1-taille_point/2, (int)y1-taille_point/2, TAILLE_POINT,TAILLE_POINT); ihm.drawline(x0, y0, x1, y1); ihm.drawstring(nom, xg,yg); Juillet 2004 JAVA 155

156 Exceptions : Complément JAVA

157 Principe des exceptions Une exception sert à interrompre le déroulement normal d'un programme en cas d'anomalie Les exceptions sont le moyen JAVA de traiter les erreurs lors de l exécution du programme objet appelant objet appelé public double test(double x) { return 10.0/x; test(1.0) 10.0 tout se passe bien pas de retour de valeur infinie test(0.0) exception division par zéro : interruption de test() temps Juillet 2004 JAVA 157

158 Principe des exceptions Rôles à distinguer pour une exception La méthode de l'objet appelé lève l'exception pour signaler une situation anormale La méthode de l'objet appelant à 2 possibilités principales : intercepter l'exception pour la traiter ignorer l'exception, et la laisser se propager En Java, une exception est un objet de classe Exception créé au point de levée utilisé au point de traitement véhicule de l'information entre ces deux points Juillet 2004 JAVA 158

159 Propagation d'une exception La propagation des exceptions se fait en remontant en cascade les appels de méthode Illustration sur un diagramme de séquence UML : o1 o2 o3 o4 f1() f2() f3() exception levée par o4 traitée par o1 propagée par o2 propagée par o3 temps Juillet 2004 JAVA 159

160 Méthodes levant des exceptions Toute méthode qui lève une exception ou qui propage une exception sans la traiter a l obligation de spécifier qu'elles lèvent une exception utilisation du mot clé throws dans la signature de la méthode Exemple : ouverture d'un fichier texte Si le fichier n existe pas, l exception «FileNotFoundException «est levée public FileReader(String filename) throws FileNotFoundException {... Juillet 2004 JAVA 160

161 Traitement d'exception en Java Les méthodes susceptibles de lever des exceptions doivent être appelées dans un bloc try Le bloc try est suivi de blocs catch permettant d'intercepter et de traiter les exceptions. Un bloc finally facultatif est ensuite exécuté quoiqu'il arrive, qu'il y ait eu exception ou non Utiliser pour terminer proprement le traitement (vérifier une post condition par exemple, quelque soit le scénario (exception ou pas) // dans une méthode try { // bloc try // appels de méthodes susceptibles de lever une exception catch(exception ex) { // bloc catch finally { // bloc finally Juillet 2004 JAVA 161

162 Traitement d'exception : exemple Ouverture de fichier avec FileReader L exception «FileNotFound» est susceptible d être levée Je dois donc la traiter // Fichier FileNotFound.java import java.io.*; public class FileNotFound { public static void main(string[ ] args) { new FileNotFound(args[0]); public FileNotFound(String name) { try { FileReader reader = new FileReader(name); System.out.println(name + ": ouvert"); catch(filenotfoundexception ex) { System.out.println(name + ": introuvable"); Juillet 2004 JAVA 162

163 Propagation d'exception Une méthode appelante n'est pas obligée de traiter les exceptions des méthodes qu'elle appelle elle doit alors propager l'exception ajout de throws à sa signature import java.io.*; public class FileNotFound { public static void main(string[ ] args) { new FileNotFound(args[0]); public FileNotFound(String name) throws FileNotFoundException { FileReader reader = new FileReader(name); System.out.println(name + ": ouvert"); Juillet 2004 JAVA 163

164 Levée d'exception Une méthode peut lever une exception afin d'abandonner une exécution face à une anomalie mot-clé throws (indicatif) dans la signature de la méthode mot-clé throw (impératif) au moment de l'abandon public double calculermoyenne(double[ ] nombres) throws Exception { if (nombres.length == 0) { throw new Exception("Tableau de nombres vide"); // fonctionnement nominal double moyenne = 0.0; for (int i = 0; i < nombres.length; i++) { moyenne += nombres[i]; return (moyenne/nombres.length); Juillet 2004 JAVA 164

165 Gestion des exceptions multiples Différents types d'exceptions peuvent être levés dans le try utiliser plusieurs blocs catch public FichierBinaire(String nom) { try { FileInputStream bin = new FileInputStream(nom); while (bin.available() >= 1) { int octet = bin.read(); System.out.println(octet); catch(filenotfoundexception ex) { System.out.println("Fichier " + nom + " introuvable"); catch(ioexception ex) { System.out.println("Erreur d'entrée/sortie"); catch(exception ex) { System.out.println("Autre erreur"); Juillet 2004 JAVA 165

166 Gestion des exceptions multiples Comment les blocs catch multiples peuvent-ils être remplacés par un seul bloc catch(exception ex)? Toutes les classes d'exception sont liées par une relation de généralisation La classe Exception est la plus générale La classe IOException est moins générale que Exception mais plus générale que FileNotFoundException Si une exception est levable dans un bloc try l'un des blocs catch doit traiter une exception au moins aussi général que cette exception elle est ignorée dans les blocs catch qui traitent une exception moins générale Les blocs catch doivent être rangés du moins général au plus général La relation de généralisation est réalisée au moyen de l'héritage Exception RuntimeException IOException NullPointerException ArithmeticException FileNotFoundException EOFException Juillet 2004 JAVA 166

167 Compilation JAVA est exceptions JAVA est un langage robuste Si le traitement des exceptions n est pas fait Ou s il est incomplet Exemple : des exceptions non complètement traitées, ou non signalées Alors la compilation va échouer Attention, donc, en particulier lorsque l on réutilise des classes de la JDK dont certaines vont lever des exceptions Il faudra les traiter Juillet 2004 JAVA 167

168 Les Entrées-Sorties

169 Entrée : les paramètres de main La méthode main prend en argument un tableau de chaînes de caractères public static void main(string [ ] args) Ce tableau est constitué par la liste d arguments qui sont passés sur la ligne de commande adressée à l interprète suite au nom de la classe dont on demande l exécution. java calcul 1 2 => execute la méthode statique main dans la classe calcul Avec les paramètres args[0] = «1» args[1] = «2» Attention : les paramètres sont des Strings Juillet 2004 JAVA 169

170 Sortie Simple : Affichage à l écran La classe System du paquetage java.lang déclare l attribut out de type PrintStream public static final java.io.printstream out; La classe PrintStream offre les méthodes de classe surchargées print() et println() permettant d afficher sur la sortie standard des représentations textuelles de chaque type de données public void print(long l); public void println(long l); public void println(int l); public void print(string s); L opérateur «+» permet une écriture plus compacte des séquences d instructions de sorties String s=" le résultat est : "; int i=10; char c= + ; float f=4.7; System.out.println(s+i+c+f); Juillet 2004 JAVA 170

171 Entrées Sorties générales en JAVA En JAVA, les entrées sorties utilisent des classes standard de la JDK Il y a généralement plusieurs classes à mettre en œuvre, même pour des entrées sorties simples On a une hiérarchie de classe, qui correspond à une généralisation des entrées- sorties Ce chapitre décrit des exemples pratiques de mise en œuvre des entrées sorties Juillet 2004 JAVA 171

172 Notion Avancée : le flot de données L accès à un fichier se fait par l intermédiaire d un flot (stream) Un flot de données permet à une source d'envoyer des données à une destination la lecture se fait en séquence, élément par élément, dans l'ordre de l'écriture Flot de données en lecture un programme Java ouvre un flot de données en lecture pour lire des données d'une source extérieure (fichier, clavier, réseau) les données sont lues en séquence Flot de données en écriture un programme Java ouvre un flot de données en écriture pour écrire dans une destination externe (fichier, écran, réseau) les données sont écrites en séquence Juillet 2004 JAVA 172

173 Types de flots de données Il existe deux types de flots : Les flots de type caractère permettent d'échanger des données de type texte entre le programme et l'extérieur Les flots de type octet permettent l'échange de données binaires Différence octet : 8 bits, donnée pure, illisibles pour le commun des mortels caractère : 16 bits, destinée à être lue par l'oeil humain Bufferisation Les flots peuvent être bufferisés Lecture par bloc (par exemple une ligne) Juillet 2004 JAVA 173

174 Entrées/sorties de caractères java.io est le paquetage Java dédié aux classes d'e/s Classes java.io.*reader permettent au programme de lire des données texte exemples : BufferedReader (lecture par ligne) FileReader (lecture depuis un fichier texte) etc. Classes java.io.*writer permettent au programme d'écrire des données texte exemples : BufferedWriter, FileWriter, etc. Mode d'emploi Voir en détail la documentation sur le JDK Juillet 2004 JAVA 174

175 Entrées/sorties d octets Hiérarchie de classes équivalente à celle dédiée aux entrées/sorties de caractères java.io.*inputstream <=> java.io.*reader java.io.*outputstream <=> java.io.*writer Classes supplémentaires : entrées / sorties formatées java.io.datainputstream (lecture d entiers, de réels, de booléens, etc. depuis un flot binaire) java.io.dataoutputstream Mode d'emploi Voir en détail la documentation sur le JDK Juillet 2004 JAVA 175

176 Exemple : Lire des lignes au clavier L'objet prédéfini System.in, l'entrée standard, est de classe InputStream (flot d'octets) à combiner avec un InputStreamReader pour le transformer en flot de caractères et un BufferedReader pour lire ligne par ligne public LectureClavier() { BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in)); try { while(true) { System.out.print("? "); // prompt String ligne = clavier.readline(); System.out.println("lu: [" + ligne + "]"); catch(ioexception ex) { System.out.println(ex); Juillet 2004 JAVA 176

177 Exemple : Lire dans un fichier binaire Utiliser la classe FileInputStream et les méthodes available() et read() Deux exceptions à considérer : FileNotFoundException et IOException Pour simplifier, utilisation d'un bloc commun catch(exception ex) public FichierBinaire(String nom) { try { FileInputStream bin = new FileInputStream(nom); while (bin.available() >= 1) { int octet = bin.read(); System.out.println(octet); catch(exception ex) { System.out.println(ex); Juillet 2004 JAVA 177

178 Structures de données JAVA

179 Structures de données en JAVA Pour écrire des applications complètes, il faut souvent écrire des classes qui gèrent des collections d'objets exemple : diagramme gérant plusieurs figures géométriques Certaines structures de données sont devenues standard tableau, pile, liste, file d'attente, arbre binaire, table de hachage, dictionnaire, ensemble En Java, la plupart des structures de données standard sont prêtes à l emploi sous forme de classes directement réutilisables Paquetage java.util.collection Juillet 2004 JAVA 179

180 Panorama des Structures de données Java La JDK fournit un nombre non négligeable de structures de données standard, appelées collections toutes les classes font partie du package java.util Chaque structure est définie par une interface voir l'api de la JDK pour une documentation exhaustive Collection Vector Stack List Set Map SortedSet SortedMap ArrayList LinkedList HashSet TreeSet HashMap TreeMap Juillet 2004 JAVA 180

181 Les listes L interface List définit le type liste interface List { void add(int index, Object o); Object set(int index, Object o); // renvoie l'élément remplacé Object remove(int index); // renvoie l'élément supprimé boolean isempty(); int size(); int indexof(object o); // -1 ou >= 0 Object get(int index); Iterator iterator(); // pour parcourir la liste // etc. interface Iterator { boolean hasnext(); Object next(); void remove(); Juillet 2004 JAVA 181

182 Les classes LinkedList et ArrayList Ces classes implémentent l'interface List avec des représentations différentes public class LinkedList implements List { // chaînage double class Entry { Object element; Entry next; Entry previous; private Entry header; void add(int index, Object o) { // etc. public class ArrayList implements List { // contiguïté private Object[] elementdata; void add(int index, Object o) { // etc. représentation contiguë représentation chaînée Juillet 2004 JAVA 182

183 Exemple d'utilisation d'une List Création d'une liste indexée LinkedList maliste = new LinkedList(); maliste.add(0, "zero"); maliste.add(1, "un"); maliste.add(2, "deux"); maliste.add(3, "trois"); Parcours d'une liste à l'aide d'un itérateur Iterator totor = maliste.iterator(); while(totor.hasnext()) { String element = (String) totor.next(); System.out.print(element + " "); System.out.println(""); Juillet 2004 JAVA 183

184 Quand Utiliser les listes? Propriétés des listes Les listes sont ordonnées Un élément peut être présent plusieurs fois Limites des listes L accès à un élément nécessite le parcours complet de la liste Juillet 2004 JAVA 184

185 Les ensembles Notion mathématique d ensemble (set) Implémenté par les classes : HashSet (représentation table de hachage) TreeSet (représentation arbre binaire) interface Set { boolean add(object element); boolean remove(object element); boolean isempty(); int size(); boolean contains(object element); // opérations ensemblistes boolean addall(collection c); boolean retainall(collection c); boolean removeall(collection c); // etc. // union // intersection // différence Juillet 2004 JAVA 185

186 Table de Hachage Une table de hachage est un tableau dont on retrouve l'indice par une fonction dite fonction de hachage, s'appliquant sur les éléments qu'on veut stocker dans la table Exemple : ensemble de mots fonction de hachage = rang de l'initiale dans l'alphabet 1 2 Bernard Bruno Béatrice 3 4 David Daniel 26 Zoé Juillet 2004 JAVA 186

187 Arbre binaire Un arbre binaire est un arbre dont chaque nœud a au plus 2 fils Les données sont stockées au niveau des nœuds Un arbre binaire peut être organisé de façon à optimiser les temps de recherche (arbre binaire de recherche ou ABR) Exemple : rangement de mots Marcel Alain Béa David Nicole Olivia Thierry Juillet 2004 JAVA 187

188 Exemple d'utilisation d'un Set Création d'un ensemble TreeSet ts = new TreeSet(); ts.add("zero"); ts.add("un"); ts.add("deux"); Parcours des entrées Iterator totor = ts.iterator(); while (totor.hasnext()) { String element = (String) totor.next(); System.out.print(element + " "); System.out.println(""); Juillet 2004 JAVA 188

189 Quand utiliser les ensembles? Propriétés des ensembles Unicité des éléments Limites L accès à un élément nécessite le parcours complet de la liste HashSet ou TreeSet? Utiliser HashSet pour avoir les meilleurs performances d'accès en insertion/recherche/suppression d'élément dans l'ensemble Utiliser TreeSet pour pouvoir parcourir les éléments dans leur ordre naturel Juillet 2004 JAVA 189

190 Les dictionnaires Un dictionnaire (map) est un ensemble de couple (clé, valeur) L accès aux éléments s effectue par clé On peut parler d un ensemble indexé La clé est unique Bijection entre l ensemble des clés et l ensemble des valeurs Représenté par les classes : HashMap (représentation table de hachage) TreeMap (représentation arbre binaire) interface Map { void put(object key, Object value); Object remove(object key); boolean containskey(object key); boolean containsvalue(object value); Object get(object key); Set entryset(); interface Entry { Object getkey(); Object getvalue(); // etc. Juillet 2004 JAVA 190

191 Exemple d'utilisation d'un Map Création d'un dictionnaire HashMap hm = new HashMap(); hm.put("zero", new Integer(0)); hm.put("un", new Integer(1)); hm.put("deux", new Integer(2)); Recherche dans un dictionnaire if (hm.containskey("deux")) { System.out.println(hm.get("deux")) Parcours des entrées Iterator totor = hm.entryset().iterator(); while (totor.hasnext()) { Map.Entry e = (Map.entry) totor.next(); System.out.print(e.getKey() + "," + e.getvalue() + " "); System.out.println(""); Juillet 2004 JAVA 191

192 Quand utiliser les dictionnaires Propriétés Les dictionnaires permettent l accès immédiat aux éléments Limites Les dictionnaires sont plus lourds à la mise en œuvre (gestion de la clé) Les dictionnaires supposent l existence d une clé Capacité à trouver une bijection simple clé -> valeur TreeMap ou HashMap? Utiliser HashMap pour avoir les meilleurs performances d'accès en insertion/recherche/suppression d'entrée dans le dictionnaire Utiliser TreeMap pour pouvoir parcourir les entrées dans l'ordre des clés Juillet 2004 JAVA 192

193 Environnement JAVA JAVA

194 Fonctionnement du compilateur Code source (fichier.java) compilateur Code intermédiaire (fichier.class) interpréteur Machine virtuelle Java Indépendance du code Java par rapport au matériel et au système d exploitation. Exécution sur n importe quelle machine où est installée une machine virtuelle Java. Machine cible Juillet 2004 JAVA 194

195 Compilation Localisation des fichiers Placer tous les fichiers concernant un même projet dans le même répertoire Les fichiers.java sont des fichiers textes ; on peut les modifier avec n importe quel éditeur de texte ; certains éditeurs vont proposer des fonctions orientées JAVA (coloration des mots clés, etc.) Deux types de fichier complexe.java : le fichier source java complexe.class : le fichier traduit produit du compilateur A ne pas toucher Doit être présent pour l éxécution Commandes de compilation Dans une fenêtre shell javac : lance le compilateur (traduction java->class) Il faut compiler tous les fichiers utiles au programme java <nom du programme> : lance l interpréteur Le nom du programme est le nom du fichier (de la classe) dans lequel il y a le main (static) Recherche des erreurs de compilation Commencer par le premier message de la liste Distinguer le numéro de la ligne, et le numéro du message Juillet 2004 JAVA 195

196 Java Development Kit Le JDK constitue la «boite à outils» pour les développements en JAVA JDK contient en particulier : les bibliothèques standard du langage, un compilateur, un interpréteur, un Java Runtime Environment (version minimale pour pouvoir exécuter des applications écrites en Java. JRE ne contient aucun outil de développement), la documentation des différents outils et classes, interfaces et méthodes du langage, Juillet 2004 JAVA 196

197 La documentation du JDK La documentation est disponible en ligne Elle est très complète Elle doit être utilisée en complément du cours Juillet 2004 JAVA 197

198 Extrait de la documentation Juillet 2004 JAVA 198

199 Documentation avec javadoc Les classes peuvent être auto-documentées Utile dans un projet industriel pour lequel la maintenance est importante Principe : Des commentaires sont ajoutés au programme Ils contiennent des informations complémentaires Ces commentaires peuvent être extraits pour former une documentation au format HTML Les commentaires de documentation commencent par /** et se terminent par */ /** ceci est un commentaire de documentation */. Ces commentaires peuvent contenir des balises introduites La commande javadoc crée une documentation ayant un format standardisé à partir des commentaires de documentation internes à une classe. En entrée : fichier.java En sortie : fichier.html Juillet 2004 JAVA 199

200 Principales Balises utilisables Marqueurs d entête Marqueurs d entête de nom de: explicite le rôle d un paramètre d une méthode. Ces marqueurs doivent apparaître dans l ordre des déclarations des description: explicite la nature de la valeur retournée par la méthode Liens nom (avec nom un nom de classe ou de méthode, d attribut ): crée un lien hypertexte référençant une autre entité de programme. référence : lien hypertexte vers une référence Juillet 2004 JAVA 200

201 Exemple import java.lang.math; /** * Cette classe permet la gestion des complexes Leydier Thierry 1.0 */ public class Complexe { public static void main(string[] args) { Complexe c = new Complexe () ; c.x=1; c.y=1; System.out.println("Norme("+c.Getx() +","+c.gety()+ ")=" + c.norme()); public double Getx() {return x; public double Gety() {return y; /** * Calcul de la norme la norme du complexe */ public double Norme () { return Math.sqrt (x*x+y*y) ; private double x ; private double y ; public static final int MaxVal = 32 ; Juillet 2004 JAVA 201

202 Résultat Juillet 2004 JAVA 202

Eléments de syntaxe du langage Java

Eléments de syntaxe du langage Java c jan. 2014, v3.0 Java Eléments de syntaxe du langage Java Sébastien Jean Le but de ce document est de présenter es éléments de syntaxe du langage Java : les types primitifs, les opérateurs arithmétiques

Plus en détail

Mise à niveau en Java

Mise à niveau en Java Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 1 Aujourd hui Eléments de base Variables, opérateurs, type d une expression

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Les références et la mémoire

Les références et la mémoire Chapitre 3 Les références et la mémoire 3.1 Introduction En Java, pour déclarer une variable, il faut donner son nom, précédé du type qu on souhaite lui attribuer. Ces types peuvent être des types primitifs

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

Plus en détail

} 7 Variables (composantes)

} 7 Variables (composantes) Chapitre 4 Tableaux Jusqu ici, nous avons employé les variables pour stocker les valeurs individuelles de types primitifs : une variable de type int pour stocker un entier, une variable de type boolean

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 +Cours 2 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40 Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne gauthier.picard@emse.fr

Plus en détail

Définitions de classes permettant de gérer Étudiant en Enseignant CORRECTION

Définitions de classes permettant de gérer Étudiant en Enseignant CORRECTION EILCO ING 1 - POO Java Contrôle 2014/2015 Définitions de classes permettant de gérer Étudiant en Enseignant CORRECTION Dans ces exercices, nous allons définir une classe Personne qui permettra de gérer

Plus en détail

Cours1 +Cours 2. Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1

Cours1 +Cours 2. Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Cours1 +Cours 2 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

Cours 1 : Introduction Générale + Objet

Cours 1 : Introduction Générale + Objet Organisation du cours Équipe pédagogique L2 S4 2009 : 2010 Programmation Objet Jean-Claude MARTIN MARTIN@LIMSI.FR Cours 1 : Introduction Générale + Objet 10 cours de 1h30 o Jean-Claude MARTIN (MARTIN@LIMSI.FR)

Plus en détail

Programmation en Java IUT GEII (MC-II1) 1

Programmation en Java IUT GEII (MC-II1) 1 Programmation en Java IUT GEII (MC-II1) 1 Christophe BLANC - Paul CHECCHIN IUT Montluçon Université Blaise Pascal Novembre 2009 Christophe BLANC - Paul CHECCHIN Programmation en Java IUT GEII (MC-II1)

Plus en détail

1 Le jeu «Puissance 4»

1 Le jeu «Puissance 4» Université de Nice-Sophia Antipolis Deug MIAS-MI 1 Algorithmique & Programmation 2002 2003 TP N 3 Procédures et fonctions Buts : Manipuler des objets complexes Tableaux à deux dimensions Usage des sentinelles

Plus en détail

Cours 1 : Introduction Générale + Objet I

Cours 1 : Introduction Générale + Objet I Organisation du cours Équipe pédagogique DUT Informatique S3 - Programmation Java Jean-Claude MARTIN MARTIN@LIMSI.FR Cours 1 : Introduction Générale + Objet I Jean-Claude MARTIN (Responsable, Cours, TD

Plus en détail

Introduction au langage Java

Introduction au langage Java Introduction au langage Java Nicolas Dumoulin nicolas.dumoulin@cemagref.fr Cemagref Laboratoire d ingénierie pour les systèmes complexes 2010 Notes aux lecteurs Ce document est un support de cours qui

Plus en détail

Tableaux (introduction) et types de base

Tableaux (introduction) et types de base Tableaux (introduction) et types de base A. Motivation..................................................... 4 B. Les tableaux.................................................... 5 C. Construction des tableaux.......................................

Plus en détail

Cours de Java. Benjamin FAUCHER Cubis-Helios Consulting

Cours de Java. Benjamin FAUCHER Cubis-Helios Consulting Cours de Java Benjamin FAUCHER Cubis-Helios Consulting Cours 1 : Les bases du Langage Java 1/2 I. Introduction II. Compilation III. Rappel sur la POO IV. Les classes Java V. Syntaxe de base du Java Langage

Plus en détail

Plan. Tableaux. Utilité. Définition. Exemples. Déclaration d un tableau

Plan. Tableaux. Utilité. Définition. Exemples. Déclaration d un tableau Plan Tableaux Université de Nice - Sophia Antipolis Richard Grin Version 1.0.4 25/11/10 Définition Déclaration d un tableau Création d un tableau Utilisation d un dun tableau Tableau des paramètres de

Plus en détail

Programmation - Java - Fiches du Langage. Marie Beurton-Aimar

Programmation - Java - Fiches du Langage. Marie Beurton-Aimar Programmation - Java - Fiches du Langage Marie Beurton-Aimar Fiche Numéro 1 1.1 Structure d un programme Java Toutes les instructions se terminent par un ; Le nom du fichier qui contient une classe doit

Plus en détail

Programmation Orientée Objet avec JAVA

Programmation Orientée Objet avec JAVA Programmation Orientée Objet avec JAVA Présenté par Abdoul Aziz Ciss Docteur en Cryptologie, Consultant ITSec Dept GIT EPT Email: aaciss@ept.sn Web : www.alekciss.com Tel: 77 451 92 95 Plan 1. Introduction

Plus en détail

Algorithmique et initiation à la programmation java

Algorithmique et initiation à la programmation java L3 Monnaie - Finance Algorithmique et initiation à la programmation java Première partie O. Auzende 2012-2013 1 Modalités Cours en amphithéâtre : les lundis de 12 h à 13 h 30 (amphi 3) o Deux fascicules

Plus en détail

Commentaires Sur une ligne // Comme en C++, après un slash-slash int i; // commentaire jusqu à la fin de la ligne

Commentaires Sur une ligne // Comme en C++, après un slash-slash int i; // commentaire jusqu à la fin de la ligne 1 - Types et instructions de base Java 2 - Tableaux de types primitifs 3 - Méthodes statiques 1 2 Identificateurs Nommer les classes, les variables, les méthodes, Un identificateur Java est de longueur

Plus en détail

PPOOGL. Florent de Dinechin. Java pour les nuls

PPOOGL. Florent de Dinechin. Java pour les nuls PPOOGL Florent de Dinechin Java pour les nuls Java en 30 minutes Introduction Grands principes Pour en finir avec l organisation Types de base et objets Le reste est dans le manuel PPOOGL 1 Introduction

Plus en détail

Généralités sur le Langage Java et éléments syntaxiques.

Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...

Plus en détail

Le Langage. JavaScript

Le Langage. JavaScript Chapitre 2 : Le Langage JavaScript Le Langage JavaScript Rémy Courdier 1996-2002 - Le langage Java - Version du cours 2.6.2 1 Les types primitifs de JavaScript Types de bases Boolean (Booléen) : peut prendre

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

Corrigé des exercices sur les références

Corrigé des exercices sur les références Corrigé des exercices sur les références Exercice 3.1.1 dessin Pour cet exercice, vous allez dessiner des structures de données au moyen de petits schémas analogues à ceux du cours, comportant la pile

Plus en détail

CORBA avec OpenORB. Samir Torki et Patrice Torguet

CORBA avec OpenORB. Samir Torki et Patrice Torguet CORBA avec OpenORB Samir Torki et Patrice Torguet 1 Présentation de CORBA CORBA (Common Object Request Broker Architecture) est un standard décrivant une architecture pour la mise en place d objets distribués.

Plus en détail

TD3: tableaux avancées, première classe et chaînes

TD3: tableaux avancées, première classe et chaînes TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première

Plus en détail

Le langage Java - Syntaxe

Le langage Java - Syntaxe Le langage Java - Syntaxe LES BASES: litéraux, types, expressions, instructions LE LANGAGE JAVA - SYNTAXE LES COMMENTAIRES LES IDENTIFICATEURS LISTES DES MOTS RÉSERVÉS: LES LITÉRAUX BOOLÉENS LA DÉCLARATION

Plus en détail

Les tableaux. Programmation Orientée Objet Java. Références et Garbage Collector. Les tableaux

Les tableaux. Programmation Orientée Objet Java. Références et Garbage Collector. Les tableaux Les tableaux Déclaration d une variable de type référence vers un tableau : Programmation Orientée Objet Bertrand Estellon Département Informatique et Interactions Aix-Marseille Université 29 octobre 2015

Plus en détail

Le Langage Java et le Monde des Objets

Le Langage Java et le Monde des Objets . p.1 Le Langage Java et le Monde des Objets Les principes de la modélisation Orientée Objet. Qu est-ce qu une classe?. Les types de base. Utiliser les classes. Les tentacules de Java. . p.2 Bibliographie

Plus en détail

Cours 2 : Comment construire un programme?

Cours 2 : Comment construire un programme? 1/64 Introduction à la programmation Cours 2 : Comment construire un programme? Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr Université Paris Diderot Paris 7 2/64 Le cours d aujourd hui 1. Striptease

Plus en détail

Correction langage Java

Correction langage Java MINISTÈRE DE L ÉCOLOGIE, DU DÉVELOPPEMENT DURABLE, DES TRANSPORTS ET DU LOGEMENT EXAMEN PROFESSIONNEL DE VÉRIFICATION D APTIDUDE AUX FONCTIONS DE PROGRAMMEUR Session 2010 Correction langage Java Langage:

Plus en détail

Cours Bases de données 2ème année IUT

Cours Bases de données 2ème année IUT Cours Bases de données 2ème année IUT Cours 6 : JDBC : ou comment lier ORACLE avec Java 1ère partie Anne Vilnat http://www.limsi.fr/individu/anne/cours Plan 1 Introduction 2 les étapes de la connexion

Plus en détail

Langage Java. Classe de première SI

Langage Java. Classe de première SI Langage Java Table des matières 1. Premiers pas...2 1.1. Introduction...2 1.2. Mon premier programme...2 1.3. Les commentaires...2 2. Les variables et les opérateurs...2 3. La classe Scanner...3 4. Les

Plus en détail

Syntaxe du langage JAVA. Philippe Roose (IUT Bayonne) Olivier Dedieu (INRIA)

Syntaxe du langage JAVA. Philippe Roose (IUT Bayonne) Olivier Dedieu (INRIA) Syntaxe du langage JAVA Philippe Roose (IUT Bayonne) Olivier Dedieu (INRIA) Structure du langage Les types primitifs boolean(true/false), byte (1 octet), char (2 octets), short (2 octets), int (4 octets),

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

2001-2002. UFR Mathématiques de la Décision. Première Année de DEUG Sciences et Technologie mention MASS. Informatique. Volume I.

2001-2002. UFR Mathématiques de la Décision. Première Année de DEUG Sciences et Technologie mention MASS. Informatique. Volume I. 2001-2002 UFR Mathématiques de la Décision Première Année de DEUG Sciences et Technologie mention MASS Informatique Volume I Fabrice Rossi c Fabrice Rossi, 1997-2002 Conditions de distribution et de copie

Plus en détail

Informatique III: Programmation en C++ Introduction. Examens. Chargé de cours François Fleuret francois.fleuret@epfl.ch

Informatique III: Programmation en C++ Introduction. Examens. Chargé de cours François Fleuret francois.fleuret@epfl.ch Informatique III: Programmation en C++ Lundi 24 Octobre 2005 Chargé de cours François Fleuret francois.fleuret@epfl.ch Assistant Mathieu Salzmann mathieu.salzmann@epfl.ch Assistants étudiants Ali Al-Shabibi

Plus en détail

420KEL Petite révision v. 1,65. Petite révision

420KEL Petite révision v. 1,65. Petite révision Petite révision Quelques petits exercices pour vous rafraîchir la mémoire et vous remettre en forme. Dans les exercices pour lesquels on vous demande de programmer, cherchez à produire un résultat à la

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Types et instructions de base Java

Types et instructions de base Java Types et instructions de base Java Certains de ces transparents sont une reprise des transparents du cours "Comment JAVA? Java bien!" de P. Itey Philippe GENOUD UJF Septembre 2008 1 Identificateurs Nommer

Plus en détail

Cours 1: Java et les objets

Cours 1: Java et les objets Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/

Plus en détail

Introduction au langage C

Introduction au langage C Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Université de Bourgogne - UFR Sciences et Technique - Programmation objet et Internet - LPSIL

Université de Bourgogne - UFR Sciences et Technique - Programmation objet et Internet - LPSIL Nom : Prénom : Contrôle continu Programmation objet Vous devez répondre dans les cadres aux questions posées. Documents de cours et notes personnelles autorisés. Téléphones portables, ordinateurs et calculatrices

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Eléments d algorithmique en Java

Eléments d algorithmique en Java Université de Provence (Aix-Marseille I) Eléments d algorithmique en Java Solange COUPET-GRIMAL Ce cours s adresse à des débutants. Les notions essentielles de programmation y sont introduites de façon

Plus en détail

Support de Cours Christophe Dony Université Montpellier-II

Support de Cours Christophe Dony Université Montpellier-II Cours de base d Ingéniérie des applications objet. Généralités sur le langage Java - Modèle d exécution - Syntaxe Support de Cours Christophe Dony Université Montpellier-II 1 Le langage Java 1.1 Langage

Plus en détail

Systèmes Informatiques TD 3: langage C opérations élémentaires

Systèmes Informatiques TD 3: langage C opérations élémentaires Systèmes Informatiques TD 3: langage C opérations élémentaires P. Bakowski bako@ieee.org Opérateurs logiques/arithmétiques Le langage C offre une liste importante d opérateurs logiques et arithmétiques.

Plus en détail

Résumé Introduction Programmation Java

Résumé Introduction Programmation Java Résumé Introduction Programmation Java Concepts Un programme : séquence, test conditionnel, boucles. Objets : Les objets Java modélisent les objets d un problème donné Classe : Les objets sont crées à

Plus en détail

INF 321 : mémento de la syntaxe de Java

INF 321 : mémento de la syntaxe de Java INF 321 : mémento de la syntaxe de Java Table des matières 1 La structure générale d un programme 3 2 Les composants élémentaires de Java 3 2.1 Les identificateurs.................................. 3 2.2

Plus en détail

Introduction à la Programmation 1

Introduction à la Programmation 1 Introduction à la Programmation 1 Séance de cours/td Université Paris-Diderot Objectifs: Découverte du type String. Comprendre qu il y a des types différents. Maîtriser les expressions booléennes dans

Plus en détail

Programmation en Python - Cours 2 : Premiers programmes

Programmation en Python - Cours 2 : Premiers programmes Programmation en Python - Cours 2 : Premiers programmes 2013/2014 Diverses utilisations de python Utilisation en mode interactif Ecriture d un programme python Saisie de données par l utilisateur : input(),

Plus en détail

HMIN111M Programmation en Java. Un aperçu des classes

HMIN111M Programmation en Java. Un aperçu des classes HMIN111M Programmation en Java Un aperçu des classes 1. Limites des types primitifs Programme de gestion des comptes bancaires 2 comptes par exemple (on ne connait pas les tableaux) Une classe Banque qui

Plus en détail

Le langage Java - Syntaxe

Le langage Java - Syntaxe Le langage Java - Syntaxe LES STRUCTURES DE CONTRÔLES LE BLOC D INSTRUCTIONS EXÉCUTION CONDITIONELLE SI... ALORS... SINON CASCADER LES CONDITIONS AU CAS OÙ... TANT QUE... FAIRE... FAIRE... TANT QUE...

Plus en détail

Programmation Orientée Objet en Java

Programmation Orientée Objet en Java Programmation Orientée Objet en Java El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda m.daoudi@fso.ump.ma Septembre 2011 El Mostafa

Plus en détail

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012 Université Mohammed Premier Année universitaire 2011-2012 Faculté des Sciences Filière SMI Département de Mathématiques Module : POO Java et d Informatique Semestre : S5 Correction de l examen écrit de

Plus en détail

Tp 1 correction. Structures de données (IF2)

Tp 1 correction. Structures de données (IF2) Tp 1 correction Structures de données (IF2) Remarque générale : compilez et exécutez le code au-fur-et-à mesure de son écriture. Il est plus facile de corriger une petite portion de code délimitée que

Plus en détail

Listes de personnes et calculatrice polonaise inverse en Java

Listes de personnes et calculatrice polonaise inverse en Java Listes de personnes et calculatrice polonaise inverse en Java Université Paris Sud Motivation Le but de cet exercice est de manipuler les listes chaînées et les piles et de voir leur application en analyse

Plus en détail

Résumé du cours de Programmation Java

Résumé du cours de Programmation Java Résumé du cours de Programmation Java Carole Frindel et Céline Robardet TABLE DES MATIÈRES 1 Notions élémentaires 1 1.1 Qu est-ce qu un programme?......................................... 1 1.2 Les variables...................................................

Plus en détail

Programmation Web. Madalina Croitoru IUT Montpellier

Programmation Web. Madalina Croitoru IUT Montpellier Programmation Web Madalina Croitoru IUT Montpellier Organisation du cours 4 semaines 4 ½ h / semaine: 2heures cours 3 ½ heures TP Notation: continue interrogation cours + rendu à la fin de chaque séance

Plus en détail

Cours 4 Programmation web, orientée serveur

Cours 4 Programmation web, orientée serveur DUT MMI IUT de Marne-la-Vallée 17/03/2015 M2202 - Algorithmique Cours 4 Programmation web, orientée serveur Philippe Gambette Sources phpdebutant.net www.php.net (documentation du langage PHP) Plan du

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

Une introduction à Java

Une introduction à Java Une introduction à Java IFT 287 (Semaine 1) UNIVERSITÉ DE SHERBROOKE 1 Java - Historique Développé par Sun Microsystems en 1994 Inventeur James Gosling (canadien!) Objectif langage sûr (fortement typé)

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

51IF1IF1 Introduction à l informatique et à la programmation. Support du cours-td

51IF1IF1 Introduction à l informatique et à la programmation. Support du cours-td 51IF1IF1 Introduction à l informatique et à la programmation Support du cours-td 2013-2014 Table des matières Présentation de l enseignement 2 1 Présentationdu langagejava 3 1.1 Qu est-ce-qu un programme?

Plus en détail

Université Paris Diderot ISIFAR Année 2008-2009. Exceptions et Classes Abstraites

Université Paris Diderot ISIFAR Année 2008-2009. Exceptions et Classes Abstraites Université Paris Diderot JAVA ISIFAR Année 2008-2009 TP n 7 - Correction Exceptions et Classes Abstraites Exercice 1 [Utilisation des Exceptions] La méthode parseint est spécifiée ainsi : public static

Plus en détail

Listes et arbres binaires

Listes et arbres binaires Des structures de données dynamiques Listes, Listes ordonnées Arbres binaires, arbre binaires de recherche Listes chaînées Utile si le nombre d éléments n est pas connu à l avance et évolue beaucoup. Permet

Plus en détail

Les tableaux ne sont pas ni des objets ni des types simples.

Les tableaux ne sont pas ni des objets ni des types simples. Cours 5 Tableaux Tableaux à 2 dimensions Tableaux d objets POO 1 Les tableaux ne sont pas ni des objets ni des types simples. Un tableau se rapproche d un objet Il est manipulé par référence (adresse)

Plus en détail

STAGE IREM 0- Premiers pas en Python

STAGE IREM 0- Premiers pas en Python Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer

Plus en détail

public class StaticExample { private static int compteur; public static double pi = 3.14159; } utilisation de la notation. respect des modificateurs

public class StaticExample { private static int compteur; public static double pi = 3.14159; } utilisation de la notation. respect des modificateurs static static : usage Le rôle essentiel d un moule est de permettre la création d objets. mais un moule a également des caractéristiques Il en est de même pour une classe. Usage : La déclaration des attributs

Plus en détail

Programmation Java. Redéfinition de méthode (masquage)

Programmation Java. Redéfinition de méthode (masquage) Programmation Java Programmation objet avec Java Concepts plus avancés Christelle Urtado & Sylvain Vauttier Janvier 2013 Redéfinition de méthode (masquage) Une sous-classe peut redéfinir le code de méthodes

Plus en détail

Langage Élémentaire Algorithmique Spécifications du langage

Langage Élémentaire Algorithmique Spécifications du langage Langage Élémentaire Algorithmique Spécifications du langage Lionel Clément Version provisoire Novembre 2012 Le but de ce projet est de livrer un compilateur pour un langage élémentaire algorithmique (Léa).

Plus en détail

Licence d'informatique 2004-2005 Examen Programmation orientée objet Juin 2005

Licence d'informatique 2004-2005 Examen Programmation orientée objet Juin 2005 Licence d'informatique 2004-2005 Examen Programmation orientée objet Juin 2005 Durée de l'épreuve : 2 heures TRÈS IMPORTANT : respectez l'ordre des questions. La lisibilité sera un critère important pour

Plus en détail

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. Encapsulation L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. La visibilité dépend des membres : certains membres peuvent être visibles et d'autres

Plus en détail

Esnard Aurélien cours de Java ENSERB informatique. Sommaire

Esnard Aurélien cours de Java ENSERB informatique. Sommaire Sommaire Avertissement : Le présent cours fait référence à la version 1.2 de Java, aussi appelé Java 2. Sommaire 1 Sommaire 2 Chapitre 1 Les bases du langage Java 5 Les données 5 Les primitives 5 Table

Plus en détail

6.1 Une classe simple pour représenter des comptes bancaires

6.1 Une classe simple pour représenter des comptes bancaires Chapitre 6 Héritage Ce chapitre du cours traite de concepts relatifs à la programmation objet (hiérarchie de classe, héritage, extension, masquage) et sera illustré par un exemple de représentation de

Plus en détail

Utilisation d objets : String et ArrayList

Utilisation d objets : String et ArrayList Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Environnement algorithmique et conventions

Environnement algorithmique et conventions 1 Environnement algorithmique et conventions Un algorithme est un maillon de la chaîne de développement d une application. Il est le lien indispensable entre l analyse et le développement final. Ce chapitre

Plus en détail

Une classe est une sorte de type de données définie par le programmeur Variables peuvent être de type classe

Une classe est une sorte de type de données définie par le programmeur Variables peuvent être de type classe Classe, Objet Variables locales Niveaux de visibilité (Encapsulation) Attributs et Méthodes Statiques Surcharge des Méthodes Transmission des Paramètres Paquetage Classes pour les types de base POO 1 Une

Plus en détail

Types de données en Java, comparaison avec Caml

Types de données en Java, comparaison avec Caml Types de données en Java, comparaison avec Caml par Denis Monasse, Lycée Louis le Grand 9 mai 2001 1 Les types élémentaires En Java, on dispose bien entendu des types élémentaires habituels : entiers,

Plus en détail

Programmation en Python - Cours 2 : Premiers programmes. MPSI - Lycée Thiers

Programmation en Python - Cours 2 : Premiers programmes. MPSI - Lycée Thiers Programmation en Python - Cours 2 : Premiers programmes Diverses utilisations de python Utilisation en mode interactif Ecriture d un programme python Utilisation en mode interactif Ecriture d un programme

Plus en détail

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5 UNIVERISTE MOHAMMED PREMIER Faculté des Sciences d Oujda Oujda - Maroc Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5 Pr. El Mostafa DAOUDI Département de Mathématiques

Plus en détail

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page

Plus en détail

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

Principes de la programmation impérative

Principes de la programmation impérative Séquence d instructions Variables et types Types élaborés Procédures, arguments Gestion de la mémoire Langage compilé, interprété Principes de la programmation impérative Séquence d instructions Variables

Plus en détail

Algorithmique et Programmation (1/3)

Algorithmique et Programmation (1/3) Algorithmique et Programmation (1/3) Objectifs : Approfondir l'algorithmique abordée au premier semestre : nouveaux types de données (énumérations, types composés), algorithmes de recherche, algorithmes

Plus en détail

DS Java 1. 19 novembre 2005

DS Java 1. 19 novembre 2005 DS Java 1 19 novembre 2005 Durée : 2 heures. Documents (notes et polycopiés) autorisés. La rigueur et la propreté seront prises en compte dans l évaluation. Le barème est indicatif. Vous rédigerez vos

Plus en détail

Chapitre 10. Les interfaces Comparable et Comparator 1

Chapitre 10. Les interfaces Comparable et Comparator 1 Chapitre 10: Les interfaces Comparable et Comparator 1/5 Chapitre 10 Les interfaces Comparable et Comparator 1 1 Ce chapitre a été extrait du document "Objets, Algorithmes, Patterns" de [René Lalement],

Plus en détail

Contrôle sur papier. INF441 Modex Programmation efficace juin 2010. 1. Photo de dés

Contrôle sur papier. INF441 Modex Programmation efficace juin 2010. 1. Photo de dés Contrôle sur papier INF441 Modex Programmation efficace juin 2010 1. Photo de dés Plusieurs dés ont été lancés sur une table, et une photo a été pris de haut. Cette photo est représentée par une matrice.

Plus en détail