• 8 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 5/13/24

Améliorez votre diagramme de classes

À présent, vous connaissez les bases de la modélisation UML : comment représenter des classes et les associer.

Je vous propose maintenant de perfectionner votre modélisation.

Généralisez et spécialisez vos classes

Jusqu’à maintenant, j’ai parlé de films de manière générale. Mais vos données sont un peu plus précises que cela. En effet, ce que j’ai appelé « film » peut en réalité être un long-métrage, un téléfilm ou une série (diffusée sur le web ou à la télévision). Pour être plus correct, je vais maintenant employer le terme « Oeuvre » au lieu de « Film ». Une œuvre sera donc soit un long-métrage, soit un téléfilm, ou une série.

Jusqu’à maintenant, le type de l'œuvre est enregistré dans l’attribut   typeDeTournage  .

J’ai vu dans le fichier CSV que dans le cas des séries, on connaît parfois le numéro de saison. Peut-on ajouter un attribut   saison  dans la classe   Oeuvre    ?

C’est une bonne idée ;) .

Cependant, cet attribut ne sera utilisé que si l'œuvre est une série. Il restera vide si l'œuvre est un téléfilm ou un long-métrage. Cette solution n’est donc pas optimale. L’idéal serait de placer cet attribut dans une classe   Serie  .

Heureusement, c’est possible ! On fait cela via la notion d’héritage, comme ceci :

En haut, Oeuvre, avec comme caractéristique : titre : Texte.  3 autre classes la relie. Telefilm, LongMetrage et Serie, dont la caractéristique est saison : Numérique.
La notion d’héritage modélisée

La relation d’héritage se représente par une flèche triangulaire blanche (vide). Elle indique que la classeOeuvre(appelée classe mère) est plus générale que ses classes filles, qui sont plus spécialisées.

Ainsi, toutes les classes filles (Telefilm,SerieetLongMetrage) héritent deOeuvre, et cette dernière transmet automatiquement à ses filles ses attributs et ses méthodes. De cette manière, toutes les classes filles possèdent l’attributTitre. La classeSerie a quant à elle deux attributs :TitreetSaison.

Soyons fous : on peut aussi enchaîner les relations d’héritage, en créant les classesSerieTVet   SerieWeb ! Voici le résultat :

L'ensemble du diagramme de classe
L'ensemble du diagramme de classe

Restreignez l’instanciation des classes grâce aux classes abstraites

Lorsque l’on utilise l’héritage, il est parfois utile de spécifier qu’une classe est abstraite, c’est-à-dire qu’elle ne peut pas être instanciée.

C’est votre cas : dans la BDD, vous voulez qu’une œuvre soit obligatoirement un téléfilm, une série TV, une série web ou un long-métrage. La notion d'œuvre est trop générale pour que vous l’acceptiez. En effet, considérer un téléfilm simplement comme une oeuvre, c’est perdre les informations spécifiques au téléfilm.

Par exemple, En Thérapie est une instance deSerieTV, mais pas deOeuvre . De même, 120 Battements par minute est une instance deLongMetrage. Bref, on veut qu’aucune œuvre soit enregistrée dans la BDD sans préciser si c’est un téléfilm, une série ou un long métrage.

Pour indiquer une classe abstraite, il suffit de mettre son titre en italique. Voici donc ce que cela donne si vous définissezOeuvreetSeriecomme abstraites :

Le diagramme de classe, avec la classe oeuvre en haut. Les classes Telefilm, LongMetrage et Serie la relie. Les classes SerieWeb et Serie TV relie la classe Serie.
Spécification des classes abstraites Oeuvre et Serie

Découvrez d’autres possibilités offertes par l’UML

Je vous donne ici quelques autres possibilités qui concernent les associations entre les classes. Dans le cadre de ce cours, il n’est pas nécessaire de les détailler, mais sachez juste que ces possibilités existent. Je vous donnerai quelques liens utiles si vous souhaitez creuser le sujet. ;)

