• Aucun résultat trouvé

LU2IN002 PREMIER OBJET

N/A
N/A
Protected

Academic year: 2022

Partager "LU2IN002 PREMIER OBJET"

Copied!
32
0
0

Texte intégral

(1)

LU2IN002

PREMIER OBJET

Vincent Guigue & Christophe Marsala

(2)

Philosophie

Diviser un programme complexe en objets:

objet autonome: réutilisable dans plusieurs projets Vecteurs, Personne, MoteurGraphique...

objetsécurisé: garantie de bon usage par d’autre

un objet intègre desdonnées et desméthodespour les manipuler proprement, les transactions bancaires sont journalisées, les éléments d’une simulation physique ne se téléportent pas...

objetsimple & intuitif: le client ne voit que ce qui est nécessaire Enjeux:

Réfléchir en amontau découpage & à la sécurisation

Documenterle code (en premier lieu, respecter les conventions pour faciliter la compréhension)

(3)

Encapsulation = vue interne + vue externe

Objet

données

données

données Vérification des entrées/sorties

Barrière de sécurisation

=

encapsulation

(4)

Encapsulation = vue interne + vue externe

Point

I/O:

- construction - accès en lecture - translation...

Barrière de sécurisation

=

encapsulation

double x double y

(5)

Encapsulation = vue interne + vue externe

Point de vue fournisseur :

Point

I/O:

- construction - accès en lecture - translation...

Barrière de sécurisation

= encapsulation

double x double y

Nouveau fichier, nouvelle classe Point.java

Comment construire un objet?

e.g. J’attends 2 valeurs réelles je mets à jourxety

Comment établir un dialogue (IO)?

je définis une méthode pour observerx je réfléchis à la manière de modifierxet y

Accès direct

Addition, soustraction, ...

(6)

Encapsulation = vue interne + vue externe

Point de vue client :

Point

I/O:

- construction - accès en lecture - translation...

Barrière de sécurisation

= encapsulation

double x double y

Nouveau type de variable int i; Point p;

Comment construire un objet?

Je donne 2 valeurs réelles + syntaxe p = new Point(1.2, 3.1);

Comment dialoguer?

J’utilise le. pour accéder à l’interface de l’objet:

p.getX();

(7)

Encapsulation = vue interne + vue externe Point de vue client :

Point

I/O:

- construction - accès en lecture - translation...

Barrière de sécurisation

= encapsulation

double x double y

Nouveau type de variable int i; Point p;

Comment construire un objet?

Je donne 2 valeurs réelles + syntaxe p = new Point(1.2, 3.1);

Comment dialoguer?

J’utilise le. pour accéder à l’interface de l’objet:

p.getX();

⇒De l’extérieur, je ne me demande pas comment marche l’objet

Trivial sur unPoint... Mais imaginons la même chose avec une classe Image

(8)

Syntaxe: signature et attributs

1 Fichier: 1 classe = 1 fichier

nom de la classe + .java = nom du fichier marquer l’encapsulation, faciliter la ré-utilisation le nom de classe commence par une majuscule

2 Signature: une classe est toujours public(en LU2IN002)

3 Déclaration des attributs:

Répondre à : De quoi est composé notre objet?

Les attributs sont presque toujoursprivate(cf plus loin) nom des attributs en minuscules

4 Définir des méthodes

Comment construire un objet?

Quelles opérations effectuer sur l’objet? nom des méthode en minuscules

1 // C r e a t i o n du f i c h i e r P o i n t . java

