Le modèle du domaine
Le premier diagramme qu'on dessine, et le seul qui ne parle pas du logiciel. Il décrit le monde tel qu'il est avant qu'on écrive une ligne — les choses dont le métier parle, et les liens que le métier tient pour vrais.
Deux personnes disent « réservation » et ne parlent pas de la même chose. Pour l'une, c'est une intention — j'aimerais cette salle jeudi. Pour l'autre, c'est un engagement — la salle est bloquée, personne d'autre ne l'aura. Tant que l'écart n'est pas nommé, chacun code sa version et les deux ont raison.
Le modèle du domaine sert exactement à ça, et à rien d'autre : rendre le désaccord visible avant qu'il ne devienne du code. C'est un dictionnaire dessiné, pas une esquisse d'architecture — et la moitié des fautes de ce module viennent d'y avoir mis du logiciel.
Pourquoi un vocabulaire avant le code
Reprends la réservation de salles. Le client dit : « quand quelqu'un réserve, la salle n'est plus disponible ». Phrase banale, et pourtant elle ne dit pas si une réservation peut être annulée, si deux personnes peuvent réserver la même salle pour des créneaux qui se chevauchent, ni ce qui se passe quand personne ne se présente.
Tu peux poser ces questions au client — c'est même ce qu'il faut faire. Mais tu ne les poseras que si tu les vois, et on ne voit pas ce qu'on n'a pas nommé. Écrire « Réservation » dans une boîte, la relier à « Salle » et devoir écrire un nombre à chaque bout du trait force les questions à sortir. Le diagramme n'est pas la réponse ; c'est la machine à fabriquer les bonnes questions.
Un traducteur qui prend un contrat de droit ne commence pas par traduire. Il dresse d'abord un glossaire : que veut dire partie dans ce document, que veut dire résiliation, quel mot français rendra consideration. Ce glossaire ne traduit rien — il fixe le sens, et c'est lui qui rend la traduction possible sans contradiction.
Le modèle du domaine est ce glossaire, avec en plus la grammaire : non seulement les mots, mais quels mots peuvent se lier à quels autres, et combien de fois. C'est cette seconde moitié qui manque à une simple liste de définitions.
Il y a un bénéfice moins visible et qui compte autant : le vocabulaire du modèle
devient celui du code. Si le métier dit « emprunt », la classe s'appellera
Emprunt et pas PretDocument. Quand le client signale un bogue
sur « les emprunts en retard », tu sais immédiatement où regarder. Ce n'est pas
de la coquetterie : une équipe qui traduit mentalement à chaque conversation perd du
temps et introduit des malentendus, et personne ne s'en aperçoit avant qu'ils coûtent.
Ce que le modèle du domaine est, et n'est pas
Formellement : le modèle du domaine est un diagramme de classes UML qui représente les concepts métier d'un domaine, leurs attributs et leurs associations. C'est un artefact d'analyse, pas de conception : il décrit ce que le métier est, jamais comment le logiciel va le manipuler.
Cette dernière phrase a l'air d'une nuance de vocabulaire. C'est en réalité la règle qui décide de tout le reste, et la façon la plus rapide de la comprendre est de regarder la même classe dans les deux mondes.
dateRetourPrevue
- dateRetourPrevue : Date
+ prolonger(jours : int) : void
De là découle une liste courte et non négociable. Le modèle du domaine contient des concepts métier, leurs attributs significatifs, les associations entre eux avec leurs multiplicités, et les trois relations particulières que sont la généralisation, l'agrégation et la composition.
Il ne contient ni opérations — pas de calculerTotal() —,
ni classes techniques — pas de ControleurEmprunt, pas de
EmpruntDAO, pas de VueEmprunt —, ni visibilité
— pas de + ni de - —, ni détail d'implémentation
— pas de pointeur, pas de clé étrangère.
Écrire une méthode dans une boîte du modèle du domaine. C'est la faute la plus fréquente, et elle est traître parce qu'elle est naturelle : on pense en programmeur, on voit une donnée, on veut lui ajouter un comportement.
Le réflexe de diagnostic tient en une question : est-ce que ce nom pourrait être prononcé par le client ? Le client dit « un emprunt a une date de retour » ; il ne dit jamais « un emprunt a une méthode qui calcule s'il est en retard ». Dès que tu écris des parenthèses, tu as changé de diagramme sans t'en apercevoir.
Lesquelles de ces boîtes n'ont rien à faire dans un modèle du domaine ?
(A) Commande : date, montantTotal
(B) CommandeDAO : sauvegarder(), charger()
(C) Client : numero, nom
(D) Panier : ajouterArticle(), viderPanier()
(E) LigneCommande : quantite
(B) et (D), pour deux raisons différentes qu'il faut savoir distinguer.
(B) est une classe technique : le suffixe DAO désigne un mécanisme de persistance, c'est-à-dire une décision de logiciel. Le client d'un magasin ne sait pas ce qu'est un DAO et n'a pas à le savoir.
(D) est un concept métier légitime — un panier existe vraiment dans le domaine — mais il porte des opérations. On garde la boîte, on retire les parenthèses, et on cherche ses attributs. S'il n'en a aucun, la question devient intéressante : peut-être que « panier » est en réalité une association entre Client et Article, et pas un concept.
Trouver les concepts : une méthode, pas une astuce
La technique qu'on enseigne partout tient en trois mots : souligne les noms communs. Elle est juste, et elle est très insuffisante — parce que le travail difficile ne commence qu'après avoir souligné. Une description d'une page contient trente noms ; il en restera peut-être six.
Voici la méthode complète, en quatre passes. Elle a l'air lourde et elle prend cinq minutes.
Souligner, trier, relier, compter
1. SOULIGNER tous les noms communs de l'énoncé, sans juger.
2. TRIER chacun en trois tas :
· CONCEPT — il a une identité propre, on peut en avoir plusieurs
et les distinguer → une boîte
· ATTRIBUT — c'est une valeur simple qui appartient à autre chose
→ une ligne dans une boîte
· BRUIT — synonyme, mot du système, ou concept hors sujet
→ on le raye
3. RELIER une association par FAIT du métier, nommée par un VERBE
(« emprunte », « contient », « réfère »), avec son sens de lecture.
4. COMPTER la multiplicité à chaque bout, en posant à chaque fois
la même question : « combien de X pour UN SEUL Y ? »
La méthode de construction d'un modèle du domaine. On l'emploie sur toute description textuelle ; on la reconnaît au fait que l'étape 2 est la seule qui demande de réfléchir — les trois autres sont mécaniques.
Prenons la description que le cours emploie, et déroulons les deux premières passes.
Souligne et trie les noms de cette description.
« Un lecteur emprunte des livres. Chaque livre a un titre, un auteur et
un ISBN. Un emprunt enregistre la date de prêt et la date de retour
prévue. Un lecteur peut avoir plusieurs emprunts simultanés. »
Voir le corrigé
Passe 1 — souligner : lecteur, livres, titre, auteur, ISBN, emprunt, date de prêt, date de retour prévue.
Passe 2 — trier. Concepts : Lecteur, Livre, Emprunt. Chacun a une identité — deux lecteurs différents restent deux lecteurs, même s'ils portent le même nom.
Attributs : titre, ISBN, datePret, dateRetourPrevue. Ce sont des valeurs simples ; on ne les distingue pas les unes des autres autrement que par leur contenu.
Le cas qui se discute : auteur. Dans cet énoncé, rien
n'est demandé sur les auteurs — pas de recherche par auteur, pas de biographie. Il
reste donc un attribut de Livre. Mais si l'énoncé disait « on veut
lister les livres d'un auteur », il deviendrait un concept, avec une association
vers Livre. Le même mot n'a pas le même statut selon ce que le
système doit faire : c'est l'énoncé qui tranche, jamais le mot.
Deux catégories de bruit méritent d'être nommées, parce qu'elles reviennent à chaque énoncé. Le premier bruit, ce sont les synonymes : si la description dit tantôt « client », tantôt « acheteur », ce n'est presque jamais deux concepts — c'est une seule chose mal nommée, et le modèle est l'occasion de fixer lequel des deux mots on garde.
Le second, ce sont les mots du système : « écran », « formulaire », « base de données », « utilisateur ». Ils apparaissent parce que le client décrit souvent son besoin en décrivant un logiciel imaginaire. Ils ne sont pas du domaine : une bibliothèque avait des lecteurs, des livres et des emprunts bien avant qu'un écran n'existe.
Il reste un problème que la méthode ne résout pas : les concepts que l'énoncé ne nomme pas. Une description est écrite par quelqu'un qui connaît son métier et qui saute donc l'évident. Rien ne te dit qu'il manque un concept — c'est l'absence, et l'absence ne se souligne pas.
Le remède est une liste de catégories qu'on passe en revue une fois le tri fait, en se demandant à chaque ligne : en ai-je un de cette sorte ? Elle ne remplace pas la lecture, elle rattrape les oublis.
| La catégorie | Exemples |
|---|---|
| Transactions — ce qui s'enregistre | Vente, Emprunt, Paiement, Réservation |
| Lignes d'une transaction | LigneCommande, LigneFacture |
| Rôles tenus par des gens | Client, Caissier, Lecteur, Médecin |
| Objets physiques ou catalogués | Livre, Produit, Salle, Véhicule |
| Lieux et organisations | Magasin, Bibliothèque, Université |
| Descriptions d'un objet | DescriptionProduit, Titre (par opposition à l'exemplaire) |
La dernière ligne mérite un mot, parce qu'elle produit le concept le plus souvent oublié
et qu'elle tombe régulièrement en examen. Une bibliothèque possède trois
exemplaires du même livre. Sont-ce trois Livre, ou un
Livre et trois Exemplaire ? La question se tranche par
l'usage : si le système doit savoir lequel des trois est emprunté, il faut
les deux concepts — l'un décrit l'œuvre (titre, auteur, ISBN), l'autre l'objet physique
qu'on met dans un sac. Confondre les deux rend le modèle incapable de répondre à
« reste-t-il un exemplaire disponible ? ».
Concept ou attribut : le choix qui structure tout
C'est la décision de la passe 2, et elle mérite sa propre section parce qu'elle décide de la forme du modèle entier. Se tromper ici ne produit pas une erreur locale : ça produit un modèle qui ne peut pas répondre aux questions qu'on lui posera.
La règle courte : si une valeur simple suffit — un texte, un nombre, une date —, c'est un attribut. Si la chose a sa propre identité, ses propres attributs, ou peut être liée à plusieurs autres, c'est un concept.
Les trois critères se testent, et voici comment. Identité : peux-tu avoir deux exemplaires différents qui portent la même valeur, et as-tu besoin de les distinguer ? Deux clients peuvent s'appeler Tremblay et rester deux clients — Client est un concept. Deux prix de 12,99 $ sont le même prix — le prix est un attribut. Attributs propres : la chose a-t-elle elle-même des données ? Une adresse a un numéro, une rue, un code postal — ça penche vers le concept. Liens multiples : la même chose peut-elle être rattachée à plusieurs autres en même temps ? Un auteur pour plusieurs livres, oui — donc concept.
Le nom recopié. Écrire nomClient comme attribut de
Commande paraît économique, et c'est le début d'un modèle faux : la
même personne passe trois commandes, son nom est écrit trois fois, et le jour où elle
change de nom le modèle contient trois vérités différentes.
Le symptôme à reconnaître : un attribut dont le nom contient le nom d'un
autre concept — nomClient, adresseLivraison,
codePlat. Presque toujours, il faut retirer l'attribut et poser une
association vers le concept en question.
Dans ce fragment de modèle, une décision est mauvaise. Laquelle, et comment le sait-on ?
Facture : numero, dateEmission, nomClient, adresseClient, montantTotal
Client : numero, nom, adresse
nomClient et adresseClient dans Facture. Ils
recopient un concept qui existe déjà juste à côté — le symptôme du piège ci-dessus,
et ici il est flagrant puisque Client est dans le même modèle.
Ce qu'il faut faire : les retirer, et poser une association
Facture — concerne → Client. Le nom et l'adresse
s'obtiennent alors en suivant le lien, et il n'existe qu'un seul endroit où ils sont
écrits.
Une nuance que l'examen aime : en conception, on recopie parfois exprès l'adresse sur la facture, justement pour qu'elle ne change plus si le client déménage. Mais c'est une décision de logiciel, prise plus tard et pour une raison précise. Au modèle du domaine, on ne l'a pas encore prise.
Les associations : nommer le fait, pas le lien
Une association est un lien sémantique entre deux concepts qui exprime un fait du métier. Elle se dessine par un trait, et elle porte un nom.
Ce nom n'est pas décoratif. Une association mal nommée est une association qu'on ne peut pas vérifier auprès du client — et c'est tout l'intérêt du modèle que de pouvoir la lui lire à voix haute. Trois règles : un verbe, jamais un nom (« emprunte », pas « emprunt ») ; un verbe qui dit le fait, pas la mécanique (« réfère », pas « a un lien vers ») ; et un sens de lecture, marqué par un petit triangle, parce que « Lecteur emprunte Livre » et « Livre emprunte Lecteur » ne se valent pas.
Le test qui sépare une bonne association d'une mauvaise : lis-la à voix haute en suivant la flèche. Si tu obtiens une phrase française que le client confirmerait, l'association est bonne. Si tu obtiens du charabia, ce n'est pas le dessin qui est mauvais — c'est que tu n'as pas encore compris le fait.
Il y a un cas où une association ne suffit pas, et l'exemple de la bibliothèque le
contient déjà — tu l'as peut-être remarqué. On a écrit « Lecteur
emprunte Livre », et pourtant Emprunt est aussi un
concept, avec ses propres attributs. Pourquoi les deux ?
Parce que le fait lui-même porte des données. La date de prêt n'appartient ni au lecteur ni au livre : elle appartient au fait qu'un tel a emprunté tel livre ce jour-là. Un trait ne peut rien porter ; dès qu'un lien a des attributs, il doit devenir une boîte. On dit qu'on réifie l'association — littéralement, qu'on en fait une chose.
Le second signe est l'identité, et il est décisif : le même lecteur peut emprunter le même livre deux fois, en janvier puis en mars. Ce sont deux emprunts distincts. Une association simple ne sait pas exprimer ça — entre deux concepts, elle existe ou n'existe pas. Une boîte, si.
Le test, en deux questions : ce lien a-t-il des données à
lui ? Peut-il exister plusieurs fois entre les deux mêmes exemplaires ? Un seul
« oui » suffit à en faire un concept. C'est ainsi que naissent
Emprunt, Inscription, Réservation et
Affectation — quatre mots que tu retrouveras dans presque tous les énoncés,
et qui sont tous des associations devenues des choses.
C'est la même idée que dans le module précédent, appliquée d'un cran plus près : un diagramme est une phrase sur le système. Ici, la phrase est littérale — sujet (le concept de départ), verbe (le nom de l'association), complément (le concept d'arrivée), et les multiplicités jouent le rôle des déterminants : un lecteur emprunte plusieurs livres.
Le corollaire est utile en examen : quand tu ne sais pas si un lien est correct, écris la phrase. Un modèle du domaine dont on ne peut pas lire les traits à voix haute n'a pas encore été compris, seulement dessiné.
Les multiplicités, et le sens où on les lit
La multiplicité dit combien d'instances d'un concept sont liées à une instance de l'autre. Elle s'écrit à l'extrémité du trait, et c'est l'information la plus dense du diagramme — un chiffre y remplace une phrase entière.
| Notation | Ce qu'elle veut dire |
|---|---|
1 | exactement un — ni zéro, ni deux |
0..1 | zéro ou un — c'est le cas « optionnel » |
* ou 0..* | zéro ou plusieurs, sans limite |
1..* | au moins un — il ne peut jamais y en avoir zéro |
3..5 | entre trois et cinq — une contrainte du métier |
Reste la question qui fait perdre le plus de points de tout le cours : de quel côté écrit-on quoi ? Il y a une seule formulation à retenir, et elle marche toujours.
La multiplicité écrite près d'un concept dit combien d'exemplaires de ce concept-là sont liés à UN SEUL exemplaire de l'autre. Autrement dit, pour la lire, place-toi à l'autre bout du trait et compte.
La multiplicité écrite du mauvais côté. C'est, de l'aveu du cours
lui-même, l'erreur la plus fréquente en examen. On lit le trait de gauche à droite, on
pense « un client a plusieurs comptes », et on écrit le
* à gauche.
Le réflexe qui l'attrape à coup sûr, en trois secondes : couvre du doigt le
concept le plus proche du nombre que tu écris. Le nombre répond à une question
posée depuis l'autre bout. Écris-tu près de Compte ? Alors la question
est « combien de comptes pour UN client ? » — et la réponse va là.
Écris les deux multiplicités de chaque association, à partir de la phrase du métier.
(A) Un employé peut être affecté à plusieurs projets, ou à aucun.
Un projet compte au moins un employé.
(B) Un compte bancaire appartient à exactement un client.
Un client peut avoir plusieurs comptes.
(C) Un médecin suit plusieurs patients, ou aucun.
Un patient n'a qu'un seul médecin traitant.
Voir le corrigé
(A) Employé 1..* — affecté à → 0..* Projet.
Le 1..* est du côté de l'employé parce qu'il répond à « combien
d'employés pour UN projet ? » — au moins un. Et le 0..* est du
côté du projet parce qu'il répond à « combien de projets pour UN
employé ? » — zéro ou plusieurs.
(B) Compte 0..* — appartient à → 1 Client.
Le 1 près de Client dit « un seul client par compte » ; le
0..* près de Compte dit « plusieurs comptes par client ».
(C) Médecin 1 — suit → 0..* Patient.
Si l'un des trois t'a résisté, refais-le en écrivant la question à voix haute avant chaque nombre. C'est plus lent une fois, et ça ne se rate plus ensuite.
Agrégation, composition, et pourquoi on en use peu
Deux associations particulières expriment le rapport « partie de », et se distinguent par un losange à l'extrémité du tout.
L'agrégation — losange vide — est faible : la partie peut exister sans le tout. La composition — losange plein — est forte : la partie n'a pas d'existence propre, et si le tout disparaît, elle disparaît avec lui.
Le test habituel est donc : si le tout disparaît, la partie continue-t-elle d'exister de façon significative ? Oui, agrégation. Non, composition.
Et maintenant, ce que les manuels disent rarement et qui vaut la peine d'être su : on en abuse énormément, et Larman lui-même conseille d'y aller doucement. La raison est que le test ci-dessus n'a pas toujours de réponse. Une roue de voiture meurt-elle avec la voiture ? Dans le modèle, oui ; physiquement, on la démonte et on la revend. La réponse dépend de ce que le système doit faire, et pas du monde.
La règle pratique : en cas de doute, une association simple suffit. Elle est toujours correcte, elle ne perd aucune information essentielle, et elle n'engage pas une décision qu'on n'a pas encore les moyens de prendre. Passer d'une association simple à une composition plus tard coûte un losange ; défendre une composition fausse en soutenance coûte plus cher.
Pour chaque paire, dis s'il s'agit d'une association simple, d'une agrégation, d'une composition ou d'une généralisation.
(A) Voiture — Roue
(B) Université — Étudiant
(C) Personne — Étudiant
(D) Auteur — Livre
(E) Maison — Pièce
(A) composition — dans le modèle, une roue donnée appartient à une seule voiture à la fois et n'a pas d'existence indépendante. C'est le cas où le test du « si le tout meurt » est discutable, comme dit plus haut : si l'énoncé parlait d'un stock de roues au garage, ce serait une association simple.
(B) agrégation — un étudiant existe indépendamment de son université, et peut en changer.
(C) généralisation — un étudiant est un type de personne. Ce n'est pas un rapport de partie à tout, c'est un rapport de sorte à catégorie.
(D) association simple — un livre n'est ni une partie de son auteur, ni une sorte d'auteur. C'est un lien d'écriture, à nommer par un verbe.
(E) composition — démolis la maison, ses pièces n'existent plus en tant que telles.
La généralisation, et quand elle ment
La généralisation est la relation « est un » entre un concept général et un concept spécialisé. Elle se dessine par un trait terminé d'un triangle vide pointant vers le général, et la spécialisation hérite des attributs et des associations du général.
Étudiant et Professeur sont des Personne : ils en héritent le nom et la date de naissance, et ajoutent chacun ce qui leur est propre. Le test est celui de la phrase : « un étudiant est une personne » fonctionne, « une commande est une ligne de commande » non.
Le piège de la généralisation n'est pas syntaxique — le triangle est facile à
dessiner — il est conceptuel, et il porte un nom : elle ment quand la
catégorie peut changer. Dans une université, une même personne peut être étudiante
cette année et employée l'an prochain, ou les deux à la fois. Modélisée en généralisation,
elle devrait alors changer de classe, ce qu'un objet ne fait pas. Le bon modèle
est souvent tout autre : une Personne, et des concepts
Inscription ou Contrat qui portent le rôle et sa durée.
La question à se poser avant de tracer un triangle est donc : cette catégorie est-elle permanente, ou est-ce un rôle ? Ce qui est permanent se généralise ; ce qui est un rôle se modélise par une association. C'est un des rares endroits de ce cours où la bonne réponse est presque toujours « pas de généralisation ».
Deux précisions qui reviennent en examen. D'abord, la spécialisation hérite
des attributs et des associations, pas seulement des attributs : si
Personne est associée à Adresse, alors Étudiant
l'est aussi, sans qu'on redessine le trait. C'est ce qui rend la généralisation
économique — et ce qui la rend coûteuse quand elle est fausse, puisqu'on hérite aussi de
ce qu'on ne voulait pas.
Ensuite, une généralisation ne se justifie que si l'enfant a quelque chose à
lui : un attribut, une association, ou une règle qui ne vaut que pour lui.
Si la seule différence entre deux « sortes » est leur nom, tu n'as pas besoin
de deux boîtes — un attribut suffit. Trois classes LivrePapier,
LivreNumerique et LivreAudio qui ne diffèrent par rien
deviennent un seul Livre avec un attribut format. La question à
se poser avant de tracer le triangle : qu'est-ce que l'enfant a que le parent
n'a pas ? Si la réponse est « rien », il n'y a pas de spécialisation,
seulement une valeur.
Du domaine à la conception
Le modèle du domaine n'est pas un brouillon du diagramme de classes : c'est un document différent, avec un autre but et un autre lecteur. Il sert pourtant de point de départ, et savoir ce qui change entre les deux est une question d'examen classique.
| Aspect | Modèle du domaine | Classes de conception |
|---|---|---|
| Le but | comprendre le métier | concevoir le logiciel |
| La discipline | analyse | conception |
| Les opérations | aucune | oui, avec leur signature |
| Les types | facultatifs, informels | précis (String, int) |
| La visibilité | aucune | +, -, # |
| Classes techniques | aucune | contrôleurs, persistance, interface |
| Le lecteur | le client, autant que l'équipe | l'équipe seule |
La dernière ligne explique toutes les autres. Un modèle du domaine se montre au client et se fait valider par lui ; tout ce qu'il contient doit donc lui être compréhensible. Un diagramme de classes de conception ne se montre pas au client, parce qu'il répond à des questions qu'il ne se pose pas.
Concrètement, voici où atterrit un concept du domaine une fois passé en conception, puis en code. Le bloc ci-dessous n'est pas là pour t'apprendre Java — il est là pour te montrer que les noms du métier survivent jusqu'au bout, ce qui est tout l'intérêt d'avoir fixé le vocabulaire au début.
public class Emprunt {
// Les deux attributs viennent DIRECTEMENT du modèle du domaine.
private Date datePret;
private Date dateRetourPrevue;
// L'association « Emprunt concerne un Livre » devient un champ.
// C'est la conception qui décide de sa DIRECTION : ici on navigue
// de l'emprunt vers le livre, et pas l'inverse.
private Livre livre;
// Cette opération n'existait pas au modèle du domaine : elle répond
// à un besoin du logiciel, pas à une propriété du métier.
public boolean estEnRetard(Date aujourdhui) {
return aujourdhui.after(dateRetourPrevue);
}
}
Le nom de la classe, ceux des attributs et celui de l'association viennent du modèle du domaine. Ce qui s'ajoute — les types, la visibilité, la direction de navigation, l'opération — est de la conception.
Ce diagramme est présenté comme un modèle du domaine. Relève tout ce qui l'empêche d'en être un.
Reservation
- id : Long
- salleId : Long
- dateDebut : Date
+ confirmer() : void
+ annuler() : void
Quatre choses, et chacune trahit une couche différente.
La visibilité (- et +) et
les types (Long, Date) sont du vocabulaire
de programmation. Le métier ne dit pas Long.
Les opérations confirmer() et annuler() —
c'est la faute la plus visible. Le métier fait ces choses, mais un modèle du
domaine décrit ce que les choses sont, pas ce qu'on leur fait.
Et salleId, qui est la plus intéressante : c'est une
clé étrangère déguisée. Au modèle du domaine, on ne stocke pas la référence d'un autre
concept dans un attribut — on trace une association vers
Salle. L'identifiant est un mécanisme de base de données, et il n'a rien
à faire ici.
Cette matière est celle de la semaine 2, évaluée à l'examen intra du 24 octobre — la révision de la semaine 7 porte sur les modules 1 à 5 du cours, dont celui-ci. C'est aussi la première moitié du livrable d'analyse, celui qui ouvre le projet de session. L'exercice type est toujours le même : on te donne une description en prose, tu rends un modèle.
IFT-2007 n'autorise aucun matériel. La méthode en quatre passes, les cinq notations de multiplicité et les trois relations particulières doivent être en tête.
« Construisez le modèle du domaine à partir de cette description. »
Déroule les quatre passes visiblement, sur la copie : souligne les noms, écris les trois tas, puis dessine. Un correcteur donne des points à la démarche même quand le modèle final diffère du sien — et les modèles diffèrent toujours un peu. Nomme chaque association par un verbe, et écris les deux multiplicités partout : une association sans multiplicité est comptée comme incomplète.
« Quelle est la différence entre un modèle du domaine et un diagramme de classes de conception ? »
La réponse courte tient en une phrase : l'un décrit ce que le métier est, l'autre ce que le logiciel fera. Les marques concrètes du second sont les opérations, les types, la visibilité et les classes techniques. Et l'argument qui montre qu'on a compris plutôt que récité : le modèle du domaine se montre au client, ce qui interdit tout ce qu'il ne peut pas lire.
« Pourquoi n'y a-t-il pas d'opérations dans un modèle du domaine ? »
Parce qu'une opération est une décision d'attribution de responsabilité — quelle classe fait quoi — et que cette décision appartient à la conception. La prendre en analyse revient à concevoir avant d'avoir compris. C'est aussi ce qui rend le modèle validable par le client, qui a un avis sur ce qu'est une réservation mais aucun sur la classe qui doit calculer son total.
Le modèle du domaine est un dictionnaire dessiné du métier : des concepts, leurs attributs, et les faits qui les relient. Il ne parle jamais du logiciel — ni opérations, ni types, ni visibilité, ni classes techniques —, et cette contrainte n'est pas une pédanterie : c'est ce qui permet de le montrer au client et de le faire valider par lui. Quatre passes suffisent à en construire un : souligner, trier, relier, compter.
Deux décisions font toute la difficulté. Concept ou attribut, qui se tranche par l'identité, les attributs propres et les liens multiples — et dont l'erreur se reconnaît à un attribut qui contient le nom d'un autre concept. Et le sens des multiplicités, qui se lit toujours depuis l'autre bout du trait : « combien de X pour UN SEUL Y ? ».
Et ailleurs : ce vocabulaire ne s'arrête pas au diagramme. Les noms fixés ici deviennent ceux des classes, puis ceux du code, puis ceux des conversations avec le client — c'est le fil qui empêche une équipe de traduire mentalement à chaque réunion. La compétence resservira bien au-delà du cours : lire une base de données inconnue, reprendre un projet dont personne ne t'explique le métier, ou simplement comprendre pourquoi deux personnes qui emploient le même mot ne s'entendent pas.
- Les quatre passes pour construire un modèle du domaine
- souligner les noms, trier en concept / attribut / bruit, relier par un verbe, compter les multiplicités
- Les quatre choses qu'un modèle du domaine ne porte JAMAIS
- les opérations, la visibilité (
+/-), les classes techniques (contrôleur, persistance, vue), et les identifiants techniques — une clé étrangère se remplace par une association - Ce qui fait d'un nom un concept plutôt qu'un attribut
- il a une identité propre, ou ses propres attributs, ou il peut être lié à plusieurs autres concepts. Une valeur simple qui suffit est un attribut
- Le symptôme d'un attribut qui devrait être une association
- son nom contient celui d'un autre concept —
nomClient,adresseLivraison,salleId - De quel côté s'écrit une multiplicité
- près d'un concept, elle dit combien d'exemplaires de ce concept-là pour UN SEUL de l'autre. Pour la lire, place-toi à l'autre bout du trait
- Les cinq notations de multiplicité
1·0..1·*(ou0..*) ·1..*·n..m- De quel côté se place le losange
- du côté du tout, toujours. Vide pour l'agrégation, plein pour la composition
- Ce qu'il faut faire en cas de doute entre agrégation et composition
- une association simple. Elle est toujours correcte, et Larman lui-même conseille de peu employer les deux autres
- Quand une association doit devenir un concept
- quand le lien porte des données à lui, ou qu'il peut exister
plusieurs fois entre les deux mêmes exemplaires. C'est l'origine
d'
Emprunt,Inscription,Réservation - Quand une généralisation est fautive
- quand la catégorie est un rôle qui peut changer ou se cumuler — étudiant, employé. Un objet ne change pas de classe : on modélise alors le rôle par une association
- Ce qui apparaît en conception et pas en analyse
- les opérations, les types, la visibilité, la direction de navigation, et les classes techniques