Vous êtes sur la page 1sur 39

IFT6803:

Génie logiciel du
commerce électronique

Chapitre 2: Analyse orientée objet


Section 5: Diagramme de classes

Julie Vachon,
Hiver 2003
Sommaire
Chapitre 2, Section 5
« Diagramme de classes »
2.5.1 Classe
attribut,
Opérations
Visibilité
2.5.2 Associations
Cardinalité, documentation, navigabilité, etc.
Association qualifiée
Association dérivée
Classe d’association
Agrégation
Composition
2.5.3 Généralisation
2.5.4 Pour préciser la spécification
Contraintes, notes, stéréotypes

Chap.2, Sect.5, p.2


Introduction

Permet de décrire la structure statique du système à l’aide de


classes (attributs, opérations, …)
relations: associations, agrégations, compositions, héritage,
dépendance, etc.

1 *
Distributeur Boisson

+ choisirBoisson +getPrix
+ verserBoisson +getQuantité
+setQuantité
Écran GestionMonnaie

+ afficherMonnaie +insérerMonnaie
+ afficherNonDisp +retournerMonnaie
Thé froid Coca

Chap.2, Sect.5, p.3


2.5.1 Classe
Classe

Nom_de_la_classe

Attributs

Opérations

N.b. UML fait la distinction entre opération et méthode.


Une méthode est une implémentation d’une opération. Plusieurs méthodes
peuvent donc implémenter une même opération…
Chap.2, Sect.5, p.4
Classe
Attributs
Syntaxe de la déclaration

<visibilité> <portée> <nom_attribut> : <type> = <valeur_initiale>

„ Nom de l’attribut : choisir un nom significatif


„ Type:
Type primitif: boolean, real, string, type énuméré
Type classe
Remarque: votre modèle ne devrait pas comporter d’attribut de type classe.
Ces attributs (référence sur des objets) seront représentés par des
associations dans le diagramme de classe
„ Valeur initiale: valeur par défaut.
„ Portée: attribut de classe ($) ou d’instance.
Chap.2, Sect.5, p.5
Classe
Opérations d’une classe
Syntaxe de la déclaration

<visibilité> <portée> <nom_op> (<liste_paramètres>): <type_résultat>

„ Nom de l’opération : choisir un nom significatif


„ Liste des paramètres:
<direction> <nom_param> : <type> = valeur_initiale
<diretion> := in | out | inout

„ Type_resultat et type: primitif ou classe


„ Portée: opération de classe (« global ») ou d’instance.

Chap.2, Sect.5, p.6


Classe
Visibilité

La visibilité d’un élément (attribut, opération, classe, etc.) est


