0% ont trouvé ce document utile (0 vote)
5 vues55 pages

Comprendre le destructeur en Java

Le document traite de la programmation orientée objet en Java, en abordant des concepts clés tels que les classes, objets, encapsulation, héritage, polymorphisme, et les membres d'une classe. Il fournit également des exemples pratiques et des explications sur la création et l'utilisation d'objets, ainsi que sur les constructeurs et destructeurs. Enfin, il mentionne des ressources pour approfondir les connaissances sur Java.

Transféré par

yass SixNueve
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues55 pages

Comprendre le destructeur en Java

Le document traite de la programmation orientée objet en Java, en abordant des concepts clés tels que les classes, objets, encapsulation, héritage, polymorphisme, et les membres d'une classe. Il fournit également des exemples pratiques et des explications sur la création et l'utilisation d'objets, ainsi que sur les constructeurs et destructeurs. Enfin, il mentionne des ressources pour approfondir les connaissances sur Java.

Transféré par

yass SixNueve
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Programmation

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

L. Debize Sources d’information


Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation

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

L. Debize Pourquoi des objets ?


Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation

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

L. Debize Classes et objets


Classes et objets
Encapsulation
Constructeur
Destructeur Classe
Instanciation
Pour créer des objets, nous avons besoin d’un plan de fabrication : ce plan de fabrication
Héritage
Polymorphisme
s’appelle la classe.
this/super
Dans une classe, on définira :
Classification
Final
• Les attributs
Classe métier/classe
technique • Les méthodes
Collections
Itérateurs • Les événements
Composition
Agrégation
Cardinalité
Classes abstraites
Objet
Interfaces
Un objet est une variable dont le type est une classe. C’est la réalisation concrète d’une
classe.
On dit qu’un objet est une instance d’une classe.

7/55
Programmation
Orientée Objet
en Java

L. Debize Membres d’une classe


Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Attributs
Héritage
Polymorphisme
Un attribut est une variable incluse dans une classe. Elle permet de mémoriser une
this/super information spécifique à l’objet.
Classification
Final
Classe métier/classe
Méthodes
technique
Collections
Une méthode est une fonction ou procédure inclus(e) dans une classe. Il permet de réaliser
Itérateurs des traitements sur l’objet créé à partir de cette classe.
Composition
Agrégation
Cardinalité
Classes abstraites
Événements
Interfaces Un événement est un module dont le créateur de l’objet doit écrire le contenu et qui
s’exécute suite à un événement qui se déclenche sur l’objet.

8/55
Programmation
Orientée Objet
en Java

L. Debize Membres d’une classe


Classes et objets
Encapsulation
Constructeur
Exemple
Destructeur
Instanciation
Un chat a des attributs (couleur, poids, nombre de pattes...)
Héritage et des méthodes (manger, seDeplacer, miauler, digérer...).
Polymorphisme
this/super
On schématise cela dans un diagramme de classe UML :
Classification
Final Chat
Classe métier/classe
technique
Collections poids
Itérateurs
couleur
Composition
Agrégation pattes
Cardinalité
Classes abstraites manger()
Interfaces
seDeplacer()
miauler()
digerer()

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

private void digerer ( float p o id sN ou r ri tu re ) {


poids -= po id sN o ur ri t ur e / 2;
}
}

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
}

public class Dauphin extends Mammifere {


private int nageoires ;
public void sauter ( float hauteur ) { ... }
}

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

L. Debize Héritage multiple


Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation

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

Héritage Après l’encapsulation et l’héritage, le polymorphisme est le troisième pilier de la


Polymorphisme
this/super
programmation orientée objet.
Classification
Final
Définition
Classe métier/classe Il y a polymorphisme lorsque plusieurs méthodes portent le même nom.
technique
Collections
Itérateurs Il existe deux types de polymorphisme :
Composition
Agrégation
• La surcharge
Cardinalité
Classes abstraites
• La redéfinition
Interfaces

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

