Vous êtes sur la page 1sur 35

Polytech Paris-Sud

Formation initiale 3e anne


Spcialit Informatique

UML
Diagrammes de classes

Delphine Longuet
delphine.longuet@lri.fr

Processus de dveloppement logiciel


Analyse
des besoins

Tests d'acceptation

Spcication

Tests systme

Conception
architecturale
Conception
dtaille

Tests d'intgration

Tests unitaires

Dveloppement
D. Longuet - UML

Objets et classes
Conception oriente objet : Reprsentation du systme comme un
ensemble d'objets interagissant
Diagramme de classes

Reprsentation de la structure interne du logiciel

Utilis surtout en conception mais peut tre utilis en analyse


Diagramme d'objets

Reprsentation de l'tat du logiciel (objets + relations)

Diagramme voluant avec l'excution du logiciel


- cration et suppression d'objets
- modication de l'tat des objets (valeurs des atributs)
- modication des relations entre objets
D. Longuet - UML

Objets et classes
Objet

Entit concrte ou abstraite du domaine d'application


Dcrit par tat (attributs) + comportement (oprations)
nom de l'objet

attributs

oprations

D. Longuet - UML

MonLivretA : Compte
numro = 123456
devise = EUR
solde = 3509,43
dposer(montant : oat)
retirer(montant : oat)
solde() : oat

tat (valeur des attributs)

Objets et classes
Classe : Regroupement d'objets de mme nature (mmes attributs +
mmes oprations)
Objet = instance d'une classe
nom de la classe

MonCompteJoint : Compte

MonLivretA : Compte
numro = 123456
devise = EUR
solde = 3509,43
dposer(montant : oat)
retirer(montant : oat)
solde() : oat

numro = 854126
devise = EUR
solde = 2215,03
dposer(montant : oat)
retirer(montant : oat)
solde() : oat
MonCompteSuisse : Compte
numro = 70054568
devise = CHF
solde = 121000
dposer(montant : oat)
retirer(montant : oat)
solde() : oat

D. Longuet - UML

Compte
instances de

attributs
numro: int
devise: Devise
solde: oat
dposer(montant : oat)
retirer(montant : oat)
solde() : oat
oprations
5

Classes
Attributs

Proprit partage par tous les objets de la classe

Associe chaque objet une valeur

Type associ simple (int, bool...), primitif (Date) ou numr


Oprations

Service qui peut tre demand tout objet de la classe


Ne pas confondre avec une mthode = implantation de l'opration
Compte

D. Longuet - UML

numro: int
devise: Devise
solde: oat
dposer(montant : oat)
retirer(montant : oat)
solde() : oat

Relations entre objets


Association entre objets

relation binaire (en gnral)

au plus un lien entre deux objets

JeanDupont: Personne
nom = "Dupont"
prnom = "Jean"
adresse = "Montrouge"
naissance = 20/08/1990

D. Longuet - UML

possde

MonLivretA : Compte
numro = 123456
devise = EUR
solde = 3509,43

Relations entre objets


Association entre objets

relation binaire (en gnral)

au plus un lien entre deux objets


MarieDupont: Personne
nom = "Dupont"
prnom = "Marie"
adresse = "Montrouge"
naissance = 4/12/1992

possde
possde

JeanDupont: Personne
nom = "Dupont"
prnom = "Jean"
adresse = "Montrouge"
naissance = 20/08/1990

sesComptes

possde

possde

MonCompteJoint : Compte
numro = 854126
devise = EUR
solde = 2215,03

MonLivretA : Compte
numro = 123456
devise = EUR
solde = 3509,43

MonCompteSuisse : Compte
numro = 70054568
devise = CHF
solde = 121000

D. Longuet - UML

Relations entre objets


Association entre objets

relation binaire (en gnral)

au plus un lien entre deux objets


MarieDupont: Personne
nom = "Dupont"
prnom = "Marie"
adresse = "Montrouge"
naissance = 4/12/1992

possde
possde

JeanDupont: Personne
nom = "Dupont"
prnom = "Jean"
adresse = "Montrouge"
naissance = 20/08/1990

possde

possde

sesPropritaires
MonCompteJoint : Compte
numro = 854126
devise = EUR
solde = 2215,03

MonLivretA : Compte
numro = 123456
devise = EUR
solde = 3509,43

MonCompteSuisse : Compte
numro = 70054568
devise = CHF
solde = 121000

D. Longuet - UML

Relations entre classes


Association entre classes : Relation binaire (en gnral)
Rle : Nomme l'extrmit d'une association, permet d'accder aux
objets lis par l'association un objet donn
Cardinalit : Contraint le nombre d'objets lis par l'association

