Dans ce chapitre, je vais vous présenter quelques éléments complémentaires d'UML et de l'approche orientée objet pouvant vous être utiles pour modéliser des cas un peu plus complexes ou particuliers.
Je vous montrerai également comment traduire ces éléments dans le MPD.
Agrégation et composition
Agrégation
Quand une classe a un rôle qui correspond à un ensemble ou un regroupement d'objets, il peut être intéressant de mettre en valeur cet aspect.
En effet, cela permet de voir au premier coup d'œil qu'il s'agit d'un ensemble, sans avoir à se pencher sur les multiplicités de l'association (qui sont bien évidemment dans ce cas de type un à plusieurs ou plusieurs à plusieurs).
Cet aspect d'ensemble est modélisé par une association appelée agrégation et est matérialisée par un losange du côté de la classe jouant le rôle d'ensemble.

Voici des exemples pouvant être modélisés avec une agrégation :
Classe - Élève : dans l'association Classe/Elève, la classe joue un rôle de regroupement d'élèves.
Équipe - Joueur : une équipe est un ensemble de joueurs.
Une agrégation sera traduite dans le MPD comme une association classique de type un à plusieurs ou plusieurs à plusieurs. Il n'y a pas de formalisme particulier.
Composition
Une composition est une sorte d'agrégation plus « forte ».
Elle s'emploie lorsque :
une classe (composite) est "composée" de plusieurs autres classes (composant) ;
une instance de la classe composant ne peut pas être liée à plusieurs instances de la classe composite (association obligatoirement un à plusieurs et non pas plusieurs à plusieurs) ;
si on détruit une instance de la classe composite, ses composants devrait "normalement" être détruits.
Voici des exemples de composition :
Répertoire - Fichier : un répertoire est composé de fichiers. Un fichier ne peut pas être dans plusieurs répertoires. Si on supprime le répertoire, les fichiers sont supprimés.
Immeuble - Appartement : un immeuble est composé d'un ensemble d'appartements. Un appartement ne se situe que dans un seul immeuble et si on détruit l'immeuble, les appartements sont détruits aussi !
Une composition est matérialisée par un losange plein du côté de la classe jouant le rôle de composite.

De même que pour l'agrégation, la composition sera traduite dans le MPD comme une association classique de type un à plusieurs. Il n'y a pas de formalisme particulier.
Héritage
En approche orientée objet, il est possible de généraliser des comportements grâce à l'héritage.
Prenez l'exemple ci-dessous :

Le marteau et la clé à pipe sont des outils. On dit alors que les classes Marteau
et CleAPipe
héritent de la classe Outil
.
Une instance de Marteau
ou de CleAPipe
sont indirectement des instances d'Outil
:
Le passage de ces sous-classes (
Marteau
etCleAPipe
) à la super-classe (Outil
) est appelé généralisation.Le passage de la super-classe aux sous-classes est appelé spécialisation.
Grâce à l'héritage, vous allez pouvoir, entre autres :
placer des attributs communs (dans la super-classe), qui seront « automatiquement » repris dans les sous-classes ;
créer des associations communes au niveau de la super-classe, qui, de même, seront « automatiquement » reprises dans les sous-classes.
Voici ce que cela peut donner :

Ainsi, il m'est possible de modéliser facilement le fait que :
tous les outils ont un nom
tous les outils sont rangés dans une boîte à outils
les marteaux ont comme caractéristique leur poids
les clés à pipe ont comme caractéristiques leur diamètre et si elles sont débouchées ou non
Il est également possible de préciser que nous ne pouvons pas instancier directement un outil, mais seulement ses sous-classes, en rendant la classe Outil
abstraite. Cela est représenté sur le diagramme de classes en mettant le nom de la classe en italique :

La notion d'héritage n'existe pas en tant que telle dans le modèle relationnel, mais il y a plusieurs moyens de traduire l'héritage dans le MPD.
Voici celle que je vous conseille pour la plupart des cas :
Vous créez les 3 tables
outil
,marteau
,cle_a_pipe
avec leurs attributs respectifs comme vous le feriez pour n'importe quelles autres classes.Vous partagez la même valeur de clé primaire entre la table
outil
et les tablesmarteau
/cle_a_pipe
pour les tuples correspondants : la clé primaire dans les tables des sous-classes sera donc aussi une clé étrangère vers la table de la super-classe.

Association réflexive
Une association est dite réflexive quand les deux extrémités de celle-ci pointent sur la même classe.
Nous avons déjà aperçu les associations réflexives dans les exemples traitant des commandes. J'avais alors utilisé une association réflexive pour modéliser le fait qu'une catégorie peut avoir des sous-catégories.

Je pouvais ainsi modéliser une arborescence de catégories comme celle-ci :
Maison
Décoration
Multimédia
TV
Hi-Fi
Extérieur
Salon de jardin
Outillage
Les associations réflexives sont traduites dans le MPD comme n'importe quelle autre association. Pour plus de lisibilité je vous conseille de nommer la clé étrangère avec le nom du rôle de la classe dans l'association (ici categorieParente
) :

Avec ces notions supplémentaires que sont l'agrégation, la composition, l'héritage et les associations réflexives, vous pourrez être plus précis, clair et efficace dans la modélisation du domaine fonctionnel.
Si vous voulez aller plus loin avec UML, voici quelques liens qui peuvent vous intéresser :