• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 03/09/2019

Améliorez votre modélisation objet

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

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.

Diagramme de classes ‒ Agrégation
Diagramme de classes ‒ Agrégation

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.

Diagramme de classes ‒ Composition
Diagramme de classes ‒ Composition

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 :

Diagramme de classes ‒ Héritage
Diagramme de classes ‒ Héritage

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 et CleAPipe) à 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 :

Diagramme de classes ‒ Les outils
Diagramme de classes ‒ Les outils

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 :

Diagramme de classes ‒ La classe « Outil » est abstraite
Diagramme de classes ‒ La classe « Outil » est abstraite

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 :

  1. Vous créez les 3 tables outilmarteaucle_a_pipe avec leurs attributs respectifs comme vous le feriez pour n'importe quelles autres classes.

  2. Vous partagez la même valeur de clé primaire entre la table outil et les tables marteau/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.

MPD ‒ Traduction de l'héritage
MPD ‒ Traduction de l'héritage

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.

Diagramme de classes ‒ Association réflexive
Diagramme de classes ‒ Association réflexive

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

MPD ‒ Traduction d'une association réflexive
MPD ‒ Traduction d'une association réflexive

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 :

Exemple de certificat de réussite
Exemple de certificat de réussite