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

Save this PDF as:
 WORD  PNG  TXT  JPG

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

Langage C notes de cours

Langage C notes de cours Langage C notes de cours K. El Omari IUT GTE, UPPA 1 Présentation générale 1.1 Introduction La programmation par le langage C (ainsi que par d autres langages dit compilés) est basée sur : 1. la rédaction

Plus en détail

Premiers exemples de traitements

Premiers exemples de traitements #include #include Premiers exemples de traitements void main() float b(0.0); float c(0.0); float delta(0.0); cin >> b >> c; delta = b*b - 4*c; if (delta < 0.0) cout

Plus en détail

Programmation orientée objet TP 1 Prise en main de l environnement Java

Programmation orientée objet TP 1 Prise en main de l environnement Java Programmation orientée objet TP 1 L2 MPCIE Prise en main de l environnement Java Exercice 1 Nous désirons développer un programme pour la gestion (très simplifiée) d'un parc de véhicules destinés à la

Plus en détail

CCI - Initiation à Java. E.Coquery emmanuel.coquery@liris.cnrs.fr

CCI - Initiation à Java. E.Coquery emmanuel.coquery@liris.cnrs.fr CCI - Initiation à Java E.Coquery emmanuel.coquery@liris.cnrs.fr Présentation du langage Outline 1 Présentation du langage 2 Types de données primitifs 3 Objets Présentation du langage Un langage orienté

Plus en détail

ISMIN 1A Programmation 1 : Examen de programmation C. Réponses. Partie 1. Questions ouvertes

ISMIN 1A Programmation 1 : Examen de programmation C. Réponses. Partie 1. Questions ouvertes ISMIN 1A Programmation 1 : Examen de programmation C Réponses Partie 1. Questions ouvertes 1. Soit la déclaration suivante, char tab[] = "". Que contient le tableau tab? Réponse : tab[0] = \0. tab est

Plus en détail

CHAPITRE 3 : Types de base, Opérateurs et Expressions

CHAPITRE 3 : Types de base, Opérateurs et Expressions CHAPITRE 3 : Types de base, Opérateurs et Expressions 1. Types simples Un type définit l'ensemble des valeurs que peut prendre une variable, le nombre d'octets à réserver en mémoire et les opérateurs que

Plus en détail

Fascicule de Génie Electrique (Terminale S option SI)

Fascicule de Génie Electrique (Terminale S option SI) Le langage C Ressource Centre d intérêt CI10 : Traitement de Thématique I11 - Les systèmes numériques : Mise en œuvre d un microcontrôleur avec des composants logiciels réutilisables. 1 Les constantes

Plus en détail

1. Base de connaissance du langage C# 2. Initiation de l environnement de développement 3. Exercices

1. Base de connaissance du langage C# 2. Initiation de l environnement de développement 3. Exercices Sihao DENG sihao.deng@utbm.fr http://deng.sihao.perso.sfr.fr/mn41 1. Base de connaissance du langage C# 2. Initiation de l environnement de développement 3. Exercices Langage C Références: http://deng.sihao.perso.sfr.fr/mn41/lo11.pdf

Plus en détail

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

Procédures et fonctions

