Académique Documents
Professionnel Documents
Culture Documents
UML
Diagrammes de classes
Delphine Longuet
delphine.longuet@lri.fr
Objets et classes
Conception orientée objet : Représentation du système comme un
ensemble d'objets interagissant
Diagramme de classes
●
Représentation de la structure interne du logiciel
●
Utilisé surtout en conception mais peut être utilisé en analyse
Diagramme d'objets
●
Représentation de l'état du logiciel (objets + relations)
●
Diagramme évoluant avec l'exécution du logiciel
- création et suppression d'objets
- modification de l'état des objets (valeurs des atributs)
- modification des relations entre objets
D. Longuet - UML 2
Objets et classes
Objet
●
Entité concrète ou abstraite du domaine d'application
●
Décrit par : identité (adresse mémoire)
+ état (attributs)
+ comportement (opérations)
nom de l'objet
MonLivretA : Compte
numéro = 123456 état (valeur des attributs)
attributs devise = EUR
solde = 3509,43
déposer(montant : float)
retirer(montant : float)
opérations
solde() : float
D. Longuet - UML 3
Objets et classes
Classe : Regroupement d'objets de même nature (mêmes attributs +
mêmes opérations)
nom de la classe
MonCompteJoint : Compte
numéro = 854126
devise = EUR Compte
MonLivretA : Compte solde = 2215,03
numéro = 123456 déposer(montant : float) numéro : int attributs
devise = EUR retirer(montant : float) instances de devise : Devise
solde = 3509,43 solde() : float
déposer(montant : float) solde : float
MonCompteSuisse : Compte
retirer(montant : float)
numéro = 70054568
déposer(montant : float)
solde() : float
devise = CHF retirer(montant : float)
solde = 121000
déposer(montant : float)
solde() : float
retirer(montant : float)
solde() : float opérations
D. Longuet - UML 4
Classes
Attributs
●
Caractéristique partagée par tous les objets de la classe
●
Associe à chaque objet une valeur
●
Type associé simple (int, bool...), primitif (Date) ou énuméré
type énuméré
(pas une classe)
« enumeration »
Compte Devise
numéro : int EUR
attributs devise : Devise GBP
solde : float USD
déposer(montant : float) CHF
retirer(montant : float)
solde() : float
D. Longuet - UML 5
Classes
Attributs
●
Caractéristique partagée par tous les objets de la classe
●
Associe à chaque objet une valeur
●
Type associé simple (int, bool...), primitif (Date) ou énuméré
(mémoire)
D. Longuet - UML 6
Classes
Opérations
●
Service qui peut être demandé à tout objet de la classe
●
Comportement commun à tous les objets de la classe
Compte
numéro : int
devise : Devise
solde : float
déposer(montant : float)
opérations retirer(montant : float)
solde() : float
D. Longuet - UML 7
Relations entre objets
Lien entre objets
●
relation binaire (en général)
●
au plus un lien entre deux objets (pour une association)
JeanDupont : Personne
MonLivretA : Compte
nom = "Dupont" possède numéro = 123456
prénom = "Jean"
devise = EUR
adresse = "Montrouge"
solde = 3509,43
naissance = 20/08/1990
lien
D. Longuet - UML 8
Relations entre objets
Lien entre objets
●
relation binaire (en général)
●
au plus un lien entre deux objets (pour une association)
MarieDupont : Personne
MonCompteJoint : Compte
nom = "Dupont" possède
numéro = 854126
prénom = "Marie"
devise = EUR
adresse = "Montrouge"
naissance = 4/12/1992
possède solde = 2215,03
JeanDupont : Personne
MonLivretA : Compte
nom = "Dupont" possède numéro = 123456
prénom = "Jean"
devise = EUR
adresse = "Montrouge"
solde = 3509,43
naissance = 20/08/1990
possède
MonCompteSuisse : Compte
numéro = 70054568
devise = CHF
sesComptes solde = 121000
D. Longuet - UML 9
Relations entre objets
Lien entre objets
●
relation binaire (en général)
●
au plus un lien entre deux objets (pour une association)
sesPropriétaires
MarieDupont : Personne
MonCompteJoint : Compte
nom = "Dupont" possède
numéro = 854126
prénom = "Marie"
devise = EUR
adresse = "Montrouge"
naissance = 4/12/1992
possède solde = 2215,03
JeanDupont : Personne
MonLivretA : Compte
nom = "Dupont" possède numéro = 123456
prénom = "Jean"
devise = EUR
adresse = "Montrouge"
solde = 3509,43
naissance = 20/08/1990
possède
MonCompteSuisse : Compte
numéro = 70054568
devise = CHF
solde = 121000
D. Longuet - UML 10
Relations entre classes
Association entre classes : Relation binaire (en général)
Compte
Personne rôle
nom : string numéro : int
prénom : string sesPropriétaires sesComptes devise : Devise
possède
adresse : string
1..2 * solde : float
naissance : Date déposer(montant : float)
nom de retirer(montant : float)
ouvrirCompte(init : float) multiplicité
l'association solde() : float
(optionnel)
Compte
numéro : int
devise : Devise
solde : float
propriétaire : Personne
déposer(montant : float)
retirer(montant : float)
solde() : float
D. Longuet - UML 12
Attribut et association
Rappel : Types des attributs simple, primitif ou énuméré
Compte
Personne
nom : string numéro : int
prénom : string
sonPropriétaire sesComptes devise : Devise
possède
adresse : string
1 * solde : float
naissance : Date déposer(montant : float)
retirer(montant : float)
ouvrirCompte(init : float)
solde() : float
D. Longuet - UML 13
Multiplicités
Nombre d'objets de la classe B associés à un objet de la classe A
A n B Exactement n
A n,m,p B Exactement n ou m ou p
A n..m B Entre n et m
A n..* B Au moins n
A * B Plusieurs (0 ou plus)
D. Longuet - UML 14
Multiplicités en pratique
Nombre d'objets de la classe B associés à un objet de la classe A
A 1 B Exactement 1
A 0..1 B Au plus 1 (0 ou 1)
A * B 0 ou plus
D. Longuet - UML 15
Association réflexive
Diagramme de classes Personne
parents
2 association réflexive
nom : string
(d'une classe vers
prénom : string
* elle-même)
naissance : Date
enfants
Exemple de diagramme d'objets
JeanDupont : Personne MarieVernet : Personne
nom = "Dupont" nom = "Vernet"
AnneBérou : Personne
prénom = "Jean" prénom = "Marie"
nom = "Bérou"
naissance = 20/08/1990 naissance = 4/12/1992
prénom = "Anne"
naissance = 14/12/1965 PierreDupont : Personne
nom = "Dupont"
MichelDupont : Personne VictorDupont : Personne
prénom = "Pierre"
nom = "Dupont" nom = "Dupont"
naissance = 30/05/1992
prénom = "Michel" prénom = "Victor"
naissance = 2/09/1959 LucieDupont : Personne naissance = 12/07/2012
nom = "Dupont"
prénom = "Lucie"
D. Longuet - UML naissance = 10/02/1996 16
Association multiple
plusieurs associations
Diagramme de classes entre deux classes
Personne propose Appartement
nom : string 1 * adresse : string
prénom : string loue pièces : int
naissance : Date * * loyer : float
D. Longuet - UML 17
Navigabilité
Orientation d'une association
●
Restreint l'accessibilité des objets
●
Depuis un A, on a accès aux objets de B qui lui sont associés,
mais pas l'inverse
rôle rôle
A B
tête 1
Liste Nœud
1 0..1
contenu : int 0..1
suivant
Par défaut, associations navigables dans les deux sens (pas de flèche)
D. Longuet - UML 18
Classe-association
Permet de paramétrer une association entre deux classes par une classe
Personne Entreprise
nom : string 1..* *
nom : string
prénom : string ville : string
naissance : Date Emploi
intitulé : string
classe-association
début : Date
fin : Date
D. Longuet - UML 19
Classe-association
Exemple de diagramme d'objets
DevDupontEssilor : Emploi
MarieDupont : Personne intitulé = "Développeur web"
nom = "Dupont" début = ...
prénom = "Marie" fin = ... Essilor : Entreprise
naissance = 4/12/1992
nom = "Essilor"
ProjDupontEssilor : Emploi
ville = "Créteil"
intitulé = "Chef de projet web"
JeanDupont : Personne début = ...
fin = ...
nom = "Dupont"
prénom = "Jean"
SecDupontEssilor : Emploi
naissance = 20/08/1990
intitulé = "Secrétaire RH"
début = ...
fin = ...
D. Longuet - UML 20
Association n-aire
Association reliant plus de deux classes
Enseignant Étudiant
1 1..*
association ternaire
1
Cours
Ens1:Enseignant Étu1:Étudiant
C1:Cours Étu2:Étudiant
Étu3:Étudiant
D. Longuet - UML 21
Association n-aire
Multiplicités : pour chaque (n-1)-uplet d'objets, contraint le nombre
d'objets qui lui sont associés
Ens1:Enseignant
1..* instances d'Étudiant
C1:Cours
C1:Cours
1 instance d'Enseignant
Étu1:Étudiant
Ens:Enseignant
1 instance de Cours
Étu1:Étudiant
D. Longuet - UML 22
Agrégation
Association particulière entre classes
●
Dissymétrique : une classe prédominante sur l'autre
●
Relation de type composant-composite
Exemple
Lecteur de contenu audio permettant de créer des listes de lecture
Exemple
●
Une liste de lecture est composée d'un ensemble de morceaux
●
Un morceau peut appartenir à plusieurs listes de lecture
●
Supprimer la liste ne supprime pas les morceaux
agrégation faible
D. Longuet - UML 24
Composition
Agrégation par valeur
●
Le composite contient ses composants
●
La création ou destruction du composite entraîne la création ou
destruction de ses composants
●
Un objet ne fait partie que d'un composite à la fois
Exemple
●
Un morceau n'appartient qu'à un album
●
La suppression de l'album entraîne la suppression de tous ses
morceaux
composition
D. Longuet - UML 25
Hiérarchie de classes
Principe : Regrouper les classes partageant des attributs et des
opérations et les organiser en arborescence
CompteÉpargne
CompteCourant numéro : int
numéro : int devise : Devise
devise : Devise solde : float
solde : float plafond : float
découvertAutorisé : float taux : float
fraisDécouvert : float déposer (montant : float)
déposer(montant : float) retirer(montant : float)
retirer(montant : float) solde() : float
solde() : float calculerIntérêts() : float
D. Longuet - UML 26
Hiérarchie de classes
Principe : Regrouper les classes partageant des attributs et des
opérations et les organiser en arborescence
CompteÉpargne
CompteCourant plafond : float
découvertAutorisé : float taux : float
sous-classes
fraisDécouvert : float calculerIntérêts() : float
D. Longuet - UML 27
Hiérarchie de classes
Principe : Regrouper les classes partageant des attributs et des
opérations et les organiser en arborescence
de la classe Compte
CompteÉpargne
CompteCourant plafond : float
découvertAutorisé : float taux : float
fraisDécouvert : float calculerIntérêts() : float
D. Longuet - UML 28
Classe abstraite
Classe sans instance, seulement une base pour classes héritées
Compte
numéro : int
classe abstraite devise : Devise
car un compte solde : float
déposer(montant : float)
n'existe pas en soi
retirer(montant : float)
solde() : float
CompteÉpargne
CompteCourant plafond : float
découvertAutorisé : float taux : float
fraisDécouvert : float calculerIntérêts() : float
D. Longuet - UML 29