La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde COURS 2 : Programmation impérative Résumé du cours précédent.

Présentations similaires


Présentation au sujet: "1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde COURS 2 : Programmation impérative Résumé du cours précédent."— Transcription de la présentation:

1

2 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde COURS 2 : Programmation impérative Résumé du cours précédent

3 2 Accès aux attributs des objets : OID versus this Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde this:Domino d4: Domino m1 = 2 m2 = 5 Vision externe Vision interne En dehors de lobjet, on utilise lobjet Dans lobjet, on "est" lobjet classe MainDominos +$ main(String[]) classe Domino m1 : int m2 : int +Domino(int,int) +Domino(int) +Domino() += public $ = static

4 3 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Classes et objets simples : VISION EXTERNE classe MainDominos Quand le code en cours dexécution se trouve Un domino m1 = 2 m2 = 5 Un domino m1 = 3 m2 = 4 d2 d4 Vision externe += public $= static

5 4 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Classes et objets simples: VISION INTERNE classe Domino m1 : int m2 : int Quand le code en cours dexécution se trouve Dominos déjà construits m1 = 3 m2 = 4 Vision interne += public

6 5 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Résumé des classes et objets vus en TD Classes & Objets = ATTRIBUTS + CONSTRUCTEURS classe Domino m1 : int m2 : int +Domino(int,int) +Domino(int) +Domino() classe Livre titre : String auteur : String editeur : String nbPages : int isbn : ISBN +Livre(String,String,String, int,ISBN) classe ISBN groupeA : int groupeB : int groupeC : String groupeD : String +ISBN(int,int,String,Strin g) un domino m1 = 2 m2 = 5 un livre titre = "Fourmis sans ombre" auteur = "Maurice COYAUD" editeur= "Phébus" nbPages = 320 isbn : ObjRéf ( ) un isbn groupeA = 2 groupeB = groupeC = "017" groupeD = "6" d1 l1 Objet en dépendance dun livre

7 6 un livre titre = ObjRéf auteur = ObjRéf editeur= ObjRéf nbPages = 320 isbn : ObjRéf un isbn groupeA = 2 groupeB = groupeC = ObjRéf groupeD = ObjRéf Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Classes&Objets = ATTRIBUTS + CONSTRUCTEURS classe Livre titre : String auteur : String editeur : String nbPages : int isbn : ISBN +Livre(String,String,String,int,ISBN) classe ISBN groupeA : int groupeB : int groupeC : String groupeD : String +ISBN(int,int,String,String) l1 6 objets en dépendance dun livre 5 String un string "Maurice COYAUD" un string "017" un string "6" un string "Phébus" un string "Fourmis sans ombre" 1 ISBN

8 7 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

9 8 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Classes&objets : PEUT MIEUX FAIRE ! ils ne contiennent que des attributs valués et les constructeurs capables de les initialiser classe Domino m1 : int m2 : int +Domino(int,int) +Domino(int) +Domino() mais le paradigme Orienté-Objet va bien plus loin que cela :

