Comprendre le destructeur en Java
Comprendre le destructeur en Java
Orientée Objet
en Java
L. Debize
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Héritage
Polymorphisme
Programmation Orientée Objet en Java
this/super
Classification
Final
Classe métier/classe
Laurent Debize
technique
Collections
Itérateurs
Composition
Agrégation
Cardinalité
Classes abstraites
Interfaces
1/55
Programmation
Orientée Objet
en Java
Héritage
Polymorphisme
this/super
• Documentation Java officielle : [Link]
Classification
Final • Tutoriels Java : [Link]
Classe métier/classe
technique
Collections
• La bible de Java (3623 pages !) :
Itérateurs [Link]
Composition
Agrégation
Cardinalité
Classes abstraites
Interfaces
2/55
Programmation
Orientée Objet
en Java
L. Debize L’objet
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Définition
Héritage • Un objet est quelque chose de concret de la vraie vie.
Polymorphisme
this/super • Il possède des caractéristiques, qu’on appelle attributs
Classification
Final
• Il peux aussi réaliser des actions, qu’on appelle méthodes
Classe métier/classe
technique
Collections
Itérateurs
Exemple
Composition
Agrégation • Objet graphique : bouton
Cardinalité
Classes abstraites • Objet non graphique : rendez-vous
Interfaces
• propriétés : date, heure, contenu, fréquence...
• méthodes : déplacer le rendez-vous...
3/55
Programmation
Orientée Objet
en Java
Héritage
Polymorphisme
this/super
Tout ce qui concerne une notion va être réuni dans un objet. Avantages :
Classification • Lisibilité : variables et fonctions regroupées par thème
Final
Classe métier/classe
technique
• Optimisation : éviter les répétitions inutiles
Collections
Itérateurs
• Réutilisabilité : les types définis sont réutilisables dans le même programme, mais
Composition
Agrégation
aussi en dehors.
Cardinalité
Classes abstraites
Interfaces
4/55
Programmation
Orientée Objet
en Java
L. Debize Histoire
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Héritage
Polymorphisme
this/super POO = Programmation Orientée Objet
Classification
Final
• SmallTalk (1972) : l’ancêtre des langages objets
Classe métier/classe
technique • C++ (1985) a fait de l’objet un standard
Collections
Itérateurs • Java (1996) a instauré la notion de tout objet .
Composition
Agrégation
Cardinalité
Classes abstraites
Interfaces
5/55
Programmation
Orientée Objet 1 Classes et objets
en Java
L. Debize
Encapsulation
Constructeur
Classes et objets
Encapsulation Destructeur
Constructeur
Destructeur
Instanciation
Instanciation
2 Héritage
Héritage
Polymorphisme Polymorphisme
this/super
this/super
Classification
Final
Classe métier/classe
3 Classification
technique
Collections
Final
Itérateurs Classe métier/classe technique
Composition
Agrégation
Collections
Cardinalité
Classes abstraites
Itérateurs
Interfaces Composition
Agrégation
Cardinalité
Classes abstraites
Interfaces
6/55
Programmation
Orientée Objet
en Java
7/55
Programmation
Orientée Objet
en Java
8/55
Programmation
Orientée Objet
en Java
9/55
Programmation
Orientée Objet
en Java
L. Debize L’encapsulation
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
L’encapsulation est le premier pilier de la programmation orientée objet.
Héritage
Polymorphisme
this/super
L’encapsulation permet de protéger les attributs et méthodes de votre classe, pour qu’ils
Classification ne soient pas accessibles aux autres développeurs.
Final
Classe métier/classe
technique
Il existe trois types de mot-clé pour définir la visibilité d’un attribut ou méthode :
Collections
Itérateurs
• private : seul le code de votre classe peut voir et accéder à cet attribut ou méthode.
Composition
Agrégation
• public : toutes les autres classes peuvent voir et accéder à cet attribut ou méthode.
Cardinalité
Classes abstraites
• protected : seul le code de votre classe et de ses sous-classes peut voir et accéder à
Interfaces cet attribut ou méthode.
10/55
Programmation
Orientée Objet
en Java
L. Debize L’encapsulation
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Héritage
Polymorphisme
D’après le principe de l’encapsulation :
this/super
• Tous les attributs sont privés
Classification
Final • On crée des méthodes publiques pour lire ou écrire dans ces attributs.
Classe métier/classe
technique • Accesseur (get) : ce type de méthode permet de récupérer le contenu d’une propriété
Collections
Itérateurs
privée.
Composition • Mutateur (set) : ce type de méthode permet de modifier le contenu d’une propriété
Agrégation
Cardinalité
privée (on dit valoriser une propriété, dans le sens lui affecter une valeur ).
Classes abstraites
Interfaces
11/55
Programmation
Orientée Objet
en Java
L. Debize L’encapsulation
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
En Java :
Héritage
Polymorphisme public class Chat {
this/super
private float poids ; // Propriete
Classification
Final
Classe métier/classe
public float getPoids () { // accesseur
technique return this . poids ;
Collections
}
Itérateurs
Composition
public void setPoids ( float poids ) { // mutateur
Agrégation this . poids = poids ;
Cardinalité
}
Classes abstraites
Interfaces
}
12/55
Programmation
Orientée Objet
en Java
L. Debize L’encapsulation
Classes et objets
Encapsulation
Constructeur Exemple
Destructeur
Instanciation Chat
Héritage
Polymorphisme − poids
this/super − couleur
Classification − pattes
Final
Classe métier/classe
Légende :
technique + getPoids()
Collections
+ : public
Itérateurs
+ setPoids()
Composition + getCouleur() − : privé
Agrégation
Cardinalité
+ getPattes()
Classes abstraites + manger()
Interfaces
+ seDeplacer()
+ miauler()
− digerer()
13/55
Programmation
Orientée Objet
en Java
L. Debize L’encapsulation
Classes et objets
Encapsulation Exemple
Constructeur
Destructeur
Instanciation
public class Chat {
private float poids ;
Héritage
Polymorphisme
this/super // methode publique : preciser ce qu ’ elle renvoie , ici void ( rien )
Classification public void manger ( float po i ds No ur r it ur e ) {
Final poids += po id sN o ur ri t ur e ;
Classe métier/classe
technique
digerer ( p o id sN ou r ri tu re ) ;
Collections }
Itérateurs
Composition
Agrégation
public void miauler () {
Cardinalité System . out . println ( " Miaou " ) ;
Classes abstraites }
Interfaces
14/55
Programmation
Orientée Objet
en Java
L. Debize Constructeur
Classes et objets
Encapsulation
Constructeur Le constructeur permet de créer une instance d’un objet. On peut le redéfinir pour lui
Destructeur
Instanciation
passer les valeurs des attributs en paramètre.
Héritage Un constructeur est toujours nommé du nom de la classe. On ne précise pas de type de
Polymorphisme
this/super
sortie.
Classification public class Chat {
Final
private float poids ;
Classe métier/classe
technique private String couleur ;
Collections private int pattes ;
Itérateurs
Composition
Agrégation public Chat ( String couleur , float poids , int pattes ) {
Cardinalité this . couleur = couleur ;
Classes abstraites
this . poids = poids ;
Interfaces
this . pattes = pattes ;
}
}
15/55
Programmation
Orientée Objet
en Java
L. Debize Destructeur
Classes et objets
Encapsulation Certains langages proposent une méthode appelée destructeur ou finaliseur qui sert à
Constructeur
Destructeur
effectuer les derniers nettoyages nécessaires lorsque que l’objet va être détruit. Ces
Instanciation méthodes sont appelées automatiquement lors de la destruction d’un objet. Ils portent
Héritage généralement le nom de la classe précédé du symbole ~ .
Polymorphisme
this/super
public class Chat {
Classification public ~ Chat () {
Final
// liberation de la memoire ...
Classe métier/classe
technique }
Collections
}
Itérateurs
Composition
Agrégation
Cardinalité
Remarques
Classes abstraites
Interfaces • Beaucoup de langages proposent ce concept : C++, PHP, C#...
• Mais ce concept n’existe pas en Java : c’est le GarbageCollector, un programme
tournant en arrière-plan, qui s’occupe de faire le ménage et de libérer la mémoire
quand des instances ne sont plus utilisées.
16/55
Programmation
Orientée Objet
en Java
L. Debize Instanciation
Classes et objets
Encapsulation
Constructeur public class Program
Destructeur
{
Instanciation
public static void main ( String [] args ) {
Héritage
// Instan ciations
Polymorphisme
this/super
Chat felix = new Chat ( " marron " , 4.2 f , 4) ;
Classification
Final // Acceusseurs / mutateurs
Classe métier/classe System . out . println ( felix . getCouleur () ) ;
technique
Collections
felix . setPoids (3) ;
Itérateurs System . out . println ( " Poids : " + felix . getPoids () ) ;
Composition
Agrégation
Cardinalité
// Methodes
Classes abstraites felix . miauler () ;
Interfaces felix . manger (0.5 f ) ;
felix . digerer (0.5 f ) ; // ne fonctionne pas car private
}
}
17/55
Programmation
Orientée Objet 1 Classes et objets
en Java
L. Debize
Encapsulation
Constructeur
Classes et objets
Encapsulation Destructeur
Constructeur
Destructeur
Instanciation
Instanciation
2 Héritage
Héritage
Polymorphisme Polymorphisme
this/super
this/super
Classification
Final
Classe métier/classe
3 Classification
technique
Collections
Final
Itérateurs Classe métier/classe technique
Composition
Agrégation
Collections
Cardinalité
Classes abstraites
Itérateurs
Interfaces Composition
Agrégation
Cardinalité
Classes abstraites
Interfaces
18/55
Programmation
Orientée Objet
en Java
L. Debize Héritage
Classes et objets Après l’encapsulation, l’héritage est le deuxième pilier de la programmation orientée objet.
Encapsulation
Constructeur
Destructeur Définition
Instanciation
Une classe peut hériter d’une autre classe. Dans ce cas, la classe fille a accès à tous les
Héritage
Polymorphisme
membres qui ne sont pas privés dans la classe mère, comme s’ils étaient ses propres
this/super membres.
Classification
La classe mère s’appelle la classe de base.
Final
Classe métier/classe La classe fille s’appelle la classe dérivée.
technique
Collections
Itérateurs Intérêt
Composition
Agrégation Lorsqu’une classe représente un cas particulier d’une autre classe, l’héritage paraı̂t logique.
Cardinalité
Classes abstraites
Cela évite de redéfinir des membres qui existent déjà dans une autre classe.
Interfaces
Quelques règles
Une classe ne peut hériter que d’une seule autre classe.
Une classe peut être dérivée plusieurs fois. Dériver une classe signifie créer une classe fille
qui hérite de cette classe.
19/55
Programmation
Orientée Objet
en Java
L. Debize Héritage
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Héritage
Exemple
Polymorphisme Le chat et le dauphin des propriétés communes : la couleur, le poids.
this/super
Classification
Ils ont aussi des méthodes communes : manger, se déplacer, digerer
Final On peut réunir ces éléments dans une nouvelle classe Mammifère, et faire hériter les classes
Classe métier/classe
technique Chat et Dauphin de la classe Mammifère.
Collections
Itérateurs
Composition
Par contre, le chat et le dauphin ont des caractéristiques propres, que l’on met uniquement
Agrégation dans leur classe.
Cardinalité
Classes abstraites
Interfaces
Si la visibilité de la méthode digerer() est protégée, seules la classe Mammifère, et ses
classes dérivées, Chat et Dauphin, y auront accès.
20/55
Programmation
Orientée Objet
en Java
L. Debize Héritage
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Héritage
Polymorphisme Visibilité
this/super
Accessibilité des éléments en fonction de la visibilité :
Classification
Final
Classe métier/classe
Visibilité Classe Classes dérivées Extérieur
technique
Collections
public X X X
Itérateurs
protected X X
Composition
Agrégation private X
Cardinalité
Classes abstraites
Interfaces
21/55
Programmation
Orientée Objet
en Java
L. Debize Héritage
Classes et objets
Mammifere
Encapsulation
Constructeur − poids
Destructeur
Instanciation
− couleur
Héritage
Polymorphisme
+ getPoids()
this/super + setPoids()
Classification + getCouleur()
Final
+ manger() Légende :
Classe métier/classe
technique + seDeplacer() + : public
Collections
Itérateurs # digerer()
Composition
− : privé
Agrégation
Cardinalité # : protégé
Classes abstraites
Interfaces
Chat Dauphin
− pattes − nageoires
+ getPattes() + getNageoires()
+ miauler() + sauter()
22/55
Programmation
Orientée Objet
en Java
L. Debize Héritage
Classes et objets Exemple
Encapsulation
Constructeur
public class Mammifere {
Destructeur
Instanciation
private float poids ;
Héritage
private String couleur ;
Polymorphisme
this/super public void manger ( float nourriture ) { ... }
Classification public void seDeplacer ( float x , float y ) { ... }
Final protected void digerer () { ... }
Classe métier/classe
technique }
Collections
Itérateurs
// " extends " indique que Chat herite de Mammifere
Composition
Agrégation
public class Chat extends Mammifere {
Cardinalité private int pattes ;
Classes abstraites
public void miauler () { ... }
Interfaces
}
23/55
Programmation
Orientée Objet
en Java
L. Debize Héritage
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Héritage Utilisation
Polymorphisme
this/super public class Program {
Classification public static void main ( String [] args ) {
Final // Instanciation
Classe métier/classe
technique
Chat Tigrou = new Chat ( " marron " , 4.2 f , 4) ;
Collections
Itérateurs Tigrou . miauler () ; // Appel d ’ une methode propre
Composition
Agrégation
Tigrou . seDeplacer (23 ,2) ; // Appel d ’ une methode heritee de Mammifere
Cardinalité }
Classes abstraites }
Interfaces
24/55
Programmation
Orientée Objet
en Java
Héritage
Polymorphisme
this/super
Classification
Le C++ propose la notion d’héritage multiple, c’est-à-dire qu’une classe peut hériter de
Final plusieurs autres classes. Ce concept n’existe pas en Java et C#, car jugé trop dangereux.
Classe métier/classe
technique En effet, il peut y avoir conflit d’héritage si les classes mères possèdent des membres avec
Collections
Itérateurs
des noms identiques.
Composition
Agrégation
Cardinalité
Classes abstraites
Interfaces
25/55
Programmation
Orientée Objet
en Java
L. Debize Polymorphisme
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
26/55
Programmation
Orientée Objet
en Java
L. Debize Polymorphisme
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Héritage
Polymorphisme
this/super La surchage
Classification
Final
Il y a surcharge si deux méthodes ont le même nom mais des signatures différentes,
Classe métier/classe
technique
c’est-à-dire que les deux méthodes :
Collections • n’ont pas le même nombre de paramètres
Itérateurs
Composition
• ou ont des paramètres de type différents
Agrégation
Cardinalité
Classes abstraites
Interfaces
27/55
Programmation
Orientée Objet
en Java
L. Debize Polymorphisme
Classes et objets Exemples de surcharge
Encapsulation
Constructeur La classe peut avoir un constructeur sans paramètres, et un constructeur avec des paramètres
Destructeur
Instanciation
d’initialisation.
Héritage
La méthode manger() peut prendre en paramètre seulement la quantité de nourriture ingérée
Polymorphisme (float) ou un objet de type Mammifere.
this/super
28/55
Programmation
Orientée Objet
en Java
L. Debize Polymorphisme
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Héritage
Polymorphisme
this/super
Classification
Final
La redéfinition
Classe métier/classe
technique
Il y a redéfinition si deux méthodes ont le même nom et la même signature, mais se
Collections trouvent dans deux classes différentes dont l’une hérite de l’autre.
Itérateurs
Composition
Agrégation
Cardinalité
Classes abstraites
Interfaces
29/55
Programmation
Orientée Objet
en Java
L. Debize Polymorphisme
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Héritage
Polymorphisme
this/super
Classification
Final
Exemple de redéfinition
Classe métier/classe
technique
Les chats et les dauphins ne se déplacent pas de la même manière. On peut donc prévoir de
Collections réécrire la méthode seDeplacer() dans les classes Chat et Dauphin.
Itérateurs
Composition
Agrégation
Cardinalité
Classes abstraites
Interfaces
30/55
Programmation
Orientée Objet
en Java
L. Debize Polymorphisme
Classes et objets
Encapsulation
Exemple de redéfinition
Constructeur
Destructeur public class Mammifere {
Instanciation public void seDeplacer ( float x , float y ) {
Héritage System . out . println ( " Je me deplace " ) ;
Polymorphisme
...
this/super
}
Classification
Final
}
Classe métier/classe public class Chat extends Mammifere {
technique
public void seDeplacer ( float x , float y ) {
Collections
Itérateurs
System . out . println ( " Je marche en reniflant l ’ air " ) ;
Composition ...
Agrégation }
Cardinalité
Classes abstraites
}
Interfaces public class Dauphin extends Mammifere {
public void seDeplacer ( float x , float y ) {
System . out . println ( " Je nage et je saute " ) ;
...
}
}
31/55
Programmation
Orientée Objet
en Java
L. Debize this/super
Classes et objets
Encapsulation
Constructeur Il existe deux mots-clé pour utilisés dans l’écriture d’une classe :
Destructeur
Instanciation • this : désigne l’instance de la classe actuelle
Héritage
Polymorphisme
• super : désigne l’instance de la classe mère
this/super
32/55
Programmation
Orientée Objet 1 Classes et objets
en Java
L. Debize
Encapsulation
Constructeur
Classes et objets
Encapsulation Destructeur
Constructeur
Destructeur
Instanciation
Instanciation
2 Héritage
Héritage
Polymorphisme Polymorphisme
this/super
this/super
Classification
Final
Classe métier/classe
3 Classification
technique
Collections
Final
Itérateurs Classe métier/classe technique
Composition
Agrégation
Collections
Cardinalité
Classes abstraites
Itérateurs
Interfaces Composition
Agrégation
Cardinalité
Classes abstraites
Interfaces
33/55
Programmation
Orientée Objet
en Java
L. Debize Final
Classes et objets Si on ne veut interdire l’héritage d’une classe, ou interdire la redéfinition d’une méthode ou
Encapsulation
Constructeur d’une propriété, on ajoute le mot-clé final :
Destructeur
Instanciation public class Chat extends Mammifere {
Héritage final int pattes = 4;
Polymorphisme
this/super
public void setPattes ( int pattes ) {
Classification this . pattes = pattes ; // Interdit !
Final
Classe métier/classe
}
technique }
Collections
Itérateurs
Composition
public final class Chaton extends Chat {
Agrégation public void setPattes ( int pattes ) {
Cardinalité super . pattes = pattes ; // Interdit !
Classes abstraites
Interfaces
}
}
34/55
Programmation
Orientée Objet
en Java
Héritage • Classe technique : classe boı̂te à outils qui permet de faciliter certaines
Polymorphisme
this/super
manipulations.
Classification Une classe technique peut être réutilisée d’un projet à l’autre. Il existe déjà beaucoup
Final
de classes techniques prêtes à l’emploi.
Classe métier/classe
technique
Collections
Itérateurs
Exemple
Composition
Agrégation
• classe Chat : classe métier
Cardinalité
Classes abstraites
• classe Date : classe technique
Interfaces
On peut éventuellement créer une classe héritant d’une classe technique existante pour
ajouter des fonctionnalités.
35/55
Programmation
Orientée Objet
en Java
L. Debize Collections
Classes et objets Parmi les classes techniques, la collection est une solution plus adaptée que les tableaux
Encapsulation
Constructeur
pour regrouper des objets. Elle permet notamment d’ajouter et de supprimer des objets
Destructeur facilement. C’est une classe générique, c’est-à-dire qu’elle manipule un type qui n’est pas
Instanciation
défini à l’avance. En Java, le type générique est noté E (comme Elements)
Héritage
Polymorphisme
this/super
Exemple de collection
Classification
Final
class Collection <E > {
Classe métier/classe // retourne le nombre d ’ objets de la collection
technique
public int size () ;
Collections
Itérateurs
Composition // Ajoute un object a la collection
Agrégation
public boolean add ( E e ) ;
Cardinalité
Classes abstraites
Interfaces // supprime l ’ objet o de la collection
public boolean remove ( Object o ) ;
36/55
Programmation
Orientée Objet
en Java
L. Debize Collections
Classes et objets
Encapsulation
Constructeur
Exemple d’utilisation de collection
Destructeur
Instanciation public class Program {
Héritage public static void main ( String [] args ) {
Polymorphisme Mammifere monMammifere = new Mammifere () ;
this/super
Classification ArrayList < Mammifere > mammiferes = new ArrayList < Mammifere >() ;
Final
Classe métier/classe
mammiferes . add ( monMammifere ) ; // Ajout
technique
Collections
// le mammifere au rang k de la collection se deplace
Itérateurs
Composition
mammiferes . get ( k ) . seDeplacer () ;
Agrégation
Cardinalité
// Parcourir toute la collection
Classes abstraites
Interfaces
for ( Mammifere mammifere : mammiferes ) {
mammifere . seDeplacer () ;
}
}
}
37/55
Programmation
Orientée Objet
en Java
L. Debize Itérateurs
Classes et objets
Encapsulation
Constructeur
Destructeur
Il n’est pas toujours possible de parcourir des collections avec un foreach ou avec une
Instanciation
Héritage
variable de boucle comme pour un ArrayList :
Polymorphisme
this/super
ArrayList < Mammifere > mammiferes = new ArrayList < Mammifere >() ;
Classification
Final
// foreach
Classe métier/classe for ( Mammifere mammifere : mammiferes ) {
technique
Collections
mammifere . seDeplacer () ;
Itérateurs }
Composition
Agrégation
Cardinalité
// for avec variable de boucle
Classes abstraites for ( int i = 0; i < mammiferes . size () ; i ++) {
Interfaces mammiferes . get ( i ) . seDeplacer () ;
}
38/55
Programmation
Orientée Objet
en Java
L. Debize Itérateurs
Classes et objets
Encapsulation
Constructeur Par exemple, si on veut faire arrêter la boucle dès qu’on a trouvé l’objet qu’on
Destructeur
Instanciation cherche :
Héritage • On préférera utiliser un while (donc pas de foreach)
Polymorphisme
this/super • Et si on veut changer l’ArrayList en ConcurrentLinkedQueue ?
Classification
• On n’a plus accès à la méthode get()...
Final
Classe métier/classe
technique
ConcurrentLinkedQueue < Mammifere > mammiferes = new ConcurrentLinkedQueue <
Collections
Itérateurs
Mammifere >() ;
Composition
Agrégation
// for avec variable de boucle
Cardinalité
Classes abstraites
int i = 0;
Interfaces while ( i < mammiferes . size () ) {
mammiferes . get ( i ) . seDeplacer () ; // get () n ’ existe pas ...
i ++;
}
39/55
Programmation
Orientée Objet
en Java
L. Debize Itérateurs
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Héritage
Polymorphisme Solution : les itérateurs !
this/super
Classification
ConcurrentLinkedQueue < Mammifere > mammiferes = new ConcurrentLinkedQueue <
Final Mammifere >() ;
Classe métier/classe
technique
Collections
Iterator < Mammifere > it = mammiferes . iterator () ;
Itérateurs while ( it . hasNext () ) {
Composition
it . next () . seDeplacer () ;
Agrégation
Cardinalité
}
Classes abstraites
Interfaces
40/55
Programmation
Orientée Objet
en Java
L. Debize Composition
Classes et objets
• Un objet peut être complexe et composé d’autres objets.
Encapsulation • L’association qui unit alors ces objets est la composition.
Constructeur
Destructeur
• Elle se définit au niveau de leurs classes, mais les liens sont bâtis entre les instances
Instanciation
des classes.
Héritage
Polymorphisme
• Les objets formant l’objet composé sont appelés composants.
this/super
Classification
Exemple
Final Un cheval est un exemple d’objet complexe : il est constitué de ses différents organes
Classe métier/classe
technique (jambes, tête, etc.).
Collections
Itérateurs
Composition
Cheval
Agrégation
Cardinalité
Classes abstraites
Interfaces
Tete Jambe
41/55
Programmation
Orientée Objet
en Java
L. Debize Agrégation
Classes et objets
• L’agrégation est une appartenance faible : les composants peuvent être partagés entre
Encapsulation plusieurs objets complexes
Constructeur
Destructeur
Instanciation
Exemple
Héritage Un cheval harnaché est composé de membres (jambe, tête...) et aussi d’une selle mais :
Polymorphisme
this/super
• La jambe et la tête ne peuvent pas être partagés entre plusieurs chevaux et la
Classification disparition du cheval entraı̂ne la disparition de la tête et des jambes ⇒ composition
Final
Classe métier/classe • La selle peut être partagée entre plusieurs chevaux et la disparition du cheval
technique
Collections n’entraı̂ne pas la disparition de la selle ⇒ agrégation
Itérateurs
Composition
Agrégation ChevalHarnache Selle
Cardinalité
Classes abstraites
Interfaces
Tete Jambe
42/55
Programmation
Orientée Objet
en Java
L. Debize Cardinalité
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation La cardinalité située à une extrémité d’une association indique à combien d’instances de la
Héritage classe située à cette extrémité, une instance de la classe située à l’autre extrémité est liée.
Polymorphisme
this/super
Classification
Spécification Cardinalités
Final 0..1 zéro ou une fois
Classe métier/classe
technique 1 une et une seule fois
Collections
Itérateurs
* de zéro à plusieurs fois
Composition
Agrégation
1..* de une à plusieurs fois
Cardinalité M..N entre M et N fois
Classes abstraites
Interfaces N N fois
43/55
Programmation
Orientée Objet
en Java
L. Debize Cardinalité
Classes et objets Exemple
Encapsulation
Constructeur • Un cheval harnaché possède une et une seule tête
Destructeur
Instanciation • Un cheval harnaché possède 4 jambes
Héritage
Polymorphisme • Un cheval harnaché possède une et une seule selle
this/super
Classification
• Une tête, une jambe et une selle n’appartiennent qu’à un seul cheval
Final
Classe métier/classe
technique ChevalHarnache Selle
Collections
Itérateurs 1 1
Composition
Agrégation
Cardinalité 1 1
Classes abstraites
Interfaces
1 4
Tete Jambe
44/55
Programmation
Orientée Objet
en Java
L. Debize Cardinalité
Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Implémentation
Héritage
Polymorphisme Tout appartient au cheval, donc c’est le cheval qui possèdera les attributs tete, jambes et
this/super
selle.
Classification
Final public class C hevalHa rnache {
Classe métier/classe
technique
private Tete tete ; // une seule tete donc un attribut simple
Collections private ArrayList < Jambe > jambes ; // plusieurs jambes donc une
Itérateurs collection
Composition
Agrégation
private Selle selle ; // une seule selle donc un attribut simple
Cardinalité }
Classes abstraites
Interfaces La limitation à 4 jambes se fera dans le code des méthodes, de même que la gestion de la
survie de la selle à la mort du cheval...
45/55
Programmation
Orientée Objet
en Java
46/55
Programmation
Orientée Objet
en Java
47/55
Programmation
Orientée Objet
en Java
48/55
Programmation
Orientée Objet
en Java
Chat
49/55
Programmation
Orientée Objet
en Java
Canard Chat
50/55
Programmation
Orientée Objet
en Java
Héritage
+ seDeplacer()
Polymorphisme
this/super
Animal volant Animal courant Animal nageant
Classification
Final
# vitesse # vitesse # vitesse
Classe métier/classe
technique
Collections + voler() + courir() + nager()
Itérateurs
Composition
Agrégation
Cardinalité
Classes abstraites
Canard Chat
Interfaces
Problème :
Un canard hérite donc
• des champs vitesse trois fois par Volant, Courant et Nageant
• des champs poids trois fois par Volant, Courant et Nageant
51/55
Programmation
Orientée Objet
en Java
52/55
Programmation
Orientée Objet
en Java
Classification
Final
Classe métier/classe
technique
Collections Chat
Itérateurs Canard
Composition
# vitesseDeCourse
Agrégation
# vitesseDeVol
Cardinalité
Classes abstraites + courir() # vitesseDeCourse
Interfaces
# vitesseDeNage
+ voler()
+ courir()
+ nager()
53/55
Programmation
Orientée Objet
en Java
interface Nageant {
void nager () ;
}
54/55
Programmation
Orientée Objet
en Java
Classification public class Canard extends Animal implements Volant , Courant , Nageant {
Final protected float v it es se D eC ou rs e = 2;
Classe métier/classe
technique
protected float vitesseDeVol = 3;
Collections protected float vitesseDeNage = 5;
Itérateurs Canard ( float poids ) { super ( poids ) ; };
Composition
Agrégation
public void courir () {
Cardinalité super . seDeplacer ( vi te s se De Co u rs e ) ;
Classes abstraites };
Interfaces
public void voler ()
super . seDeplacer ( vitesseDeVol ) ;
};
public void nager ()
super . seDeplacer ( vitesseDeNage ) ;
};
}
55/55