Classification public class Mammifere {


Final // Surcharge du constructeur
Classe métier/classe public Mammifere () { }
technique
Collections
public Mammifere ( String couleur , float poids ) { ... }
Itérateurs
Composition // Surcharge d ’ une methode
Agrégation
public void manger ( float nourriture ) { ... }
Cardinalité
Classes abstraites
public void manger ( Mammifere proie ) { ... }
Interfaces }

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

Classification public class Mammifere {


Final public void seDeplacer ( float x , float y ) { ... }
Classe métier/classe
technique
}
Collections public class Chat extends Mammifere {
Itérateurs
public void seDeplacer ( float x , float y ) { ... }
Composition
Agrégation
Cardinalité public void maFonction () {
Classes abstraites this . seDeplacer (1 ,2) ; // appelle la methode de la classe Chat
Interfaces
super . seDeplacer (2 , -1) ; // appelle la methode de la classe Mammifere
}
}

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

public class ChatonSiamois extends Chaton {


// classe interdite !
}

34/55
Programmation
Orientée Objet
en Java

L. Debize Classe métier/classe technique


Classes et objets
Encapsulation
Constructeur
Destructeur • Classe métier : classe qui permet de décrire un objet qui a une vie propre.
Instanciation

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

// revoie vrai si la collection contient l ’ objet o


