samedi 29 mars 2014

3 - Diagramme de classe

0 commentaires


Diagramme de classe

Ce diagramme est le plus connu, donc le plus utilisé. Il va nous permettre de modéliser notre système. Par exemple, la classe MachineACafe aura des liens logiques avec les classes Filtre et Recipient. Chaque classe sera caractérisée par des propriétés. Ce graphique est donc purement structurel.

Classe

C'est notre élément de base qui désigne des choses qui ont des caractéristiques communes : par exemple une Renault et une Peugeot sont avant tout une Voiture. La classe est différenciée en objet après avoir été instanciée (opérateur NEW pour Java et C++). La classe est nommée avec une majuscule et contient le nom (au-dessus), les variables (au milieu) et les méthodes (au-dessous). Ces deux dernières ont différentes portées : privée (-), publique (+) ou protégée (#).
ArgoUML ne présente pas ces signes, mais dans l'exemple ci-dessous, la classe Voiture est définie par une "marque" privée. On y accède en lecture avec getMarque() et en écriture avec setMarque().
En effet, pour éviter que l'utilisateur ait à gérer des cas tordus, getMarque() et setMarque() encapsulent des traitements qui peuvent être complexes. A titre d'exemple, si on modifie la marque, le faire sur les papiers ne suffit pas, car il faut changer le logo sur le capot, avertir le constructeur... On peut imaginer tout ce qu'on veut, et la méthode setMarque() regroupe ces modifications massives avec prudence.
Une classe UML

Note

C'est un texte rattaché à une classe ou une méthode qui expose une contrainte le plus souvent. Le trait de lien est en pointillés.
Une note UML

Association et navigabilité

Elle désigne un lien entre des classes qui ont une valeur équivalente. Plus discrètement, dès qu'une classe est déclarée dans les variables d'une autre classe, il y a relation.
Une association UML
On a ici une relation 1-n (notée aussi 1-0..*) parce qu'une personne peut posséder plusieurs voitures. Et comme on peut connaître le propriétaire du fait de la carte grise, on a une association qui va dans les deux sens.
Voici un exemple pour lequel l'association est directionnelle :
Une association UML
Le concessionnaire possède plusieurs voitures (non considérées comme partie), mais le client ne loue pas toujours la même chaque jour. Le fait de connaître la voiture n'indique pas qui l'a loué, sauf en demandant au concessionnaire. La relation 1->n dit que le client peut louer plusieurs voitures à la fois (cas d'une entreprise). Cette flèche est la navigabilité.

Aggrégation

Lorsque l'association fait penser à une sous-partie, il y a aggrégation. C'est un lien dont on peut se passer : un siège, une roue, un GPS...
Une aggrégation UML
Ici, la Voiture utilise un tableau de sièges dont toutes les cellules ne sont pas nécessairement affectées : il peut être vide ou plein.

Composition

Ici, la relation est forte, car ce ne sont pas des gadgets mais des éléments essentiels qui conditionnent les durées de vie.
Une composition UML
Une composition UML
En gros, si notre moteur recherche n'a pas initialisé ses bases de données, on peut considérer qu'il ne fonctionnera pas. C'est critique, donc en noir.
La différence entre agrégation et composition est mince et sujette à débat.

Héritage

Il est possible d'avoir deux objets qui ont des critères similaires, à quelques différences près. Une voiture tunée est avant tout une voiture, mais une voiture ordinaire n'est pas tunée. Par conséquent, le tunage est une spécificité d'une voiture tunée qui dispose de tout ce qu'a une voiture normale.
Hériter, c'est se spécialiser et redéfinir le fonctionnement de certaines méthodes.
Un héritage UML
Par héritage, seules les variables et méthodes protégées (#) ou publiques (+) seront accessibles à VoitureTunee. Tout ce qui est privé reste propriété de Voiture. N'oublions pas que VoitureTunee peut redéfinir la portée des éléments dont elle a hérité.
VoitureTunee est vue comme un cas particulier de Voiture. Les relations avec d'autres classes sont donc conservées par héritage.

Dépendance / Utilisation

Le comportement ou fonctionnement peut être guidé par une classe externe. Ici, une modification de la réglementation influe sur l'attitude du conducteur et des caractéristiques des voitures (troisième feu, feu de recul...).
Le marqueur est une flèche en tirets. Il représente donc l'utilisation d'une classe référencée par un pointeur.
Une dépendance UML

Paquet

C'est un ensemble réutilisable (un groupe d'objets le plus souvent) qui s'inclut dans un autre projet. C'est à l'image d'un plugin ou d'un framework de développement.
Un paquet est souvent dédié à une tâche précise, et donc ne contient que les objets nécessaires à cette tâche. Le contenu est varié et importe peu tant qu'il répond aux besoins.
Le nommage d'un paquet se fait souvent comme l'adresse d'un site web mais écrit à l'envers. Par exemple:fr.free.ecrucru.vehicules
Un paquet UML

Leave a Reply