Vous êtes sur la page 1sur 48

Programmation orientée objet en

JAVA
Chapitre 3
Généralisation - Spécialisation -Héritage
M. Ahmed M’HAMDI
Réutilisation ?
Comment utiliser une classe comme matériau pour concevoir
une autre classe répondant à de nouveaux besoins ?
Quels sont les attentes de cette nouvelle classe ?
 besoin des «services» d'une classe existante (les données
structurées, les méthodes, les 2).
 faire évoluer une classe existante (spécialiser, ajouter des
fonctionnalités, ... )
Quelle relation existe entre les 2 classes ?
Dans une conception objet, des relations sont définies, des
règles d'association et de relation existent.

Un objet fait appel un autre objet.


Un objet est crée à partir d'un autre : il hérite.
Réutilisation ?
Codage d’une classe
 La classe est le concept fondamental de toute
technologie objet.
 Le mot-clé correspondant existe bien sûr également
en Java.
 De plus, chaque classe UML devient par défaut un
fichier .java.
Personne class Personne{


….
}
Codage d’une classe
Traduction des attributs
Les attributs UML deviennent simplement des
attributs en Java
Leur type est soit un type primitif (int, etc.), soit une
classe.
La visibilité des attributs est montrée graphiquement
en UML en les faisant précéder par + pour public, #
pour protégé (protected), - pour privé (private).
Les attributs de classe en UML deviennent des
membres statiques en Java (static).
Codage d’une classe
Traduction des opérations
Les opérations UML deviennent très directement des
méthodes en Java.
Leur visibilité est définie graphiquement avec les
mêmes conventions que les attributs.
Les opérations de classe deviennent des méthodes
statiques (static).
Les opérations abstraites (en italiques) se traduisent
par le mot-clé abstract en Java.
Codage d’une classe

class Personne {
private int code;
private String nom;
private static int nombre;
public Personne() {
}
public static int getNombre(){
}
public String getInf(){
}
}
Codage des associations

Une association navigable avec une


multiplicité 1 se traduit par une variable
d’instance de type référence vers une instance
de classe.
Une multiplicité « * » va se traduire par un
attribut de type collection de références d’objets
au lieu d’une simple référence sur un objet.
Codage des associations
La difficulté consiste à choisir la bonne collection parmi les
très nombreuses classes de base que propose Java.
Bien qu’il soit possible de créer des tableaux d’objets, ce
n’est pas forcément la bonne solution.
En pratique, on préfère plutôt recourir à des collections,
parmi lesquelles les plus utilisées sont : ArrayList, SortedList
et HashTable.
Utilisez ArrayList si vous devez respecter un ordre et récupérer les
objets à partir d’un indice entier
Utilisez HashTable si vous souhaitez récupérer les objets à partir
d’une clé arbitraire.
Codage des associations
Codage de l'association : composition
Codage de l'association : composition
Codage de l'association : composition
Codage de l'association : composition
Codage de l'association : Agrégation
Réutilisation ?
Si le serveur est insuffisant, incomplet, inadapté ?
un objet Point répond à un besoin «mathématique».
Si on veut en faire un objet graphique, avec une couleur
et qu'il soit capable de se dessiner ?
Mais en gardant les propriétés et les fonctionnalités
d'un Point.
La solution en POO : l'héritage.
Définir une nouvelle classe à partir de la définition
d'une classe existante.
Spécialiser, augmenter.
Héritage

class PointAvecUneCouleur extends Point

En java, on n'hérite que d'une seule classe.


Un objet de ClasseFille peut faire tout ce que
sait faire un objet de ClasseMere
Il le fait différemment et/ou il peut plus.
Concept d’héritage
Généralisation - Spécialisation
Deux mécanismes relèvent d’une démarche plus générale
qui consiste a ≪ classifier ≫ les concepts manipules.

La généralisations est un mécanisme qui consiste a


abstraire des caractéristiques communes a plusieurs
classes en une nouvelle classe plus générale appelée
super-classe.

La spécialisation peut faire apparaitre de nouvelles


caractéristiques dans les sous-classes.
Généralisation - Spécialisation
Généralisation - Spécialisation
Généralisation

Les deux classes partagent des attributs et des opérations


Généralisation - Spécialisation
Généralisation
on ≪ abstrait ≫ une super-classe Véhicule qui regroupe les
éléments communs aux deux sous-classes Voiture et Bateau
Généralisation - Spécialisation
Généralisation
Généralisation - Spécialisation
Spécialisation de la classe « Voiture »
Héritage
Héritage et Java
Syntaxe

class Fille extends Mere {


...
}
On utilise le mot clé extends pour indiquer qu'une classe
hérite d'une autre. En l'absence de ce mot réservé associé à
une classe, le compilateur considère la classe Object
comme classe parent.
Héritage et Java
Héritage et Java
Principes de base :
 Le mot clé extends indique que l’on hérite d’une classe :
class Voiture extends Vehicule.
 Si B extends A, alors tout B est un A.
 Le mot clé super indique la classe mère.
 Chaque classe a une et une seule classe mère ou
superclasse (pas d’héritage multiple) dont elle hérite des
attributs et des méthodes.
 Par défaut, Java offre un parent à toutes les classes : la classe
Object.
Héritage et Java
Classes et sous-classes
Héritage à plusieurs niveaux
Hiérarchie en Héritage
L'héritage est une notion transitive
Hiérarchie d'héritage : l'ensemble des classes dérivées
d'un parent commun.

Attention ce n'est pas bijectif :


 un Point3D est un Point.
 Le contraire est faux.

Chaîne d'héritage : le chemin menant d'une classe vers ses ancêtres.


Surcharge et redéfinition
Surcharge et redéfinition
Principes
La classe qui hérite peut :
 Ajouter des attributs, des méthodes et des constructeurs

 Redéfinir des méthodes : même nom, même signature(profil)

et même type retour

 Surcharger des méthodes : même nom mais signature

différente

 Mais elle ne peut retirer aucune variable ou méthode.


Surcharge et redéfinition
Surcharge et redéfinition
Surcharge et redéfinition
Surcharge et redéfinition
Usage des constructeurs
Usage des constructeurs
Principes
La première instruction d’un constructeur peut être un appel :
 à un constructeur de la classe mère : super(...)
 ou à un autre constructeur de la classe : this(...).
Sinon, le compilateur fait un appel implicite au constructeur sans
paramètre (super()) de la classe mère : erreur s’il n’existe pas !
Un constructeur de la classe mère est toujours exécuté avant les
autres instructions du constructeur.
La première instruction d’un constructeur de la classe mère est
l’appel à un constructeur de la classe «grand-mère » , et ainsi de
suite... Ainsi la toute, toute première instruction d’un
constructeur qui est exécutée est le constructeur (sans paramètre)
de la classe Object : c’est le seul qui sait comment créer un nouvel
objet en mémoire !
Usage des constructeurs
Usage des constructeurs
Usage des constructeurs
Usage des constructeurs
La classe Object
La classe Object
Droits d’accès aux attributs et méthodes
Droits d’accès aux attributs et méthodes
Méthodes et classes finales