public boolean contains ( 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

L. Debize Classes abstraites


Classes et objets
Encapsulation
Constructeur
Destructeur Définition
Instanciation
Une classe abstraite définit un concept abstrait, incomplet ou théorique. Elle rassemble
Héritage
Polymorphisme
des éléments communs à plusieurs classes dérivées. Elle n’est pas destinée à être
this/super
instanciée.
Classification
Final Une classe abstraite s’oppose aux classes concrètes qui sont instanciables.
Classe métier/classe
technique
Collections
Itérateurs
Exemple
Composition
Agrégation
On peut considérer qu’un Mammifère est un concept abstrait, non instanciable, mais qui
Cardinalité regroupe des éléments communs à tous les mammifères. Le Chat et le Dauphin sont eux
Classes abstraites
Interfaces
des objets concrets héritant des propriétés des mammifères.
On définira donc la classe Mammifere comme abstraite, de même que la méthode
seDeplacer().

46/55
Programmation
Orientée Objet
en Java

L. Debize Classes abstraites


Classes et objets Exemple
Encapsulation
Constructeur
// Declarer la classe comme abstraite
Destructeur
Instanciation
public abstract class Mammifere {
Héritage
// Declarer la methode comme abstraite
Polymorphisme public abstract void seDeplacer ( float x , float y ) ;
this/super }
Classification public class Chat extends Mammifere {
Final // Redefinir la methode
Classe métier/classe
technique public void seDeplacer ( float x , float y ) {
Collections System . out . println ( " Je marche en reniflant l ’ air " ) ;
Itérateurs
...
Composition
Agrégation
}
Cardinalité }
Classes abstraites
public class Dauphin extends Mammifere {
Interfaces
// Redefinir la methode
public void seDeplacer ( float x , float y ) {
System . out . println ( " Je nage et je saute " ) ;
...
}
}

47/55
Programmation
Orientée Objet
en Java

L. Debize Classes abstraites


Classes et objets
Encapsulation
Constructeur
Destructeur
Instanciation
Attention
Héritage
Polymorphisme
Il faut bien faire la distinction entre une déclaration et une définition.
this/super
• Déclarer une méthode, c’est dire ce que doit faire cette méthode, sans dire comment.
Classification
Final • Définir une méthode, c’est dire comment cette méthode fait ce qu’elle doit faire,
Classe métier/classe
technique autrement dit l’implémenter.
Collections
Itérateurs
Composition
Agrégation
On remarque que dans la classe Mammifere, on se contente de déclarer la méthode
Cardinalité
Classes abstraites
seDeplacer() (dire qu’elle doit exister, sans dire comment elle s’exécute). Cela oblige
Interfaces toutes les classes qui héritent de Mammifere à définir cette méthode, c’est-à-dire
l’implémenter.

48/55
Programmation
Orientée Objet
en Java

L. Debize Héritage multiple


Classes et objets
Encapsulation
• Les animaux sont définis par une classe
Constructeur
Destructeur
• Les animaux volant, nageant, courant sont eux aussi définis par une classe
Instanciation
• Un chat est défini par une classe dérivant de courant
Héritage
Polymorphisme
this/super
Animal
Classification
Final
Classe métier/classe
technique
Collections
Itérateurs
Composition
Agrégation Animal volant Animal courant Animal nageant
Cardinalité
Classes abstraites
Interfaces

Chat

49/55
Programmation
Orientée Objet
en Java

L. Debize Héritage multiple


Classes et objets Et le canard ?
Encapsulation
Constructeur • Un canard vole
Destructeur
Instanciation • Un canard court (pas vite)
Héritage
Polymorphisme
• Un canard nage (mal)
this/super
Un canard devrait donc hériter des 3 classes volant, nageant, courant.
Classification
Final
Classe métier/classe Animal
technique
Collections
Itérateurs
Composition
Agrégation
Cardinalité
Classes abstraites
Interfaces Animal volant Animal courant Animal nageant

Canard Chat
50/55
Programmation
Orientée Objet
en Java

L. Debize Héritage multiple


Classes et objets Animal
Encapsulation
Constructeur
Destructeur
# poids
Instanciation

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

L. Debize Solution : Interface


Classes et objets
Encapsulation
• Héritage multiple interdit en Java et dans beaucoup de langages
Constructeur • mais autorisé en C++
Destructeur
Instanciation • Remplacé par la notion d’interface
Héritage
Polymorphisme
this/super Interface :
Classification • classe abstraite : déclare des méthodes que doivent avoir les objets qui en dérivent
Final
Classe métier/classe
technique
• ne définit pas le comportement de ses méthodes
Collections
Itérateurs
• ne possède pas de champs : hormis des constantes de classe (publiques, statiques et
Composition
Agrégation
finales)
Cardinalité • On dit qu’une classe qui dérive d’une interface l’implémente
Classes abstraites
Interfaces
• Une interface est donc une sorte de classe mère  vide  ou contrat qui oblige ce que
les classes qui l’implémentent doivent obligatoirement définir comme méthodes.
• On ne récupère aucune méthode déjà écrite contrairement à l’héritage.
• Une interface peut hériter d’une autre interface.

52/55
Programmation
Orientée Objet
en Java

L. Debize Interface : le canard


Classes et objets
Encapsulation Animal Volant Courant Nageant
Constructeur
Destructeur
Instanciation
# poids
Héritage
# seDeplacer() + voler() + courir() + nager()
Polymorphisme
this/super

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

L. Debize Interface : code Java


Classes et objets
Encapsulation public class Animal {
Constructeur protected float poids ;
Destructeur
Instanciation
public Animal ( float poids ) {
this . poids = poids ;
Héritage
Polymorphisme
};
this/super protected void seDeplacer ( float vitesse ) { ... };
Classification }
Final
Classe métier/classe
technique
interface Volant {
Collections void voler () ;
Itérateurs }
Composition
Agrégation
Cardinalité interface Courant {
Classes abstraites void courir () ;
Interfaces
}

interface Nageant {
void nager () ;
}

54/55
Programmation
Orientée Objet
en Java

L. Debize Interface : code Java


Classes et objets // Ajouter le mot - clef implements
Encapsulation public class Chat extends Animal implements Courant {
Constructeur protected float v it es se D eC ou rs e = 10;
Destructeur
Instanciation
Chat ( float poids ) { super ( poids ) ; };
public void courir () { ... };
Héritage
Polymorphisme
}
this/super

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

Vous aimerez peut-être aussi