if224 - programmation orientée objet en java - filière see

29
Objet Classe Paquetage ( package ) IF224 - Programmation orient´ ee objet en Java - Fili` ere SEE 3 e eance 1 / 29

Upload: others

Post on 18-Jun-2022

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

IF224 - Programmation orientee objet en Java -Filiere SEE

3eseance

1 / 29

Page 2: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Objet

Un langage oriente objet doit fournir des mecanismes pour :

instanciation : new Jauge(10,3)

Affectation/initialisation d’une variable avec une instance.

declencher une action sur un objet : envoi de messages(� passing messages �) :

vo id uneMethode ( P o s i t i o n pos ) {pos . e s t A s s i s ( ) ;

}

Une variable n’est pas un objet mais elle reference un objet. Unevariable n’est pas instanciee mais declaree en precisant son type.Un envoi de message se fait sur l’objet reference par la variable. Lecompilateur verifie la validite du message sur le type de la variable.

2 / 29

Page 3: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

objetReponse feuille 3

Trois classes representent les chaınes de caracteres :

String : objet constant (chaıne literale ”Cela marche hehe”)

StringBuffer : objet modifiable, une instance est utilisable dansplusieurs threads a la fois.

StringBuilder : objet modifiable, une instance est utilisable dansune seule thread (pas de controle de plusieurs accessimultanes).

Une instance de Jauge est modifiable et une instance de Position estconstante.

Quelle est la consequence d’avoir des objets constants ?

3 / 29

Page 4: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

objetReponse feuille 3

L’operateur + s’applique sur des instances de la classe String. Ilpermet de concatener ces chaınes de caracteres constantes(chaınes litterales) dans une nouvelle instance de String :”\t\t Youpi” + ”Cela marche hehe”.

Pour obtenir une instance de StringBuffer a partir d’une instanceString, il faut qu’il existe un constructeur de StringBuffer avec unparametre de type String.

Surcharge de la methode println :System.out. println (”\t\t Youpi” + ”Cela marche hehe”).Le resultat de l’operateur + est de type String, le compilateurselectionne la methode println ( String ).

4 / 29

Page 5: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

objetvariable et objet

le mot-cle final dans la declaration suivante :

f i n a l S t r i n g B u f f e r c h a i n e = new S t r i n g B u f f e r ( ”un p e t i t ” ) ;

C’est la variable ou l’objet qui est constant ?

1) c h a i n e . append ( ” exemple ” ) ; // provoque une e r r e u r ?

2) c h a i n e = new S t r i n g B u f f e r ( ) ; // provoque une e r r e u r ?

5 / 29

Page 6: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

La suite du portage

Developper les deux classes PassagerStandard et Autobus (en utilisantdes instances de Position et Jauge).

Voir le repertoire 4-Autobus-PassagerStandard et la feuille deTD.

6 / 29

Page 7: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

La classe

La construction classe

7 / 29

Page 8: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

La classe

Une classe est un moule qui decrit le quoi : la specification desmessages qui peuvent etre envoyes a l’objet ; et le comment : lamaniere de realiser cette specification.

Une classe concrete est une classe dont la realisation/mise enœuvre (le comment) est complete. Une classe concrete peut doncetre instancier.

Elle contient des variables d’instance, des methodes d’instances etdes constructeurs.

Exemple de classes concretes : Position , Jauge, Autobus,PassagerStandard.

8 / 29

Page 9: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

La classe

[ p u b l i c ] c l a s s ClasseResume {

[ p u b l i c / p r i v a t e ] [ f i n a l ] t y p e v a r i a b l e I n s t a n c e[= i n i t i a l i s a t i o n ] ;

[ p u b l i c / p r i v a t e ] t y p e m e t h o d e I n s t a n c e ( [ p a r a m e t r e s ] ) {t y p e v a r i a b l e L o c a l e [= i n i t i a l i s a t i o n ] ;// . . .

}

// c o n s t r u c t e u r[ p u b l i c / p r i v a t e ] C lasseResume ( [ p a r a m e t r e s ] ) {

// i n i t i a l i s a t i o n des v a r i a b l e s d ’ i n s t a n c ev a r i a b l e I n s t a n c e = unParametre ;

}}

9 / 29

Page 10: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Masquage d’information et portee.

Rappel objectif

Eviter la propagation des modifications dues a la variation de larealisation/mise en œuvre.La modification du code doit rester locale.

Nous cherchons a masquer l’information sur la realisation au codeclient.

Le masquage utilise le mecanisme de portee des identificateurs.

La portee determine la visibilite/l’utilisation d’un identificateurdans le code source.Ou est-il permis d’utiliser un identificateur dans le code source ?

10 / 29

Page 11: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Masquage d’information et portee

En Java, il y a plusieurs portees disponibles :

portee publique (mot-cle public), l’identificateur est accessiblepar un code ecrit en dehors de la classe ;

portee privee (mot-cle private), l’identificateur est accessibleuniquement par le code contenu dans la classe.

portee paquetage (sans mot-cle, par defaut), l’identificateurest accessible par l’ensemble des classes du paquetage.

Les portees peuvent etre appliquees aux attributs, methodes etconstructeurs d’une classe.

11 / 29

Page 12: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

PorteeExemples

p u b l i c c l a s s Autre {p u b l i c i n t v a l e u r ;

p r i v a t e vo id uneMethode ( ) { }

Autre ( ) { }}

c l a s s Exemple {p u b l i c vo id uneMethode ( ) { }

Jauge maJauge ;

p r i v a t e Exemple ( ) { }}

12 / 29

Page 13: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Masquage d’information et portee

Le principe de masquage des attributs

Afin de respecter l’encapsulation, tous les attributs d’un objetdoivent etre declares prives.Seules les methodes sont accessibles a l’exterieur de la classe.

La documentation des classes montre la partie publique c’est a direl’utilisation (l’interface d’utilisation) des instances. Par exemplevoir la documentation des classes Position , Jauge, PassagerStandard,Autobus.

13 / 29

Page 14: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Diagrammes UML

La realisation des instances est montree par des diagrammes UML :

diagramme de sequence pour repondre a la question : Quel estl’enchaınement des envois de messages entre les objet ?

diagramme de classes pour repondre a la question : Questocke un objet ?

14 / 29

Page 15: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Variable d’instanceExemples

c l a s s P o s i t i o n {p r i v a t e f i n a l i n t DEHORS = 1 ;// . . .

p r i v a t e f i n a l i n t COURANT; // i n t t y p e de base// . . .

}

c l a s s Exemple {Exemple ( ) {

P o s i t i o n pos = new P o s i t i o n ( ) ; // v a r i a b l e l o c a l e}

p r i v a t e Jauge maJauge ; // v a r i a b l e d ’ i n s t a n c e}

15 / 29

Page 16: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Variable d’instance

� C’est une variable locale a chaque instance. Sa valeur eststockee dans la zone memoire de l’instance.

� Son initialisation peut-etre donnee a sa declaration mais depreference dans le code d’un constructeur.

� Le mot-cle final devant la definition d’une variable corresponda une variable constante Une seule initialisation n’est possiblepour cette variable ; soit a la declaration, soit dans leconstructeur.

16 / 29

Page 17: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Methode d’instanceExemples

c l a s s Jauge {// . . .p u b l i c boolean e s t V e r t ( ) {

r e t u r n v a l e u r >= 0 && ! estRouge ( ) ;}

p u b l i c vo id i n c r e m e n t e r ( ) {v a l e u r ++;

}// . . .p r i v a t e i n t v a l e u r ;// . . .

}

17 / 29

Page 18: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Methode d’instance

� Une methode d’instance s’applique a une instance. Il existedeux categories de methode :

1 methode d’acces, ou accesseur (accessor) → Elle donne desinformations sur l’etat des attributs. (estVert ())

2 methode d’alteration ou modificateur (mutator) → Ellemodifie l’etat des attributs. (incrementer())

En Java, un objet contant n’a aucune methode d’alteration. C’estune propriete de l’encapsulation decrite dans la classe (comme laclasse Position)

18 / 29

Page 19: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Methode d’instance

� Certains envois de messages sont communs a tous les objets(par exemple l’egalite et la copie).

Ces methodes d’instances sont definies dans la classejava . lang .Object comme equals (), copy() toString (), getClass ()...

Souvent, il faut les adapter a chaque realisation (les redefinir� override � dans chaque classe).

Difference entre l’operateur == et la methode equals ().

19 / 29

Page 20: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Methode d’instance

� Le mecanisme de surcharge (overloading) autorise plusieursmethodes a porter le meme nom.Le choix de la methode se fait a la compilation en fonction dela liste de parametres (pas sur le type de retour). (voir lesmethodes println ())

� Le mot-cle this designe/reference l’instance qui vient derecevoir le message.Le mot cle this permet de passer l’instance qui vient derecevoir le message en parametre d’une methode.

20 / 29

Page 21: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Methode d’instanceLe mot-cle this

c l a s s P o s i t i o n {// . . .p u b l i c boolean e s t D e h o r s ( ) {

r e t u r n COURANT == DEHORS;}

p u b l i c boolean e s t I n t e r i e u r ( ) {r e t u r n ! e s t D e h o r s ( ) ;

}// . . .

}

L’identificateur COURANT designe la variable d’instance de l’objetqui vient de recevoir l’appel a la methode estDehors().

L’appel a la methode estDehors() se fait sur l’objet qui vient derecevoir l’appel a la methode estInterieur ().

21 / 29

Page 22: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Methode d’instanceLe mot-cle this

Il faut donc comprendre le code de cette maniere :

c l a s s P o s i t i o n {p r i v a t e f i n a l i n t DEHORS = 1 ;// . . .p r i v a t e f i n a l i n t COURANT;// . . .p u b l i c boolean e s t D e h o r s ( ) {

r e t u r n t h i s .COURANT == t h i s .DEHORS;}

p u b l i c boolean e s t I n t e r i e u r ( ) {r e t u r n ! t h i s . e s t D e h o r s ( ) ;

}

p u b l i c P o s i t i o n d e h o r s ( ) {r e t u r n new P o s i t i o n ( t h i s .DEHORS ) ;

}// . . .}

22 / 29

Page 23: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

ConstructeurExemples

c l a s s Jauge {p r i v a t e i n t v a l e u r ;p r i v a t e f i n a l i n t MAX;

p u b l i c Jauge ( i n t max , i n t d e p a r t ) {v a l e u r = d e p a r t ;

MAX = max ;}// . . .

}

23 / 29

Page 24: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

ConstructeurExemples

c l a s s P o s i t i o n {p r i v a t e f i n a l i n t DEHORS = 1 ;p r i v a t e f i n a l i n t ASSIS = 2 ;p r i v a t e f i n a l i n t DEBOUT = 3 ;

p r i v a t e f i n a l i n t COURANT;

p u b l i c P o s i t i o n ( ) {COURANT = DEHORS;

}

p r i v a t e P o s i t i o n ( i n t e ) {COURANT = e ;

}// . . .

}

24 / 29

Page 25: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)

Masquage d’information et portee.Variable d’instanceMethode d’instanceConstructeur

Constructeur

� Un constructeur n’est pas une methode. Il est uniquementappele a l’instanciation. Son code assure la bonneinitialisation des variables d’instance.

� Le constructeur prend le nom de la classe. Il n’a pas de type deretour. Attention avec un type de retour, c’est une methode.

� La surcharge des constructeurs est autorisee.

Si une classe ne contient pas de constructeur, le compilateur Javaajoute un constructeur publique sans parametre avec un corps vide(designe par le terme constructeur par defaut).

25 / 29

Page 26: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)Utilisation d’une classe d’un paquetage.

Paquetage Java (� package �)

Les paquetages permettent de regrouper les classes par thematique(cela correspond aux bibliotheques en langage C). Un paquetagecorrespond a un domaine de nom : le nom d’une classe est uniquedans un paquetage.

Une classe est identifee par son nom complet incluant les noms depaquetage (nom en minuscule et caractere . comme separateur).Exemple de nom complet :

j a v a . i o . P r i n t W r i t e rj a v a . l a n g . S t r i n gJava . u t i l . V e c t o rj a v a x . swing . b o r d e r . Border

La portee paquetage est la portee par defaut des classes,methodes, constructeurs et attributs.

26 / 29

Page 27: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)Utilisation d’une classe d’un paquetage.

Paquetage JavaUtilisation d’une classe d’un paquetage.

Une classe n’est accessible en dehors de son paquetage que si elleest declaree de portee publique.A l’exterieur de son paquetage, il faut utiliser son nom complet al’exception des classes du paquetage java . lang.∗ (comme la classeString).Exemple la classe java . util .Vector qui represente un tableaudynamique.

j a v a . u t i l . Vector<Jauge> v j ;v j = new j a v a . u t i l . Vector<Jauge >(10) ;v j . add ( 0 , new Jauge ( 1 0 , 0 ) ) ;

Sur cette exemple, l’instruction import java. util .Vector; placee audebut du fichier source, permet de designer la classe uniquementpar Vector dans le reste du fichier.

27 / 29

Page 28: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)Utilisation d’une classe d’un paquetage.

Paquetage JavaJava Collection Framework

La classe java . util .Vector fait partie une classe du Java CollectionFramework qui est inclu dans le paquetage java . util de l’A.P.I.Java.Ce framework fournit un ensemble de structures de donnees(nomme Collection ) et un moyen de parcourir de les parcourir(nomme Iterator ).

Ces classes sont parametrees (syntaxe <E>) par le type deselements contenu dans la structure de donnees.A l’utilisation de ces classes, il faut donc preciser le type (effectif)des elements.Ainsi, le compilateur verifie si l’element ajoute correspond bien autype effectif et genere une erreur sinon.

28 / 29

Page 29: IF224 - Programmation orientée objet en Java - Filière SEE

ObjetClasse

Paquetage (� package �)Utilisation d’une classe d’un paquetage.

Paquetage JavaJava Collection Framework

La methode iterator () fournit une instance d’un iterateur sur lastructure de donnees.

//En debut de f i c h i e rimport j a v a . u t i l . V e c t o r ;import j a v a . u t i l . I t e r a t o r ;// . . .Vector<Jauge> v j = new Vector <>(10);v j . add (new Jauge ( 1 0 , 0 ) ) ;

I t e r a t o r <Jauge> i t = v j . i t e r a t o r ( ) ;whi le ( i t . hasNext ( ) ) {

Jauge j = i t . n e x t ( ) ;j . i n c r e m e n t e ( ) ;

}// ou avec l a b o u c l e f o r s i m p l i f i e e ‘ ‘ f o r−each ’ ’f o r ( Jauge j : v j ) {

j . i n c r e m e n t e ( ) ;}

29 / 29