nom: string
prnom: string
adresse: string
naissance: Date
ouvrirCompte(init : oat)
D. Longuet - UML

Compte

rle

Personne

sesComptes

sesPropritaires
1..2

cardinalit

possde

nom de
l'association
(optionnel)

numro: int
devise: Devise
solde: oat
dposer(montant : oat)
retirer(montant : oat)
solde() : oat
10

Attribut et association
Association

Deux attributs implicites

Explicite comme attributs en phase de conception dtaille, qui


porteront les noms des rles de l'association
Exemple de diagramme en conception
Compte

Personne
nom: string
prnom: string
adresse: string
naissance: Date
ouvrirCompte(init : oat)
D. Longuet - UML

sesPropritaires
1..2

sesComptes
*

numro: int
devise: Devise
solde: oat
dposer(montant : oat)
retirer(montant : oat)
solde() : oat
11

Attribut et association
Association

Deux attributs implicites

Explicite comme attributs en phase de conception dtaille, qui


porteront les noms des rles de l'association
Exemple de diagramme en conception dtaille
Personne
nom: string
prnom: string
attributs correspondants
adresse: string
aux deux rles de l'association
naissance: Date
sesComptes : Collection(Compte)
ouvrirCompte(init : oat)
D. Longuet - UML

Compte
numro: int
devise: Devise
solde: oat
sesPropritaires : Personne[2]
dposer(montant : oat)
retirer(montant : oat)
solde() : oat
12

Attribut et association
Association

Deux attributs implicites

Explicite comme attributs en phase de conception dtaille, qui


porteront les noms des rles de l'association
Par consquent, pas de rfrence un objet dans un attribut s'il existe
une association vers cet objet
Compte

Personne
nom: string
prnom: string
adresse: string
naissance: Date
sesComptes : List(Compte)
ouvrirCompte(init : oat)
D. Longuet - UML

sesPropritaires
1..2

sesComptes
*

numro: int
devise: Devise
solde: oat
sesPropritaires : Personne[2]
dposer(montant : oat)
retirer(montant : oat)
solde() : oat
13

Cardinalits
Nombre de B associs un A
A

n
n,m,p

Exactement n

Exactement n ou m ou p

n..m

Entre n et m

n..*

Au moins n

Plusieurs (0 ou plus)

D. Longuet - UML

14

Association rexive
Diagramme de classes

Personne
nom: string
prnom: string
naissance: Date

parents
2
*
enfants

association rexive
(d'une classe vers
elle-mme)

Exemple de diagramme d'objets


AnneBrou : Personne
nom= "Brou"
prnom= "Anne"
naissance= 14/12/1965
MichelDupont : Personne
nom= "Dupont"
prnom= "Michel"
naissance= 2/09/1959

D. Longuet - UML

JeanDupont : Personne

MarieDupont : Personne

nom= "Dupont"
prnom= "Jean"
naissance= 20/08/1990

nom= "Dupont"
prnom= "Marie"
naissance= 4/12/1992

PierreDupont : Personne
nom= "Dupont"
prnom= "Pierre"
naissance= 30/05/1992
LucieDupont : Personne
nom= "Dupont"
prnom= "Lucie"
naissance= 10/02/1996

VictorDupont : Personne
nom= "Dupont"
prnom= Victor
naissance= 12/07/2012

15

Association multiple
plusieurs associations
entre deux classes

Diagramme de classes
Personne
nom: string
prnom: string
naissance: Date

propose

loue
*

Appartement

* adresse: string
pices : int
* loyer : oat

Exemple de diagramme d'objets


JeanDupont : Personne
nom= "Dupont"
prnom= "Jean"
naissance= 20/08/1990

loue
propose

AlainDupuis : Personne
nom= "Dupuis"
prnom= "Alain"
naissance= 15/01/1983
D. Longuet - UML

BLR145 : Appartement
adresse = "145 av gal Leclerc,
Bourg-la-Reine"
pices = 2
loyer = 900
Cach23 : Appartement

loue

adresse = "23 rue Dumotel,


Cachan"
pices = 3
loyer = 1200

16

Navigabilit
Orientation d'une association

Restreint l'accessibilit des objets

Depuis un A, on a accs aux objets de B qui lui sont associs,


mais pas l'inverse
A

rle

rle

Exemple (listes chanes)


Liste

tte
1

0..1

Nud
contenu : int

1
0..1
suivant

Par dfaut, associations navigables dans les deux sens (pas de che)
D. Longuet - UML

17