Procédures et fonctions Chapitre 5 Procédures et fonctions 5.1 Introduction Considérons le programme suivant, dont le but est d inverser les éléments d un tableau : public class InversionTableau1 { int t[]= {8, 2, 1, 23; Terminal.ecrireStringln("Tableau

Plus en détail

3 Lien entre pointeurs et tableaux.

3 Lien entre pointeurs et tableaux. programme sont dit dynamiques. On se limite ici aux tableaux statiques à une seule dimension, analogue aux vecteurs manipulés en mathématiques. Ils se déclarent sous la forme : type_d_élément variable_tableau[taille];

Plus en détail

Expressions, types et variables en Python

Expressions, types et variables en Python Expressions, types et variables en Python 2015-08-26 1 Expressions Les valeurs désignent les données manipulées par un algorithme ou une fonction. Une valeur peut ainsi être : un nombre, un caractère,

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

Programmation Répartie - Langage C

Programmation Répartie - Langage C frederic.guinand@univ-lehavre.fr IUT Le Havre Plan les bases quelques rappels de langage C les structures de contrôle conditionnelles les structures de contrôle itératives les tableaux les pointeurs les

Plus en détail

LE LANGAGE C ADAPTÉ AU MICROCONTRÔLEURS

LE LANGAGE C ADAPTÉ AU MICROCONTRÔLEURS LE LANGAGE C ADAPTÉ AU MICROCONTRÔLEURS 1. PRÉSENTATION. Le langage C a fait son apparition en 1972 pour le développement du système d exploitation Unix. Il est devenu un standard de la norme ANSI en 1983.

Plus en détail

TP Interface graphique et C++ numéro 1

TP Interface graphique et C++ numéro 1 TP Interface graphique et C++ numéro 1 Master IGC - 1 re année année 2010-2011 Ce premier TP a pour objectif de vous familiariser avec le compilateur C++, les entréessorties du langage et l utilisation

Plus en détail

Tableaux. Tableaux en Java (introduction)

Tableaux. Tableaux en Java (introduction) en Java (introduction) Avertissement : ce cours ne présente qu une version «édulcorée» des tableaux. Ne sont abordés que les tableaux de types primitifs et tous les aspects «objets» sont masqués. Philippe

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

Introduction à la Programmation 1

Introduction à la Programmation 1 Introduction à la Programmation 1 Séance 5 de cours/td Université Paris-Diderot Objectifs: Boucles while. Variables booléennes. 1 La boucle while Boucle non bornée [Cours] La boucle non bornée permet de

Plus en détail

Généralités Composants élémentaires d'un programme Instructions simples. JL Damoiseaux - Dpt R&T

Généralités Composants élémentaires d'un programme Instructions simples. JL Damoiseaux - Dpt R&T JAVA - I Généralités Composants élémentaires d'un programme Instructions simples 2 JAVA? Un langage de programmation (orienté objets) Une architecture basée sur une Machine Virtuelle Un ensemble très important

Plus en détail

PROB Introduction au langage JAVA

PROB Introduction au langage JAVA PROB Introduction au langage JAVA EPFC ULB 1 BACHELIER en INFORMATIQUE de Gestion PRMT(1) 120p. LAPR(2) 120p. PR(1) PROB(10) 120p. PR(1) PRDV(4) 40p. PR(2 ou 9) COFI(20) 60p. GBDR(5) 120p. LAOG(9) 120p.

Plus en détail

Université Mohammed Premier Année universitaire 2012-2013

Université Mohammed Premier Année universitaire 2012-2013 Université Mohammed Premier Année universitaire 2012-2013 Faculté des Sciences Filière SMI Département de Mathématiques Module : POO Java et d Informatique Semestre : S5 Responsable du cours : El Mostafa

Plus en détail

BAT 4 Polytech Nice. Cours Environnement Logiciel puis Internet, Services et Réseaux en BAT4. Vérification des effectifs, Appel Sur EDT

BAT 4 Polytech Nice. Cours Environnement Logiciel puis Internet, Services et Réseaux en BAT4. Vérification des effectifs, Appel Sur EDT BAT 4 Polytech Nice Cours Environnement Logiciel puis Internet, Services et Réseaux en BAT4 Vérification des effectifs, Appel Sur EDT Une consigne : prenez des notes pendant les cours! Les supports ne

Plus en détail

Java : Programmation Impérative

Java : Programmation Impérative 1 Java : Programmation Impérative Résumé du cours précédent (I11) Paradigme impératif Algorithmique simple Découpage fonctionnel Qu est-ce qu un programme informatique? / un langage de programmation? /

Plus en détail

Plan. Conseils de Programmation. Types et Classes. Exemple: fraction. Méthodes. Variables locales:

Plan. Conseils de Programmation. Types et Classes. Exemple: fraction. Méthodes. Variables locales: Plan Conseils de Programmation Joël Quinqueton Dépt MIAp, UFR IV UPV Université Montpellier III Types et classes Un exemple de classe Les erreurs en Java L héritage en Java Types primitifs Tableaux Classes:

Plus en détail

Cours d informatique. 1 ère année 2014 2015

Cours d informatique. 1 ère année 2014 2015 Cours d informatique en Langage C è 1 ère année 2014 2015 L informatique à l IOGS 1A : Langage C : apprentissage d un langage de programmation structuré 3 séances Matlab : analyse numérique 2A : Langage

Plus en détail

Introduction à la Programmation 1

Introduction à la Programmation 1 Introduction à la Programmation 1 Séance 7 de cours/td Université Paris-Diderot Objectifs: Savoir écrire un programme en entier (structure du programme avec une procédure main et des déclarations de fonctions,

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

Ioannis Parissis UFR IMA Laboratoire LIG. Test logiciel

Ioannis Parissis UFR IMA Laboratoire LIG. Test logiciel Test logiciel Objectif et plan du du cours Présenter les concepts de base sur le test logiciel Introduire des techniques simples pour construire des tests A partir de la spécification informelle du programme

Plus en détail

Organisation des données et structures de stockage

Organisation des données et structures de stockage ING2 - ING3 Nvx 2009-2010 Organisation des données et structures de stockage I. Stockage de l information en C Ce chapitre rappelle brièvement et complète certaines notions de base vues en première année

Plus en détail

C++ / MC-II1 - Cours n o 3 Allocation Mémoire et Constructeurs

C++ / MC-II1 - Cours n o 3 Allocation Mémoire et Constructeurs C++ / MC-II1 - Cours n o 3 Allocation Mémoire et Constructeurs Sebastien.Kramm@univ-rouen.fr IUT GEII Rouen 2010-2011 S. Kramm (IUT Rouen) MCII1 - Cours 3 2010-2011 1 / 47 Sommaire 1 Rappels de C et définitions

Plus en détail

Types de données et objets

Types de données et objets Types de données et objets VL A D Y RA V E L O M A N A N A Licence 1 S2 Université Denis Diderot (P7). vlad@liafa.jussieu.fr LIAFA Bureau 6A13. 175, rue Chevaleret Ravelomanana Vlady Types de données et

Plus en détail

NFA032 Programmation objet avec Java

NFA032 Programmation objet avec Java NFA032 Programmation objet avec Java CNAM-Paris-Île-de-France Première session 2013 (sujet bis) Documents et calculatrice interdits. Le barème est donné à titre indicatif. Exercice 1 : programmation objet

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

Cours C++ Lorsque je lance Dev C++, il apparaître l'écran ci-contre.

Cours C++ Lorsque je lance Dev C++, il apparaître l'écran ci-contre. Cours C++ Définition : Le langage C est un langage de programmation inventé par MM. Kernighan et Ritchie au début des années 70. Au début des années 90, Bjarne Stroustrup fait évoluer le langage vers le

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

C.P.G.E - Meknès Langage Python 3 Haouati Abdelali

C.P.G.E - Meknès Langage Python 3 Haouati Abdelali 3. Langage Python 3 2 a. Introduction Présentation du langage Python : Python est un langage portable, dynamique, extensible, gratuit, qui permet (sans l imposer) une approche modulaire et orientée objet

Plus en détail

Eléments du langage. Eléments du langage PHP. Variables. Variables

Eléments du langage. Eléments du langage PHP. Variables. Variables Eléments du langage Eléments du langage PHP Séparation des instructions Comme en C, C++, Perl, les instructions doivent être séparées par un point virgule. Les commentaires // Ceci est un commentaire sur

Plus en détail

GL / C++ Chapitre 7. Lien Dynamique Méthodes Virtuelles

GL / C++ Chapitre 7. Lien Dynamique Méthodes Virtuelles GL / C++ Chapitre 7 Lien Dynamique Méthodes Virtuelles 1. Pointeur sur un objet d'une classe dérivée Considérons les classes écrites précédemment : Personne Etudiant // dérive de personne Salarie // dérive

Plus en détail

Déclaration et Implémentation d'une classe

Déclaration et Implémentation d'une classe Définir et Instancier une classe en Java Déclaration et Implémentation d'une classe En algorithmique (comme en C++ la plupart du temps), l'écriture du corps des méthodes (implémentation) se fait après

Plus en détail

Javascript : les bases du langage

Javascript : les bases du langage Javascript : les bases du langage Technologies du Web 1 Jean-Christophe Routier Licence 1 SESI Université Lille 1 Université Lille 1 - Licence 1 SESI Technologies du Web 1 1 Javascript présentation partielle,

Plus en détail

Introduction au langage

Introduction au langage Introduction au langage Un langage de programmation : de haut niveau interprété orienté objet si on le souhaite rapide à écrire et proche du pseudo-code simple tant qu on fait des choses simples Un programme

Plus en détail

Cours 8 : Exceptions, un peu de graphique

Cours 8 : Exceptions, un peu de graphique 1 Cours 8 : Exceptions, un peu de graphique 1. Traiter les exceptions usuelles 2. Créer ses propres exceptions 3. Exemples: les files. 4. Quelques éléments sur les graphiques 2 Exceptions Une exception

Plus en détail

II Les éléments de base du langage JavaScript

II Les éléments de base du langage JavaScript II Les éléments de base du langage JavaScript Comme dans tous les langages de programmation, il est important de pouvoir stocker des valeurs, d effectuer des opérations, des tests, des boucles Le Javascript

Plus en détail

Programmation : Exercices

Programmation : Exercices Programmation : Exercices IUT de Villetaneuse R&T 1 ère année Laure Petrucci 6 novembre 2007 1 Premiers programmes Exercice 1.1 : Machine à dessiner On souhaite écrire un programme pour afficher des dessins.

Plus en détail

Corrigé des exercices sur les tableaux

Corrigé des exercices sur les tableaux Corrigé des exercices sur les tableaux Exercice 4.1.1 tableau d entiers Dans cet exercice, on va travailler avec un tableau d entiers initialisé : int[] tab = {12, 15, 13, 10, 8, 9, 13, 14; Question 1

Plus en détail

USTL - Licence ST-A 1ère année 2005-2006 Initiation à la programmation. CTD : Variables et types de données

USTL - Licence ST-A 1ère année 2005-2006 Initiation à la programmation. CTD : Variables et types de données USTL - Licence ST-A 1ère année 2005-2006 Initiation à la programmation 1 Motivation 1.1 Un problème CTD : Variables et types de données État initial : Tas 1 un nombre quelconque de cartes, les autres tas

Plus en détail

Web & XML. Evaluation 1/2. ENSEIRB Programmation Web / XML. Version 1.00 du 19 décembre 2012 Etat : Travail SOPRA GROUP. Page 1/9

Web & XML. Evaluation 1/2. ENSEIRB Programmation Web / XML. Version 1.00 du 19 décembre 2012 Etat : Travail SOPRA GROUP. Page 1/9 Web & XML ENSEIRB Programmation Web / XML Evaluation 1/2 Version 1.00 du 19 décembre 2012 Etat : Travail SOPRA GROUP Page 1/9 Historique : Version Date Origine de la mise à jour Rédigée par Validée par

Plus en détail

ULCO-L1-Algo1-CM : Initiation à l algorithmique avec le langage C++

ULCO-L1-Algo1-CM : Initiation à l algorithmique avec le langage C++ ULCO-L1-Algo1-CM : Initiation à l algorithmique avec le langage C++ Table des matières 1 Généralités 3 1.1 Définitions/Glossaire....................................... 3 1.2 Exemples d algorithmes de la

Plus en détail

Epreuve de Programmation Orientée Objet 2ème année de Licence Informatique

Epreuve de Programmation Orientée Objet 2ème année de Licence Informatique Epreuve de Programmation Orientée Objet 2ème année de Licence Informatique 1er juin 2007 Durée : 3 heures. Seule la documentation des classes java.util.list et java.util.arraylist distribuée est autorisée.

Plus en détail

Analyse de la complexité algorithmique (1)

Analyse de la complexité algorithmique (1) Analyse de la complexité algorithmique (1) L analyse de la complexité telle que nous l avons vue jusqu à présent nous a essentiellement servi à déterminer si un problème est ou non facile (i.e. soluble

Plus en détail

La programmation Impérative par le Langage C

La programmation Impérative par le Langage C La programmation Impérative par le Langage C 1. Introduction 1.1 Qu est-ce que la programmation impérative? Un programme est constitué de plusieurs lignes d instructions. Chaque instruction permet d effectuer

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

STANDARD DE PROGRAMMATION C++ (version pour 007, 2006-10-23)

STANDARD DE PROGRAMMATION C++ (version pour 007, 2006-10-23) STANDARD DE PROGRAMMATION C++ (version pour 007, 2006-10-23) 1. GÉNÉRALITÉS 1.1 Identification des fichiers Les noms de fichiers doivent être significatifs. Cependant, pour simplifier l'affichage dans

Plus en détail

Fiche de révisions - Algorithmique

Fiche de révisions - Algorithmique Fiche de révisions - Algorithmique Rédigé par : Jimmy Paquereau 1. Généralités Algorithme : un algorithme est la description d une procédure à suivre afin de résoudre un problème donné. Il n est pas nécessairement

Plus en détail

Chapitre 1 Introduction

Chapitre 1 Introduction Chapitre 1 Introduction Jean Privat Université du Québec à Montréal INF7330 Construction de logiciels Diplôme d études supérieures spécialisées en systèmes embarqués Automne 2012 Jean Privat (UQAM) 01

Plus en détail

Algorithmique et programmation : les bases (C) Corrigé

Algorithmique et programmation : les bases (C) Corrigé PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Cours C, Semaine 1 mai juin 2006 Corrigé Résumé Ce document décrit l écriture dans le langage C des éléments vus en algorithmique. Table des matières 1 Pourquoi

Plus en détail

Programmation objet en Java.

Programmation objet en Java. Programmation objet en Java. Didier Rémy 2001-2002 http://cristal.inria.fr/ remy/mot/7/ http://www.enseignement.polytechnique.fr/profs/informatique/didier.remy/mot/7/ Cours Exercices Slide 1 1. Classes,

Plus en détail

Python langage de programmation

Python langage de programmation Initiation à la programmation avec Python langage de programmation Valérie Bellynck (2009), d après un diaporama d Alain Bozzi (2008), lui-même venant de celui de Bob Cordeau (2008) 1 Langage de Programmation

Plus en détail

ENSTA IN204 Introduction à JAVA

ENSTA IN204 Introduction à JAVA Ecole Nationale Supérieure de Techniques Avancées (ENSTA) -http://www.ensta.fr ENSTA IN204 Introduction à JAVA Olivier Sigaud LIP6/AnimatLab olivier.sigaud@lip6.fr 01.44.27.88.53 Ce document est mis à

Plus en détail

Système M1. Chapitre 3 : Gérer la communication et la synchronisation inter-tâches. J.-F. Pradat-Peyre & E Hyon

Système M1. Chapitre 3 : Gérer la communication et la synchronisation inter-tâches. J.-F. Pradat-Peyre & E Hyon Chapitre 3 : Gérer la communication et la synchronisation inter-tâches 1 Plan du cours Introduction aux problèmes de synchronisation Exemple de problèmes Section critique et verrous Exclusion Mutuelle

Plus en détail

Programmation sous Python

Programmation sous Python Erwan Biland Lycée Chateaubriand - BCPST 1C Année scolaire 2014-2015 Objects du Utilisation de la console (shell ) Python calculatrice Fichier machin.py Manipulation des variables Création/affectation,

Plus en détail

Variables, types simples, expressions et instructions simples

Variables, types simples, expressions et instructions simples 2.2 - Chap. 05 Variables, types simples, expressions et instructions simples 1 / 5 Variables, types simples, expressions et instructions simples 1 Variable de types simples 1.1 Notion de variable Une variable

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

Introduction au Logiciel GAMS (General Algebraic Modeling System)

Introduction au Logiciel GAMS (General Algebraic Modeling System) Introduction au Logiciel GAMS (General Algebraic Modeling System) J.-M. Reneaume SOMMAIRE A. INTRODUCTION... 1 B. DESCRIPTION DU MODELE... 3 1. Structure générale du modèle... 3 a) Structure du fichier

Plus en détail

Cours 1. Contenu du cours : " Premières applications. " Compilation, Exécution, Chemin. " Affichage et saisie. " Types de données. " Flux de contrôle

Cours 1. Contenu du cours :  Premières applications.  Compilation, Exécution, Chemin.  Affichage et saisie.  Types de données.  Flux de contrôle Cours 1 1 Contenu du cours : " Premières applications " Compilation, Exécution, Chemin " Affichage et saisie " Types de données " Flux de contrôle " Applets " Arrays " OO de base Edition Le fichier texte

Plus en détail

Exceptions. Fiabilité d un logiciel. Fiabilité en Java. Erreurs/exceptions. Localisation du traitement des erreurs/exceptions.

Exceptions. Fiabilité d un logiciel. Fiabilité en Java. Erreurs/exceptions. Localisation du traitement des erreurs/exceptions. Fiabilité d un logiciel Exceptions Université Française d Egypte Version O 5.7 5/10/15 Richard Grin Robustesse : fonctionne correctement, même en présence d événements exceptionnels Correction : donne

Plus en détail

Initiation à la Programmation avec Java Semestre 1-2008/2009. Compte rendu final du Projet

Initiation à la Programmation avec Java Semestre 1-2008/2009. Compte rendu final du Projet Initiation à la Programmation avec Java Semestre 1-2008/2009 Compte rendu final du Projet Jean-Baptiste Leprêtre Groupe Y1 Chargé de TD : Fabienne Thomarat 1 SOMMAIRE : I) Cahier des Charges II) Analyse

Plus en détail

Examen 1 ère session 2012-2013 page 1 NFA 031 - Programmation JAVA Formation CNAM

Examen 1 ère session 2012-2013 page 1 NFA 031 - Programmation JAVA Formation CNAM Examen 1 ère session 2012-2013 page 1 NFA 031 - Programmation JAVA IPST-CNAM Programmation JAVA NFA 001 Mercredi 13 Février 2013 Avec document Durée : 2 h30 Enseignant : LAFORGUE Jacques 1 ère Session

Plus en détail

Prendre un bon départ

Prendre un bon départ Chapitre A Prendre un bon départ 1 - Avant-propos Un ordinateur sait très bien faire deux choses : Calculer, d oùle nomcomputer en anglais que l on pourrait traduire par calculateur. Placer des données

Plus en détail

Introduction au langage C - types et variables

Introduction au langage C - types et variables Chapitre 2 Introduction au langage C - types et variables 1 Le Langage C Le langage C est un langage de bas niveau dans le sens où il permet l accès à des données que manipulent les ordinateurs (bits,

Plus en détail

Système et Programmation (en C)

Système et Programmation (en C) Système et Programmation (en C) ENSTA - TC 1ère année François Pessaux U2IS 2015-2016 francois.pessaux @ ensta-paristech.fr Introduction François Pessaux IN102 Système et Programmation (en C) 2/31 But

Plus en détail

Static. static. USTL http://www.lifl.fr/ routier 1

Static. static. USTL http://www.lifl.fr/ routier 1 Static static USTL http://www.lifl.fr/ routier 1 Static 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

Plus en détail

PLAN DU COURS ENTRÉE SORTIE FONCTION PRINTF. Fonction de la bibliothèque stdio.h. Affichage d'un texte:

PLAN DU COURS ENTRÉE SORTIE FONCTION PRINTF. Fonction de la bibliothèque stdio.h. Affichage d'un texte: PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, Tableaux, opérateurs Entrées sorties de base Structures de contrôle Algorithmes de recherche Algorithmes de

Plus en détail

Apprendre à développer un site web avec PHP et MySQL Exercices pratiques et corrigés (3ième édition)

Apprendre à développer un site web avec PHP et MySQL Exercices pratiques et corrigés (3ième édition) Introduction 1. Objectif de l'ouvrage 15 2. Fonctionnement d un site web 16 Utilisation d EasyPHP 1. Introduction 19 2. Installation d'easyphp 20 3. Prise en main d EasyPHP 20 4. Création d une première

Plus en détail

Les exceptions en java

Les exceptions en java 1/12 Les exceptions en java 2/12 C'est quoi une exception? Une exception est un événement (une erreur) qui se produit lors de l'exécution d'un programme, et qui va provoquer un fonctionnement anormal (par

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

DUT Informatique Module JAVA Apprentis Département Informatique 2008 / 2009. Travaux Pratiques n o 2 : JUnit

DUT Informatique Module JAVA Apprentis Département Informatique 2008 / 2009. Travaux Pratiques n o 2 : JUnit iut ORSAY DUT Informatique Département Informatique 2008 / 2009 Travaux Pratiques n o 2 : JUnit Nom(s) : Groupe : Date : Objectifs : Apprendre à vérifier une implantation à l aide de tests unitaires sous

Plus en détail

Logiciel de statistiques pour le Volley-ball

Logiciel de statistiques pour le Volley-ball Lucas society Logiciel de statistiques pour le Volley-ball Partie Modèle Anthony 13 Table des matières I) Préambule...2 1) Motivation...2 2) Contrainte...2 II) Introduction...3 1) Le travail en équipe...3

