Vous êtes sur la page 1sur 32

Polytech Paris-Sud

Formation initiale 3e année


Spécialité Informatique
Année 2016-2017

UML

Cours 3
Diagrammes de classes

Delphine Longuet
delphine.longuet@lri.fr

http://www.lri.fr/~longuet/Enseignements/16-17/Et3-UML
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)

Objet = instance d'une classe

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é

Valeur des attributs : État de l'objet



Objets différents (identités différentes) peuvent avoir mêmes
attributs

Jean1 : Personne Jean2 : Personne


nom = "Dupont" ≠ nom = "Dupont"
prénom = "Jean" prénom = "Jean"
naissance = 10/07/1985 naissance = 10/07/1985

(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

⚠ Ne pas confondre avec une méthode = implantation de l'opération

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)

Rôle : Nomme l'extrémité d'une association, permet d'accéder aux


objets liés par l'association à un objet donné

Multiplicité : Contraint le nombre d'objets liés par l'association

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)

Lien = instance d'association


D. Longuet - UML 11
Attribut et association
Rappel : Types des attributs simple, primitif ou énuméré

En particulier, pas d'attribut dont le type est une classe du diagramme

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é

En particulier, pas d'attribut dont le type est une classe du diagramme


Mais association vers cette classe

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

Exactement n En pratique
A n B

Exactement n ou m ou p Exactement 1
A n,m,p B A B
1
Entre n et m Au plus 1 (0 ou 1)
A n..m B A B
0..1
Au moins n Au moins 1 (jamais 0)
A B A B
n..* 1..*
Plusieurs (0 ou plus) 0 ou plus
A B A B
* *
D. Longuet - UML 14
Hiérarchie de classes
Principe : Regrouper les classes partageant des attributs et des
opérations et les organiser en arborescence

Spécialisation : raffinement d'une classe en une sous-classe


Généralisation : abstraction d'un ensemble de classes en super-classe

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 15
Hiérarchie de classes
Principe : Regrouper les classes partageant des attributs et des
opérations et les organiser en arborescence

Spécialisation : raffinement d'une classe en une sous-classe


Généralisation : abstraction d'un ensemble de classes en super-classe
Compte
numéro : int
devise : Devise
super-classe
solde : float
déposer(montant : float)
spécialisation retirer(montant : float) généralisation
solde() : float

CompteÉpargne
CompteCourant plafond : float
découvertAutorisé : float taux : float
sous-classes
fraisDécouvert : float calculerIntérêts() : float
D. Longuet - UML 16
Hiérarchie de classes
Principe : Regrouper les classes partageant des attributs et des
opérations et les organiser en arborescence

Héritage : Construction d'une classe à partir d'une classe plus haute


dans la hiérarchie (partage des attributs, opérations, contraintes...)
Compte
numéro : int
devise : Devise
solde : float
déposer(montant : float)
retirer(montant : float)
classes héritant solde() : float

de la classe Compte

CompteÉpargne
CompteCourant plafond : float
découvertAutorisé : float taux : float
fraisDécouvert : float calculerIntérêts() : float
D. Longuet - UML 17
Hiérarchie de classes
Diagramme de classes Exemples d'objets

CompteÉpargne CC:CompteCourant

CompteCourant numéro : int numéro = 875421


devise : Devise devise = EUR
numéro : int
solde : float solde = 1290,30
devise : Devise
plafond : float découvertAutorisé = -200,00
solde : float
taux : float fraisDécouvert = 2,30
découvertAutorisé : float
fraisDécouvert : float déposer (montant : float)
LivA:CompteÉpargne
déposer(montant : float) retirer(montant : float)
solde() : float numéro =094435
retirer(montant : float)
calculerIntérêts() : float devise = EUR
solde() : float
solde = 10542,00
plafond = 22950,00
taux = 0,75

D. Longuet - UML 18
Hiérarchie de classes
Diagramme de classes Exemples d'objets

C1:Compte
numéro = 463527
Compte devise = EUR
numéro : int solde = 213,50
devise : Devise
solde : float CC:CompteCourant
déposer(montant : float) numéro = 875421
retirer(montant : float) devise = EUR
solde() : float solde = 1290,30
découvertAutorisé = -200,00
fraisDécouvert = 2,30
CompteÉpargne
CompteCourant plafond : float LivA:CompteÉpargne
découvertAutorisé : float taux : float numéro =094435
fraisDécouvert : float calculerIntérêts() : float devise = EUR
solde = 10542,00
plafond = 22950,00
taux = 0,75

