INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département d’informatique, UQÀM
INF3143
Modélisation et spécificationformelles des logiciels
Hiver 2018
Alexandre TerrasaDépartement d’informatique, UQÀM
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○ diagramme de temps 5
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○ diagramme de temps 6
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
9
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
Représentation graphique d’une classe
10
NomClasse
attribut1: Type1attribut2: Type2
methode1(): Type1methode2(Type1): void
Étudiant
nom: StringcodePerm: String
payer(Facture): void
class Etudiant {String nom;String codePerm;
void payer(Facture facture) { } }
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
12
Étudiant
nom: StringcodePerm: String
payer(Facture): void
class Etudiant {String nom;String codePerm;
void payer(Facture facture) { } }
NomClasse
methode1(): Type1methode2(Type1): void
attribut1: Type1attribut2: Type2
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
14
NomClasse
attribut1: Type1attribut2: Type2
methode1(): Type1methode2(Type1): void
Étudiant
nom: StringcodePerm: String
payer(Facture): void
class Etudiant {String nom;String codePerm;
void payer(Facture facture) { } }
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é
17
Étudiant
- nom: String- codePerm: String
+ payer(Facture): void+ getNom(): String+ setNom(String): void+ getCodePerm(): String+ setCodePerm(String): void
class Etudiant { private String nom; private String codePerm;
public void payer(Facture facture) { }
public String getNom() {} public void setNom(String nom) {}
public String getCodePerm() {} public void setCodePerm(String code) {} }
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
19
Étudiant
nom: StringcodePerm: String
payer(Facture): void
Université
nom: String
nbEtudiants(): Int
étudie_àétudiants université
* 1
Étudiant
nom: StringcodePerm: Stringuniversité: Université
payer(Facture): void
Université
nom: Stringétudiants: List<Étudiant>
nbEtudiants(): Int
Flèche implicite
Implémentation de l’association
20
class Etudiant { String nom; String codePerm;
Universite universite;
// ... }
class Universite { String nom;
List<Etudiant> etudiants;
// ... }
Étudiant
nom: StringcodePerm: Stringuniversité: Université
payer(Facture): void
Université
nom: Stringétudiants: List<Étudiant>
nbEtudiants(): Int
Navigabilité
Comment traverser une association?
● relation bidirectionnelle○ dans les deux sens
● relation unidirectionnelle○ à sens unique
21
Étudiant Universitéétudie_àétudiants université
* 1
Étudiant Universitéétudie_à université
1
Association réflexive
Classe associée à elle-même:
22
Répertoire
nom: Stringmode: Int
Fichier
nom: Stringmode: Inttaille: Intest_dans1
est_dans
1
Association n-aire
Pour lier plus que deux classes
23
Étudiant
nom: StringcodePerm: String
Salle
code: String
Cours
1
Professeur
nom: Stringmatricule: String
*
1
Une implémentation de l’association n-aire
24
class Etudiant { String nom; String codePerm;
List<Cours> cours; }
class Salle { String code; }
class Professeur { String nom; String matricule;
List<Cours> cours; }
class Cours { Professeur professeur; List<Etudiant> etudiants; Salle salle; }
Classe d’association
Quand une association doit posséder des propriétés
25
Étudiant
nom: StringcodePerm: String
Cours
sigle: Stringtitre: String
a_suivi cours
*
Résultat
session: Stringnote: Float
Implémentation d’une classe d’association
26
class Etudiant { String nom; String codePerm;
Map<Cours, Resultat> resultats; }
class Cours { String sigle; String titre; }
class Resultat { String session; Float note; }
Un résultat par cours
Autre implémentation
27
class Etudiant { String nom; String codePerm;
Map<Cours, List<Resultat>> resultats; }
class Cours { String sigle; String titre; }
class Resultat { String session; Float note; }
Plusieurs résultats par cours
Encore une implémentation
28
class Etudiant { String nom; String codePerm;
List<Resultat> resultats; }
class Cours { String sigle; String titre; }
class Resultat { String session; Float note;
Cours cours; }
Plusieurs résultats par cours
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
29
Professeur Département Université1..* 11..* 1
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
31
parti
cipe
_à
1
Tournoi
date: Daterécompense: Int
Équipe
nom: Stringscore: Int
Joueur
login: Stringpass: String
Match
vainqueur: Équipe
Participation
rang: Int
appartient_à
1..5
*
*
affronte
*
*
1
*
se_déroule_dans
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
33
Vache Canard
<<abstract>>Animal
respirer()manger()
meugler()produireLait()
cancaner()voler()
Implémentation de l’héritage
34
class Vache extends Animal { void meugler() {} void produireLait() {} }
class Canard extends Animal { void cancaner() {} void voler() {} }
abstract class Animal { void respirer() {} void manger() {} }
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
36
<<abstract>>Participant
id: String
Senior
exp: Int
Junior
date: Date
<<abstract>>Compétition
points: Int
Sport
bonus: Int
Info
laptop: Bool
*participe_à
*
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
38
Voiture Personne
<<interface>>Véhicule
rouler()freiner()
conduire(Véhicule)
<<conduit>><<implémente>>
Implémentation de l’héritage
39
class Voiture implements Vehicule {
@Override void avancer() {}
@Override void freiner() {} }
class Personne { void conduire(Vehicule vehicule) {} }
interface Vehicule { void avancer() {} void freiner() {} }
Voiture v = new Voiture();
Personne p = new Personne();p.conduire(v);
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
41
<<interface>>PersonneBadge
getId(): String
BénévoleParticipant
Salle
entrer(PersonneBadge)
<<im
plém
ente
>> <<implém
ente>>
<<accepte>>
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
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
complexes44
Diagramme d’objets
45
enseigne
1 *
alex:ChargéDeCours
nom=”Alex”
inf3143:Cours
sigle=”INF3143”
ChargéDeCours
nom: String
Cours
sigle: String
inf2170:Cours
sigle=”INF2170”
enseigne
enseigne
Diagramme de classes
Diagramme d’objets
Relation de dépendance d’instanciation
46
enseigne
* 1
alex:ChargéDeCours inf3143:Cours
ChargéDeCours Cours
enseigne
<<instanceof>> <<instanceof>> <<instanceof>>
Représenter les relations entre les classes et leurs instances
Autre exemple (diagramme de classes)
47
1 *
ChargéDeCours
nom: String
Cours
sigle: String
Séancesalle: String
Autre exemple (diagramme d’objets)
48
alex:ChargéDeCours
nom=”Alex”
inf3143:Cours
sigle=”INF3143”
inf2170:Cours
sigle=”INF2170”
:Séance
salle=”SB-M210”
:Séance
salle=”PK-4610”
Exercice
49
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)
Écrire les diagrammes de classes et d’objets
Solution (diagramme de classes)
50
Bibliothèque
secteur: String
Livre
titre: String
Étudiant
code: String1 * * *
emprunts
Solution (diagramme d’objets)
51
e1:Etudiant
code=”ABDC1234”
b2: Bibliotheque
secteur=”Histoire”
b1: Bibliotheque
secteur=”Sciences”
l3:Livre
titre=”titre3”
e2:Etudiant
code=”DCBA4321”
l1:Livre
titre=”titre1”
l2:Livre
titre=”titre2”
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
53
● 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/