représentée par un des trois symboles (+, - ou #)

„ Public (+): Élément visible par tous les objets de toutes les
classes.
„ Private (-): Élément visible que par les objets de la classe.
„ Protected (#): Élément visible par tous les objets de la
classe et des sous-classes.

Chap.2, Sect.5, p.7


Classe
Exemple

Employé

- nom: string;
- date_embauche: date
- salaire: integer;
- congés_autorisés: interger;
- congés_pris: integer;
- $ nb_employé: integer

+ congés_restant(): integer
«global» salaire_moyen():integer

Chap.2, Sect.5, p.8


2.5.2 Association
Définition

„ LIEN = connexion (physique ou conceptuelle) entre deux


instances d’une classe
„ ASSOCIATION: un ensemble de liens ayant une
sémantique commune.
„ Association peuvent être réflexive, binaire ou n-aire (peu
peu fréquent).
„ Spécification d’une association
cardinalité
forme verbale (opt.)
rôles (opt.)

Chap.2, Sect.5, p.9


Association
Cardinalité (multiplicity)

„ Précise le nombre d’instances participants à l’association.


min … max
où min et max sont des entiers.
max peut être non borné dans quel cas on emploi *
„ Exemples
1..5 : implique entre 1 et 5 instances
6 : implique exactement 6 instances
2..*: implique 2 ou plusieurs instances
* : implique plusieurs instances (voire aucune). Est équivalent à 0..*

Chap.2, Sect.5, p.10


Association
Cardinalité

recteur
Université Personne
0..1 1
employeur professeur
0..1 1..*

Polygone forme sommet Point

* 3..*

Chap.2, Sect.5, p.11


Association
Cardinalité – association n-aire

Étudiant

*
Cours * 0..1 Professeur

inscription

• Pour un cours et un étudiant donné, il peut y avoir un (l’étudiant est inscrit) ou


aucun professeur (l’étudiant n’est pas inscrit).
• Un professeur peut donner plusieurs cours suivis par le même étudiant.
• Dans un cours, un professeur enseigne à plusieurs étudiants.
Chap.2, Sect.5, p.12
Association
Documentation par noms de rôle

„ Spécifie la fonction d’une classe dans le cadre d’une association


donnée.
„ Information indispensable (ou forme verbale orientée) pour les
associations réflexives.

épouse 0..1

Personne
0..1
mari

Chap.2, Sect.5, p.13


Association
Documentation par une forme verbale

„ Nom: Verbe ou substantif, près de la ligne qui représente l’association.


„ Direction indiquée par triangle plein: précise le sens principal de la
lecture de l’association.
„ Une association peut avoir deux noms, un par direction…

Hôtel héberge Personne


0..1 *
est hébergée par

Chap.2, Sect.5, p.14


Association
Association à navigabilité restreinte

„ Par défaut, une association est bidirectionnelle.


„ Pour réduire la portée de l’association et indiquer que les instances
d’une classe ne peuvent être identifiées par les instances de
l’autre, on restreint la navigabilité...

Électeur * vote 0..1 Candidat

• Étant donné un électeur, on peut identifier le candidat pour lequel il a voté.


• Étant donnée un candidat, on ne peut pas retrouver les électeurs ayant voté
pour lui
Chap.2, Sect.5, p.15
Association
Association qualifiée
„ Association dont la portée est restreinte par une clef (le qualifiant)…
„ Soit un classe qualifiée associée à une classe cible.
Le qualifiant est composé d’attributs précisant l’association.
Le qualifiant constitue une clef (un sélecteur) pour discriminer certains liens
parmi l’ensemble des liens dénotés par l’association.
Le qualifiant agit comme un filtre sur l’association.
Le qualifiant réduit la cardinalité effective de l’association
„ Utilisation discutable: certains l’aiment, d’autres non.

Vol no_siège: string 1..* 0..1 Passager


départ: date

classe qualifiée qualifiant classe cible


Chap.2, Sect.5, p.16
Association
Association qualifiée

Banque no_compte: string * 0..1 Personne

(banque, no_compte) -> 0 ou 1 personne


personne -> plusieurs(banque, no_compte)

Échiquier No_ligne:integer 1 1 Case


No_colonne:integer

(équiquier, no_ligne, no_colonne) -> 1 case


case -> un_seul(équiquier, no_ligne, no_colonne)
Chap.2, Sect.5, p.17
Association
Association dérivée
„ Association redondante, qui pourrait être déduites à partir des autres
associations, mais qu’on représente explicitement pour des raisons de
Clarté (lors de l’analyse)
Efficacité (pour une implémentation plus performante)
„ N.b. Les attributs d’une classe peuvent également être dérivés (si
calculables à partir des autres attributs…)

Facture 0..* \adresséeAuClient 1 Client

0..1 1
Commande
1 *
Chap.2, Sect.5, p.18
Association
Classe d’association
„ Classe associé à une association.
„ Typiquement utilisée dans le cas des associations binaires « plusieurs à
plusieurs » où chaque lien de l’association a des attributs avec des
valeurs propres.
„ Important: Chaque instance de la classe d’association est associée à
un lien unique entre deux instances de classe. Si ce n’est pas le cas, il
faut réifier l’association…
!!! Si une personne
Entreprise employeur employé Personne
peut occuper
plusieurs emplois au * *
sein d’une même
entreprise, cette !!! Une personne peut
représentation est Emploi occuper différents
FAUSSE. emplois mais un seul
dans une entreprise
Chap.2, Sect.5, p.19 donnée.
Association
Association réifiée Réifier = transformer
les concepts
abstraits en réalités
concrètes.

Entreprise Emploi
1 *

*
Personne
0..1

L’association entre Personne et Entreprise a été réifiée (introduction d’une


classe intermédiaire) pour exprimer «concrètement» le fait qu’une personne
peut occuper plusieurs emplois dans la même entreprise.
Chap.2, Sect.5, p.20
Association
Agrégation

„ Association qui exprime une union marquée et une relation de


subordination entre deux éléments (un agrégat et un élément agrégé)
„ Relation d’inclusion de type « possède » ou « a pour membre »
„ Relation asymétrique, transitive.
„ À un même moment, une élément agrégé peut être impliqué ou non
dans plus d’une association.
„ Une élément agrégé peut vivre sans agrégat et inversement i.e. le cycle
de vie d’un élément agrégé et de l’agrégat sont indépendant.

Chemin * * Segment

agrégat
Chap.2, Sect.5, p.21
Association
Composition

„ Agrégation forte entre deux éléments (un composite et un composant)


„ Relation d’inclusion de type « est le possesseur exclusif de» ou « est
composé (physiquement) de»
„ Exprime une dépendance existentielle : si l’élément composite est
détruit (ou copié), ses éléments composants le sont aussi. (Les
éléments composants peuvent cependant être détruits avant le
composite.)
„ A un même moment, un élément composant ne peut être lié qu’à un
seul élément composite.

Immeuble Appartement
1 *

composite
Chap.2, Sect.5, p.22
Association
La destruction d’un livre
entraîne la destruction de Composition
ses pages et des
paragraphes de texte Livre Page
qu’elles contiennent 1 *

Association 1 *
*
Membre
Paragraphe
1
3..*
0..1
La fin d’une association fait
Comité disparaître ses membres et son
exécutif comité exécutif. La dissolution du
comité n’engendre pas l’exclusion de
Chap.2, Sect.5, p.23 ses membres.
Association
Association, agrégation, composition

Association
Agrégation

Composition

Chap.2, Sect.5, p.24


Association
Association, agrégation, composition

Association 1 Membre
*

Membre

mon_association: Association

Chap.2, Sect.5, p.25


Association
Association, agrégation, composition
Il peut être tentant de remplacer une association (ou
agrégation, ou composition) par un attribut (dans une
classe) dont le type est une référence sur l’objet associé.
Cette façon de faire tient plus de l’implémentation que de
la modélisation et on s’abstiendra donc de le faire pendant
l’analyse et la conception afin de
Préserver le caractère bidirectionnel de l’association.
Révéler les cardinalités.
Faciliter la compréhension du modèle par les non spécialiste.
Préserver l’aspect visuel convivial de la représentation.
Pouvoir identifier, grâce au diagramme, l’impact que peut avoir le
retrait d’une classe.

Chap.2, Sect.5, p.26


Agrégation
Sémantique de l’agrégation
„ Propriétaire exclusif (composition)
Dépendance existentielle (les éléments agrégés n’appartiennent qu’à un
seul agrégat à la fois et la destruction de l’agrégat implique la destruction
des éléments agrégés).
Relation transitive
Relation asymétrique
Relation fixe (durant toute sa vie, un élément agrégé ne peut appartenir qu’à
un même et unique agrégat: pas de reconnexion.)
„ Propriétaire (composition)
Dépendance existentielle
Relation transitive
Relation asymétrique
„ Possession
Relation transitive
Relation asymétrique
„ Membre
Aucune propriété particulière. Regroupement simple d’objets.
Chap.2, Sect.5, p.27
2.5.3 Généralisation

„ Relation entre un élément de description générale (super-


classe) et un élément de description plus spécifique (sous-
classe) tout à fait cohérent avec ce dernier.
„ Pour lire la relation, on utilise le verbe « être ».

super-classe
Licence

*
+ prix(): integer
Licence Licence
académique entreprise

+ prix(): integer sous-classe sous-classe + prix(): integer


Chap.2, Sect.5, p.28
Généralisation
Distinction entre généralisation et héritage

„ Généralisation = Relation sémantique entre classes qui


implique que l’interface de la sous-classe inclut toutes les
propriétés de l’interface de la superclasse.

„ Héritage: Mécanisme selon lequel les éléments de la


superclasse sont réutilisés dans la sous-classe…
Héritage d’interface
Héritage d’implémentation

Chap.2, Sect.5, p.29


Généralisation
Objectifs sémantiques de la généralisation

Réutilisation (sous-classage)
„ Les attributs, les opérations, les relations et les contraintes
définies dans les super-classes sont héritées intégralement dans
les sous-classes.
Substitutabilité (sous-typage)
„ Les objets d'une classe peuvent être utilisés partout où les objets
de ses super-classes sont admis.
Polymorphisme.
„ Aptitude d'un même message à déclencher des opérations
différentes, selon la classe de l'objet auquel il est destiné.
„ Possibilité de définir des opérations sans implémentation =
opération abstraite (c.f. classe abstraite…)
Chap.2, Sect.5, p.30
Généralisation
Héritage d’interface
„ Forme d’héritage « sans danger ».
„ La sous-classe hérite de la signatures des opérations et des
attributs de la super-classe. Elle n’hérite d’aucune
implémentation.
„ Permet de réaliser la propriété de substitutabilité (préserve
le sous-typage)
„ Ce type d’héritage se fait souvent à partir
classe abstraite (implémentation partielle)
Interface (aucune implémentation fournie)
„ Autorise le polymorphisme.

Chap.2, Sect.5, p.31


Généralisation
Héritage d’implémentation

„ Forme d’héritage parfois « dangereuse ».


„ La sous-classe hérite du code de la superclasse (interface
et implémentation).
„ Permet la réutilisation de code.
„ On peut redéfinir l’implémentation dans les sous-classes si
nécessaire.
„ Autorise le polymorphisme.

Chap.2, Sect.5, p.32


Généralisation
Héritage d’implémentation
„ Types d’héritage d’implémentation
Par extension :
„ ajout d’attributs et de méthodes sans modifier ce qui a été hérité.
„ Toute redéfinition doit être faite avec attention pour ne pas modifier les propriétés.
Par restriction (forme problématique)
„ Redéfinition ou retrait d’attributs ou de méthodes.
Par commodité (forme problématique à éviter)
„ Absence de relation taxonomique. Ex. « Segment » sous-classe de « Point »
„ Inconvénients
Problème de la classe de base fragile
Envoi de message dans tous les sens (up-calls et down-calls).
Problème de l’héritage multiple

Chap.2, Sect.5, p.33


Généralisation
Relation non réfléxive, non symétrique mais
transitive…

Class A
Class A

Class A
Class B

Class B
Class C

Chap.2, Sect.5, p.34


Généralisation
Type d’héritage
„ une super-classe peut avoir plusieurs sous-classes.
„ une sous-classe peut avoir plusieurs super-classes; la
généralisation est alors dite multiple.
Animal

Mammifère Oiseau Carnivore Herbivore

Aigle
Vache
Chap.2, Sect.5, p.35
2.5.4 Pour préciser la spécification…
Contraintes
„ Permet de spécifier une propriété qu'un élément modélisé
doit vérifier.
„ Peut préciser le rôle ou la portée de tout élément d'un
modèle UML: classe, attribut, opération , association...
Par exemple, sur une association, elles peuvent restreindre le
nombre d'instances visées.
„ Les contraintes peuvent s'exprimer en langage naturel ou
en OCL (Object Constraint Language).
„ Graphiquement, il s'agit d'un texte encadré d'accolades,
positionné près de l’élément de modélisation concerné. Si la
contrainte concerne deux éléments, elle est positionnée sur
une ligne pointillée qui relie les deux éléments.
Chap.2, Sect.5, p.36
Pour préciser la spécification…
Contrainte

membre
Comité Personne
{sous-ensemble}

délégué

Chap.2, Sect.5, p.37


Pour préciser la spécification…
Notes
„ Permet d’afficher un commentaire ou toute information
textuelle, telle la spécification d’une opération ou une
contrainte.
Cette classe a
Solution été revue par
les ingénieurs.

+ quadratic(): integer

{retourne
sqrt(b*b -4*a*c/2*a)}
« constraint »
Une seule instance de
solution peut exister à la fois.
Chap.2, Sect.5, p.38
Pour préciser la spécification…
Stéréotypes
„ Permet d’enrichir la sémantique (pas la structure) de la notation
existante.
„ Permet de définir les distinctions d’usage.
„ Stéréotypes prédéfinis: «include», «extend»,
„ Permet de créer de nouvelles catégories d’éléments de modélisation.

«actor»
Client

client

stéréotype icône stéréotype étiquette


Chap.2, Sect.5, p.39

Vous aimerez peut-être aussi