Ce cours présente le langage UML qui permet notamment de modéliser des logiciels programmés en orienté objet. Ce cours présente les diagrammes de classes qui permettent de décrire la structure d'un logiciel et les diagrammes d'activité qui permettent de décrire les aspects dynamiques de l'exécution.
1. PO3T Programmation orientée objet
Séance 5
Modélisation
avec UML
Sébastien Combéfis, Quentin Lurkin lundi 26 octobre 2015
2. Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons
Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
3. Rappels
Héritage et polymorphisme des objets
Référence polymorphique et conversion
Résolution des appels de méthodes (statique et dynamique)
Classe abstraite et interface
Factorisation de code similaire entre classes
Contrat à respecter pour l’implémentation
3
4. Objectifs
Comprendre et utiliser la modélisation d’un logiciel
Structure et architecture de l’application orientée objet
Description de l’aspect dynamique et de l’exécution
Découvrir le langage UML
Diagramme de classe
Diagramme d’activité
4
6. Object Modelling Technique (OMT)
Notation développé en 1991 par Rumbaugh
Développé pour supporter la programmation orientée objet
Quatre buts pour l’utilisation en développement logiciel
Tester des entités physique avant construction (simulation)
Communiquer avec le client
Visualisation (présentation alternative de l’information)
Réduction de la complexité
Prédécesseur du langage UML
6
7. Trois modèles d’OMT
Modèle objet pour les éléments statiques
Classes et associations, avec les attributs et les opérations
Modèle dynamique pour une vue état/transition
États, transitions et évènements pour déclencher les transitions
Modèle fonctionnel gère l’aspect processus
Processus, stockage et flux de données et acteurs
7
8. Unified Modelling Language (UML)
Language de modélisation utilisé en ingénierie logicielle
Notation unifiée pour visualiser le design d’un système
Standard de l’Object Management Group (OMG) en 1997
Également adopté comme un standard ISO en 2005
Très utilisé pour le design de programme en orientée objet
Mais pourrait être utilisé pour le design de base de données
8
9. Modélisation
Permet de visualiser le plan architectural d’un système
À l’aide d’un ensemble de diagrammes
Distinction entre le modèle du système et les diagrammes
Diagramme = représentation graphique partielle d’un système
Deux vues d’un système
Statique décrit la structure du système
Dynamique décrit le comportement dynamique du système
9
10. Diagrammes prédéfinis en UML 2
Quatorze diagrammes prédéfinis divisés en deux catégories
Structurel Classe (Class diagram)
Objet (Object diagram)
Composant (Component diagram)
Déploiement (Deployment diagram)
Package (Package diagram)
Structure composite (Composite structure diagram)
Profil (Profile diagram)
Comportemental Cas d’utilisation (Use case diagram)
États-transitions (State machine diagram)
Activité (Activity diagram)
Interaction Séquence (Sequence diagram)
Communication (Communication diagram)
Aperçu de l’interaction (Interaction overview diagram)
Temps (Timing diagram)
10
12. Diagramme de classe
Capturer les relations statiques dans le programme
Comment les éléments du programme sont mis ensemble
Plusieurs types de relation
Stockage de références vers d’autres classes
Appartenance de classes
...
Capture de la « structure physique » d’un système
12
13. Représenter une classe (1)
Classe modélisée par un diagramme de classe
Définition composée de trois compartiments
Nom pour identifier la classe
Attributs avec visibilité et valeur par défaut (optionnel)
Opérations avec visibilité
Employee
{author = Combéfis}
+office : String
#salary : Float = 1000
−name : String
+getName() : String
+promote() : void
13
14. Représenter une classe (2)
Possibilité d’ajouter des valeurs tagguées
Rattachées à un élément qui définit leur portée
Quatre niveau de visibilité
+ pour public
− pour private
# pour protected
~ pour package
Employee
{author = Combéfis}
+office : String
#salary : Float = 1000
−name : String
+getName() : String
+promote() : void
14
15. Attribut
Un attribut est un type primitif simple ou un objet
Peut être une relation vers d’autres objets complexes
Deux formes possibles pour un attribut
Attribut déclaré directement dans la classe
Relation entre classes
Propriétés de multiplicité, d’unicité et d’ordre
Définissable pour les deux formes d’attribut
visibilité nom : type [multiplicité] = défaut {propriétés}
15
16. Visibilité
Quatre niveaux de visibilité
Visibilité publique (public) rend l’élément visible de partout
Visibilité privée (private) restreint la visibilité à la classe
Visibilité protégée (protected) utilisée avec l’héritage
Publique pour les sous-classes et privée ailleurs
Visibilité package rend l’élément visible dans le package
Applicable pour les attributs et les pour les opérations
16
17. Multiplicité
La multiplicité définit le nombre d’instances de l’attribut
Pour chaque instance de la classe principale créée
Simple entier, un liste d’entier, un intervalle d’entiers
Multiplicité par défaut est de 1, valeur non bornée avec *
Flight
−name : String
−passengers : Person[0..400]
−operator : Airline
−partners : Airline[*]
−pilots : Person[2]
17
18. Propriété des attributs
Imposer un stockage séquentiel des éléments avec {ordered}
Pour les attributs multiples uniquement, non ordonné par défaut
Autoriser les doublons avec {notunique}
Pour les attributs multiples uniquement, {unique} par défaut
Figer la valeur d’un attribut avec {readOnly}
La valeur de l’attribut ne peut être changée une fois initialisée
18
19. Contrainte des attributs
Ajout de restriction sur les éléments avec des contraintes
Expression booléenne derrière l’élément ou comme note
On peut ajouter une étiquette à la contrainte
Qu’on place devant l’expression booléenne, suivie de :
Car
−length : Float {length > 0}
−seating : Int
−color : Color
iscar : 0 < seating
<= 7
19
20. Attribut dérivé
Attribut dérivé ne doit pas être dans l’implémentation
Il peut être calculé à partir d’autres
Peut néanmoins être présent pour raison d’efficacité
Signalé en préfixant le nom avec un slash ( / )
Pair
−x : Float
−y : Float
−/ordered : Boolean
+getX() : Float
+getY() : Float
+isOrdered() : Boolean
ordered == true
if x <= y, and
false otherwise
20
21. Relation
Représentation d’un attribut par une relation
Illustre comment l’attribut est en lien avec la classe
Une classe qui contient l’attribut et une qui le représente
Lien entre les classes, avec le nom de l’attribut
Mêmes informations que pour attribut déclaré dans la classe
Mais placées à différents endroits
School
−name : String
+getName() : String
1
−director
Person
−firstname : String
−lastname : String
−birthdate : Date
+getName() : String
+getBirthdate() : Date
21
22. Opération
Une opération permet d’invoquer un comportement
Le comportement agit sur une instance de la classe
UML fait la distinction entre opération et méthode
Opération spécifie comment invoquer un comportement
Méthode implémente l’opération
visibilité nom (paramètres) : type {propriétés}
22
23. Paramètre
Un paramètre d’une opération se définit comme un attribut
Nom, type, multiplicité, valeur par défaut et propriétés
La direction décrit comment un paramètre est utilisé
in : passé à l’opération
inout : passé par l’appelant, modifiable par l’opération
out : modifié par l’opération
return : passé par l’appelant, renvoyé par l’opération
direction nom : type [multiplicité] = défaut {propriétés}
23
24. Contrainte des opérations (1)
Association de contraintes sur les opérations
Contrat que l’implémentation de l’opération doit respecter
Définition des contraintes comme pour les attributs
Quelques contraintes spéciales (étiquettes prédéfinies)
Precondition doivent être satisfaite avant l’appel
Postcondition seront satisfaites après l’appel
bodyCondition contraint la valeur de retour
24
25. Contrainte des opérations (2)
Shape
−position : Coord
−color : Color
+nbSides() : Int
+draw(c : Canvas) : void
Square
+nbSides() : Int
+draw(c : Canvas) : void
bodyCondition :
Int > 0
bodyCondition :
Int == 4
Precondition :
c.contains(position)
Postcondition : the
shape has been drawn
in the specified canvas
25
26. Effet de bord
Indiquer que l’objet n’est pas modifié avec {query}
L’implémentation ne peut pas modifier l’état de l’objet
L’appel de l’opération ne provoque aucun effet de bord
Person
−firstname : String
−lastname : String
+getName() : String {query}
26
27. Classe abstraite
Classe abstraite contient des opérations sans implémentation
Peut ne contenir aucune opération
Impossible de créer une instance d’une classe abstraite
Étendue par des classes concrètes
Nom de la classe écrit en italique dans le diagramme UML
Animal
+isMammal() : Bool
+yell() : void
27
28. Relation de dépendance
Dépendance lorsqu’une classe utilise une autre (relation uses)
La relation entre les classes n’est pas durable
Quelques exemples
Une opération reçoit un paramètre de type d’une autre classe
Le type de retour d’une opération est d’une autre classe
...
Math ArithmeticException
28
29. Relation d’association
Association lorsqu’une classe retient une autre (relation has-a)
La relation entre les classes est durable
Les vies des objets ne sont pas dépendantes
Un objet peut être détruit sans que l’autre ne le soit
City Person
Une ville possède un
bourgmestre
29
30. Propriété des associations
On indique la navigabilité avec une flèche sur l’association
Et on peut ajouter une croix pour indiquer la non navigabilité
Le nom d’une association donne son contexte
Utilisation multiplicité lorsque l’association est un attribut
Par défaut, la multiplicité est de 1
Classroom
a pour élèves des
1..*
× Person
30
31. Relation d’aggrégation
Représente une association forte (relation owns-a)
Il y a appartenance entre deux classes
On peut indiquer la navigabilité et la multiplicité
Person 1..2
Address
Une personne pos-
sède l’adresse de son
domicile légal et éven-
tuellement l’adresse du
bureau à son travail
31
32. Relation de composition
Représente une association très forte (relation is-part-of )
Une classe est composée à partir d’autres classes
Les vies des objets composés sont liées à celle du principal
Les objets composés disparaissent en même temps que le principal
List *
ListElement
Une liste possède 0, 1
ou plusieurs éléments
32
33. Relation de généralisation
Une classe généralise une autre plus spécifique (relation is-a)
Une classe est construite en dérivant d’une autre
Pas de multiplicité ni de nom sur les relations de généralisation
Animal
SeaHorse
33
34. Classe d’association
Une classe d’association représente une association complexe
Possède un nom et des attributs
Résultera typiquement en trois classes lors de l’implémentation
Student
1..* *
Exam
ExamResult
−grade : Int
34
35. Interface (1)
Une interface a des déclarations de propriétés et méthodes
Représente un contrat qu’une implémentation doit respecter
Deux représentations graphique différentes
Comme une relation ou notation « ball-and-socket »
« interface »
Sortable
+isBefore(o : Sortable) : Bool
Person
+isBefore(o : Sortable) : Bool
Alphabetizer
35
36. Interface (2)
Moins de détails sur l’interface
Focus sur la relation entre les classes
L’interface est indiquée sous la « ball »
Et la classe qui dépend de l’interface avec un « socket »
Person Sortable Sortable
Alphabetizer
36
37. Template
Classe paramétrisée reçoit des types en paramètre
Permet d’indiquer un type de classe avec lequel la classe interagit
Plusieurs templates à séparer avec des virgules
On peut ajouter une restriction comme ElemType : Sortable
List
−size : Int
−elements : ElemType[*]
+size() : Int
+get(i : Int) : ElemType
+add(e : ElemType) : void
ElemType
37
38. Binding
Binding à faire en spécifiant un type concret pour le template
Lorsque la classe est utilisée comme attribut
ou dans une relation (composition, généralisation...)
List
−size : Int
−elements : ElemType[*]
+size() : Int
+get(i : Int) : ElemType
+add(e : ElemType) : void
ElemType
StudentList
«bind» <ElementType -> Student>
38
40. Diagramme d’activité
Capturer l’exécution et le comportement d’un système
Permet de modéliser n’importe quel comportement
Représente le comportement suite aux appels de méthodes
Lorsqu’on modélise un logiciel
Deux éléments de base : activité et action
Une activité est un comportement composé d’actions
40
41. Activité et action
Activité décomposée en actions, étapes élémentaires
Une action ne peut pas être décomposée
Une activité possède un nom et des paramètres éventuels
Représentation avec un rectangle aux coins arrondis
Retrait d’argent
account : Account
Demander le
montant
Débiter le
compte
41
42. Début et fin de l’activité
Nœuds spéciaux pour marquer le début et la fin d’une activité
Point noir pour le début et point noir entouré pour la fin
On peut attacher des pré et postconditions à une activité
À indiquer en haut dans la boite de l’activité
Retrait d’argent
account : Account
«Precondition» Solde positif
«Postcondition» Compte débité
Demander le
montant
Débiter le
compte
42
43. Pré et postconditions locales
Pré et postconditions locales sur les actions
Ajout de notes sur les actions pour ces conditions
Retrait d’argent
account : Account
«Precondition» Solde positif
«Postcondition» Compte débité
Demander le
montant
Débiter le
compte
«localPostcondition»
Le montant demandé
est inférieur au solde
43
44. Arête d’activité
Description du flux d’exécution au sein d’une activité
À l’aide d’arêtes reliant les actions
Les arêtes indiquent les flux de contrôle et de donnée
Les arêtes sont dirigées et peuvent être nommées
Exécution concurrente des actions non liées par des arêtes
Possibilité d’exécution parallèle sur une machine multiprocesseurs
44
45. Nœud d’activité
Trois différents types de nœuds
Paramètre d’entrée et de sortie pour l’activité
Objet représentant des données complexes
Contrôle pour diriger le flux de contrôle
Les différents nœuds sont reliés par des arêtes d’activité
Par défaut une simple arête dirigée
45
46. Nœud de paramètre
Une activité reçoit des paramètres et produit des résultats
Nœuds de paramètre placés au bord de l’activité
Nœud de paramètre représenté par un rectangle
Nom ou description des paramètres dans le rectangle
Correction d’un examen
Exam
Vérification
des réponses
Encodage des
points Grade
46
47. Nœud objet (1)
Données qui circulent dans l’activité représentée par des objets
La donnée est transférée entre deux actions
Représente une instance d’une classe transférée entre actions
Production d’un objet par une action et réception par une autre
Découpe d’une pièce
Coupe de
l’acier Piece
Stockage de
la pièce
47
48. Nœud objet (2)
Notation compacte à l’aide de pins pour les entrées/sorties
On attache le rectangle de l’objet sur l’action
Les pins sont reliés par une arête pour indiquer le transfert
Production d’un objet par une action et réception par une autre
Découpe d’une pièce
Coupe de
l’acier
Piece Piece Stockage de
la pièce
48
49. Pin d’exception
Pin d’exception indique une condition d’erreur
Ajout d’un triangle près de la pin
Permet plusieurs chemins possibles en sortant d’une action
Découpe d’une pièce
Coupe de
l’acier
∆
Report
Piece Piece Stockage de
la pièce
Prévenir la
maintenance
49
50. Nœud de contrôle (1)
Contrôle du flux d’exécution à l’aide de nœuds spéciaux
Prise de décision, concurrence et synchronisation
Plusieurs types de nœud de contrôle
Début indique le point d’entrée de l’activité
Décision permet plusieurs chemins selon une condition
Fork pour lancer des actions concurrentes
Final indique le point de sortie de l’activité
50
51. Nœud de décision
Choix d’un chemin de sortie en fonction d’une condition
Gardes sur les arêtes et éventuellement entrée de condition
Nœud représenté par un diamant et gardes entre crochets
Connexion d’un utilisateur
Vérification
identifiants
[true]
[false]
Montrer page
d’accueil
Montrer page
100e visiteur
«decisionInput»
numLogins == 100
51
52. Nœud de fusion
Fusion de plusieurs actions vers une autre
Rend disponible à un nœuds les informations de plusieurs autres
Il ne s’agit pas d’une synchronisation d’actions
Engagement d’un employé
Préparation
offre d’emploi
Vérification candi-
dature spontanée
Recruter can-
didat
52
53. Nœud de fork
Exécution concurrente de plusieurs actions
Les données sont dupliquées pour toutes les arêtes sortantes
Une arête entrante et plusieurs sortantes
Chaque branche se finit avec un nœud de fin de branche
Engagement d’un employé
Acceptation
de l’employé
Création
compte e-mail
Affectation
bureau
53
54. Nœud de jointure
Jointure de plusieurs actions avant de poursuivre une autre
Attend que les actions concurrentes soient toutes terminées
Plusieurs arêtes entrantes et une arête sortante
Permet de rassembler des branches en une seule
Préparation d’un plat
Servir
le plat
Cuire la
viande
Cuire les
patates
54