1 / 27

Les concepts d’UML - Le langage OCL -

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.

Download Presentation

Les concepts d’UML - Le langage OCL -

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Les concepts d’UML- Le langage OCL - Cours d'UML

  2. 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

  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’expressionaucun effet de bord • Ce n’est pas un langage de programmationne modifie pas le modèle. Cours d'UML

  4. 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

  5. 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

  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: Cours d'UML

  7. Dans le cas d’un contexte invariant: Context entitéUML inv: Expression OCL • Ex: context Compagny inv: self.numberOfEmployees > 50 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 Cours d'UML

  9. 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

  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) 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 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 » Cours d'UML

  13. 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

  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} • 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

  15. 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

  16. 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

  17. 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

  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 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) 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) 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. • … Cours d'UML

  22. 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

  23. Diagramme de classe 1/2 Cours d'UML

  24. Diagramme de classes 2/2 Cours d'UML

  25. 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

  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 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? Cours d'UML

More Related