inf3143 - moz-code.org
TRANSCRIPT
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/