Cours n°3
UML
1
Plan
(cid:1) Introduction
(cid:1) Modéliser avec UML
(cid:1) Diagrammes de cas d’utilisation
(cid:1) Diagrammes de classes
(cid:1) Notion de paquetage
(cid:1) Diagrammes d’objets
(cid:1) Diagrammes de séquence
(cid:1) Diagrammes de collaboration
(cid:1) Diagrammes d’états/transition
(cid:1) Autres diagrammes
UML
2
Diagramme de classes
UML
3
Vue statique
(cid:1) Vue Fonctionnelle
(cid:1) diagrammes de cas d'utilisation
(cid:1) Vues statiques du système :
(cid:1) diagrammes de classes
(cid:1) diagrammes d'objets
(cid:1) diagrammes de composants
(cid:1) diagrammes de déploiement
(cid:1) Vues dynamiques du système :
(cid:1) diagrammes de séquence
(cid:1) diagrammes de collaboration
(cid:1) diagrammes d'états-transitions
(cid:1) diagrammes d'activités
UML
4
Class diagrams
(cid:1) Expriment la structure statique du système en terme de
classes et de relations entre ces classes
(cid:1) Une classe est un type abstrait caractérisé par des
propriétés (attributs et méthodes) communes à un
ensemble d'objets et permettant de créer des objets ayant
ces propriétés
UML
5
Objets et classes
Objet : une entité concrète avec une
identité bien définie qui encapsule
un état et un comportement. L ’état
est représenté par des valeurs
d’attribut et des associations, le
comportement par des méthodes.
Un objet est une instance d ’une classe.
Classe : une description d’un ensemble
d’objets qui partagent les mêmes
attributs, opérations, méthodes,
relations et contraintes.
Une classe peut posséder des
attributs ou des méthodes « de
classe ».
MaVoiture : Voiture
marque = Renault
Modèle = Nevada
Immatriculation = 648ADX38
AnnéeModele = 1992
Kilométrage = 285 000
Voiture
marque : chaîne
Modèle : chaîne
Immatriculation : chaîne (8)
AnnéeModele : date
Kilométrage : entier
Rouler ( )
Kilometrage_annuel_moyen ( )
Convention graphique d’une classe
Nom_de_classe
Nom_de_classe
Attributs
Méthodes
UML
7
Syntaxe
(cid:1) Attribut :
(cid:1) nom : type = val_initiale
(cid:1) Méthode :
(cid:1) nom (arg : type = val_defaut, …) : type_retour
(cid:1) Niveaux d’accès :
(cid:1) Public
(cid:1) Protected
(cid:1) Private -
+
#
UML
8
Exemples / niveaux d’abstraction
voiture
Classe non documentée
UML
9
Exemples / niveaux d’abstraction
voiture
immatriculation
couleur
marque
puissance
poids
date
propriétaire
demarrer
arreter
conduire
vendre
attributs
méthodes
voiture
Classe non documentée
Classe documentée
UML
10
Exemples / niveaux d’abstraction
voiture
immatriculation
couleur
marque
puissance
poids
date
propriétaire
demarrer
arreter
conduire
vendre
voiture
+ immatriculation : string
+ couleur : string
+ marque : string
puissance : int
poids : int
- date : Date
- propriétaire : string
attributs
types
+ demarrer()
- contact() : bool
+ conduire(a : string = « marseille », b : string)
+ vendre(prix : float)
méthodes
prototype
voiture
Classe non documentée
Classe documentée
Classe détaillée
Niveaux d’accès
UML
11
Sémantique
(cid:1) Un diagramme de classes est une collection d'éléments de modélisation
statiques (classes, paquetages...), qui montre la structure d'un modèle
(cid:1) Un diagramme de classes fait abstraction des aspects dynamiques et
temporels
(cid:1) Pour un modèle complexe, plusieurs diagrammes de classes
complémentaires doivent être construits
On peut par exemple se focaliser sur :
(cid:1) les classes qui participent à un cas d'utilisation (cf. collaboration)
(cid:1) les classes associées dans la réalisation d'un scénario précis
(cid:1) les classes qui composent un paquetage
(cid:1) la structure hiérarchique d'un ensemble de classes
UML
12
Association
(cid:1) Une association exprime une connexion sémantique
entre deux classes
(cid:1) L'association est instanciable dans un diagramme
d'objets ou de collaboration, sous forme de liens entre
objets issus de classes associées
UML
13
Association classique
Personne
Entreprise
travaille
UML
14
Association en forme verbale
active
(cid:1) Précise le sens de lecture
Personne
Hôtel
< héberge
UML
15
Rôles
Personne
employé
employeur
Entreprise
Personne
client
Hôtel
personnel
UML
16
Cardinalités
(cid:1) Nombre d’éléments participant à la relation
(cid:1) x : exactement "x" (entier naturel > 0)
(cid:1) exemples : "1", "7"
(cid:1) x..y : de "x" à "y" (entiers naturels ou variables avec
y > x)
(cid:1) exemples : "0..1", "3..n", "1..31"
(cid:1) : plusieurs (équivalent à "0..n" et "0..")
(cid:1) x..* : "x" ou plus
(cid:1) exemples : "0..", "5.."
UML
17
Cardinalités
Homme
Femme
0..1
mariéA
0..1
Personne
enfant
0..*
*
parent
Publicité
2
UML
Maison
1
18
Association à navigabilité restreinte
(cid:1) Par défaut, une association est navigable dans les deux
sens
(cid:1) La réduction de la portée de l'association peut être
exprimée dans un modèle pour indiquer que les
instances d'une classe ne "connaissent" pas les
instances d'une autre
Electeur
*
UML
Candidat
0..1
vote
19
Exemple de lecture d’un diagramme
Un box peut être loué par au
Un contrat concerne la location
maximum un seul contrat ou peut
d'un seul box à la fois.
rester non loué.
Un véhicule est autorisé à aller
Un box peut être vide ou contenir
dans un box (au minimum) ou
au maximum 2 véhicule.
plus.
Un locataire peut souscrire plusieurs
Un contrat ne concerne qu'un seul
contrat mais doit en avoir souscrit au
locataire.
moins un.
(cid:1) Faites une description de ce diagramme de classes en explicitant en une phrase
chacune des multiplicités :
Box –contrat – Box ; Box – Véhicule – Box ; Contrat – Locataire – Contrat
Agrégation
(cid:1) L'agrégation est une association non symétrique,
qui exprime un couplage et une relation de
subordination
(cid:1) Représente une relation de type "ensemble /
élément"
(cid:1) A un même moment, une instance d'élément
agrégé peut être liée à plusieurs instances d'autres
classes : l'élément agrégé peut être partagé
(cid:1) Une instance « ensemble » peut exister sans
élément (et inversement) : Cycles de vies
indépendants
UML
21
Agrégation
(cid:1) Une agrégation peut notamment (mais pas
nécessairement) exprimer :
(cid:1) qu'une classe (un "élément") fait partie d'une autre
("l‘ensemble"),
(cid:1) qu'un changement d'état d'une classe, entraîne un
changement d'état d'une autre,
(cid:1) qu'une action sur une classe, entraîne une action sur une
autre
UML
22
Exemple
Figure
*
*
Point
x
y
Appartenance faible =
(cid:1) Partage possible du composant avec d’autres Agrégat/Eléments
Agrégés
(cid:1) Une instance agrégée peut exister sans son agrégat et inversement
UML
23
Composition
(cid:1) Cas particulier d’agrégation : contenance
physique
(cid:1) Représente une relation de type "composé /
composant"
(cid:1) Les cycles de vies des composants et du composé
sont liés : si le composé est détruit (ou copié), ses
composants le sont aussi
(cid:1) A un même moment, une instance de composant
ne peut être liée qu'à un seul composé
UML
24
Exemple
Voiture
Carrosserie
Moteur
Piston
UML
25
Héritage : convention graphique
Super_classe
Sous_classe
UML
26
Généralisation
Oeuvre
Titre
Auteur
Reference
Livre
NbPages
Film
Duree
Opera
Orchestre
Roman
BD
UML
27
Généralisation
Oeuvre
Titre
Auteur
Reference
Livre
NbPages
Film
Duree
Opera
Orchestre
Roman
BD
UML
28
Généralisation
Vehicule
marque
modele
VitesseMax
Voiture
Plaque
cylindree
Bateau
tirantEau
voiles
Avion
altitudeMax
portee
UML
29
Règles de généralisation (…)
(cid:1) La généralisation ne porte ni nom particulier ni valeur de
multiplicité.
(cid:1) Lagénéralisationestunerelationnonréflexive:uneclassenepeut
pasdériverd’elle-même.
(cid:1) Lagénéralisationestunerelationnonsymétrique:siuneclasseB
dérived’uneclasseA,alorslaclasseAnepeutpasdériverdela
classeB.
(cid:1) Lagénéralisationestparcontreunerelationtransitive:siCdérive
d’uneclasseBquidériveelle-mêmed’uneclasseA,alorsCdérive
égalementdeA.
Relation d'héritage
Les sous-classes « héritent » des propriétés des super-classes
(attributs, méthodes, associations, contraintes)
Compte
solde
créditer()
débiter()
*
Banque
{inv: solde > -5000}
CompteEpargne
tauxIntérêt
ajouterIntérêts ()
{inv: tauxIntérêt < 100}
*
Banque
CompteEpargne
solde
tauxIntérêt
créditer()
débiter()
calculIntérêts ()
{inv: solde > -5000 et
tauxIntérêt < 100}
Relation d'héritage et
redéfinitions
Une opération peut être "redéfinie"
dans les sous-classes
Permet d'associer des méthodes
spécifiques à chaque pour réaliser une
même opération
Compte
solde
créditer(
)
débiter()
CompteEpargne
créditer()
débiter()
ajouterIntérêts ()
Relation de sous-typage, Vision
ensembliste
Compte
tout objet d’une sous-classe
appartient également à la
super-classe
M1
M0
Compte
Epargne
c3
ce1
ce2
ce3
c4
c4
c1
c2
Compte
CompteEpargne
Classes associatives
Pour associer des attributs et/ou des méthodes aux associations
=> classes associatives
Personne
employés
Publicité
*
sociétés
0..2
Société
Emploi
salaire
augmenter()
Le nom de la classe correspond au nom de l’association
(problème: il faut choisir entre forme nominale et forme verbale)
Classes associatives
employés
Personne
*
sociétés
0..2
Société
M1
M0
e1
salaire =
salaire = 1500
1500
employé
employé
Mark
sana
employé
e2
salaire = 5000
e3
salaire = 1000
Emploi
salaire
augmenter()
xerox
Le salaire est une information correspondant
• ni à une personne,
• ni à une société,
ST
mais à un emploi (un couple personne-société).
Classes associatives
RAPPEL: Pour une association donnée, un couple d'objets ne peut être connectés
que par un seul lien correspondant à cette association.
(sauf si l'association est décorée par {nonunique} en UML2.0)
p1
Emploi>
Emploi>
s1
Cette contrainte reste vraie dans le cas où l’association est décrite à partir d ’une
classe associative.
: Emploi
salaire = 1500
p1
s1
: Emploi
salaire = 700
Classes associatives
Personne
employé
*
Emploi
salaire
sociétés
0..2
Société
e1
p1
s1
Ci-dessus, une personne peut avoir deux emplois, mais pas dans la même société
employé
0..2
Personne
1
Emploi
salaire
*
société
1
Société
Ci-dessus, une personne peut avoir deux emplois dans la même société
p1
e1
e2
s1
Classes associatives : traduction
A
rolea(s)
carda
roleb(s)
cardb
B
Transformation
systèmatique pour
revenir aux
concepts de base
A
rolea
c(s)
1
cardb
C
C
c(s)
roleb
carda
1
B
Il ne peut y avoir qu'un objet C entre un
objet A et un objet B donné
Classes associatives : traduction
employés
Personne
*
sociétés
0..2
Société
Emploi
emplois
emplois
Personne
employé
1
0..2
Emploi
société
*
1
Société
Il ne peut y avoir qu'un Emploi entre une
Personne et une Société
Exemple 1
Virement
montant
Ou ?
compteDébité
*
{non unique}
compteDébité
Compte
*
compteCrédité
Virement
montant
*
1
*
1
Compte
compteCrédité
M1
M0
Situation
possible ?
v1
compteDébité
c1
compteCrédité
c2
Peut-on avoir plusieurs
virements entre deux
comptes ?
compteDébité
compteCrédité
v2
Exemple 2
Participation
nbDeButs
Joueur
Joueur
joueurs
*
joueur
matchs
*
Match
Participation
*
*
match
Match
1
participations
nbDeButs
participations
1
Il ne peut y avoir qu'une Participation entre
Joueur et un Match
M0
Situation
possible ?
joueur
ali
joueur
p1
p2
match
finale
match
Un joueur peut il avoir
plusieurs participations à un
match donné ?
Exemple 3
CarteGrise
dateDélivrance
Personne
propriétaires
*
voitures
Voiture
{non unique}
{non unique}
*
Personne
propriétaire
*
CarteGrise
*
voiture
Voiture
1
carteGrises
dateDélivrance
Publicité
carteGrises
1
M0
Situation
possible ?
propriétaires
ali
propriétaires
cg1
cg2
voitures
la106
voitures
Exemple 4
Veuvage
date
montantAssurance
Ou ?
conjointLaisséVeuf
0..1
Personne
Veuvage
date
montantAssurance
*
0..1
conjointLaisséVeuf 1 1
conjointDécédé
*
conjointsDécédés
Personne
M0
Situation
possible ?
v1
conjointLaisséVe
uf
ali
conjointLaisséVe
uf
v2
conjointsDécédé
s
sana
conjointsDécédé
s
Peut on toucher deux
fois l'assurance ?
Classes associatives
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.
Personne
employé
*
société
0..2
Société
FicheDePaye
*
Emploi
salaire
augmenter()
Associations n-aires
(cid:1) Généralisation des classes associatives binaires : Une
association peut relier une, deux ou plusieurs classes
Créneau
-date
-heure
-durée
Salle
Filière
Enseignant
Association n-aire
(cid:1) association reliant plus de deux classes
Personne
employé
s
*
sociétés
0..2
Société
Emploi
salaire
augmenter()
46
Association qualifiée
(cid:1) Une association qualifiée met en relation deux classes
sur la base d’un attribut spécifique appelé « clé »
Banque
numCompte
*
1..n
Personne
UML
47
Contraintes sur les associations
(cid:1) Les contraintes sont des expressions qui précisent le
rôle ou la portée d'un élément de modélisation (elles
permettent d'étendre ou préciser sa sémantique)
(cid:1) Sur une association, elles peuvent restreindre le
nombre d'instances visées ("expressions de
navigation")
(cid:1) Les contraintes peuvent s'exprimer en langage naturel.
Graphiquement, il s'agit d'un texte encadré d'accolades
UML
48
Principales contraintes
(cid:1) Contrainte {ordonnée} : une relation d’ordre
décrit les objets
(cid:1) Contrainte {sous-ensemble} : une collection est
incluse dans une autre collection
(cid:1) Contrainte {ou-exclusif} : pour un objet donné,
une seule association est valide
UML
49
Exemples
Peintre
1
peint
1..n
{ordonnée}
Personne
militaire
général
Personne
enseignant
{sous-ensemble}
{ou-exclusif}
étudiant
Tableau
Armée
BTS
50
Synthèse sur les associations
sens de
lecture
Nom de rôle
Nom d ’association
Cardinalités
ClasseA
x : string
roleA
< AssociationX
0..*
ClasseB
Composition
(ou agrégation )
AssociationX
attributZ
Navigation
Classe associative
A vous de jouer
’’Réservation de vols dans une agence de voyage’’
Diagrammes de
classes ?
1° Des compagnies aériennes proposent différents vols.
2° Un vol est ouvert à la réservation et fermé sur ordre de la compagnie.
3° Un client peut réserver un ou plusieurs vols, pour des passagers
différents.
4° Une réservation concerne un seul vol, et un seul passager.
5° Une réservation peut être annulée ou confirmée.
6° Un vol a un aéroport de départ et un aéroport d’arrivée.
7° Un vol a un jour et une heure de départ et un jour et une heure
d’arrivée.
8° Un vol peut comporter des escales dans des aéroports
9° Une escale a une heure d’arrivée et une heure de départ.
10° Chaque aéroport dessert une ou plusieurs villes
(cid:1) Modélisation de la phrase :
1° Des compagnies aériennes proposent différents vols.
CompagnieAerienneet Volssont 2 objets métiers : 2 classes
CompagnieAerinne
Propose
Vol
1..*
• Un vol est réalisé par une seule compagnie mais partagé par plusieurs affréteurs
CompagnieAerinne
Propose
1..*
affréteur
Vol
1..*
(cid:1) Modélisation de la phrase :
2° Un vol est ouvert à la réservation et fermé sur ordre de la compagnie.
CompagnieAerinne
Propose
1..*
affréteur
1..*
Vol
état (ouvert, fermé)
(cid:1) Tout objet peut avoir un état (diagramme d’états).
(cid:1) Dans un diagramme de classes tout concept dynamique est modélisé en opération.
(cid:1) Il faut représenter la 2° phrase par 2 opérations : ouvrirReservation( )et fermerReservation( )
(cid:1) Dans quelle classe ? Responsabilité d’une classe
CompagnieAerinne
Propose
1..*
affréteur
Vol
1..*
ouvrirVol( )
fermerVol( )
(cid:1) Les opérations sont déclarées dans l’objet dans lequel elles doivent s’exécuter
(cid:1) Les autres pourront déclencher ces opérations par envoi de messages
(cid:1) La classe CompagnieAerienne a une association avec la classe vol.
(cid:1) Modélisation des phrases :
7° Un vol a un jour et une heure de départ et un jour et une heure d’arrivée.
(cid:1) Les dates et les heures de départ et d’arrivée ne représentent que des valeurs : attributs.
CompagnieAerinne
Propose
1..*
affréteur
1..*
Vol
dateDepart
heureDepart
dateArrivee
heureArrivee
ouvrirVol( )
fermerVol( )
(cid:1) Pour savoir si un élément doit être représenté en attribut ou en objet :
Publicité
(cid:1) S’il n’ y a que sa valeur qui est intéressante : c’est plutôt un attribut.
(cid:1) Si plusieurs questions peuvent concerner l’élément, alors il faut le représenter en objet.
(cid:1) Modélisation des phrases :
6° Un vol a un aéroport de départ et un aéroport d’arrivée.
(cid:1) Par quoi peut-on représenter l’élément ‘’Aéroport’’ ?
3 réponses sont envisageables :
1.
Soit avec une classe et une association de multiplicité 2
Aéroport
2
nom
{ ordered}
Vol
dateDepart
heureDepart
dateArrivee
heureArrivee
aeroportDepart
aeroportArivvee
ouvrirVol( )
fermerVol( )
(cid:2) Modélisation peu parlante.
(cid:1) Modélisation des phrases :
6° Un vol a un aéroport de départ et un aéroport d’arrivée.
2. Soit avec 2 classes
Vols
dateDepart
heureDepart
dateArrivee
heureArrivee
aeroportDepartr
aeroportArivvee
ouvrirReservation( )
fermerReservation( )
1
1
AeroportDepart
AeroportArrivee
Aéroport
nom
(cid:2) Modélisation non correcte. Tout aéroport peut être de départ et d’arrivée.
(cid:1) Modélisation des phrases :
6° Un vol a un aéroport de départ et un aéroport d’arrivée.
2. Soit avec 2 associations
Vol
dateDepart
heureDepart
dateArrivee
heureArrivee
ouvrirVol( )
fermerVol( )
Départ
Aéroport
1
Nom
…
Arrivée
1
(cid:2) Le rôle de chaque association précise son sens.
(cid:1) Modélisation des phrases :
10° Chaque aéroport dessert une ou plusieurs villes
(cid:1) On ne peut pas savoir la multiplicité de ‘’Aéroport’’
Aéroport
dessert
Ville
0..*
1..*
(cid:1) Si on considère que desservir une ville signifie l’aéroport le plus proche, il n’ en y a qu’un :
la multiplicité est de 1
(cid:1) Si on considère que desservir une ville signifie les aéroports dans un rayon de 35 km :
la multiplicité est de 0..*
(cid:1) Modélisation des phrases :
8° Un vol peut comporter des escales dans des aéroports
9° Une escale a une heure d’arrivée et une heure de départ.
(cid:1) Une escale a les propriétés heure d’arrivée et heure de départ, c’est donc un objet.
Vol
dateDepart
heureDepart
dateArrivee
heureArrivee
ouvrirVol( )
fermerVol( )
0..*
0..*
1..*
Depart
Aéroport
Arrivee
1
1
nom
1
(cid:1) Quelles sont alors les multiplicités entre ‘’Vols’’ et
‘’Escale’’, entre ‘’Escale’’ et ‘’Aeroport’’ et entre
‘’Aeroport’’ et ’Vols’’ ?
Escale
heureArrivee
heureDepart
0..*
0..*
(cid:1) Modélisation des phrases :
8° Un vol peut comporter des escales dans des aéroports
9° Une escale a une heure d’arrivée et une heure de départ.
(cid:1) ‘’Escale’’a peu d’informations propres. Elle n’est qu’une partie de ’’Vol’’.
(cid:1) On peut la représenter comme une spécialisation de ’’Aéroport’’. Mais elle n’est pas totalement un aéroport.
(cid:1) La meilleure solution serait de la modéliser comme une classe d’association entre et ’Vols’’et ‘’Aéroport’’.
Vol
dateDepart
heureDepart
dateArrivee
heureArrivee
ouvrirVol( )
fermerVol( )
0..*
0..*
0..*
Départ
1
Aéroport
Arrivée
nom
1
Escale
0..*
{Ordered}
Escale
heureArrivee
heureDepart
(cid:1) Modélisation des phrases :
4° Une réservation concerne un seul vol, et un seul passager.
5° Une réservation peut être annulée ou confirmée.
(cid:1) La réservation et le passager sont 2 concepts métier : 2 classes d’objets
(cid:1) Un réservation concerne un seul vol et un seul passager: donc 2 associations entre ‘’Vol’’et
’’Réservation’’et entre ’’Réservation’’et ‘’Passager’’.
(cid:1) La 5° phrase se traduit par l’ajout de 2 opérations annuler( )et confirmer( ) dans ‘’Reservation’’.
concerne
Vol
dateDepart
heureDepart
dateArrivee
heureArrivee
1
ouvrirVol( )
fermerVol( )
Réservation
Annuler( )
Confirmer( )
concerne
1
Passager
(cid:1) Modélisation des phrases :
3° Un client peut réserver un ou plusieurs vols, pour des passagers différents.
(cid:1) Il faut discerner un client d’un passager
Client
1
a effectué
0..*
Vol
concerne
0..*
1
Réservation
Annuler( )
Confirmer( )
0..*
concerne
1
Passager
(cid:1) Le diagramme des classes complet est :
Client
nom Prénom
adresse
téléphone
1
a effectué
0..*
Réservation
date
numéro
Annuler( )
Confirmer( )
0..*
concerne
1
Passager
nom Prénom
CompagnieAerinne
nom
1..*
Propose
1..*
Vol
dateDepart
heureDepart
dateArrivee
heureArrivee
ouvrirVol( )
fermerVol( )
concerne
0..*
1
Aéroport
nom
0..*
0..*
départ
1
arrivée
1
escale
0..*
0..*
{ordered}
InfosEscale
heureArrivee
heureDepart
Ville
nom