Dans le monde réel, de nombreuses choses ont des caractéristiques communes. Par exemple, les chiens et les chats ont
pour point commun d'être des animaux. Les classes peuvent également présenter des propriétés communes. Les relations de
ce type entre des classes peuvent être clarifiées à l'aide d'une généralisation. L'extraction des propriétés
communes pour les placer dans des classes distinctes facilitera l'apport de changements au modèle métier.
Une classe héritant de caractéristiques générales d'une autre classe porte le nom de descendant. La classe dont a
hérité le descendant est l'ancêtre. Une généralisation montre qu'une classe hérite d'une autre. Cela signifie que la
définition de l'ancêtre, y compris ses attributs ou opérations, vaut également pour le descendant. Les relations de
l'ancêtre font également partie de l'héritage.
La généralisation peut se produire à différents stades, ce qui autorise la modélisation de hiérarchies d'héritage
multiniveau complexes, bien que le nombre de niveaux doive rester limité pour une meilleure compréhension. Les
propriétés générales sont placées dans la partie supérieure de la hiérarchie d'héritage et les propriétés spéciales
plus bas dans la hiérarchie. En d'autres termes, la relation de généralisation peut être utilisée pour modéliser des
spécialisations d'un concept plus général.
Exemple :
Des passagers se présentant au comptoir d'enregistrement de l'aéroport ont des bagages de différents types : Bagages
normaux, Bagages à main et Bagages spéciaux. Du point de vue de la compagnie aérienne, ils ont quelques propriétés
communes, en plus d'être des bagages : chacun a par exemple un propriétaire et un poids. Ces propriétés communes
peuvent être modélisées au moyen d'attributs et d'opérations dans une classe distincte appelée Bagages. Bagages
normaux, Bagages à main et Bagages spéciaux hériteront de cette classe.
Les classes Bagages normaux, Bagages à main et Bagages spéciaux ont des propriétés communes. Elles sont toutes des
spécialisations du concept général Bagages.
Une classe peut hériter de plusieurs (c'est ce que l'on appelle l'"héritage multiple"), bien qu'en général elle
n'hérite que d'une classe. Si une classe hérite de plusieurs classes, il est important de vérifier le nom des
associations, des attributs et des opérations dans les ancêtres. Si un même nom apparaît dans plusieurs ancêtres, vous
devez décrire ce qu'il signifie dans la classe héritière.
Une classe qui existe uniquement pour que d'autres classes puissent en hériter est une classe abstraite. Une classe
abstraite n'est jamais instanciée. Cependant, un objet d'une classe héritant d'une classe abstraite se conforme à sa
description propre et à la description des classes héritées. Les classes instanciées dans le métier sont des classes
concrètes.
Dans ce contexte, "abstrait" n'a pas du tout le même sens que dans la langue courante. Quelque chose d'abstrait dans le
sens habituel du terme peut très bien être représentée par une classe non abstraite. Les cours dispensés à l'école sont
des phénomènes abstraits ou des concepts parce qu'on ne peut pas les toucher. Cependant, si vous modélisez des tâches
scolaires, un cours donnera très probablement une classe concrète, qui sera instanciée. De même, des phénomènes
concrets, comme des produits ou des personnes, peuvent être considérés comme produisant des classes abstraites s'ils
ont des propriétés communes avec d'autres classes.
L'héritage est principalement utilisé pour réaliser un modèle d'objet s'adaptant aux changements. Cependant, l'héritage
doit être utilisé avec prudence :
-
L'héritage "n'est qu'un" moyen de structurer la description. Il permet de visualiser les phénomènes ayant des
propriétés communes.
En ce qui concerne la réalisation, vous devez encore trouver un employé capable d'effectuer à la fois le travail de
l'ancêtre et celui du descendant lorsqu'une classe descendant doit être instanciée.
-
N'utilisez les généralisations qu'entre des classes du même stéréotype.
Des stéréotypes de classes différents ayant des objectifs différents, une généralisation d'une classe d'un
stéréotype vers une classe d'un autre stéréotype n'aurait pas de sens. Si vous permettez à une classe de
travailleurs métier d'hériter par exemple d'une entité métier, le travailleur métier deviendrait une sorte
d'hybride.
|