Vous êtes sur la page 1sur 52

UML

Unified Modeling Language

2
La notation UML

Unified Modeling Language (UML)


● Langage de modélisation graphique pour la
conception de systèmes orientés objet
● Standard adopté par l’Object Management
Group (OMG)

3
Histoire d’UML
● 1994: UML 0.1
○ unification des méthodes existantes
○ consensus entre Rumbaugh, Booch and Jacobson
● 1995: UML 1.0
○ normalisation par l’OMG
● 2005: UML 2.0
○ adoption par l’OMG
○ inclusion d’OCL
● 2013: UML 2.5
○ le travail continue 4
Diagrammes UML
Diagrammes structurels (statiques)
● diagramme de classes
● diagramme d'objets
● diagramme de composants
● diagramme de déploiement
● diagramme de paquetages
● diagramme de structures composites

Diagrammes comportementaux (dynamiques)


● diagramme de cas d'utilisation
● diagramme d'activités
● diagramme d'états-transitions
● diagrammes d'interaction
○ diagramme de séquence
○ diagramme de communication
○ diagramme global d'interaction
5
○ diagramme de temps
Diagrammes UML
Diagrammes structurels (statiques)
● diagramme de classes
● diagramme d'objets
● diagramme de composants
● diagramme de déploiement
● diagramme de paquetages
● diagramme de structures composites

Diagrammes comportementaux (dynamiques)


● diagramme de cas d'utilisation
● diagramme d'activités
● diagramme d'états-transitions
● diagrammes d'interaction
○ diagramme de séquence
○ diagramme de communication
○ diagramme global d'interaction
6
○ diagramme de temps
UML - Diagramme de
classes

7
Diagramme de classes UML
Représente le modèle conceptuel du domaine
d’application du système.
● concepts (classes) que le système utilise
● liens (associations) entre ces concepts
Aide à
● comprendre le problème
● identifier concepts et leurs relations
● communiquer
8
Classes et objets
Une classe décrit les propriétés et le
comportement d’un ensemble d’objets.
Un objet est une instance d’une classe
● dotée d’une identité
● d’un état (attributs)
● d’un comportement (méthodes)

Alexandre est une instance (un objet) de la classe Homme


9
Représentation graphique d’une classe

NomClasse
attribut1: Type1
attribut2: Type2

methode1(): Type1
methode2(Type1): void

class Etudiant {
Étudiant
String nom;
nom: String String codePerm;
codePerm: String

payer(Facture): void void payer(Facture facture) { }


}
10
Attributs

● Représentent l’état d’un objet


● Communs à toutes les instances d’une
classe
● Unités atomiques d’information

Les attributs peuvent être typés.

11
Représentation graphique des attributs

NomClasse
attribut1: Type1
attribut2: Type2

methode1(): Type1
methode2(Type1): void

class Etudiant {
Étudiant
String nom;
nom: String String codePerm;
codePerm: String

payer(Facture): void void payer(Facture facture) { }


}
12
Méthodes
● Représentent le comportement d’un objet
● Opérations que l’on peut invoquer sur les
instances d’une classe
● Communes à toutes les instances d’une
classe

Les paramètres et valeurs de retour des


méthodes peuvent être typés.
13
Représentation graphique des méthodes

NomClasse
attribut1: Type1
attribut2: Type2

methode1(): Type1
methode2(Type1): void

class Etudiant {
Étudiant
String nom;
nom: String String codePerm;
codePerm: String

payer(Facture): void void payer(Facture facture) { }


}
14
Encapsulation et visibilité
Permet de limiter les services accessibles
depuis l’extérieur de la classe.

Intérêts de l’encapsulation
● Cacher les détails d’implémentation
● Protéger l’intégrité des données

15
Visibilité en UML
Visibilités
● public +
○ accessible par tous
● protected #
○ accessible dans la classe ou ses sous-classes
● private -
○ accessible seulement dans la classe
● package ~ (ou rien)
○ accessible dans tout le package
16
Représentation graphique de la visibilité

Étudiant class Etudiant {


- nom: String private String nom;
- codePerm: String private String codePerm;

+ payer(Facture): void public void payer(Facture facture) { }


+ getNom(): String
+ setNom(String): void
+ getCodePerm(): String
public String getNom() {}
+ setCodePerm(String): void public void setNom(String nom) {}

public String getCodePerm() {}


public void setCodePerm(String code) {}
}

17
Association
Lien entre les classes dans le problème
● association entre deux classes (association binaire)
● ou plus (association n-aire)

Cardinalité d’une association


● exactement un: 1 ou 1..1
● plusieurs: * ou 0..*
● au moins un: 1..*
● de 2 à 4: 2..4
18
Représentation graphique de l’association