10 9 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Classes&objets : PEUT MIEUX FAIRE ! Prenons un exemple (vu en TD) : La méthode : public static boolean estDouble(Domino d) (écrite dans la classe MainDominos) teste si le domino fourni en paramètre est un double et renvoie un booléen en conséquence. classe MainDominos +$ main(String[]) { test1(); } +$ test1() { Domino d4 = new Domino(3,4); if ( estDouble(d4) ) { // faire quelque chose... } +$ boolean estDouble(Domino d) { return ( d.m1 == d.m2 ); } Dans ce paradigme, on préfèrera penser que le domino est lui- même le mieux placé pour « savoir » sil est ou non un double ! cette méthode nest pas à sa place en Orienté-Objet !

11 10 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Classes&objets : COMMENT FAIRE MIEUX ? classe MainDominos +$ main(String[]) { test1(); } +$ test1() {...} +$ boolean estDouble(Domino d) { return ( d.m1 == d.m2 ); } classe Domino m1 : int m2 : int +Domino(int,int) +Domino(int) +Domino() +estDouble(): boolean le paramètre « d » a disparu ! la déclaration « static » ( $ ) a disparu !

12 11 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Classes&objets : COMMENT FAIRE MIEUX ? Finalement, nous pouvons écrire la méthode et son invocation : classe MainDominos +$ main(String[]) { test1(); } +$ test1() { Domino d4 = new Domino(3,4); } classe Domino m1 : int m2 : int +Domino(int,int) +Domino(int) +Domino() public boolean estDouble(){ } Ici, linvocation de la méthode peut maintenant être effectuée sur la base de la référence externe au domino (cest la seule chose dont dispose la méthode test1() – on doit utiliser la notation pointée) return ( == ); this.m1 this.m2 emploi de « this » if ( ) { // faire quelque chose... } d4.estDouble() invocation de la méthode sur la base de la référence à un domino (ici, d4)

13 12 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde classe MainDominos +$ main(String[]) { test1(); } +$ test1() { Domino d4 = new Domino(3,4); if ( ) { // faire quelque chose... } classe Domino m1 : int m2 : int +Domino(int,int) +Domino(int) +Domino() public boolean estDouble(){ } return ( == ); this.m1 this.m2 invocation de la méthode mise à jour de « this » exécution de la méthode Maintenant « this » réfère à d4 Et ce nest quensuite que Java exécute la méthode dans sa classe propre. d4.estDouble()

14 13 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Classes&objets : METHODES dINSTANCE Autres exemples de méthodes dinstance pour la classe Domino : classe MainDominos +$ main(String[]) { test1(); } +$ test1() { Domino d4 = new Domino(3,4); } classe Domino m1 : int m2 : int +Domino(int,int) +Domino(int) +Domino() +estDouble() : boolean public String dominoToString(){ } public int valeur() { } if (d4.estDouble() ) { // afficher le domino } return "("+this.m1+","+this.m2+")"; if (d4.valeur() > 5){ // afficher le domino System.out.println( d4.dominoToString()); } return this.m1 + this.m2; System.out.println( d4.dominoToString()); Quelques invocations de méthodes dinstance de la classe Domino Méthodes dinstance de la classe Domino

15 14 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Classes&objets : METHODES dINSTANCE Exemple de méthode dinstance avec un paramètre : classe MainDominos +$ main(String[]) { test1(); } +$ test1() { Domino d4 = new Domino(3,4); Domino d5 = new Domino(5,2); classe Domino m1 : int m2 : int +Domino(int,int) +Domino(int) +Domino() +estDouble() : boolean +dominoToString() : String +valeur() : int if ( d5.plusGrandQue(d4) ){ } // afficher le plus grand domino System.out.println( d5.dominoToString() + " est plus grand que " + d4.dominoToString() ); Il faut maintenant écrire cette méthode +plusGrandQue(Domino d) : int Par convention : d1.plusGrandQue(d2) devra retourner : +1 quand d1 est plus grand que d2, 0 quand les 2 dominos sont égaux, -1 quand d1 est plus petit que d2.

16 15 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Classes&objets : METHODES dINSTANCE Classe Domino... public int plusGrandQue(Domino d) { } if ( this.valeur() != d.valeur() ) { return (this.valeur() > d.valeur() ? +1 : -1 ); } else { if ( this.plusGrandeMarque() != d.plusGrandeMarque() ) return (this.plusGrandeMarque() > d.plusGrandeMarque() ? +1 : -1 ); else return 0 ; } Par convention : d1.plusGrandQue(d2) devra retourner : +1 quand d1 est plus grand que d2, 0 quand les 2 dominos sont égaux, -1 quand d1 est plus petit que d2. Les 2 dominos ont même valeur !Les 2 dominos ont des valeurs différentes ! La plus grande fournit le plus grand domino. Cest la plus grande marque qui fournira le plus grand domino Les 2 marques sont différentes !Ce cas ne peut arriver que lorsque les 2 dominos ont exactement les mêmes marques ou lorsque this et d sont un seul et même objet. Il restera à écrire cette méthode très simple

17 16 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Classes&objets: CONSTRUCTEURS, VARIABLES et METHODES DINSTANCE classe Domino m1 : int m2 : int +Domino(int,int) +Domino(int) +Domino() Classes & Objets = VARIABLES DINSTANCES (=ATTRIBUTS) + CONSTRUCTEURS + METHODES DINSTANCES +dominoToString(): String +estDouble(): boolean +valeur() : int +plusGrandQue(Domino d) : int +plusGrandeMarque() : int CONSTRUCTEURS METHODES DINSTANCE Cest de cette manière que les objets et leurs classes doivent être conçus dans le paradigme Orienté-Objet. VARIABLES DINSTANCE ATTRIBUTS ou ETAT En Orienté-Objet, un objet est vu comme une entité qui encapsule un état interne (ensemble des valeurs des var. dinst.) et qui fournit des services (méth. dinst.) par rapport à cet état.

18 17 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Classes&objets: CONSTRUCTEURS, VARIABLES et METHODES DINSTANCE classe Domino m1 : int m2 : int +Domino(int,int) +Domino(int) +Domino() classe Book (anglicisée) title : String autor : String editor : String nbPages : int isbn : ISBN +Book(String,String,String, int,ISBN) classe ISBN (anglicisée) groupA : int groupB : int groupC : String groupD : String +ISBN(int,int,String,String) +dominoToString(): String +estDouble(): boolean +valeur(): int +plusGrandQue(Domino d): int +plusGrandeMarque(): int +bookToString(): String +hasAutor(String firstname, String lastname): boolean +isFrancophone(): boolean +isEditedBy (String): boolean +isEditedBy(int): boolean +isbnToString(): String +isFrancophone(): boolean +isEditedBy (int): boolean classe MainDominos et classe MainBooks +$main(String[]): void +$test1(): void +$test2(): void FIRST NAME : prénom / LAST NAME : nom de famille / MIDDLE NAMES : autres prénoms

19 18 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

20 19 Conventions de nommage : variables, méthodes, classes Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java pose un certain nombre de conventions pour lécriture du code et en particulier pour le nommage des entités En JAVA Classe Variable ou constante dinstance Méthode dinstance Variable « static » Constantes « static » Méthode « static » MAJUSCULE en début de nom TOUJOURSJAMAIS Minuscule en début de nom JAMAISTOUJOURS JAMAISTOUJOURS TOUT en MAJUSCULE POSSIBLEJAMAIS TOUJOURSJAMAIS Le respect de ces conventions facilite lapprentissage de Java et notamment celui des librairies standards associées

21 20 Conventions de nommage : préfixes de méthodes Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Conventions pour le nommage des méthodes : En JAVAPréfixes de METHODESExemples de noms de METHODES Méthode renseignant sur létat dun objet et retournant un booléen « PREDICAT » is has isDouble(), isEmpty(), isEditedBy( ),... hasAutor( ),... Méthode retournant une partie de létat dun objet sans le modifier « GETTER » get getMark1(), getTitle(), getEditorName(),... Méthode modifiant une partie de létat dun objet « SETTER » set setMark1( ), setTitle( ), setEditorName( ),... Le respect de ces conventions facilite la lisibilité du code et donc la maintenance des programmes par des équipes tierces

22 21 Plus à propos de Java (JDK, JRE,...) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde « SDK » est le sigle de « Java Development Kit » publié par Sun Microsystem ®. Il comprend : – le compilateur Java (javac), – la machine virtuelle java (java), – un générateur de documentation (javadoc), – un compresseur de classes Java (jar), – les librairies standards de Java en code source (packages java, javax,...) ainsi que le JRE et de nombreux autres outils. « JRE » est le sigle pour « Java Runtime Environment » ; cest la version exécutable minimale qui doit être installée sur une machine pour faire tourner des applications Java.

23 22 Le « garbage collector »* de Java Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Le Garbage Collector est un processus dont lexécution est « parallèle » à celle de lapplication Java. * « Garbage collector » signifie littéralement « collecteur d'ordures » ; on parle aussi de « ramasse miettes » mais, ici, cela prend le sens de « nettoyage de lespace mémoire ». Chaque application Java est lancée dans un processus. Le ramasse miette en est un au même titre que notre programme. Rq: si on lance plusieurs programmes Java sur une machine, cela lance plusieurs machines virtuelles Java (une pour chaque programme) et donc également un GC pour chacune delles. Rôle du GC: Le GC permet de nettoyer lespace mémoire utilisé par la machine virtuelle Java. Pourquoi doit-on nettoyer lespace mémoire ? Le nettoyage en question concerne les espaces de la mémoire qui ont été utilisés MAIS qui ne servent plus au programme.

24 23 Le « garbage collector » de Java Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde +$ main(String[] args) { test1(); test2(); } +$ test1() { Livre l1 = new Book( "Fourmis sans ombre", "Maurice COYAUD", "Phébus", 320, new ISBN(2, 85940, "017", "6") ); } +$ test2() { Domino[] miniJeu = { new Domino(0,0), new Domino(0,1), new Domino(0,2) }; } 1 ISBN1 Book3 Domino3 String2 String 1 Domino[ ] a) Dénombrons les objets instanciés dans ce programme (12 au total) 1 String[ ] b) Envisageons lordre dexécution (avant, au début, pendant, à la fin ou après les méthodes) c) Simulons lexécution tout en dénombrant, au moment considéré, les objets existants (NbE) et ceux dentre eux qui ne sont plus accessibles par le programme (NbNA) n° étapeNbE NbNA (+7)0 1 (-7)7 (+7) (+4)7 1 (-4)11 (+4) 0 (-1)12 (+1) Tout objet devenu inaccessible au programme sera, tôt ou tard, détruit par le GC.

25 24 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Acta est fabula* * « La pièce est jouée. » On annonçait ainsi la fin de la représentation dans le théâtre antique.


Télécharger ppt "1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde COURS 2 : Programmation impérative Résumé du cours précédent."

Présentations similaires


Annonces Google