INF3143 - moz-code.org

53
INF3143 Modélisation et spécification formelles des logiciels Hiver 2018 Alexandre Terrasa Département d’informatique, UQÀM

Transcript of INF3143 - moz-code.org

INF3143

Modélisation et spécificationformelles des logiciels

Hiver 2018

Alexandre TerrasaDépartement d’informatique, UQÀM

UMLUnified 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○ 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

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

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

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

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/