Étudiant
Université
nom: String étudiants étudie_à université
codePerm: String nom: String
* 1
nbEtudiants(): Int
payer(Facture): void

Étudiant
Université
nom: String
codePerm: String nom: String
Flèche implicite
université: Université étudiants: List<Étudiant>

payer(Facture): void nbEtudiants(): Int

19
Implémentation de l’association

Étudiant
Université
nom: String
codePerm: String nom: String
université: Université étudiants: List<Étudiant>

payer(Facture): void nbEtudiants(): Int

class Etudiant { class Universite {


String nom; String nom;
String codePerm;
List<Etudiant> etudiants;
Universite universite;
// ...
// ... }
}
20
Navigabilité
Comment traverser une association?
● relation bidirectionnelle
○ dans les deux sens
étudiants étudie_à université
Étudiant Université
* 1

● relation unidirectionnelle
○ à sens unique
étudie_à université
Étudiant Université
1
21
Association réflexive
Classe associée à elle-même:

est_dans

Répertoire Fichier

nom: String nom: String


mode: Int mode: Int
1 est_dans taille: Int

22
Association n-aire
Pour lier plus que deux classes

Professeur
nom: String
matricule: String

Étudiant Salle
nom: String code: String
codePerm: String * 1

Cours
23
Une implémentation de l’association n-aire

class Etudiant { class Professeur {


String nom; String nom;
String codePerm; String matricule;

List<Cours> cours; List<Cours> cours;


} }

class Cours { class Salle {


Professeur professeur; String code;
List<Etudiant> etudiants; }
Salle salle;
}

24
Classe d’association
Quand une association doit posséder des propriétés

Résultat
session: String
note: Float

Étudiant Cours
nom: String a_suivi cours sigle: String
codePerm: String * titre: String

25
Implémentation d’une classe d’association

class Resultat {
String session;
Float note;
}

class Etudiant { class Cours {


String nom; String sigle;
String codePerm; String titre;
}
Map<Cours, Resultat>
resultats;
}
Un résultat par cours 26
Autre implémentation

class Resultat {
String session;
Float note;
}

class Etudiant { class Cours {


String nom; String sigle;
String codePerm; String titre;
}
Map<Cours, List<Resultat>>
resultats;
}
Plusieurs résultats par cours 27
Encore une implémentation

class Resultat {
String session;
Float note;

Cours cours;
}

class Etudiant { class Cours {


String nom; String sigle;
String codePerm; String titre;
}
List<Resultat> resultats;
}

Plusieurs résultats par cours 28


Agrégation et Composition
Agrégation
● relation d’inclusion entre classes
● notion d’appartenance
Composition
● agrégation forte
● pas d'existence de l’un sans l’autre

Professeur Département Université


1..* 1 1..* 1
29
Exercice
Écrire un diagramme de classes
● Un tournoi se déroule à une date fixée et rapporte un
certain nombre de points à l’équipe gagnante.
● Il n’y a pas de limite du nombre d’équipes dans un tournoi
● Une équipe possède un nom et nombre de points.
● Une équipe peut participer à plusieurs tournois.
● Une équipe possède entre 1 et 5 joueurs mais un joueur
ne peut être que dans une seule équipe.
● Un joueur possède un login et un mot de passe.
● Les équipes disputent des matchs lors d’un tournoi.
30
Solution

Tournoi
date: Date se_déroule_dans
récompense: Int
1
*

participe_à
Participation
rang: Int

affronte
*
* *
Joueur Équipe Match

login: String nom: String vainqueur: Équipe


appartient_à
pass: String score: Int
1..5 1
* 31
Héritage
La classe fille (sous-classe) hérite des attributs
et méthodes de la classe mère (super-classe).

Dépendance sémantique entre classes


● généralisation ou spécialisation
● relation de super / sous type

32
Représentation graphique de l’héritage

<<abstract>>
Animal

respirer()
manger()

Vache Canard

meugler() cancaner()
produireLait() voler()

33
Implémentation de l’héritage

abstract class Animal {


void respirer() {}
void manger() {}
}

class Vache extends Animal { class Canard extends Animal {


void meugler() {} void cancaner() {}
void produireLait() {} void voler() {}
} }

34
Exercice
Écrire un diagramme de classes
● Une compétition regroupe plusieurs participants.
● Tous les participants ont un identifiant unique.
● Il y a deux types de participants: juniors et seniors.
● Les juniors ont une date de fin d’étude prévue.
● Les seniors ont un nombre d’années d’expérience.
● Il y a deux types de compétitions: informatique ou sportive.
● Une compétition d’informatique peut nécessiter un laptop.
● Toutes les compétitions rapportent des points.
● Une compétition de sport rapporte un bonus de points.
35
Solution

<<abstract>> <<abstract>>
Participant Compétition
participe_à
id: String points: Int
* *

Junior Senior Info Sport


date: Date exp: Int laptop: Bool bonus: Int

36
Interface
Contrainte d’interface
● ensemble de propriétés publiques
● doit être respectée par toute classe
implémentant l’interface
● fournit un super-type commun à plusieurs
concepts

37
Représentation graphique d’une interface

<<interface>>
Véhicule

rouler()
freiner()
<<implémente>> <<conduit>>

Voiture Personne

conduire(Véhicule)

38
Implémentation de l’héritage

interface Vehicule { class Personne {


void avancer() {} void conduire(Vehicule vehicule) {}
void freiner() {} }
}

class Voiture implements Voiture v = new Voiture();


Vehicule {
@Override Personne p = new Personne();
void avancer() {} p.conduire(v);

@Override
void freiner() {}
}
39
Exercice
Écrire un diagramme de classes
● Les bénévoles et les participants possèdent tous un
badge.
● Un badge possède un identifiant unique.
● Seules les personnes avec un badge peuvent entrer dans
les salles de compétition.

40
Solution

<<interface>>
PersonneBadge Salle
<<accepte>>
getId(): String

entrer(PersonneBadge)
e>>

<<i
ent

mp
lém

lém
mp

ent
<<i

e>>

Participant Bénévole

41
Conclusion
UML - Diagramme de classes
● pour modéliser le domaine d’application
d’un système
○ concepts (classes)
○ liens entre ces concepts (relations)
■ association, agrégation / composition, spécialisation

● facilite la communication entre les acteurs

42
UML - Diagramme
d’objets

43
Diagramme d’objets UML
Représente un instantané de l’état du système.
● objets:instances de classes
● liens: instances de relations entre classes
Aide à
● illustrer un diagramme de classes
● montrer l’état d’un système à un instant t
● expliquer les cas particuliers ou
complexes
44
Diagramme d’objets

Diagramme de classes
ChargéDeCours Cours
enseigne
nom: String sigle: String
1 *

Diagramme d’objets
inf3143:Cours

enseigne sigle=”INF3143”
alex:ChargéDeCours
nom=”Alex”
inf2170:Cours
enseigne sigle=”INF2170”

45
Relation de dépendance d’instanciation

Représenter les relations entre les classes et


leurs instances

enseigne
ChargéDeCours Cours
* 1

<<instanceof>> <<instanceof>> <<instanceof>>

alex:ChargéDeCours inf3143:Cours
enseigne

46
Autre exemple (diagramme de classes)

Séance
salle: String

ChargéDeCours Cours
nom: String sigle: String
1 *

47
Autre exemple (diagramme d’objets)

:Séance
salle=”SB-M210”
inf3143:Cours
sigle=”INF3143”
alex:ChargéDeCours
nom=”Alex”
inf2170:Cours
sigle=”INF2170”

:Séance
salle=”PK-4610”

48
Exercice

Écrire les diagrammes de classes et d’objets


Bibliotheque b1 = new Bibliotheque(“Sciences”)
Bibliotheque b2 = new Bibliotheque(“Histoire”)

Livre l1 = new Livre(“titre1”, b1)


Livre l2 = new Livre(“titre2”, b1)
Livre l3 = new Livre(“titre3”, b2)

Etudiant e1 = new Etudiant(“ABCD1234”)


Etudiant e2 = new Etudiant(“DCBA4321”)

e1.emprunts.add(l1)
e1.emprunts.add(l3)
e2.emprunts.add(l2)
49
Solution (diagramme de classes)

Bibliothèque Livre Étudiant


emprunts
secteur: String titre: String code: String
1 * * *

50
Solution (diagramme d’objets)

l3:Livre b2: Bibliotheque

titre=”titre3” secteur=”Histoire”

e1:Etudiant
code=”ABDC1234”
l1:Livre
titre=”titre1”
b1: Bibliotheque
secteur=”Sciences”

e2:Etudiant l2:Livre
code=”DCBA4321” titre=”titre2”

51
Conclusion
UML - Diagramme d’objets
● pour modéliser un état
○ objets: instances de classes
○ liens: instances de relations

Diagramme de classes
● exprime les règles
Diagramme d’objets
● exprime les faits
52
Ressources
● Miles, R. and Hamilton, K - Learning UML 2.0
- O’Reilly Media, 2006 (chap 1.1, 1.5, 4, 5)
● Pilone, D and Pitman, N - UML 2.0 in a
Nutshell - O’Reilly Media, 2005 (chap 1, 2)
● www.uml.org
● laurent-audibert.developpez.com/Cours-UML/

53

Vous aimerez peut-être aussi