UML : Diagrammes de Classes - LOMAG

Transcription

UML : Diagrammes de Classes - LOMAG
Concepts de base
UML :
Diagrammes de Classes
• UML est basé sur différents concepts de base :
– Objet, Classe
– Lien, Association
– Contrainte
Objet, Classe, Attribut, Méthode
Lien, Association, Cardinalité
Généralisation, Composition, Aggrégation,
Classe associative, Association qualifiée…
• UML propose des notations et des diagrammes
– Diagramme de classes (description au niveau modèlisation, cas général)
– Diagramme d’objets (description au niveau instance, exemples)
Jean -Marie.Favre@imag .fr
[email protected] r
Diagrammes de Classes
Notations simplifiées
pour les classes
Notation pour les classes
Compte
numéro : entier
solde : réel
découvertMax : entier
Nom de la classe
Compte
Attributs
numéro
solde
...
nom
type
consulterSolde() : entier
créditer( somme : entier)
débiter( somme : entier)
2
Compte
Compte
créditer()
débiter()
...
Méthodes
nom
paramètre
type du résultat
Compte
Compte
numéro
solde : réel
découvertMax : entier
numéro
solde
...
créditer()
débiter()
...
consulterSolde() : entier
créditer( somme : entier)
débiter( somme )
Conventions :
{ solde > découvertMax }
[email protected] r
• les noms de classes commencent par une majuscule
• les noms d ’attributs et de méthodes commencent par une minuscule
Contraintes
Diagrammes de Classes
3
[email protected] r
Diagrammes de Classes
Notations pour les objets
4
Liens (entre objets)
Un lien indique une connexion entre deux objets
leCompteDePaul
: Compte
APourCompte>
paul : Client
leCompteDePaul : Compte
numéro = 6688
solde = 5000
découvertMax = -100
APourCompte>
pierre : Client
c2 : Compte
APou
leCompteDePaul : Compte
marie : Client
rCom
pte >
c3 : Compte
Conventions :
Convention :
• les noms d ’objets commencent par une minuscule et sont soulignés
[email protected] r
c1 : Compte
Diagrammes de Classes
5
• les noms des liens sont des formes verbales et commencent par une majuscule
• > indique le sens de la lecture (ex: « paul APourCompte c1 » )
[email protected] r
Diagrammes de Classes
6
1
Rôles
Associations (entre classes)
Chacun des deux objets joue un rôle diffèrent dans le lien
Une association décrit un ensemble de liens de même sémantique
APourCompte>
pierre : Client
titulaire
APourCompte>
Client
c1 : Compte
compte
pierre assume le rôle de titulaire pour le compte c1
c1 assume le rôle de compte pour pierre
Diagramme
de classes
(modèlisation)
Compte
APourCompte>
paul : Client
Conventions :
c1 : Compte
Diagramme
d ’objets
(instances)
APourCompte>
pierre : Client
• choisir un groupe nominal pour désigner un rôle
• si un nom de rôle est omis, le nom de la classe fait office de nom
[email protected] r
Diagrammes de Classes
c2 : Compte
AP ou
rC om
pte >
marie : Client
7
c3 : Compte
[email protected] r
Diagrammes de Classes
Liens vs. Associations
8
Cardinalités d’une association
• Un lien lie deux objets
• Une association lie deux classes
• Précise combien d’objets peuvent être liés à un seul objet source
• Cardinalité minimale et cardinalité maximale ( C min..C max)
• Un lien est une instance d’association
• Une association décrit un ensemble de liens
1
Client
• Des liens peuvent être ajoutés ou créés pendant l’exécution,
(ce n ’est pas le cas des associations)
APourCompte>
titulaire
0..*
comptes
« Un client a 0 ou plusieurs comptes»
« Un compte a toujours 1 et 1 seul titulaire »
Compte
APourCompte>
paul : Client
c1 : Compte
APourCompte>
pierre : Client
c2 : Compte
APourC
marie : Client
[email protected] r
Diagrammes de Classes
9
[email protected] r
ompte>
c3 : Compte
Diagrammes de Classes 10
Utiliser les rôles pour «naviguer»
Contraintes entre associations
Les cardinalités ne permettent pas d’exprimer toutes les contraintes...
1
Client
APourCompte>
titulaire
0..*
Compte
comptes
1
Client
paul.comptes = {c1}
pierre.comptes = {c2,c3}
marie.comptes = {}
c1.titulaire = paul
c2.titulaire = pierre
c3.titulaire = pierre
[email protected] r
titulairePrincipal
0..*
Compte
0..* co-titulaires
0..*
1..* titulaires
0..*
numéro
solde
...
APourCompte>
paul : Client
c1 : Compte
APourCompte>
pierre : Client
c2 : Compte
AP ou
marie : Client
rC om
pte >
c3 : Compte
Diagrammes de Classes 11
… décrire les contraintes
en langue naturelle
(ou en OCL le langage de
contrainte d’UML)
[email protected] r
(1) Un client ne peut pas être à la fois titulaire
principal et co-titulaire d ’un même compte.
(2) Les titulaires d ’un compte sont le titulaire
principal et les co-titulaires le cas échéant
Diagrammes de Classes 12
2
Diagramme de classes
Client
1..4
0..*
titulaires
1 signataire
Compte
numéro
solde
...
1
0..*
CarteBleue
Code
retraitMax
Banque
1..*
Diagrammes d’objets
1..*
EstAcceptéPar>
: Distributeur
: CarteBleue
numéro
nom
signataire
0..*
0..*
titulaires
fred : Client
Consortium
c4 : Compte
: Banque
c1 : Compte
: Banque
: Consortium
: CarteBleue
signataire
0..1
virementPossible
1
paul : Client
titulaires
EstAcceptéPar>
0..*
Distributeur
titulaires
pierre : Client
1..*
c2 : Compte
tit ula
: Consortium
ire s
titulaires
(1) Le signataire de la carte bleue associée à un compte est l ’un des titulaires de ce compte.
(2) Une carte bleue est acceptée au moins dans tous les distributeurs appartenant aux
consortiums de la banque correspondant au compte associé à la carte bleue.
(3) Un virement est possible entre deux comptes distincts si les banques correspondantes
appartiennent
à un même consortium.
[email protected]
r
Diagrammes de Classes 13
marie : Client
c3 : Compte
signataire
: Banque
: CarteBleue
EstAcceptéPar>
sophie : Client
: Distributeur
EstAcceptéPar>
[email protected] r
Diagrammes de Classes 14
Diagrammes de classes vs. d’objets
Diagrammes de classes vs. d’objets
Compte
• Un diagramme de classes
Client
1..4
0..*
– défini l’ensemble de tous les états possibles
– les contraintes doivent toujours être vérifiées
Banque
1..*
numéro
solde
...
titulaires
1..*
numéro
nom
0..*
signataire
1
1
0..*
Consortium
CarteBleue
0..*
• Un diagramme d’objets
virementPossible
0..1
Code
retraitMax
– décrit un état possible à un instant t, un cas particulier
– doit être conforme au modèle de classes
EstAcceptéPar >
1
0..*
Distributeur
1..*
• Les diagrammes d’objets peuvent être utilisés pour
– expliquer un diagramme de classe (donner un exemple)
– valider un diagramme de classe (le "tester")
>
:
Cli
ent
:
Cli
ent
:
Cli
ent
[email protected] r
Diagrammes de Classes 15
s :
i
g
n
a
t
a
i
r
e
:
:
:
>
:
:
:
:
t
i
t
u
tl
ia
ti
r
u
le
s
a
i
r
e
s
>
:
:
:
Cli
ent
t
i
tt
iu
tl
a
u
li
r
a
ie
rs
e
s
:
Co
mp
t :e
Co
mp
:
te
Co
mp
>
> te
t1
:
B
a
n
q
:u
Be
a
:n
Diqs
trib
u
uet e
ur
:
Co
ns
orti
um
:
Co
: ns
Bo r t i
aum
:n
Diqs
trib
u
uet e
ur
:
Cli
ent
:
Cli
ent
:
Cli
ent
:
Cli
ent
t
i
t
u
tl
ia
ti
r
u
le
s
a
i
r
e
s
:
Co
mp
t :e
Co
mp
:
te
Co
mp
>
> te
:
[email protected] r
t2
:
B
a
n
q
:u
Be
a
n:
Di
s
q
trib
u
ete
u
ur
:
Co
ns
orti
um
:
Co
ns
orti
um
:
Cli
ent
:
Cli
ent
:
Cli
ent
:
Cli
ent
Personne
"Super classe"
t
i
t
u
tl
ia
ti
ur
le
as
i
r
e
s
Femme
"Sous classes"
:
B
a
n
q
:
u
B
e
a
:n
Diqs
trib
u
uet e
ur
:
Co
ns
orti
um
:
...
:
Co
ns
orti
um
t
3
Diagrammes
de Classes 16
Les sous-classes « héritent » des propriétés des super-classes
(attributs, méthodes, associations, contraintes)
Compte
Compte
solde
Compte
Epargne
*
Banque
CompteEpargne
{solde > -5000}
tauxIntérêt
Diagrammes de Classes 17
[email protected] r
solde
tauxIntérêt
*
Banque
créditer()
débiter()
calculIntérêts ()
CompteEpargne
ajouterIntérêts ()
[email protected] r
:
:
Co
mp
t :e
Co
mp
:
te
Co
mp
>
>t e
Héritage
créditer()
débiter()
Homme
:
:
Généralisation / Spécialisation
Une classe peut être la généralisation d’une ou plusieurs autres
classes. Ces classes sont alors des spécialisations de cette classe.
:
:
:
{tauxIntérêt < 100}
{solde > -5000 et
tauxIntérêt < 100}
Diagrammes de Classes 18
3
Vision ensembliste
Vision ensembliste :
tout objet d’une sous-classe appartient également à la super-classe
=> inclusion des ensembles d’objets
Compte
Synthèse des concepts de base
• Classe
• Association
– attribut
– méthode
• Généralisation
– rôle
– cardinalité
c3
c2
o1
ce2
ce3
Compte
Epargne
Compte
o3
o2
o5
Objets
CompteEpargne
Diagrammes de Classes 19
o1
o2
o2
c1
[email protected] r
o3
o1
o4
c2
ce1
Liens
Inclusion
ensembliste
[email protected] r
Diagrammes de Classes 20
Exemple
Exemple
subordonnés
parents
*
Personne
directeur
1..*
employés
0..2
paul
mère 0..1
0..1
Société
parents
père 0..1
0..1
Personne
enfants
[email protected] r
Diagrammes de Classes 21
Diagrammes de classes:
concepts additionels
Concepts à utiliser à bon escient,
lorsque nécessaire
et uniquement lorsque nécessaire...
mari
e
joe
enfants
enfants
parents
*
0..1
(1) Le directeur de tout employé est employé dans la même société.
(2) Dans toute société il y a au moins une personne qui n ’est dirigée par
personne (le directeur de la société).
(3) Une personne ne peut pas être directeur d ’elle même
...
épouse
mère
épouse
0..1
sexe
époux
pére
époux
[email protected] r
Diagrammes de Classes 22
Rappels
•
•
•
•
•
UML est un ensemble de notations
De nombreuses utilisations possibles
Notation simple vs. complexe
Notation plus ou moins formelle
Notation extensible
[email protected] r
Diagrammes de Classes 24
4
Savoir s'adapter
S'adapter
• au niveau d'abstraction
• au domaine d'application
• à ses collègues
• aux outils utilisés
+ # - Visibilité des éléments
• Restreindre l'accés aux éléments d'un modèle
• Contrôler et éviter les dépendances entre paquetages
– pour écrire des diagrammes UML,
– pour générer du code, des schémas de bases de données, etc.
...
Savoir lire vs. savoir écrire
Ingénierie vs. Retro-ingénierie
[email protected] r
Diagrammes de Classes 25
+
#
-
public
visible
protégé
visible dans la classe et ses sous-classes
privé
visible dans la classe uniquement
• N'a pas de sens dans un modèle abstrait
• Utile lors de la conception.
• N'utiliser que lorsque nécessaire.
[email protected] r
Diagrammes de Classes 26
Déclaration d'attributs
[ visibilité ] nom [card] [ : type ] [ = valeur-initiale ] [ { props... } ]
exemples:
• age
• - age : Integer = 0
• # age [0..1] : Integer
• # numsecu : Integer {frozen}
• # motsClés [*] : String {addOnly}
Déclaration d'opérations
[ visibilité ] nom [ ( params ) ] [ : type ] [ { props... } ]
params := [ in | out| inout ] nom [ : type] [ =defaut ] [{ props... } ]
exemples:
• getAge()
• + getAge() : Integer
• - updateAge( in date : Date ) : Boolean
• + getAge() : Integer {isQuery}
• Adapter le niveau de détail au niveau d'abstraction
[email protected] r
Diagrammes de Classes 27
• Adapter le niveau de détail au niveau d'abstraction
[email protected] r
Diagrammes de Classes 28
Navigation
Composition
Notion intuitive de "composants" et de "composites"
Association unidirectionnelle
On ne peut naviguer que dans un sens
1
Voiture
titulaire
Client
1
*
[email protected] r
Diagrammes de Classes 29
Roue
Pneu
1
Jante
Compte
Ce détail n’est a priori utile que lors de la conception
En cas de doute, ne pas mettre de flêche !!!
4
composition = cas particulier d’association
+ contraintes décrivant la notion de "composant"...
[email protected] r
Diagrammes de Classes 30
5
Composition
Contraintes liées à la composition :
1. Un objet composant ne peut être que dans un seul objet composite
2. Un objet composant n’existe pas sans son objet composite
3. Si un objet composite est détruit, ses composants aussi
1
4
Voiture
Roue
Composition
Contraintes:
1. Un objet composant ne peut être que dans un seul objet composite
2. Un objet composant n’existe pas sans son objet composite
3. Si un objet composite est détruit, ses composants aussi
1..*
Pneu
Document
1..*
Section
Chapitre
1
0..*
Jante
Figure
0..1
[email protected] r
Diagrammes de Classes 31
[email protected] r
Diagrammes de Classes 32
Composition
1
1..*
Document
1..*
Chapitre
0..*
Composition
Section
Point
3..*
Polygone
1
x
y
Figure
1..*
Cercle
rayon
: section
: chapitre
: section
: figure
: document
: chapitre
Les composants
forment un arbre
: section
: figure
[email protected] r
Diagrammes de Classes 33
Autres notations pour la
Composition
1
Voiture
1
Voiture
Roue
sièges
Siège
Voiture
[email protected] r
Volant
0..1
4
Roue
*
1
Voiture
Volant
volant : Volant
roue [4] : Roue
sièges [*] : Siège
Diagrammes de Classes 34
Associations intra vs. inter composites
Volant
4
*
[email protected] r
*
Voiture
Constructeur
1
0..1
Roue 4
1
*
Constructeur
1
Roue 4
*
sièges : Siège
Diagrammes de Classes 35
Volant
[email protected] r
Diagrammes de Classes 36
6
Exemple
Aggregation
aggregation = cas particulier d’association
+ contraintes décrivant la notion d'appartenance... ?
Polygone
succ
1
1
initial 1
3..*
pointsLiés *
Point
*
x
y
deplacer()
supprimer()
*
Partage possible
Pas de concensus sur la signification exacte de l'aggrégation
Utiliser avec précautions (ou ne pas utiliser...)
deplacer()
supprimer()
[email protected] r
*
Figure
Point
Diagrammes de Classes 37
[email protected] r
Diagrammes de Classes 38
Classes associatives
Classes associatives
employé
Pour associer des attributs et/ou des méthodes aux associations
=> classes associatives
Personne
société
0..2
*
Société
Emploi
salaire
employé
Personne
société
0..2
*
augmenter()
Société
e1
salaire = 10000
Emploi
s1
salaire
e2
employé
augmenter()
salaire = 2000
employé
pierre
s1
e3
Le nom de la classe correspond au nom de l’association
[email protected] r
Diagrammes de Classes 39
Le salaire est une information correspondant
• ni à une personne,
• ni à une société,
mais à un emploi (un couple personne -société).
salaire = 16000
marie
employé
[email protected] r
Diagrammes de Classes 40
Classes associatives
Classes associatives
employé
Pour une association donnée, deux objets ne peuvent être connectés
que par un seul lien correspondant à cette association.
Personne
société
Emploi
Emploi>
e1
salaire
Emploi>
p1
Société
0..2
*
p1
Ci-dessus, une personne peut avoir deux emplois, mais pas dans la m ême société
Cette contrainte reste vraie dans le cas où l’association est décrite à
partir d ’une classe associative.
e1
p1
salaire = 10000
employé
Personne
s1
1
: Emploi
0..2
Emploi
salaire
*
société
Société
1
Ci-dessus, une personne peut avoir deux emplois dans la même société
salaire = 2000
[email protected] r
s1
e2
: Emploi
p1
s1
s1
Diagrammes de Classes 41
[email protected] r
Diagrammes de Classes 42
7
Classes associatives
Virement
Ou ?
montant
Virement
employé
*
compteDébité 1
*
Les classes associatives sont des associations mais aussi des classes.
Elles ont donc les mêmes propriétés et peuvent par exemple être liées
par des associations.
montant
*
compteDébité
Classes associatives
Personne
société
Société
*
*
1 compteCrédité
Emploi
compte
compte
*
responsable
salaire
augmenter()
compteCrédité
subordonnés
[email protected] r
Diagrammes de Classes 43
*
[email protected] r
Diagrammes de Classes 44
Contraintes sur les associations
Contraintes prédéfinies sur les associations. Par exemple :
• { frozen } : fixé lors de la création de l ’objet, ne peut pas changer
• { ordered } : les éléments de la collection sont ordonnés
• { addOnly } : impossible de supprimer un élément
0..1
Synthèse sur les associations
sens de
lecture
Nom de rôle
roleA
ClasseA
Nom d’association
<AssociationX
Cardinalités
0..*
ClasseB
{frozen}
AssociationX
lignes
RelevéDe
Compte
*
{ordered,addOnly}
Composition
(ou aggregation
Ligne
Opération
attributZ
)
Navigation
Contrainte
Il est possible de définir de nouvelles contraintes
[email protected] r
Diagrammes de Classes 45
Diagrammes de Classes 46
Exemple
Graphe
1
Noeud
1
* succs
Arc
Repertoire
*
*
{ordered,frozen}
Associations qualifiées
Un qualifieur est un attribut ou un ensemble d'attributs dont la
valeur sert à déterminer l'ensemble des instances associées à une
instance via une association.
*
{frozen}
Polygone
Classe associative
[email protected] r
preds
nom
0..1
Fichier
2..* {ordered}
Poignées
Points
0..1
*
Les attributs du qualifieur sont des attributs de l'association.
[email protected] r
Diagrammes de Classes 47
[email protected] r
Diagrammes de Classes 48
8
Associations vs.
Associations qualifiées
Banque
ncpt
*
Personne
0..1
clients
Banque
*
Cardinalité des
Associations Qualifiées
Banque
nc
0..1
Compte
Personne
*
ncpt
Client
Echiquier
ncpt
Banque
nl : NumLigne
nc : NumCol
1
Case
1
Personne
*
*
Client
Banque
*
Banque
Personne
ncpt
*
*
titre
*
[email protected] r
Diagrammes de Classes 49
[email protected] r
Association1901
membres
titre:Titre
Employe
Diagrammes de Classes 50
Exemple
*
*
*
*
Personne
*
1
Héritage et redéfinition
Une sous classe peut redéfinir une propriété, à condition toutefois
de rester compatible avec la définition originale
Figure
Titre = enum {President, Tresorier, Secretaire }
surface()
déplacer()
membres
fred
membres
a1
sylvia
#Tresorier
#President
ahmed
#Secretaire
joe
[email protected] r
Diagrammes de Classes 51
Polygone
Cercle
surface()
[email protected] r
Une classe peut hériter de plusieurs super-classes
Héritage simple vs. héritage multiple
Une classe peut elle hériter de plusieurs classes ?
Classification simple vs. classification multiple
Un objet peut-il être simultanément instance de plusieurs classes?
Classification statique vs. classification dynamique
Un objet peut-il changer de classe pendant l’exécution ?
Appareil
Électrique
Chauffage
Électrique
Diagrammes de Classes 52
Les modèles orientés-objets
ne font pas tous les mêmes hypothèses
Appareil
PoelA
Mazout
Carre
surface()
Points liés à l’héritage
et à la classification
Héritage multiple
Chauffage
surface()
FourA
MicroOndes
Certains langages de programmation interdisent l’héritage multiple
[email protected] r
Diagrammes de Classes 53
[email protected] r
Diagrammes de Classes 54
9
Points liés à l’héritage
et à la classification
Exemple
Sauf si le contraire est indiqué explicitement,
en UML les hypothèses par défaut sont :
parents 0..2
Héritage multiple
une classe peut hériter de plusieurs classes
Classification simple
un objet est instance d’une seule classe
Classification statique
un objet est créé à partir d’une classe donnée et n’en change pas
[email protected] r
Diagrammes de Classes 55
*
Personne
*
*
mère 0..1
Femme
[email protected] r
enfants
0..1
épouse
0..1
époux
0..1
père
Homme
Diagrammes de Classes 56
Exemple
1
Compte
créditer()
débiter()
Opération
date
montant
{addOnly,ordered}
*
solde
destinataire
1
{montant<0}
Débit
CompteEpargne
Retrait
Virement
Crédit
{montant>0}
Retrait
Espèce
tauxIntérêt
ajouterIntérêts ()
Retrait
Guichet
[email protected] r
Retrait
*
Distributeur
1
Distributeur
Diagrammes de Classes 57
10