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

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

Embed Size (px)

Citation preview

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

1

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

COURS 2 : Programmation impérative

Résumé du cours précédentRésumé du cours précédent

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

2Accès aux attributs des objets : OID versus this

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

this:Domino

d4: Domino

m1 = 2m2 = 5

Visionexterne

Visioninterne

En de

hors

de l’

obje

t,on

util

isel’o

bjet

Dan

sl’o

bjet

,on

"es

t"

l’obj

et

classe MainDominos

+$ main(String[])

classe Domino

m1 : intm2 : int

+Domino(int,int)+Domino(int)+Domino()

+ = public$ = static

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

3

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes et objets simples : VISION EXTERNE

classe MainDominos

Quand le code en cours d’exécution se trouve

Un domino

m1 = 2m2 = 5

Un domino

m1 = 3m2 = 4

d2d4

Visionexterne

+ = public$ = static

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

4

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes et objets simples: VISION INTERNE

classe Domino

m1 : intm2 : int

Quand le code en cours d’exécution se trouve

Dominos déjà construits

m1 = 3m2 = 4

Visioninterne

+ = public

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

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 : intm2 : int

+Domino(int,int)+Domino(int)+Domino()

classe Livre

titre : Stringauteur : Stringediteur : StringnbPages : intisbn : ISBN

+Livre(String,String,String,int,ISBN)

classe ISBN

groupeA : intgroupeB : intgroupeC : StringgroupeD : String

+ISBN(int,int,String,String)

un domino

m1 = 2m2 = 5

un livre

titre = "Fourmis sans ombre"auteur = "Maurice COYAUD"

editeur= "Phébus"nbPages = 320

isbn : ObjRéf (<ISBN>)

un isbn

groupeA = 2groupeB = 85940groupeC = "017"groupeD = "6"

d1 l1Objet <ISBN> en

dépendance d’un livre

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

6

un livre

titre = ObjRéfauteur = ObjRéfediteur= ObjRéfnbPages = 320isbn : ObjRéf

un isbn

groupeA = 2groupeB = 85940groupeC = ObjRéfgroupeD = ObjRéf

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes&Objets = ATTRIBUTS + CONSTRUCTEURS

classe Livre

titre : Stringauteur : Stringediteur : StringnbPages : intisbn : ISBN

+Livre(String,String,String,int,ISBN)

classe ISBN

groupeA : intgroupeB : intgroupeC : StringgroupeD : String

+ISBN(int,int,String,String)

l1 6 objets en dépendance d’un livre

5 String

un string

"Maurice COYAUD"

un string

"017"

un string

"6"

un string

 "Phébus"

un string

"Fourmis sans ombre"

1 ISBN

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

7Objectifs de ce cours (I21)

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Maintenant !Maintenant !

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

8

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes&objets : PEUT MIEUX FAIRE !

ils ne contiennent que des attributs valuéset les constructeurs capables de les initialiser

classe Domino

m1 : intm2 : int

+Domino(int,int)+Domino(int)+Domino()

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

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 » s’il est ou non un

double !

cette méthode n’est pas à sa place en Orienté-Objet !

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

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 : intm2 : int

+Domino(int,int)+Domino(int)+Domino()

+estDouble(): boolean

① le paramètre « d »a disparu !

② la déclaration « static » ($) a disparu !

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

11

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes&objets : COMMENT FAIRE MIEUX ?

classe MainDominos

+$ main(String[]) { test1(); }

+$ test1() {

Domino d4 = new Domino(3,4);

}

classe Domino

m1 : intm2 : int

+Domino(int,int)+Domino(int)+Domino()

public boolean estDouble(){ }

