Les diagrammes de cas d’utilisation modélisent à QUOI sert le système.
Le système est composé d’objets qui interagissent entre eux et avec les acteurs pour réaliser ces cas d’utilisation :
Chaque nouveau diagramme répond à une question différente :
Les objets sont les éléments constitutifs du système, avec leurs données propres et des moyens de de traitement pour réaliser les services attendus.
Attention : non corformité avec la représentation des objets en UML de ce schéma issu d’un TD préliminaire.
Les classes sont des types d’objets.
Objets du monde réel :
En informatique, les objets ne désignent pas de éléments matériels concrets.
Un objet est un conteneur, qui possède sa propre existence et incorpore des données et des mécanismes en rapport avec une chose tangible. C’est le concept central de la programmation et de la conception orientée objet.
Syntaxe du nom des objets : nom:Type
Une classe définit un type d’objet.
Une classe déclare donc des propriétés communes à un ensemble d’objets :
Exemples de propriétés :
Une classe est composée d’un nom, d’attributs et d’opérations.
Une instance est la concrétisation d’un concept abstrait.
Instanciation d’une classe :
Instanciation d’une association :
Syntaxe (entre accolades, les mentions optionnelles) :
{-,#,+,~} nomAttribut : TypeAttribut {[multiplicité]} {=valeurInitiale}
Exemples :
- i : int
pour un attribut privé+ pp : PointPlan
pour un attribut publictabI : int[*]
pour un tableau d’entiers de taille quelconque et à la visibilité non définietabPP : PointPlans[4]
pour un tableau de 4 points exactement et à la visibilité non définiex : float = O.0
pour un nombre à virgule initialisé à 0 et à la visibilité non définieL’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 :
-
) limite la visibilité d’une propriété à la classe elle-même+
) ne limite pas la visibilité d’une propriété#
) limite la visibilité d’une propriété à la classe elle-même et à ses sous-classes (voir cours suivant)~
) permet de limiter la visibilité d’une propriété au package de la classe (voir cours suivant)Il n’y a pas de visibilité par défaut.
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ètreSi une classe est déjà définie, il est possible de la représenter simplement, sans ses propriétés.
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).
Une association est une relation structurelle entre objets.
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.
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.
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.
Certaines écritures possibles :
*
à la place de max
signifie plusieurs sans préciser de nombre.n..n
se note aussi n
pour exatement n0..*
se note aussi *
Exemples :
1..*
: au minimum 1 mais sans maximum1..2
: entre un et deux (mais jamais 0, par exemple)*
: autant qu’on le souhaiteOn peut donner à une classe un rôle dans uns 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 :
Pour faire porter des informations par une association, on emploie une classe-association.
Graphiquement, on la relie à l’association avec des pointillés.
Les objets correspondant aux attributs d’une classe font partie des objets de la classe en question :
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
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.
Il faut remplir deux critères pour décider d’une composition au lieu d’une association classique :
Un attribut est implémenté en Java par une variable d’instance de même nom.
1 2 3 4 5 6 |
|
Une multiplicité maximale supérieure à 1 en UML donne lieu en Java à un tableau ou à une collection.
UML | Java |
---|---|
+ |
public |
- |
private |
# |
protected |
~ |
package |
1 2 3 4 5 |
|
Les compositions unidirectionnelles sont implémentées par des variables d’instance en Java
Les associations sont représentées comme des compositions, c’est à dire avec des attributs.