Plus en détail

BAT 4 Polytech Nice. Le langage C#: Concepts fondamentaux. BAT 4 Introduction programmation C# page 1

BAT 4 Polytech Nice. Le langage C#: Concepts fondamentaux. BAT 4 Introduction programmation C# page 1 BAT 4 Polytech Nice Le langage C#: Concepts fondamentaux BAT 4 Introduction programmation C# page 1 Le langage C#: Plan Plan de séance Comprendre les éléments fondamentaux Types primitifs Variables Constantes

Plus en détail

Analyse lexicale 2014-2015

Analyse lexicale 2014-2015 Analyse (lexicale, syntaxique) L3 MIAGE Analyse lexicale Université de Lille, France 2014-2015 1 Rappels Rôle de l analyse lexicale Outils 2 Mise en oeuvre Lexème Vers l analyseur syntaxique Codage d un

Plus en détail

PHP 5.4 Développez un site web dynamique et interactif

PHP 5.4 Développez un site web dynamique et interactif Introduction 1. Objectif de l'ouvrage 9 2. Bref historique de PHP 10 3. Où se procurer PHP? 10 4. Conventions d'écriture 12 Vue d'ensemble de PHP 1. Qu'est-ce que PHP? 13 2. Structure de base d'une page

Plus en détail