② Ici, l’invocation de la méthode peut maintenant être effectuée sur la base de la référence externe au domino (c’est 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éthodesur la base de la référence à

un domino (ici, d4)

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

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 : intm2 : 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 n’est qu’ensuite que Java exécute la méthode dans sa classe propre.

d4.estDouble()

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

13

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes&objets : METHODES d’INSTANCE

classe MainDominos

+$ main(String[]) { test1(); }

+$ test1() { Domino d4 = new Domino(3,4);

}

classe Domino

m1 : intm2 : 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 d’instance de la classe Domino

Méthodes d’instancede la classe Domino

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

14

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes&objets : METHODES d’INSTANCE

classe MainDominos

+$ main(String[]) { test1(); }

+$ test1() { Domino d4 = new Domino(3,4); Domino d5 = new Domino(5,2);

classe Domino

m1 : intm2 : int

+Domino(int,int)+Domino(int)+Domino()

+estDouble() : boolean+dominoToString() : String+valeur() : int

if ( d5.plusGrandQue(d4) ){

}

// afficher le plus grand dominoSystem.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.

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

15

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes&objets : METHODES d’INSTANCE

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.

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

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

16

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes&objets: CONSTRUCTEURS, VARIABLES et METHODES D’INSTANCE

classe Dominom1 : intm2 : int

+Domino(int,int)+Domino(int)+Domino()

Classes & Objets = VARIABLES D’INSTANCES (=ATTRIBUTS)+ CONSTRUCTEURS + METHODES D’INSTANCES

+dominoToString(): String+estDouble(): boolean+valeur() : int+plusGrandQue(Domino d) : int+plusGrandeMarque() : int

CONSTRUCTEURS

METHODESD’INSTANCE

C’est de cette manière que les objets et leurs classes

doivent être conçus dans le paradigme Orienté-Objet.

VARIABLESD’INSTANCE

ATTRIBUTS ou ETAT

En Orienté-Objet, un objet est vu comme une entité qui encapsule un état interne (ensemble des valeurs des var. d’inst.) et qui fournit des services (méth. d’inst.)

par rapport à cet état.

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

17

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes&objets: CONSTRUCTEURS, VARIABLES et METHODES D’INSTANCE

classe Dominom1 : intm2 : int

+Domino(int,int)+Domino(int)+Domino()

classe Book (anglicisée)

title : Stringautor : Stringeditor : StringnbPages : intisbn : ISBN

+Book(String,String,String,int,ISBN)

classe ISBN (anglicisée)

groupA : intgroupB : intgroupC : StringgroupD : 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 MainDominoset classe MainBooks

+$main(String[]): void+$test1(): void+$test2(): void

FIRST NAME : prénom / LAST NAME : nom de famille / MIDDLE NAMES : autres prénoms

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

18Objectifs de ce cours (I21)

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Maintenant !Maintenant !

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

19Conventions 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 codeet en particulier pour le nommage des entités

En JAVA ClasseVariable

ou constanted’instance

Méthoded’instance

Variable« static »

Constantes« static »

Méthode« static »

MAJUSCULEen début de nom

TOUJOURS JAMAIS JAMAIS JAMAIS JAMAIS JAMAIS

Minusculeen début de nom

JAMAIS TOUJOURS TOUJOURS TOUJOURS JAMAIS TOUJOURS

TOUT en MAJUSCULE

POSSIBLE JAMAIS JAMAIS JAMAIS TOUJOURS JAMAIS

Le respect de ces conventions facilite l’apprentissage de Javaet notamment celui des librairies standards associées

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

20Conventions de nommage : préfixes de méthodes

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Conventions pour le nommage des méthodes :

En JAVA Préfixes de METHODES Exemples de noms de METHODES

Méthode renseignant sur l’état d’un objet

et retournant un booléen

« PREDICAT »

is

has

isDouble(), isEmpty(),isEditedBy(<that editor>), ...

hasAutor(<that autor>), ...

Méthode retournant une partie de l’état d’un

objet sans le modifier

« GETTER »get

getMark1(),getTitle(),

getEditorName(), ...

Méthode modifiant une partie de l’état d’un

objet

« SETTER »set

setMark1(<new mark>),setTitle(<new title>),

setEditorName(<new name>), ...

Le respect de ces conventions facilite la lisibilité du codeet donc la maintenance des programmes par des équipes tierces

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

21Plus à 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 » ; c’est la version exécutable minimale qui doit être installée sur une machine pour faire tourner des applications Java.

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

22Le « garbage collector »* de Java

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Le Garbage Collector est un processus dont l’exécution est « parallèle » à celle de l’application Java.

* « Garbage collector » signifie littéralement « collecteur d'ordures » ; on parle aussi de « ramasse miettes » mais, ici, cela prend le sens de « nettoyage de l’espace 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 d’elles.

Rôle du GC:Le GC permet de nettoyer l’espace mémoire utilisé par la machine virtuelle Java.

Pourquoi doit-on nettoyer l’espace 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.

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

23Le « 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 ISBN

1 Book

3 Domino

3 String

2 String

1 Domino[ ]

a) Dénombrons les objets instanciés dans ce programme (12 au total)

⑦ ⑧

1 String[ ]

b) Envisageons l’ordre d’exécution (avant, au début, pendant, à la fin ou après les méthodes)

c) Simulons l’exécution tout en dénombrant, au moment considéré, les objets existants (NbE) et ceux d’entre eux qui ne sont plus accessibles par le programme (NbNA)

n° étape NbE NbNA ① 1 0 ② 1 0 ③ 8 (+7) 0 ④ 1 (-7) 7 (+7) ⑤ 1 7 ⑥ 5 (+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.

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

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.