2 p u b l i c c l a s s P o i n t { // c l a s s e p u b l i q u e

3 p r i v a t e d o u b l e x , y ; // a t t r i b u t s p r i v e s

(9)

Syntaxe: signature et attributs

1 Fichier: 1 classe = 1 fichier

nom de la classe + .java = nom du fichier marquer l’encapsulation, faciliter la ré-utilisation le nom de classe commence par une majuscule

2 Signature: une classe est toujours public(en LU2IN002)

3 Déclaration des attributs:

Répondre à : De quoi est composé notre objet?

Les attributs sont presque toujoursprivate(cf plus loin) nom des attributs en minuscules

4 Définir des méthodes

Comment construire un objet?

Quelles opérations effectuer sur l’objet? nom des méthode en minuscules

1 // C r e a t i o n du f i c h i e r P o i n t . java

2 p u b l i c c l a s s P o i n t { // c l a s s e p u b l i q u e

3 p r i v a t e d o u b l e x , y ; // a t t r i b u t s p r i v e s

(10)

Syntaxe: signature et attributs

1 Fichier: 1 classe = 1 fichier

nom de la classe + .java = nom du fichier marquer l’encapsulation, faciliter la ré-utilisation le nom de classe commence par une majuscule

2 Signature: une classe est toujours public(en LU2IN002)

3 Déclaration des attributs:

Répondre à : De quoi est composé notre objet?

Les attributs sont presque toujoursprivate(cf plus loin) nom des attributs en minuscules

4 Définir des méthodes

Comment construire un objet?

Quelles opérations effectuer sur l’objet? nom des méthode en minuscules

1 // C r e a t i o n du f i c h i e r P o i n t . java

2 p u b l i c c l a s s P o i n t { // c l a s s e p u b l i q u e

3 p r i v a t e d o u b l e x , y ; // a t t r i b u t s p r i v e s

(11)

Syntaxe: signature et attributs

1 Fichier: 1 classe = 1 fichier

nom de la classe + .java = nom du fichier marquer l’encapsulation, faciliter la ré-utilisation le nom de classe commence par une majuscule

2 Signature: une classe est toujours public(en LU2IN002)

3 Déclaration des attributs:

Répondre à : De quoi est composé notre objet?

Les attributs sont presque toujoursprivate(cf plus loin) nom des attributs en minuscules

4 Définir des méthodes

Comment construire un objet?

Quelles opérations effectuer sur l’objet?

nom des méthode en minuscules

1 // C r e a t i o n du f i c h i e r P o i n t . java

2 p u b l i c c l a s s P o i n t { // c l a s s e p u b l i q u e

3 p r i v a t e d o u b l e x , y ; // a t t r i b u t s p r i v e s

(12)

Syntaxe: constructeur

Comment construire unPoint?

Attention à considérer le problème des 2 points de vues Fournisseur

Besoin: 2 coordonnées fournies en argument Action: affectation des valeurs des attributs

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 p r i v a t e d o u b l e x , y ;

4

5 p u b l i c P o i n t (d o u b l e x2 , d o u b l e y2 ) {

6 x = x2 ;

7 y = y2 ;

8 }

9 }

Client

ie: utilisateur d’une classe Point existante... Besoin: créer une instance dans la mémoire avec les bonnes valeurs

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main

4 ( S t r i n g [ ] a r g s ) {

5 // a p p e l du c o n s t r u c t e u r

6 // a v e c d e s v a l e u r s c h o i s i e s

7 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

8 }

9 }

(13)

Syntaxe: constructeur

Comment construire unPoint?

Attention à considérer le problème des 2 points de vues Fournisseur

Besoin: 2 coordonnées fournies en argument Action: affectation des valeurs des attributs

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 p r i v a t e d o u b l e x , y ;

4

5 p u b l i c P o i n t (d o u b l e x2 , d o u b l e y2 ) {

6 x = x2 ;

7 y = y2 ;

8 }

9 }

Client

ie: utilisateur d’une classe Point existante...

Besoin: créer une instance dans la mémoire avec les bonnes valeurs

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main

4 ( S t r i n g [ ] a r g s ) {

5 // a p p e l du c o n s t r u c t e u r

6 // a v e c d e s v a l e u r s c h o i s i e s

7 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

8 }

9 }

(14)

Syntaxe: constructeur

Comment construire unPoint?

Attention à considérer le problème des 2 points de vues Fournisseur

Besoin: 2 coordonnées fournies en argument Action: affectation des valeurs des attributs

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 p r i v a t e d o u b l e x , y ;

4

5 p u b l i c P o i n t (d o u b l e x2 , d o u b l e y2 ) {

6 x = x2 ;

7 y = y2 ;

8 }

9 }

Client

ie: utilisateur d’une classe Point existante...

Besoin: créer une instance dans la mémoire avec les bonnes valeurs

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main

4 ( S t r i n g [ ] a r g s ) {

5 // a p p e l du c o n s t r u c t e u r

6 // a v e c d e s v a l e u r s c h o i s i e s

7 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

8 }

9 }

(15)

Autorisations d’accès

public: accessible / visible depuis l’extérieur de l’objet (eg : main, autre objet...) private : protégé / invisible depuis l’extérieur de l’objet

Constructeurs = publicen général: ils sont appelés depuis l’extérieur Attributs = private en général, ils sont protégés et non accessibles depuis l’extérieur

Fournisseur

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 private d o u b l e x , y ;

4

5 public P o i n t (d o u b l e x2 , d o u b l e y2 ) {

6 x = x2 ;

7 y = y2 ;

8 }