D. Longuet - UML 19
Classe abstraite
Classe sans instance, seulement une base pour classes héritées

Notation : nom de la classe en italique (ou stéréotype « abstract »)

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 20
Hiérarchie de classes
Diagramme de classes Exemples d'objets

C1:Compte
classe abstraite numéro = 463527
Compte devise = EUR
numéro : int solde = 213,50
devise : Devise
solde : float CC:CompteCourant
déposer(montant : float) numéro = 875421
retirer(montant : float) devise = EUR
solde() : float solde = 1290,30
découvertAutorisé = -200,00
fraisDécouvert = 2,30
CompteÉpargne
CompteCourant plafond : float LivA:CompteÉpargne
découvertAutorisé : float taux : float numéro =094435
fraisDécouvert : float calculerIntérêts() : float devise = EUR
solde = 10542,00
plafond = 22950,00
taux = 0,75

D. Longuet - UML 21
Exemple tiré du cours de Java
Personne Personne
prénom : string prénom : string
nom : string nom : string
Personne(lePrénom:string, Personne(lePrénom:string,
leNom:string) leNom:string)
getNomComplet() : string getNomComplet() : string

Étudiant
identifiant : int
estInscrit : boolean
ÉtudiantPolytech Étudiant(lePrénom:string,
prénom : string leNom:string,id:int)
nom : string ÉtudiantPolytech getNomComplet() : string
identifiant : int identifiant : int inscrire() : boolean
estInscrit : boolean estInscrit : boolean
ÉtudiantPolytech(lePrénom:string, ÉtudiantPolytech(lePrénom:string, ÉtudiantPolytech
leNom:string,id:int) leNom:string,id:int)
getNomComplet() : string getNomComplet() : string ÉtudiantPolytech(lePrénom:string,
inscrire() : boolean inscrire() : boolean leNom:string,id:int)

D. Longuet - UML redéfinition 22


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 23
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

Exemple de diagramme d'objets


JeanDupont : Personne BLR145 : Appartement
nom = "Dupont" loue adresse = "145 av gal Leclerc, Bourg-la-Reine"
prénom = "Jean" pièces = 2
naissance = 20/08/1990 loyer = 900
propose

AlainDupuis : Personne Cach23 : Appartement


nom = "Dupuis" loue adresse = "23 rue Dumotel, Cachan"
prénom = "Alain" pièces = 3
naissance = 15/01/1983 loyer = 1200

D. Longuet - UML 24
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

Exemple (listes chaînées)

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 25
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

Instance unique de la classe-association pour chaque lien entre objets

Équivalence en termes de classes et d'associations :


Personne Emploi Entreprise
1 * 1..* 1
nom : string intitulé : string nom : string
prénom : string début : Date ville : string
naissance : Date fin : Date

D. Longuet - UML 26
Classe-association
Exemple de diagramme d'objets

AlainDupuis : Personne DevDupuisFnac : Emploi Fnac : Entreprise


nom = "Dupuis" intitulé = "Développeur web" nom = "Fnac"
prénom = "Alain" début = ... ville = "Bordeaux"
naissance = 15/01/1983 fin = ...

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 27
Association n-aire
Association reliant plus de deux classes

Enseignant Étudiant

1 1..*

association ternaire
1
Cours

Instance d'une association n-aire = lien entre n objets

Ens1:Enseignant Étu1:Étudiant

C1:Cours Étu2:Étudiant

Étu3:Étudiant
D. Longuet - UML 28
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 29
Agrégation
Association particulière entre classes

Dissymétrique : une classe prédominante sur l'autre

Relation de type composant-composite

Deux types d'agrégation



Agrégation faible

Composition

Exemple
Lecteur de contenu audio permettant de créer des listes de lecture

Liste de lecture * 1..* Morceau 1..* 1 Album

agrégation faible composition


D. Longuet - UML 30
Agrégation faible
Agrégation par référence

Le composite fait référence à ses composants

La création ou destruction du composite est indépendante de la
création ou destruction de ses composants

Un objet peut faire partie de plusieurs composites à la fois

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

Liste de lecture * 1..* Morceau

agrégation faible
D. Longuet - UML 31
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

Morceau 1..* 1 Album

composition
D. Longuet - UML 32

Vous aimerez peut-être aussi