Classe-association
Permet de paramtrer une association entre deux classes par une classe
Personne
nom: string
prnom: string
naissance: Date

1..*

Entreprise
nom: string

Emploi
intitul : string
dbut: Date
n: Date

classe-association

quivalence en termes de classes et d'associations


Personne
nom: string
prnom: string
naissance: Date
D. Longuet - UML

Emploi
1

* intitul : string
dbut: Date
n: Date

1..*

Entreprise
nom: string

18

Classe-association
Exemple de diagramme d'objets
Dveloppeur : Emploi
MarieDupont : Personne
nom= "Dupont"
prnom= "Marie"
naissance= 4/12/1992

intitul = "Dveloppeur web"


dbut = ...
n = ...
SecrtaireRH : Emploi

JeanDupont : Personne
nom= "Dupont"
prnom= "Jean"
naissance= 20/08/1990

AlainDupuis : Personne
nom= "Dupuis"
prnom= "Alain"
naissance= 15/01/1983
D. Longuet - UML

intitul = "Secrtaire RH"


dbut = ...
n = ...
RespClientEssilor : Emploi
intitul = "Responsable clients"
dbut = ...
n = ...

Essilor : Entreprise
nom= "Essilor"
ville = "Crteil"

Fnac : Entreprise
nom= "Fnac"
ville = "Bordeaux"

RespClientFnac : Emploi
intitul = "Responsable clients"
dbut = ...
n = ...

19

Association n-aire
Association reliant plus de deux classes
tudiant

Enseignant
1

1..*

association ternaire

Cours

Utiliser de prfrence des classes-associations

D. Longuet - UML

20

Agrgation
Association particulire entre classes

Dissymtrique : une classe prdominante sur l'autre

Relation de type composant-composite


Deux types d'agrgation

Agrgation faible

Composition

Pice

1..*

3..*

agrgation faible
D. Longuet - UML

Mur

Brique

composition
21

Agrgation faible
Agrgation par rfrence

Le composite fait rfrence ses composants

La cration ou destruction du composite est indpendante de la


cration ou destruction de ses composants

Un objet peut faire partie de plusieurs composites la fois


Exemple

Une pice est compose de murs

Un mur peut tre commun plusieurs pices


Pice

1..*

3..*

Mur

agrgation faible
D. Longuet - UML

22

Composition
Agrgation par valeur

Le composite contient ses composants

La cration ou destruction du composite entrane la cration ou


destruction de ses composants

Un objet ne fait partie que d'un composite la fois


Exemple

Un mur est compos de briques

Une brique n'appartient qu' un mur


Mur

Brique

composition
D. Longuet - UML

23

Hirarchie de classes
Principe : Regrouper les classes partageant des attributs et des
oprations et les organiser en arborescence
Spcialisation : rainement d'une classe en une sous-classe
Gnralisation : abstraction d'un ensemble de classes en super-classe

Comptepargne
CompteCourant
numro: int
devise: Devise
solde: oat
dcouvertAutoris : oat
fraisDcouvert : oat

D. Longuet - UML

dposer(montant : oat)
retirer(montant : oat)
solde() : oat

numro : int
devise : Devise
solde : oat
plafond : oat
taux : oat
dposer (montant : oat)
retirer(montant : oat)
solde() : oat
calculerIntrts() : oat

24

Hirarchie de classes
Principe : Regrouper les classes partageant des attributs et des
oprations et les organiser en arborescence
Spcialisation : rainement d'une classe en une sous-classe
Gnralisation : abstraction d'un ensemble de classes en super-classe
Compte
numro: int
devise: Devise
solde: oat
dposer(montant : oat)
retirer(montant : oat)
solde() : oat

spcialisation

dcouvertAutoris : oat
fraisDcouvert : oat

gnralisation

Comptepargne

CompteCourant

D. Longuet - UML

super-classe

sous-classes

plafond : oat
taux : oat
calculerIntrts() : oat

25

Hirarchie de classes
Principe : Regrouper les classes partageant des attributs et des
oprations et les organiser en arborescence
Hritage : Construction d'une classe partir d'une classe plus haute
dans la hirarchie (partage des attributs, oprations, contraintes...)
Compte
numro: int
devise: Devise
solde: oat
dposer(montant : oat)
retirer(montant : oat)
solde() : oat

classes hritant
de la classe Compte
CompteCourant

dcouvertAutoris : oat
fraisDcouvert : oat
D. Longuet - UML

Comptepargne
plafond : oat
taux : oat
calculerIntrts() : oat

26

Classe abstraite
Classe sans instance car certaines oprations non dnies