9 }

Client

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main

4 ( S t r i n g [ ] a r g s ) {

5

6 // opération autorisée

7 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

8

9 // opération impossible :

10 // ERREUR DE COMPILATION

11 d o u b l e d = p . x ;

12 }

13 } 6/15

(16)

Syntaxe : méthodes

Comment manipuler un Point?

1 définir des méthodes

eg: accéder aux attributs (en lecture)

2 les invoquer depuis l’extérieur

Objet

données

données

données Vérification des entrées/sorties

Barrière de sécurisation

= encapsulation

Fournisseur

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 p r i v a t e d o u b l e x , y ;

4 p u b l i c P o i n t (d o u b l e x2 , d o u b l e y2 ) {

5 x = x2 ;

6 y = y2 ;

7 }

8

9 p u b l i c d o u b l e g e t X ( ) { r e t u r n x ; }

10 11 }

Client

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main

4 ( S t r i n g [ ] a r g s ) {

5 // c o n s t r u c t i o n d ’ un p o i n t :

6 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

7

8 d o u b l e px = p . ge t X ( ) ;

9

10 S y s t e m . o u t . p r i n t l n (

11 " c o o r d ␣ x ␣ de ␣ p : "+px ) ;

12 }

13 }

(17)

Syntaxe: surcharge du constructeur

Comment construire unPoint? ... de plusieurs manières !

Ex:

2 valeurs à fournir: le plus classique 0 valeur: génération aléatoire dexety 1 valeur: affectation de la même valeur pour xety

Syntaxe triviale : il suffit de définir plusieurs constructeurs

Fournisseur

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 p r i v a t e d o u b l e x , y ;

4 p u b l i c P o i n t (d o u b l e x2 , d o u b l e y2 ) {

5 x = x2 ; y = y2 ;

6 }

7 p u b l i c P o i n t (d o u b l e d ) { x = d ; y = d ; }

8

9 p u b l i c P o i n t ( ) { // a u t r e s u r c h a r g e

10 // a l e a t o i r e e n t r e 0 e t 10

11 x = Math . random ( )1 0 ;

12 y = Math . random ( )1 0 ;

13 }

14 }

Client

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {

4

5 // c o n s t r u c t i o n d ’ un p o i n t :

6 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

7 // c o n s t r u c t i o n d ’ un a u t r e p o i n t :

8 P o i n t p2 = new P o i n t ( ) ;

9 // c o n s t r u c t i o n d ’ un 3 e p o i n t :

10 P o i n t p3 = new P o i n t ( 4 . 2 ) ;

11 }

12 }

(18)

Syntaxe: surcharge du constructeur

Comment construire unPoint? ... de plusieurs manières !

Ex:

2 valeurs à fournir: le plus classique 0 valeur: génération aléatoire dexety 1 valeur: affectation de la même valeur pour xety

Syntaxe triviale : il suffit de définir plusieurs constructeurs

Fournisseur

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 p r i v a t e d o u b l e x , y ;

4 p u b l i c P o i n t (d o u b l e x2 , d o u b l e y2 ) {

5 x = x2 ; y = y2 ;

6 }

7 p u b l i c P o i n t (d o u b l e d ) { x = d ; y = d ; }

8

9 p u b l i c P o i n t ( ) { // a u t r e s u r c h a r g e

10 // a l e a t o i r e e n t r e 0 e t 10

11 x = Math . random ( )1 0 ;

12 y = Math . random ( )1 0 ;

13 }

14 }

Client

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {

4

5 // c o n s t r u c t i o n d ’ un p o i n t :

6 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

7 // c o n s t r u c t i o n d ’ un a u t r e p o i n t :

8 P o i n t p2 = new P o i n t ( ) ;

9 // c o n s t r u c t i o n d ’ un 3 e p o i n t :

10 P o i n t p3 = new P o i n t ( 4 . 2 ) ;

11 }

12 }

(19)

Syntaxe: surcharge du constructeur

Comment construire unPoint? ... de plusieurs manières !

Ex:

2 valeurs à fournir: le plus classique 0 valeur: génération aléatoire dexety 1 valeur: affectation de la même valeur pour xety

Syntaxe triviale : il suffit de définir plusieurs constructeurs

CONTRAINTE:signatures des constructeurs différentes

Fournisseur

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 p r i v a t e d o u b l e x , y ;

4 p u b l i c P o i n t (d o u b l e x2 , d o u b l e y2 ) {

5 x = x2 ; y = y2 ;

6 }