Corrigé des exercices sur les tableaux à deux dimensions

Corrigé des exercices sur les tableaux à deux dimensions Corrigé des exercices sur les tableaux à deux dimensions Exercice 4.3.1 Tableau de vente On va considérer un tableau à deux dimensions qui regroupe les informations relatives aux ventes de voitures dans

Plus en détail

PHP INTRODUCTION STEFAN DU CHÂTEAU 08/08/2015

PHP INTRODUCTION STEFAN DU CHÂTEAU 08/08/2015 PHP INTRODUCTION STEFAN DU CHÂTEAU 08/08/2015 GENERALITEES LANGUAGE INTERPRETE LANGUAGE INTERPRETE DU COTE DU SERVEUR LANGUAGE TRES UTILISE DANS LES TECHNOLOGIES DU WEB UTILISATION AVEC HTML, JAVASCRIPT,

Plus en détail

TP Mock. On veut modéliser un jeu de casino : le jeu de la boule.

TP Mock. On veut modéliser un jeu de casino : le jeu de la boule. TP Mock Pour faire ce TP il faut récupérer la "bibliothèque" mockito-all-x.x.x.jar. Vous pouvez la trouver à partir de https://code.google.com/p/mockito/downloads/list (pour mockito- 1.9.5.zip). Anciennement

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

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

