Diagramme de classe
Le diagramme de classes est considéré comme le plus important de la modélisation orientée objet. Alors que le diagramme de cas d’utilisation
montre un système du point de vue des acteurs, le diagramme de classes en montre la structure interne. Il contient principalement des classes. Une
classe contient des attributs et des méthodes .
Les diagrammes de classes permettent de spécifier la structure et les liens entre les objets dont le système est composé.
Concepts et instances
- Une instance est la concrétisation d’un concept abstrait.
- Concept : Stylo
- Instance : le stylo que vous utilisez à ce moment précis est une
instance du concept stylo : il a sa propre forme, sa propre couleur, son
propre niveau d’usure, etc.
- Un objet est une instance d’une classe
- Classe : Vidéo
- Objets : Pink Floyd (Live à Pompey), 2001 Odyssée de l’Espace etc.
L’instanciation est l’action de création d’un objet à partir d’une classe. Le résultat de cette création est une instance de la classe. Les instances d’une classe sont les occurrences d’objets correspondant à cette classe (ex. : la voiture de mon voisin).
Dans la pratique, les termes d’objet et d’instance sont souvent équivalents.
Classes et objets :
- Une classe est la description d’un ensemble d’objets ayant une sémantique, des attributs, des méthodes et des relations en commun.
Elle spécifie l’ensemble des caractéristiques qui composent des objets de même type. - Une classe est composée d’un nom , d’ attributs et d’ opérations .
- Selon l’avancement de la modélisation, ces informations ne sont pas forcement toutes connues.
- D’autres compartiments peuvent être ajoutés : responsabilités,exceptions, etc.
Propriétés : attributs et opérations :
- Les attributs et les opérations sont les propriétés d’une classe. Leur nom commence par une minuscule.
- Un attribut décrit une donnée de la classe.
- Les types des attributs et leurs initialisations ainsi que les modificateurs d’accès peuvent être précisés dans le modèle
- Les attributs prennent des valeurs lorsque la classe est instanciée : ils sont en quelque sorte des « variables » attachées aux objets.
- Une opération est un service offert par la classe (un traitement que les objets correspondant peuvent effectuer).
Encapsulation :
L’encapsulation est un principe de conception consistant à protéger le coeur d’un système des accès intempestifs venant de l’extérieur.
En UML, les modificateurs d’accès permettent de définir la visibilité des propriétés :
- Un attribut privé (-) limite la visibilité d’une propriété à la classe elle-même
- Un attribut public (+) ne limite pas la visibilité d’une propriété
- Un attribut protégé (6=) limite la visibilité d’une propriété à la classe elle-même et à ses sous-classes.
- Le symbole (∼ ) permet de limiter la visibilité d’une propriété au package de la classe .
Il n’y a pas de visibilité par défaut.
Opérations d’une classe :
Syntaxe (entre accolades, les mentions optionnelles) :
{−, #, +, ∼} nomOpération (LISTE_PARAMS) :valeurRetour
avec pour LISTE_PARAMS, les paramètres séparés par des virgules.
Chaque paramètre s’écrit :
nomParamètre : TypeParamètre Exemples :
- + toString() : String pour une opération publique, sans paramètre et retournant une chaîne de caractères
- ∼setAbscisse(x:float) pour une opération visible dans le paquetage, et prenant une nombre à virgule en paramètre
Notation abrégée d’une classe :
Si une classe est déjà définie, il est possible de la représenter simplement,sans ses propriétés.
Relations entre classes
- La relation d’héritage est une relation de généralisation/spécialisation permettant l’abstraction de concepts.
- Une association représente une relation possible entre les objets d’une classe.
- Une relation de composition décrit une relation de contenance et d’appartenance.
- Une dépendance est une relation unidirectionnelle exprimant une dépendance sémantique entre les éléments du modèle (flèche ouverte pointillée).
Association :
Une association est une relation structurelle entre objets.
- Une association est souvent utilisée pour représenter les liens possibles entre objets de classes données.
- Elle est représentée par un trait entre classes.
- Elle est souvent dirigée par une flèche.
La flèche indique ici que la relation est uni-directionnelle : les objets de classe Article connaissent ceux de la la classe Commentaire auxquels il sont liés, mais pas l’inverse.
Association bi-directionnelle :
Certaines associations sont bi-directionnelles mais comme une telle association est plus complexe à implémenter, on prefère l’aviter autant que possible.
L’absence de flèche indique ici que l’on peut accéder aux catégories à partir des articles qui leur sont liés, et inversement.
Multiplicités :
Les multiplicités permettent de contraindre le nombre d’objets intervenant dans les instanciations des associations. On en place de chaque côté des associations.
- Une multiplicité d’un côté spécifie combien d’objets de la classe du côté considéré sont associés à un objet donné de la classe de l’autre côté.
- Syntaxe : min..max, où min et max sont des nombres représentant respectivement les nombre minimaux et maximaux d’objets concernés par l’association.
Ici, le 1..5 s’interprète comme à un objet donné de la classe Article, on doit associer au minimum 1 objet de la classe Categorie et on peut en associer au maximum 5.
Ecriture des multiplicités :
Certaines écritures possibles :
- * à la place de max signifie plusieurs sans préciser de nombre.
- n..n se note aussi n pour exatement n
- 0..* se note aussi *
Exemples : - 1..* : au minimum 1 mais sans maximum
- 1..2 : entre un et deux (mais jamais 0, par exemple)
- * : autant qu’on le souhaite
Rôles :
On peut donner à une classe un rôle dans une association. C’est surtout utile quand plusieurs associations concernent les mêmes classes en qu’en conséquence, de mêmes objets peuvent être liés par des modalités différentes.
Ici, des adresses peuvent être liées aux clients :
- Les adresses jouent le rôle d’adresses de livraison ou d’adresses de facturation.
- Rien n’empêche qu’une adresse soit à la fois une adresse de livraison et un adresse de facturation.
Classe-association :
Pour faire porter des informations par une association, on emploie une classe-association.
Graphiquement, on la relie à l’association avec des pointillés.
Expression des compositions avec des relations :
Il est possible de représenter plus explicitement les relations de composition entre classes.
De manière équivalente à la définition d’attributs, on peut utiliser des compositions unidirectionnelles et il ne faut pas représenter à la fois des attributs et des compositions pour la même relation.
- Le nom de l’attribut devient le rôle de la classe composante
- La multiplicité de l’attribut devient le rôle de la classe composante (sans multiplicité explicte, 1)
- Les compositions peuvent aussi être bi-directionnelles, mais il n’y a alors plus d’aquivalence avec les attributs : on retient la notion de partie.
Compositions et associations classiques :
Il faut remplir deux critères pour décider d’une composition au lieu d’une association classique :
- La relation est de type du tout à sa partie
- L’existence des objets composants et composée est liée :
- La destruction d’un objet composite (le tout) implique la destruction des objets composants (les parties).
- La copie d’un objet composite (le tout) implique la copie des objets composants (les parties).
- Plus généralement, les composants ne sont pas partagés par les composites.
Modificateurs d’accès :
UML Java
+ public
- private
# protected
∼ package
L’agrégation :
- L’agrégation est une association qui représente une relation d’inclusion structurelle ou comportementale d’un élément dans un ensemble .
- Graphiquement on ajoute un losange vide du côté de l’agrégat.
la composition :
- la composition également appelée agrégation composite ,décrit une contenance structurelle entre instances .ainsi la destruction de l’objet composite implique la destruction de ses composants.une instance de la partie appartient toujours a au plus une instance de l’élément composite.
- graphiquement on ajoute un losange plein du côté de l’agrégat