7 p u b l i c P o i n t (d o u b l e d ) { x = d ; y = d ; }

8

9 p u b l i c P o i n t ( ) { // a u t r e s u r c h a r g e

10 // a l e a t o i r e e n t r e 0 e t 10

11 x = Math . random ( )1 0 ;

12 y = Math . random ( )1 0 ;

13 }

14 }

Client

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {

4

5 // c o n s t r u c t i o n d ’ un p o i n t :

6 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

7 // c o n s t r u c t i o n d ’ un a u t r e p o i n t :

8 P o i n t p2 = new P o i n t ( ) ;

9 // c o n s t r u c t i o n d ’ un 3 e p o i n t :

10 P o i n t p3 = new P o i n t ( 4 . 2 ) ;

11 }

12 } 8/15

(20)

ATTENTION: informatique 6=infomagique

Créer un point avec deux coordonnéesaet b:

1 le main/ le client doit donner aet b: ⇒on ne peut pas inventer les valeurs !

2 La classePoint / le fournisseur doit avoir prévu de recevoir deux valeurs

L’exécution d’un programme n’est pas magique non plus:

1 on peut suivre l’exécution ligne par ligne

2 on peut comprendre les choix de la machine

⇒ il ne peut pas y avoir deux méthodes qui s’appellent pareil

⇒Du bon sens et encore du bon sens !!!! Faîtes quelques erreurs de syntaxe [mais pas trop]...

mais n’écrivez pas n’importe quoi !

(21)

ATTENTION: informatique 6=infomagique

Créer un point avec deux coordonnéesaet b:

1 le main/ le client doit donner aet b: ⇒on ne peut pas inventer les valeurs !

2 La classePoint / le fournisseur doit avoir prévu de recevoir deux valeurs L’exécution d’un programme n’est pas magique non plus:

1 on peut suivre l’exécution ligne par ligne

2 on peut comprendre les choix de la machine

⇒ il ne peut pas y avoir deux méthodes qui s’appellent pareil

⇒Du bon sens et encore du bon sens !!!! Faîtes quelques erreurs de syntaxe [mais pas trop]...

mais n’écrivez pas n’importe quoi !

(22)

ATTENTION: informatique 6=infomagique

Créer un point avec deux coordonnéesaet b:

1 le main/ le client doit donner aet b: ⇒on ne peut pas inventer les valeurs !

2 La classePoint / le fournisseur doit avoir prévu de recevoir deux valeurs L’exécution d’un programme n’est pas magique non plus:

1 on peut suivre l’exécution ligne par ligne

2 on peut comprendre les choix de la machine

⇒ il ne peut pas y avoir deux méthodes qui s’appellent pareil

⇒Du bon sens et encore du bon sens !!!!

Faîtes quelques erreurs de syntaxe [mais pas trop]...

mais n’écrivez pas n’importe quoi !

(23)

Syntaxe: méthodes standards

Les méthodes standards existent sur tous les objets (cf cours héritage)...

Mais le comportement n’est pas satisfaisant Parce que l’infomagiquen’existe pas equals,toString, ....

Ex: conversion d’un objet en chaine de caractèrespublic String toString()

Fournisseur

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 . . .

4 5 }

Client

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main

4 ( S t r i n g [ ] a r g s ) {

5 // c o n s t r u c t i o n d ’ un p o i n t :

6 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

7

8 S t r i n g s t r = p . t o S t r i n g ( ) ;

9 S y s t e m . o u t . p r i n t l n (" p : " + s t r ) ;

10 }

11 }

» p: Point@8764152

(24)

Syntaxe: méthodes standards

Les méthodes standards existent sur tous les objets (cf cours héritage)...

Mais le comportement n’est pas satisfaisant Parce que l’infomagiquen’existe pas equals,toString, ....

Ex: conversion d’un objet en chaine de caractèrespublic String toString() Fournisseur

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 . . .

4 public String toString(){

5 return "["+ x +","+ y +"]";

6 }

7 }

Client

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main

4 ( S t r i n g [ ] a r g s ) {

5 // c o n s t r u c t i o n d ’ un p o i n t :

6 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

7

8 S t r i n g s t r = p . t o S t r i n g ( ) ;

9 S y s t e m . o u t . p r i n t l n (" p : " + s t r ) ;

10 }

11 }

» p: [2, 3.1]

(25)

Reflexion sur la syntaxe objet

Exemple type: addition entre 2Point