Initiation à la programmation

Initiation à la programmation Initiation à la programmation 1 re partie Ce cours est largement inspiré de "Informatique et sciences du numérique"-gilles DOWEK(Eyrolles) Nous avons vu, par ailleurs, qu un ordinateur peut effectuer des

Plus en détail

Objets Avancées Semestre 3 Année 2015-2016. Projet

Objets Avancées Semestre 3 Année 2015-2016. Projet Conception et Programmation IUT d Aix-Marseille Dép. INFO Aix Objets Avancées Semestre 3 Année 2015-2016 Projet André Abramé - andre.abrame@univ-amu.fr Sophie Nabitz - sophie.nabitz@univ-avignon.fr Petru

Plus en détail

Introduction à l algorithmique et à la programmation 2013-2014. Cyril Nicaud Cyril.Nicaud@univ-mlv.fr. Cours 1 / 5

Introduction à l algorithmique et à la programmation 2013-2014. Cyril Nicaud Cyril.Nicaud@univ-mlv.fr. Cours 1 / 5 Introduction à l algorithmique et à la programmation IUT 1ère année 2013-2014 Cyril Nicaud Cyril.Nicaud@univ-mlv.fr Cours 1 / 5 Déroulement du cours Organisation : 5 séances de 2h de cours 10 séances de

