23
Objet Classe Paquetage ( package ) PG214 - Programmation orient´ ee objet en Java - Fili` ere RSI 3 e eance 1 / 23

PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

  • Upload
    others

  • View
    18

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

ObjetClasse

Paquetage (� package �)

PG214 - Programmation orientee objet en Java -Filiere RSI

3eseance

1 / 23

Page 2: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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 / 23

Page 3: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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 / 23

Page 4: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

ObjetClasse

Paquetage (� package �)

objetReponse feuille 3

L’operateur + :

permet de concatener deux chaınes de caracteres.

sur des instances de la classe String permet de concatener lesdeux chaınes de caracteres.

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 / 23

Page 5: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

ObjetClasse

Paquetage (� package �)

objetvariable et objet

le mot-cle final dans la declaration suivante :

f i n a l Autobus r o s s i n a n t e = new Autobus ( 1 0 , 2 0 ) ;

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

1) r o s s i n a n t e . a l l e r A r r e t S u i v a n t ( ) ; // provoque une e r r e u r ?

2) r o s s i n a n t e = new Autobus ( 5 0 , 5 ) ; // provoque une e r r e u r ?

5 / 23

Page 6: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

ObjetClasse

Paquetage (� package �)

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

Une 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 variables d’instance, methodes d’instances etconstructeurs.

Exemple de classes concretes : Position Jauge, et les deux classes acompleter Autobus PassagerStandard,

6 / 23

Page 7: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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 ?

7 / 23

Page 8: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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.

8 / 23

Page 9: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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 ( ) { }}

9 / 23

Page 10: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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.

10 / 23

Page 11: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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 type 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}

11 / 23

Page 12: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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.

12 / 23

Page 13: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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 ;// . . .

}

13 / 23

Page 14: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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)

14 / 23

Page 15: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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 ().

15 / 23

Page 16: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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.

16 / 23

Page 17: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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 ().

17 / 23

Page 18: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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 ) ;

}// . . .}

18 / 23

Page 19: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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 ;}// . . .

}

19 / 23

Page 20: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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 ;

}// . . .

}

20 / 23

Page 21: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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).

21 / 23

Page 22: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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.

22 / 23

Page 23: PG214 - Programmation orientée objet en Java - Filière RSI...PG214 - Programmation orient ee objet en Java - Fili ere RSI 3es eance ... StringBuilder: objet modi able, une instance

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(exception les classes du paquetage java . lang.∗)

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 (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.

23 / 23