Réfléchir à la signature d’une méthodeaddpermettant d’additionner 2 instances dePoint (en retournant une nouvelle instance dont les coordonnées sont les sommes respectives desxety des attributs des opérandes)

⇒Quelle signature de méthode pour add? Argument(s) / retour?

Client

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main

4 ( S t r i n g [ ] a r g s ) {

5

6 // c o n s t r u c t i o n d ’ un p o i n t :

7 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

8 P o i n t p2 = new P o i n t ( 0 . 5 , 1 ) ;

9

10 P o i n t p3 = p . add ( p2 ) ;

11 }

12 }

Fournisseur

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 p r i v a t e d o u b l e x , y ;

4 p u b l i c P o i n t (d o u b l e x2 , d o u b l e y2 ) {

5 x = x2 ;

6 y = y2 ;

7 }

8

9 p u b l i c P o i n t add ( P o i n t p ) {

10 r e t u r n new P o i n t ( x+p . x , y+p . y ) ;

11 }

Syntaxe objet = un truc à prendre... Pas évident au début !

(26)

Reflexion sur la syntaxe objet

Exemple type: addition entre 2Point

Réfléchir à la signature d’une méthodeaddpermettant d’additionner 2 instances dePoint (en retournant une nouvelle instance dont les coordonnées sont les sommes respectives desxety des attributs des opérandes)

Client

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main

4 ( S t r i n g [ ] a r g s ) {

5

6 // c o n s t r u c t i o n d ’ un p o i n t :

7 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

8 P o i n t p2 = new P o i n t ( 0 . 5 , 1 ) ;

9

10 P o i n t p3 = p . add ( p2 ) ;

11 }

12 }

Fournisseur

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 p r i v a t e d o u b l e x , y ;

4 p u b l i c P o i n t (d o u b l e x2 , d o u b l e y2 ) {

5 x = x2 ;

6 y = y2 ;

7 }

8

9 p u b l i c P o i n t add ( P o i n t p ) {

10 r e t u r n new P o i n t ( x+p . x , y+p . y ) ;

11 }

Syntaxe objet = un truc à prendre... Pas évident au début !

(27)

Reflexion sur la syntaxe objet

Exemple type: addition entre 2Point

Réfléchir à la signature d’une méthodeaddpermettant d’additionner 2 instances dePoint (en retournant une nouvelle instance dont les coordonnées sont les sommes respectives desxety des attributs des opérandes)

Client

1 // F i c h i e r T e s t P o i n t . j a v a

2 p u b l i c c l a s s T e s t P o i n t {

3 p u b l i c s t a t i c v o i d main

4 ( S t r i n g [ ] a r g s ) {

5

6 // c o n s t r u c t i o n d ’ un p o i n t :

7 P o i n t p = new P o i n t ( 2 . , 3 . 1 ) ;

8 P o i n t p2 = new P o i n t ( 0 . 5 , 1 ) ;

9

10 P o i n t p3 = p . add ( p2 ) ;

11 }

12 }

Fournisseur

1 // F i c h i e r P o i n t . j a v a