Plus en détail

Langage C. E. Boucharé

Langage C. E. Boucharé Langage C E. Boucharé Table des Matières Introduction.............................................................................. 1 Chapitre 1. Les types de données de C....................................................

Plus en détail

Programmation Orientée Objet - Licence TIS CM2/9

Programmation Orientée Objet - Licence TIS CM2/9 Programmation Orientée Objet - Licence TIS CM2/9 Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.fr Poitiers, le 13/01/2006 1 2 3 4 5 Rappel sur la séance précédente La fois précédente, nous avons

Plus en détail

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

Université de Bourgogne - UFR Sciences et Technique - Programmation objet - LPSIL - 2013 Nom : Prénom : Contrôle continu n 4 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

Plus en détail

Exceptions. Qu est ce qu un cas exceptionnel? Principe : détecter le maximum d erreurs à la compilation, mais... pas toujours possible

Exceptions. Qu est ce qu un cas exceptionnel? Principe : détecter le maximum d erreurs à la compilation, mais... pas toujours possible Programmation Orientée Objet Jean-Christophe Routier Licence mention Informatique Université Lille Principe : détecter le maximum d erreurs à la compilation, mais pas toujours possible Gestion des erreurs

Plus en détail

Cours HTML/PHP. Cours HTML/PHP. E.Coquery. emmanuel.coquery@liris.cnrs.fr

