![Page 1: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/1.jpg)
2003/2004 Cours d'UML 1
Les concepts d’UML
- Le langage OCL -
![Page 2: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/2.jpg)
2003/2004 Cours d'UML 2
OCL: what is it?
OCL: Object Constraint LanguageChapter 6 of UML 1.5
Langage formel pour exprimer les contraintes.
Expression des invariants d’un système modélisé.
Les expressions OCL sont évaluées, n’ont aucun effet de bord.Celui-ci s’applique non seulement au méta-modèle mais aussi au modèle.
![Page 3: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/3.jpg)
2003/2004 Cours d'UML 3
Pourquoi OCL?
Un diagramme UML peut manquer de précision pour exprimer tous les aspects d’une spécification.
Besoin de décrire des contraintes additionnelles au modèle.Le langage naturel est souvent utilisé
Pb: apparition d’ambiguïtés.
OCL a pour but de combler ce manque!Langage formel aucune ambiguïté Pure langage d’expressionaucun effet de bordCe n’est pas un langage de programmationne modifie pas le modèle.
![Page 4: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/4.jpg)
2003/2004 Cours d'UML 4
OCL: Comment l’utiliser
Utilisation d’OCL dans plusieurs cas:Spécifier les invariants des classes et types du modèle de classes
Spécifier les invariants pour les stéréotypes
Décrire les pre et post conditions sur les opérations et méthodes.
Décrire les gardes
L’utiliser comme langage de navigation
Spécifier les contraintes sur les opérations
![Page 5: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/5.jpg)
2003/2004 Cours d'UML 5
OCL: Comment l’écrire?
De manière graphique:
De manière textuelle: Contexte Expression OCL Ex: context Compagny inv: self.numberOfEmployees > 50
{Règle OCL}Entité UML
![Page 6: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/6.jpg)
2003/2004 Cours d'UML 6
OCL: Le contexte (1/2)
Le contexte s’écrit de la manière suivante :
Context entitéUML typeDecontexte [nomDeLaRègle]:
Ex: Context compagny inv:
Context c:Compagny inv enoughEmployees:
![Page 7: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/7.jpg)
2003/2004 Cours d'UML 7
Dans le cas d’un contexte invariant:
Context entitéUML inv:
Expression OCL
Ex: context Compagny inv:
self.numberOfEmployees > 50
![Page 8: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/8.jpg)
2003/2004 Cours d'UML 8
OCL: Le contexte (2/2)
Dans le cas d’un contexte pre et postconditions
S’applique aux opérations
Context typeName::opérationName(param1: type1, . . .):ReturnType
pre : param1>. . .
post: result =. . .
Ex: Context Person::income(date:Date):Integer post: result = 5000
![Page 9: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/9.jpg)
2003/2004 Cours d'UML 9
OCL: Écriture d’une expression
Type de base:Booléen : Boolean Entier : IntegerRéel : RealChaîne de caractères : String
Opération sur les types:Booléen : and, or, xor, not, implies, if-then-else Entier : +, -,*, /, abs(), max()…Réel : +, -,*, /, floor(),max()…Chaîne de caractères : toUpper(), concat(),size()…
![Page 10: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/10.jpg)
2003/2004 Cours d'UML 10
OCL: Écriture d’une expression
Accès au propriété d’un objet:
Objet.propriété
Accès à un attribut:Ex: context Person inv:
self.age > 0
Accès à une opération:Ex : aPerson.income(aDate)
![Page 11: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/11.jpg)
2003/2004 Cours d'UML 11
OCL: Écriture d’une expression
Accès à une fin d’association Objet.nomDuRôleOpposé
context Company inv: self.manager.isUnemployed = false
inv: self.employee->notEmpty()
context Person inv: self.employer->isEmpty() -- Ensemble de personnes
qui ont -- le rôle employeur
manager 0..*
1 managerCompanies
employee 0..*
0..* employer
Person
+ IsUnemployed : Boolean
+ income(d :Date) : Integer
Company
+ name : String
+ stockPrice():Real
![Page 12: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/12.jpg)
2003/2004 Cours d'UML 12
OCL: Écriture d’une expression
Navigation vers la classe associations
Context Person inv: self.employeeRanking[bosses]->sum() > 0
Ensemble des « employeeRanking » qui appartiennent à la collection « bosses »
![Page 13: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/13.jpg)
2003/2004 Cours d'UML 13
OCL: Écriture d’une expression
Quelques opérateursAccès aux propriétés des supertypes
Context B inv:Self.oclAsType(A).attributeASelf.attributeA
Nous avons accès à la propriété définie dans la classe A.Ensuite, nous accédons à la propriété définie dans la classe B.
+ attributeA
A
+ attributeA
B
![Page 14: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/14.jpg)
2003/2004 Cours d'UML 14
OCL: Écriture d’une expression
Les notions d’ensemble:Set C’est un ensemble au sens mathématique, les doublons ne sont pas admis.
{1, 5, 4, 8}BagCet ensemble accepte plusieurs même éléments, les doublons sont admis.
{1, 1, 5, 4, 4, 8}SequenceCet ensemble peut contenir des doublons et tous ses éléments sont ordonnés.
{1, 1, 4, 4, 5, 8}
![Page 15: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/15.jpg)
2003/2004 Cours d'UML 15
OCL: Écriture d’une expression
L’opérateur @preCelui-ci est utilisé pour spécifier les pre et post-conditions sur les opérations et méthodes dans UML.
Il indique la valeur de la propriété au début de l’opération.
Il est post fixé
Ex: context Person::birthdayHappens() post: age=age@pre + 1
![Page 16: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/16.jpg)
2003/2004 Cours d'UML 16
OCL: Écriture d’une expression
Sélection dans un sous ensembleCollection->select(…)
Ex : context Company inv: self.employee->select(age>50)->notEmpty()
Rejet d’un élément d’une collectionCollection->reject(…)
Ex:context Company inv: self.employee->reject(isMarried)->isEmpty()
![Page 17: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/17.jpg)
2003/2004 Cours d'UML 17
OCL: Écriture d’une expression
ExistenceCollection->exist(…)
Ex : context Company inv: self.employee->exists(forename =‘Jack’)
Iteration
collection->iterate(elem:Type;acc:type=<expression>)|expression-with-elem-and-acc)
Ex : self.employee->iterate(p:Person;acc=Bag{}
|acc->including (p.forename<>’Jack’)
![Page 18: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/18.jpg)
2003/2004 Cours d'UML 18
OCL : l’expression « let »
‘Let’ permet de définir un attribut ou une opération dans une contrainte
Ex: context Person inv:
let income: Integer=self.job.salary-> sum()
let hasTitle(t: string):Boolean=self.job-
>exists(title=t) in if isUnemployed then self.income <100
else self.income>=100 and
self.hasTitle(‘manager’) endif
![Page 19: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/19.jpg)
2003/2004 Cours d'UML 19
Manipulation des collections
Opérations sur les collections:Collection->size(),
Collection->includes(objet),Collection->excludes(objet),Collection->count(objet),Collection->includesAll(collection),Collection->excludesAll(collection),Collection->isEmpty(),Collection->notEmpty(),Collection->sum(),Collection->exist(expressionOCL),Collection->sortedBy(expressionOCL)
![Page 20: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/20.jpg)
2003/2004 Cours d'UML 20
Opérations sur les collections de type Set et Bag
set->union (set2:Set(T)) ou
Bag->union(bag2:Bag(T))=set->intersection(set2:Set(T)) ou set->intersection(bag2:Bag(T))
(set ou bag)->select(expressionOCL(set ou bag)->reject(expressionOCL)(set ou bag)->count(object)
![Page 21: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/21.jpg)
2003/2004 Cours d'UML 21
Etude de Cas
Système de gestion pour le prêt d’un livre.
L’étudiant ne peut emprunter que 4 livres au maximum.
La durée de l’emprunt dure 3 semaines.
Si le livre est rendu N jours en retard, l’étudiant ne peut pas emprunter de livres pendant N jours.
…
![Page 22: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/22.jpg)
2003/2004 Cours d'UML 22
Analyse rapide
Déterminons les classes:Livre
Auteur
Étudiant
Emprunt
Les attributsLivre: titre
Étudiant: nom, prénom, age
Auteur: nom, prénom
Emprunt: dateDébut, DateFin
![Page 23: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/23.jpg)
2003/2004 Cours d'UML 23
Diagramme de classe 1/2
![Page 24: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/24.jpg)
2003/2004 Cours d'UML 24
Diagramme de classes 2/2
![Page 25: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/25.jpg)
2003/2004 Cours d'UML 25
Cas d’études
Les contraintes OCLL’étudiant peut emprunter si il a moins de 4 emprunts en cours.
Vérifier la cohérence des dates.
Le livre ne peut pas être emprunter s’il est déjà.
Lorsqu’un livre est acheté, il peut être emprunté
![Page 26: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/26.jpg)
2003/2004 Cours d'UML 26
Règles OCL
Context Etudiant::effectuerEmprunt(livre:Livre)
pre :emprunt->size()<4
post : emprunt->size()=emprunt@pre->size()+1
Context Emprunt::emprunt(livre:Livre)
Post : dateDebut=System.currentdate
Context Livre::emprunter()
pre : libre=true
post : libre= false
Context Etudiant inv:
self.dateDebut<=dateFin
Context Livre::livre()
Post : libre=true
![Page 27: 2003/2004Cours d'UML1 Les concepts d’UML - Le langage OCL -](https://reader035.vdocuments.site/reader035/viewer/2022062318/551d9ddb497959293b8e7f53/html5/thumbnails/27.jpg)
2003/2004 Cours d'UML 27
Améliorations !!
Exprimer le fait que la durée de l’emprunt ne doit pas excéder 3 semaines (21 jours).
Nous avons oublié que l’étudiant pouvait rendre le livre.
Quels sont les éléments à ajouter?
Quels sont les contraintes OCL à ajouter?