Opration non dnie en italique

Nom de la classe en italique (ou strotype abstract )


Exemple : On ne peut pas calculer la surface d'une forme sans savoir
de quelle forme il s'agit
opration non dnie
(abstraite)

D. Longuet - UML

Forme
nom : string
surface() : oat

27

Polymorphisme
Contexte : Dnition d'une opration abstraite dans les classes
hritant d'une classe abstraite
Opration polymorphe : Opration dnie dans direntes sous-classes
mais opration spcique la sous-classe

Forme
nom : string
surface() : oat

Rectangle
longueur : oat
largeur : oat

opration
polymorphe

Cercle
rayon : oat
surface() : oat

surface() : oat
D. Longuet - UML

28

Interface
Liste d'oprations constituant un contrat respecter par les classes
ralisant l'interface

Pas une classe, ne peut pas servir crer des objets

Toutes les oprations sont abstraites

Point
abscisse : oat
ordonne : oat

interface
Comparable
gal(Object o) : boolean
suprieur(Object o) : boolean

gal(Object o) : boolean
suprieur(Object o) : boolean

classes ralisant
l'interface

D. Longuet - UML

Date
jour : int
mois : int
anne : int
gal(Object o) : boolean
suprieur(Object o) : boolean
di(Date d) : int

String
content : string
gal(Object o) : boolean
suprieur(Object o) : boolean
print()

29

Notations avances
Vecteur
- dbut : Point
- longueur : oat = 0.0
- angle : oat = 0.0
+ / n : Point
+ contient(in p : Point) : boolean
+ dplace(inout p : Point)

Attributs
[visibilit] [driv] nomAttribut [: type] [= valeur par dfaut]
Oprations
[visibilit] nomOpration [(liste Paramtres)] [: typeRetour]
Paramtre
[direction] nom : type [= valeur par dfaut]
Direction
in | out | inout (par dfaut : in)
D. Longuet - UML

30

Notations avances
attributs privs
attribut driv

Vecteur
- dbut : Point
- longueur : oat = 0.0
- angle : oat = 0.0
+ / n : Point
+ contient(in p : Point) : boolean
+ dplace(inout p : Point)

oprations publiques

Visibilit
+ : public, accessible toutes les classes
# : protg, accessible uniquement aux sous-classes
- : priv, inaccessible tout objet hors de la classe
Pas de visibilit par dfaut
Attribut driv : Peut tre calcul tout moment partir des autres
attributs
D. Longuet - UML

31

Notations avances
Attributs et oprations de classes

Attribut de classe : valeur commune toutes les instances

Opration de classe : opration sur la classe elle-mme


(cration de nouvelles instances par exemple)

Souligns dans la classe


Article
- rfrence : int
- prixHT : oat
- nbInstances : int
+ calculerPrixTTC(taxe : oat) : oat
+ crer()
+ compterInstances() : int

D. Longuet - UML

32

Contraintes
Proprits :

Portant sur les lments du modle

Doivent tre vries tout instant

En gnral, restriction sur les diagrammes d'objets possibles


partir du diagramme de classes
Annotations dans le diagramme de classes

Sous forme textuelle, entre accolades

En OCL (Object Constraint Language)

D. Longuet - UML

33

Contraintes
{age = di(naissance,today)}

Personne
nom: string
naissance: Date
/ age : int
{age 0}
1

appartient
{subset}

administre

* {ordered}
ExpriencesPro
entreprise : string
entre : Date
sortie : Date

D. Longuet - UML

*
*

Groupe
thme : string
cration : Date

L'ge est toujours positif


L'ge est calcul comme la dirence
entre la date de naissance et la date
d'aujourd'hui
L'administrateur d'un groupe en est
membre
On a accs aux expriences
professionnelles dans l'ordre
34

Contraintes en OCL
Banque
nom: string
1..*

1
banque

banques

1..* clients
Client
nom: string
naissance: Date

1..* comptes
Compte
1
propritaire

comptes numro : int


devise : Devise
1..*
solde : oat

dest
1
1
orig

Virement
montant : oat
0..* date : Date
0..*

Tout propritaire dun compte est client de la banque hbergeant ce compte.


context c : Compte
inv : c.banque.clients -> include(c.propritaire)

Tout client dune banque y possde au moins un compte.

context b : Banque
inv : b.clients -> forAll(cl | cl.comptes
-> select(c | c.banque = b) -> size() >= 1)

Les virements ne sont autoriss qu'entre des comptes partageant la mme devise.
context v : Virement
inv : v.orig.devise = v.dest.devise

D. Longuet - UML

35