2 p u b l i c c l a s s P o i n t {

3 p r i v a t e d o u b l e x , y ;

4 p u b l i c P o i n t (d o u b l e x2 , d o u b l e y2 ) {

5 x = x2 ;

6 y = y2 ;

7 }

8

9 p u b l i c P o i n t add ( P o i n t p ) {

10 r e t u r n new P o i n t ( x+p . x , y+p . y ) ;

11 }

Syntaxe objet = un truc à prendre... Pas évident au début !

(28)

Surcharge

Même nom de fonction, arguments différents Le type de retour ne compte pas

1 p u b l i c c l a s s P o i n t {

2 . . .

3 p u b l i c v o i d move (d o u b l e dx , d o u b l e dy ) {

4 x+=dx ; y+=dy ;

5 }

6 p u b l i c v o i d move (d o u b l e dx , d o u b l e dy , d o u b l e s c a l e ) {

7 x+=dxs c a l e ; y+=dys c a l e ;

8 }

9 p u b l i c v o i d move (i n t dx , i n t dy ) {

10 x+=dx ; y+=dy ;

11 }

12 p u b l i c v o i d move ( P o i n t p ) {

13 x+=p . x ; y+=p . y ;

14 }

Rappel: dans la classePoint, vous avez accès aux attributs privés des autres instances de Point

(29)

Compilation/exécution

Nous avions vu précédemment comment compiler et executerUNE classe... Comment faire maintenant qu’il y en a plusieurs?

» javac Point.java

» javac TestPoint.java

» java TestPoint Syntaxe réduite:

» javac Point.java TestPoint.java OU javac *.java

» java TestPoint

Remarque: il peut y avoirplusieurs main

(mais pas plus de 1 par classe) Compilation de tous les maind’un coup

Execution d’un seul (appel à la classe correspondante)

(30)

Cas ambigus: this.

Un argument de méthode et un attribut portent le même nom: il faut les distinguer!

Exemple le plus classique: le constructeur

1 p u b l i c c l a s s P o i n t {

2 p r i v a t e double x,y; // a t t r i b u t s

3 p u b l i c P o i n t (double x, double y) { // a r g u m e n t s du c o n s t r u c t e u r

4 // d i s t i n g u e r l ’ a t t r i b u t e t l ’ a r g u m e n t

5 // p o u r f a i r e l ’ a f f e c t a t i o n d a n s l e bon s e n s

6 this.x = x; // u t i l i s e r l ’ a r g u m e n t p o u r i n i t . l ’ a t t r i b u t

7 this.y = y;

8 }

9 }

Vous avez toujours le droit d’utiliser la syntaxethis.attrpour désigner l’attributattr dans la classe (même dans les cas non ambigus)

Vous pouvez utiliserthis.maMethode()pour invoquermaMethodelorsque vous êtes dans une autre méthode de l’objet.

(31)

Cas ambigus: this.

Un argument de méthode et un attribut portent le même nom: il faut les distinguer!

Exemple le plus classique: le constructeur

1 p u b l i c c l a s s P o i n t {

2 p r i v a t e double x,y; // a t t r i b u t s

3 p u b l i c P o i n t (double x, double y) { // a r g u m e n t s du c o n s t r u c t e u r

4 // d i s t i n g u e r l ’ a t t r i b u t e t l ’ a r g u m e n t

5 // p o u r f a i r e l ’ a f f e c t a t i o n d a n s l e bon s e n s

6 this.x = x; // u t i l i s e r l ’ a r g u m e n t p o u r i n i t . l ’ a t t r i b u t

7 this.y = y;

8 }

9 }

Vous avez toujours le droit d’utiliser la syntaxethis.attrpour désigner l’attributattr dans la classe (même dans les cas non ambigus)

Vous pouvez utiliserthis.maMethode()pour invoquermaMethodelorsque vous êtes dans une autre méthode de l’objet.

(32)

Constructeur multiple: usage du this()

Approche standard pour écrire plusieurs constructeurs dans une classe:

1 Ecrire le constructeur général, prenant le plus d’arguments

2 Appeler le constructeur 1 avec des arguments spécifiques

⇒éviter les copier-coller, fiabiliser le code

1 p u b l i c c l a s s P o i n t {

2 p r i v a t e d o u b l e x , y ; // a t t r i b u t s

3

4 p u b l i c P o i n t (d o u b l e x , d o u b l e y ) { // c o n s t r u c t e u r 1

5 t h i s. x = x ;

6 t h i s. y = y ;

7 }

8

9 p u b l i c P o i n t ( ) { // c o n s t r u c t e u r 2

10 // ATTENTION : aucun code avant this()

11 t h i s( Math . random ( )1 0 , Math . random ( )1 0 ) ; // i n v o c a t i o n

12 // du c o n s t r u c t e u r 1

13 }

14 }

Références

Documents relatifs

En règle générale, le SEM ou l’autorité compétente du canton qui abrite le centre mène un entretien de départ dans les 24 heures qui suivent la notification de

Une analyse plus détaillée de l’exécution du budget programme 2014-2015 et une mise à jour des mesures proposées et mises en œuvre dans le cadre de la riposte

i) Un autre fonctionnaire de la Division de la recherche et de la planification e"conomiques a sejourne en Zambie de. fevrier a avril pour poursuivre lea trav&ux de

diviser le système complexe en une multitude de systèmes simples: les objets sécuriser l’accès aux données

un point d’entrée dans un système avec de nombreuses classes ce programme est exécutable après compilation.. Une classe,

 Pas de transition partant d'un état historique, pas de transition vers ou au départ d'un état initial ni d'une machine à états. context Transition

En s'impliquant dans S&OP, explique Brzoznowski, les directeurs des opérations peuvent s'assurer que leurs informations sont intégrées dans la planification des scénarios, ce

Encourage tous les membres de la Famille de l’eau de l’UNESCO à prendre la responsabilité de la mise en œuvre du PHI-IX, en indiquant les éléments qu’ils