L’agrégation

L’agrégation s’utilise lorsqu’une classe est un ensemble ou un regroupement d'objets. Elle est très similaire à une association classique, et que vous l'utilisiez ou non, cela n’aura aucune implication lors de la traduction du MCD vers le MLD.

Elle se représente comme ceci, avec un losange blanc (vide) :

La classe 'classe' à gauche. Un losange vide, qui relie la classe 'Eleve'
Modélisation de l’agrégation

Contrairement à la composition, il n’y a pas de contrainte sur les multiplicités, ni sur le cycle de vie des objets agrégés (ils peuvent exister même lorsque l’objet agrégeant disparaît).

L’association ternaire

Il est possible de créer des associations entre plus que 2 classes. Ce sont les associations N-aires. Voici un exemple d’association ternaire :

Modélisation d’une association ternaire
Modélisation d’une association ternaire

En pratique, on n’utilise jamais d’association de degré supérieur à trois. De plus, les associations ternaires peuvent toujours être transformées en trois associations binaires, en transformant l’association en une nouvelle classe, comme ceci :

Création d’une classe  Cours  pour éviter une association ternaire
Création d’une classe Cours pour éviter une association ternaire

Les notes

Il est possible d’ajouter des notes au diagramme de classes. Elles servent à apporter tout type de précisions. Notamment les contraintes sur certains attributs.

Sur votre diagramme, vous auriez pu poser la contrainte que l’attributdateDeDebutdoit être une date antérieure àdateDeFin. Eh oui, cela paraît logique, mais il faudra le spécifier à votre SGBDR car il ne le fera pas automatiquement !

Représentation d’une note à la classe Tournage
Représentation d’une note à la classe Tournage

Les notes servent aussi à préciser les domaines des attributs quand ceux-ci sont plus complexes queEntier,Date,Texte, etc.

Par exemple : “Entier compris entre 1 000 et 2 000”.

Les doubles associations

Deux classes peuvent être liées entre elles via deux (ou plus) associations.

Ce serait le cas lorsqu’une personne écrit un livre, et lorsqu’une autre personne traduit ce livre dans une autre langue :

Modélisation avec deux associations, représentée par les deux traits nommés respectivement
Modélisation avec deux associations, représentée par les deux traits nommés respectivement "écrire" et "traduire"

Les rôles de classes

Plutôt que de donner un nom aux associations, vous pouvez aussi caractériser une association par le rôle que tient chacune des deux classes. C’est le cas dans cet exemple, où on peut remplacer le nom de l’association « conduit » par « conducteur » et « moyen de locomotion » :

On voit que Personne à pour rôle de Conducteur par rapport à Vehicule. Et Vehicule a le rôle de moyenLomotion par rapport à Personne.
Modélisation avec le rôle des classes spécifié

L’association réflexive

Une classe peut être associée à elle-même !

Par exemple, une classeCategoriepeut avoir des sous-catégories et des catégories parentes :

Représentation des sous-catégories
Représentation des sous-catégories

En résumé

  • Un lien de généralisation se modélise par l'héritage, qui permet de généraliser ou spécialiser un concept. 

  • L’héritage s’utilise parfois avec des classes abstraites, qui sont des classes non instanciables.

  • Il existe d’autres types d’associations, comme l’agrégation et l’association ternaire. 

  • On précise tout type de commentaire ou de contrainte grâce aux notes.

  • Deux classes peuvent être liées par plusieurs associations ayant toutes un nom ou un rôle différent. Une classe peut aussi être liée à elle-même par une association réflexive.

Voilà ! Le diagramme de classes UML n’a (presque) plus de secrets pour vous. Dans le chapitre suivant, vous allez poser votre crayon et apprendre à dessiner un diagramme de classes avec un vrai logiciel dédié à cela !

Example of certificate of achievement
Example of certificate of achievement