280 likes | 479 Views
Les concepts d’UML - Le langage OCL -. OCL: what is it?. OCL: Object Constraint Language Chapter 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.
E N D
Les concepts d’UML- Le langage OCL - Cours d'UML
OCL: what is it? • OCL: Object Constraint Language • Chapter 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. Cours d'UML
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 bord • Ce n’est pas un langage de programmationne modifie pas le modèle. Cours d'UML
OCL: Comment l’utiliser • Utilisation d’OCL dans plusieurs cas: • Spécifier les invariantsdes 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 Cours d'UML
OCL: Comment l’écrire? • De manière graphique: • De manière textuelle: Contexte Expression OCL Ex: context Compagny inv: self.numberOfEmployees > 50 Entité UML {Règle OCL} Cours d'UML
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: Cours d'UML
Dans le cas d’un contexte invariant: Context entitéUML inv: Expression OCL • Ex: context Compagny inv: self.numberOfEmployees > 50 Cours d'UML
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 Cours d'UML
OCL: Écriture d’une expression • Type de base: • Booléen : Boolean • Entier : Integer • Réel : Real • Chaî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()… Cours d'UML
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) Cours d'UML
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 Cours d'UML
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 » Cours d'UML
OCL: Écriture d’une expression Quelques opérateurs • Accès aux propriétés des supertypes Context B inv: Self.oclAsType(A).attributeA Self.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. Cours d'UML
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} • Bag Cet ensemble accepte plusieurs même éléments, les doublons sont admis. {1, 1, 5, 4, 4, 8} • Sequence Cet ensemble peut contenir des doublons et tous ses éléments sont ordonnés. {1, 1, 4, 4, 5, 8} Cours d'UML
OCL: Écriture d’une expression • L’opérateur @pre • Celui-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 Cours d'UML
OCL: Écriture d’une expression • Sélection dans un sous ensemble Collection->select(…) • Ex : context Company inv: self.employee->select(age>50)->notEmpty() • Rejet d’un élément d’une collection Collection->reject(…) • Ex: context Company inv: self.employee->reject(isMarried)->isEmpty() Cours d'UML
OCL: Écriture d’une expression • Existence Collection->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’) Cours d'UML
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 Cours d'UML
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) Cours d'UML
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) Cours d'UML
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. • … Cours d'UML
Analyse rapide • Déterminons les classes: • Livre • Auteur • Étudiant • Emprunt • Les attributs • Livre: titre • Étudiant: nom, prénom, age • Auteur: nom, prénom • Emprunt: dateDébut, DateFin Cours d'UML
Diagramme de classe 1/2 Cours d'UML
Diagramme de classes 2/2 Cours d'UML
Cas d’études • Les contraintes OCL • L’é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é Cours d'UML
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 Cours d'UML
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? Cours d'UML