Cours HTML/PHP. Cours HTML/PHP. E.Coquery. emmanuel.coquery@liris.cnrs.fr Cours HTML/PHP E.Coquery emmanuel.coquery@liris.cnrs.fr Pages Web Pages Web statiques Principe de fonctionnement : L utilisateur demande l accès à une page Web depuis son navigateur. Adresse tapée, clic

Plus en détail

Chapitre 1. 1.1 types primitifs. 1.2 Casting

Chapitre 1. 1.1 types primitifs. 1.2 Casting Chapitre 1 Généralités 1.1 types primitifs byte (1 octet) peut contenir les entiers entre -128 et +127. short (2 octets) contient les entiers compris entre -32768 et +32767. int (4 octet) va de -2*10e9

Plus en détail

Programmation Orientée Objet Java

Programmation Orientée Objet Java Programmation Orientée Objet Java Bertrand Estellon Département Informatique et Interactions Aix-Marseille Université 29 octobre 2015 Bertrand Estellon (DII AMU) Programmation Orientée Objet Java 29 octobre

Plus en détail

Corrigé des exercices sur les fonctions (suite)

Corrigé des exercices sur les fonctions (suite) Corrigé des exercices sur les fonctions (suite) Exercice 5.2.1 somme des carrés Ecrire une fonction qui calcule la somme des n premiers carrés 1 2 +2 2 +...+n 2. class Exo9_1{ static int npremierscarres(int

Plus en détail

Ch1 : Eléments de base du langage C

Ch1 : Eléments de base du langage C Ch1 : Eléments de base du langage C Fathi Mguis Atelier de programmation 1 LFSI1/LARI1 A.U : 2014-2015 Plan 1 Généralités 2 Avantages 3 Structure d un programme en C 4 Les diverse phases d un programme

Plus en détail

if (condition) et ==,!=, <, > (opérateurs logiques de comparaison)

if (condition) et ==,!=, <, > (opérateurs logiques de comparaison) if (condition) et ==,!=, (opérateurs logiques de comparaison) L'instruction if ("si" en français), utilisée avec un opérateur logique de comparaison, permet de tester si une condition est vraie, par

Plus en détail