Programmation Orientée Objet

Transcription

Programmation Orientée Objet
Programmation Orientée Objet
Bertrand Estellon
Département d’Informatique de Luminy
Aix-Marseille Université
26 avril 2012
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
1 / 379
Java
Cours 3
Résumé des cours précédents
Premier cours :
I
Objets, classes et instances
I
Variables de type “référence”
I
Définir et instancier une classe
I
Tableaux, chaı̂nes de caractères
I
Packages
Deuxième cours :
I
Description et implémentation d’interfaces
I
Polymorphisme d’objet
I
Transtypage (vers le haut et vers le bas)
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
78 / 379
Java
Cours 3
Rappel : Interfaces et formes cliquables
G1
G2
R3
R2
D1
G3
R5
D3
onClick()
D2
onClick()
onClick()
onClick()
Observeur1
Bertrand Estellon (DIL – Aix-Marseille)
Observeur2
Observeur3
Programmation Orientée Objet
26 avril 2012
79 / 379
Java
Cours 3
Rappel : Interfaces et formes cliquables
Interface pour les échanges entre les formes et les observateurs :
public interface C l i c k L i s t e n e r {
/∗ ∗
∗ Invoquée quand l’objet est cliqué.
∗/
public void o n C l i c k ( C l i q u a b l e c ) ;
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
80 / 379
Java
Cours 3
Rappel : Interfaces et formes cliquables
c l a s s R e c t a n g l e implements C l i q u a b l e {
....
C l i c k L i s t e n e r [ ] l i s t e n e r s = new C l i c k L i s t e n e r [ 1 0 0 ] ;
int nbListeners = 0;
...
void a d d C l i c k L i s t e n e r ( C l i c k L i s t e n e r l ) {
l i s t e n e r s [ n b L i s t e n e r s ] = l ; n b L i s t e n e r s ++;
}
p u b l i c bo o le a n t r a i t e r C l i c ( i n t x , i n t y ) {
i f ( x>=x1 && x<=x2 && y>=y1 && y<=y2 ) {
f o r ( i n t i = 0 ; i < n b L i s t e n e r s ; i ++)
l i s t e n e r s [ i ] . onClick ( this );
return true ;
}
return f a l s e ;
}
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
81 / 379
Java
Cours 3
Rappel : Interfaces et formes cliquables
c l a s s D i s q u e implements C l i q u a b l e {
....
C l i c k L i s t e n e r [ ] l i s t e n e r s = new C l i c k L i s t e n e r [ 1 0 0 ] ;
int nbListeners = 0;
...
void a d d C l i c k L i s t e n e r ( C l i c k L i s t e n e r l ) {
l i s t e n e r s [ n b L i s t e n e r s ] = l ; n b L i s t e n e r s ++;
}
p u b l i c bo o le a n t r a i t e r C l i c ( i n t x , i n t y ) {
i n t dx = x − t h i s . x , dy = y − t h i s . y ;
i f ( Math . s q r t ( dx ∗ dx + dy ∗ dy ) <= r ) {
f o r ( i n t i = 0 ; i < n b L i s t e n e r s ; i ++)
l i s t e n e r s [ i ] . onClick ( this );
return true ;
}
return f a l s e ;
}
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
82 / 379
Java
Cours 3
Abstraction et extension
Le service associé aux listeners est identique. On aimerait :
I
définir une classe FormeCliquable qui implémente ce service ;
I
sans perdre les spécificités d’un disque ou d’un rectangle.
traiterClic()
Observateur
Interface Cliquable
onClick()
addClickListener()
Interface ClickListener
traiterClic()
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
traiterClic()
26 avril 2012
83 / 379
Java
Cours 3
Extension
L’extension permet de créer une classe qui :
I
conserve les services (propriétés et méthodes) d’une autre classe ;
I
ajouter ses propres services (propriétés et méthodes).
En Java :
I
On utilise le mot-clé extends pour étendre une classe ;
I
Une classe ne peut étendre qu’une seule classe.
Ne pas étendre quand une implémentation d’interface suffit !
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
84 / 379
Java
Cours 3
La classe FormeCliquable
p u b l i c c l a s s F o r m e C l i q u a b l e implements C l i q u a b l e {
private ClickListener [ ] l i s t e n e r s ;
private int nbListeners ;
public FormeCliquable () {
l i s t e n e r s = new C l i c k L i s t e n e r [ 1 0 0 ] ;
nbListeners = 0;
}
public void a d d C l i c k L i s t e n e r ( C l i c k L i s t e n e r l ) {
l i s t e n e r s [ n b L i s t e n e r s ] = l ; n b L i s t e n e r s ++;
}
p u b l i c b o o le a n t r a i t e r C l i c ( i n t x , i n t y ) {
f o r ( i n t i = 0 ; i < n b L i s t e n e r s ; i ++)
l i s t e n e r s [ i ] . onClick ( this );
return true ;
}
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
85 / 379
Java
Cours 3
Utilisation de l’extension – La classe Rectangle
public class Rectangle extends FormeCliquable {
p u b l i c i n t x1 , y1 , x2 , y2 , numero ;
R e c t a n g l e ( i n t x1 ,
t h i s . x1 = x1 ;
t h i s . y1 = y1 ;
t h i s . numero =
}
i n t y1 , i n t x2 , i n t y2 , i n t numero ) {
t h i s . x2 = x2 ;
t h i s . y2 = y2 ;
numero ;
p u b l i c b o o le a n t r a i t e r C l i c ( i n t x , i n t y ) {
i f ( x >= x1 && x <= x2 && y >= y1 && y <= y2 ) {
super . t r a i t e r C l i c (x , y ) ;
return true ;
}
return f a l s e ;
}
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
86 / 379
Java
Cours 3
Utilisation de l’extension – La classe Disque
p u b l i c c l a s s Disque extends FormeCliquable {
p u b l i c i n t x , y , r , numero ;
p u b l i c D i s q u e ( i n t x , i n t y , i n t r , i n t numero ) {
this . x = x ; this . y = y ;
this . r = r ;
t h i s . numero = numero ;
}
p u b l i c b o o le a n t r a i t e r C l i c ( i n t x , i n t y ) {
i n t dx = x − t h i s . x , dy = y − t h i s . y ;
i f ( Math . s q r t ( dx ∗ dx + dy ∗ dy ) <= r ) {
return super . t r a i t e r C l i c (x , y ) ;
}
return f a l s e ;
}
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
87 / 379
Java
Cours 3
Transtypage vers le haut (upcasting)
L’upcasting est toujours possible :
Si la classe B étend la classe A, l’affectation d’une référence de type “B”
dans une variable de type “A” est toujours possible.
(car tout ce qu’une instance de A sait faire, une instance de B sait le faire)
Exemple :
public class A {
p u b l i c v o i d method1 ( ) { System . o u t . p r i n t l n ( ”m1 ” ) ; }
}
p u b l i c c l a s s B extends A {
p u b l i c v o i d method2 ( ) { System . o u t . p r i n t l n ( ”m2 ” ) ; }
}
B b = new B ( ) ;
A a = b ; //upcasting
a . method1 ( ) ; // la méthode est implémenté
a . method2 ( ) ; // erreur à la compilation : la classe A ne définit pas cette méthode
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
88 / 379
Java
Cours 3
Transtypage vers le bas (downcasting)
L’upcasting n’est pas toujours possible :
Si la classe B étend la classe A, l’affectation d’une référence de type “A”
dans une variable de type “B” n’est pas toujours possible.
Exemple :
public class A {
p u b l i c v o i d method1 ( ) { System . o u t . p r i n t l n ( ”m1 ” ) ; }
}
p u b l i c c l a s s B extends A {
p u b l i c v o i d method2 ( ) { System . o u t . p r i n t l n ( ”m2 ” ) ; }
}
A
B
A
B
B
a1
b1
a2
b2
b3
=
=
=
=
=
new A ( ) ;
new B ( ) ;
b1 ; // upcasting !
(B) a2 ; // downcasting possible !
(B) a1 ; // downcasting impossible (erreur à l’exécution)
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
89 / 379
Java
Cours 3
Redéfinition de méthodes et polymorphisme
Dans la classe Rectangle, nous avons redéfini la méthode traiterClic :
I
La méthode existe dans la classe FormeCliquable ;
I
Une nouvelle implémentation est donnée dans la classe Rectangle.
public class A {
p u b l i c v o i d a f f i c h e r N o m ( ) { System . o u t . p r i n t l n ( ”A ” ) ; }
}
p u b l i c c l a s s B extends A {
p u b l i c v o i d a f f i c h e r N o m ( ) { System . o u t . p r i n t l n ( ”B ” ) ; }
}
B b = new B ( ) ; b . a f f i c h e r N o m ( ) ; // affiche B
A a = new A ( ) ; a . a f f i c h e r N o m ( ) ; // affiche A
a = b ; a . a f f i c h e r N o m ( ) ; // affiche B
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
90 / 379
Java
Cours 3
Mot-clé super
Le mot-clé super permet d’utiliser une méthode définie au dessus :
public class A
{ p u b l i c S t r i n g getName ( ) { r e t u r n ”A ” ; } }
p u b l i c c l a s s B1 e x t e n d s A {
p u b l i c S t r i n g t e s t ( ) { r e t u r n getName ( ) ;
}
/∗A∗/ }
p u b l i c c l a s s B2 e x t e n d s A {
p u b l i c S t r i n g getName ( ) { r e t u r n ”B ” ; }
p u b l i c S t r i n g t e s t ( ) { r e t u r n getName ( ) ; /∗B∗/ }
}
p u b l i c c l a s s B3 e x t e n d s A {
p u b l i c S t r i n g getName ( ) { r e t u r n ”B ” ; }
p u b l i c S t r i n g t e s t ( ) { r e t u r n s u p e r . getName ( ) ; /∗A∗/ }
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
91 / 379
Java
Cours 3
Mot-clé super
Le mot-clé super permet d’utiliser une propriété définie au dessus :
public class A
{ p u b l i c S t r i n g name = ”A ” ; }
p u b l i c c l a s s B1 e x t e n d s A {
p u b l i c S t r i n g t e s t ( ) { r e t u r n name ;
}
/∗A∗/ }
p u b l i c c l a s s B2 e x t e n d s A {
p u b l i c S t r i n g name = ”B ” ;
p u b l i c S t r i n g t e s t ( ) { r e t u r n name ; /∗B∗/ }
}
p u b l i c c l a s s B3 e x t e n d s A {
p u b l i c S t r i n g name = ”B ” ;
p u b l i c S t r i n g t e s t ( ) { r e t u r n s u p e r . name ; /∗A∗/ }
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
92 / 379
Java
Cours 3
Rappel : Constructeur par défaut
Si aucun constructeur n’est défini, la classe a un constructeur par défaut
public class A {
int a = 1;
int b = 2;
}
est équivalent à
public class A {
int a ;
int b ;
p u b l i c A( ) {
a = 1;
a = 2;
}
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
93 / 379
Java
Cours 3
Construction des instances et extension
Si une classe B etend une classe A, la construction d’une instance
de A est nécessaire lors de la construction d’une instance de B
Un appel au constructeur de A est effectué au début du constructeur de B :
public class Rectangle extends FormeCliquable {
p u b l i c i n t x1 , y1 , x2 , y2 , numero ;
R e c t a n g l e ( i n t x1 , i n t y1 , i n t x2 , i n t y2 , i n t numero ) {
/∗ Appel du constructeur sans paramètre de la classe FormeCliquable ∗/
t h i s . x1 = x1 ; t h i s . x2 = x2 ;
t h i s . y1 = y1 ; t h i s . y2 = y2 ;
t h i s . numero = numero ;
}
...
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
94 / 379
Java
Cours 3
Mot-clé super lors de la construction
S’il n’y a pas de constructeur vide dans la classe A, il faut préciser les
paramètres du constructeur de A en utilisant le mot-clé super :
p u b l i c c l a s s ClasseAvecNom {
S t r i n g nom ;
p u b l i c ClasseAvecNom ( S t r i n g nom ) { t h i s . nom = nom ; }
}
p u b l i c c l a s s M a Cl a sse e x t e n d s ClasseAvecNom {
p u b l i c M a Cl a sse ( ) {
s u p e r ( ”MaClasse ” ) ;
...
}
}
Remarque : la classe ClasseAvecNom n’a pas de constructeur vide car un
constructeur avec un paramètre est défini.
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
95 / 379
Java
Cours 3
Modificateur final
Le modificateur final permet de bloquer l’extension d’une classe ou
la redéfinition d’une méthode.
Exemple 1 :
f i n a l public class A
{ }
p u b l i c c l a s s B e x t e n d s A { } /∗Impossible car la classe A est finale∗/
Exemple 2 :
public class A
{ f i n a l p u b l i c v o i d method ( ) { } }
p u b l i c c l a s s B extends A {
p u b l i c v o i d method ( ) { }
/∗Impossible car la methode est finale dans A ∗/
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
96 / 379
Java
Cours 3
Classes abstraites
I
Une classe dont l’implémentation est incomplète est dite abstraite.
I
Les méthodes non-implémentées sont dites abstaites.
I
Une classe abstraite n’est pas instanciable.
Exemple :
p u b l i c a b s t r a c t c l a s s SansNom {
v o i d a f f i c h e r N o m ( ) { System . o u t . p r i n t l n ( obt eni r Nom ( ) ) ; }
a b s t r a c t S t r i n g o b t e ni r Nom ( ) ;
}
p u b l i c c l a s s A e x t e n d s SansNom {
S t r i n g o b t e n i r N o m ( ) { r e t u r n ”A ” ; }
}
A a = new A ( ) ;
a . a f f i c h e r N o m ( ) ; // affiche “A”
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
97 / 379
Java
Cours 3
Utilisation des classes abstraites
public a b s t r a c t c l a s s FormeCliquable implements C l i q u a b l e {
ClickListener [] listeners ;
int nbListeners ;
public FormeCliquable () {
l i s t e n e r s = new C l i c k L i s t e n e r [ 1 0 0 ] ;
nbListeners = 0;
}
void a d d C l i c k L i s t e n e r ( C l i c k L i s t e n e r l ) {
l i s t e n e r s [ n b L i s t e n e r s ] = l ; n b L i s t e n e r s ++;
}
public void p r o c e s s L i s t e n e r () {
f o r ( i n t i = 0 ; i < n b L i s t e n e r s ; i ++)
l i s t e n e r s [ i ] . onClick ( this );
}
public abstract boolean t r a i t e r C l i c ( i n t x , i n t y ) ;
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
98 / 379
Java
Cours 3
Utilisation des classes abstraites
p u b l i c c l a s s Disque extends FormeCliquable {
i n t x , y , r , numero ;
p u b l i c D i s q u e ( i n t x , i n t y , i n t r , i n t numero ) {
this . x = x ;
this . y = y ;
this . r = r ;
t h i s . numero = numero ;
}
p u b l i c b o o le a n t r a i t e r C l i c ( i n t x , i n t y ) {
i n t dx = x − t h i s . x , dy = y − t h i s . y ;
i f ( Math . s q r t ( dx ∗ dx + dy ∗ dy ) <= r ) {
processListener ();
return true ;
}
return f a l s e ;
}
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
99 / 379
Java
Cours 3
Rappel : Packages et modificateur public
I
Par défaut, une classe ou une méthode est non-publique : elle n’est
accessible que depuis les classes du même paquet.
I
Une classe ou un membre publics est accessible de n’importe où.
I
Pour rendre une classe ou un membre public :
public class ClassePublique {
public int proprietePublique ;
public void methodePublique ( ) { }
}
I
Si fichier contient une classe publique, le nom du fichier doit être
formé du nom de la classe suivi de “.java”.
I
Un fichier ne peut contenir qu’une seule classe publique.
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
100 / 379
Java
Cours 3
Rappel : Modificateur private et encapsulation
I
Un membre privé n’est accessible que par les méthodes de la classe
qui le contient.
I
Pour rendre un membre privé, on utilise le modificateur private :
public class ClassePublique {
private int proprietePrivee ;
private void methodePrivee ( ) { }
}
I
Encapsulation : Tout ce qui participe à l’implémentation des services
doit être privé (afin de permettre la modification de l’implémentation
des services sans risquer d’impacter les autres classes)
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
101 / 379
Java
Cours 3
Modificateur protected
I
Un membre protégé est accessible depuis :
I
I
I
les méthodes de la classe qui le contient ;
des méthodes des classes qui étendent la classe qui le contient.
Pour rendre un membre protégé, on utilise le modificateur protected :
public class ClassePublique {
protected i n t p r o p r i e t e P r o t e g e e ;
protected void methodeProtegee ( ) { }
}
I
Utilisation possible : Commencer l’implémentation d’un service dans
une classe et la terminer dans les classes qui l’étendent .
I
Possible représentation : Les membres protégés forment une interface
entre une classe et les classes qui l’étendent.
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
102 / 379
Java
Cours 3
Utilisation du modificateur protected
p u b l i c a b s t r a c t c l a s s F o r m e C l i q u a b l e implements C l i q u a b l e {
ClickListener [] listeners ;
int nbListeners ;
public FormeCliquable () {
l i s t e n e r s = new C l i c k L i s t e n e r [ 1 0 0 ] ;
nbListeners = 0;
}
void a d d C l i c k L i s t e n e r ( C l i c k L i s t e n e r l ) {
l i s t e n e r s [ n b L i s t e n e r s ] = l ; n b L i s t e n e r s ++;
}
protected void p r o c e s s L i s t e n e r () {
f o r ( i n t i = 0 ; i < n b L i s t e n e r s ; i ++)
l i s t e n e r s [ i ] . onClick ( this );
}
p u b l i c a b s t r a c t b oolean t r a i t e r C l i c ( i n t x , i n t y ) ;
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
103 / 379
Java
Cours 3
La classe Object
Par défaut, les classes étendent la classe Object
Consequence : le upcasting vers Object est toujours possible
MaCla sse
Object o
Object [ ]
for ( int
c = new MaClasse ( ) ;
= c;
t = new O b j e c t [ 1 0 ] ;
i = 0 ; i < t ; i ++) {
i f ( i %2==0) t [ i ] = new U n e C l a s s e ( ) ;
e l s e t [ i ] = new U n e D e u x i e m e C l a s s e ( ) ;
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
104 / 379
Java
Cours 3
Rappel : Chaı̂nes de caractères
Deux classes permettent de gérer les chaı̂nes de caractères :
I
la classe String : chaı̂ne invariable ;
I
la classe StringBuffer : chaı̂ne destinée à être modifiée (voir API).
Déclaration et création :
S t r i n g h = ”H e l l o ” ;
S t r i n g w = ”World ” ;
Concaténation :
S t r i n g hw = h + ” ”+ w + ” ! ” ;
int c = 13;
S t r i n g hw12c = h + ” ”+ w + ” ” + 12 + ” ” + c ;
La conversion est effectée en utilisant l’une des méthodes statiques
valueOf de la classe String.
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
105 / 379
Java
Cours 3
La méthode toString()
Une implémentation possible des String.valueOf(...)
class String {
...
public s t a t i c S t r i n g valueOf ( Object obj ) {
i f ( o b j==n u l l ) r e t u r n ” n u l l ” ;
else return obj . toString () ;
}
p u b l i c s t a t i c S t r i n g v a l u e O f ( boolean b ) {
i f ( b ) return ”t r u e ”;
e l s e return ”f a l s e ”;
}
...
}
Une implémentation possible des System.out.print(...) :
p u b l i c v o i d p r i n t ( S t r i n g s ) { écrire “s” sur la sortie ; }
p u b l i c v o i d p r i n t ( b o olean b ) { p r i n t ( S t r i n g . v a l u e O f ( b ) ) ; }
public void p r i n t ( Object obj ) { p r i n t ( S t r i n g . valueOf ( obj ) ) ; }
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
106 / 379
Java
Cours 3
Redéfinir la méthode toString()
Redéfinition de la méthode toString() :
p u b l i c c l a s s M a Cl a sse {
p r i v a t e i n t numero ;
p u b l i c M a Cl a sse ( i n t numero ) { t h i s . numero = numero ; }
public String toString () {
r e t u r n ”MaClasse ”+numero ; }
}
Exemple d’utilisation :
M a Classe c1 = new M a Classe ( 1 ) ;
M a Classe c2 = new M a Classe ( 2 ) ;
System . o u t . p r i n t l n ( c1 . t o S t r i n g ( ) + ” ” + c2 . t o S t r i n g ( ) ) ;
System . o u t . p r i n t l n ( c1 + ” ” + c2 ) ;
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
107 / 379
Java
Cours 3
Extension d’interfaces
Il est également possible d’étendre une interface :
interface I t e r a t o r {
boolean h a s N e x t ( ) ;
Object next ( ) ;
}
i n t e r f a c e L i s t I t e r a t o r extends I t e r a t o r {
boolean h a s P r e v i o u s ( ) ;
Object p r e v i o u s ( ) ;
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
108 / 379
Java
Cours 3
Extension d’interfaces
c l a s s V e c t o r I t e r a t o r implements L i s t I t e r a t o r {
f i n a l private Vector v ;
private int p ;
public V e c t o r I t e r a t o r ( Vector v ) {
this . v = v ; p = 0;
}
p u b l i c b o o le a n h a s P r e v i o u s ( ) { r e t u r n ( p > 0 ) ; }
p u b l i c O b j e c t p r e v i o u s ( ) { p−−; r e t u r n v . g e t ( p ) ; }
p u b l i c b o o le a n h a s N e x t ( ) { r e t u r n p < v . s i z e ( ) ; }
public Object next () {
Object o = v . get (p ) ;
}
p++; r e t u r n o ;
}
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
109 / 379
Java
Cours 3
Extension d’interfaces
Exemples d’utilisation :
V e c t o r v = new V e c t o r ( ) ;
...
L i s t I t e r a t o r i t e r a t o r = new V e c t o r I t e r a t o r ( v ) ;
while ( i t e r a t o r . hasNext ( ) )
System . o u t . p r i n t l n ( i t e r a t o r . n e x t ( ) ) ;
while ( i t e r a t o r . hasPrevious ( ) )
System . o u t . p r i n t l n ( i t e r a t o r . p r e v i o u s ( ) ) ;
...
I t e r a t o r i t e r a t o r = new V e c t o r I t e r a t o r ( v ) ;
while ( i t e r a t o r . hasNext ( ) )
System . o u t . p r i n t l n ( i t e r a t o r . n e x t ( ) ) ;
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
110 / 379
Java
Cours 3
Résumé
I
Abstraction
I
Etendre une classe
I
Transtypage (vers le haut et vers le bas)
I
Redéfinition de méthodes et polymorphisme
I
mot-clé super
I
Construction des instances
I
Modificateurs final et protected
I
Classes et méthodes abstraites
I
La classe Object
I
La méthode toString()
Bertrand Estellon (DIL – Aix-Marseille)
Programmation Orientée Objet
26 avril 2012
111 / 379