Cours ocl

563 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
563
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
27
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Cours ocl

  1. 1. OCL - Object Constraint Language La¨titia Matignon e laetitia.matignon@univ-lyon1.fr D´partement Informatique - Polytech Lyon e Universit´ Claude Bernard Lyon 1 e 2012 - 2013 La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 1 / 36
  2. 2. Plan du cours 1 Introduction 2 Typologie des contraintes 3 Conception par contrats pour op´rations e 4 Types de base et op´rations e 5 Acc`s aux objets et navigation e 6 Collection 7 Conclusion La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 2 / 36
  3. 3. Introduction Plan 1 Introduction 2 Typologie des contraintes 3 Conception par contrats pour op´rations e 4 Types de base et op´rations e 5 Acc`s aux objets et navigation e 6 Collection 7 Conclusion La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 3 / 36
  4. 4. Introduction Contraintes Relation entre ´l´ments de mod´lisation : propri´t´ qui doit ˆtre vraie ee e ee e Notation : − − − − − − − − {contrainte} 3 types de contraintes : Contraintes pr´d´finies : disjoint, overlapping, xor, ... e e Contraintes exprim´es en langue naturelle (commentaires) e Contraintes exprim´es avec OCL (Object Constraint Language) e St´r´otypes : ee pr´condition , e postcondition e-mail {xor} Information coordonnées postales + envoie() {incomplet} journal La¨titia Matignon e {temps d'exécution <10ms} lettre SIMA - OCL - Object Constraint Language 2012 4 / 36
  5. 5. Introduction Pourquoi OCL ? Illustration par l’exemple Application bancaire Sp´cification e Un compte doit avoir un solde toujours positif Un client peut poss´der plusieurs comptes e Un client peut ˆtre client de plusieurs banques e Un client d’une banque poss`de au moins un compte dans cette banque e Une banque g`re plusieurs comptes e Une banque poss`de plusieurs clients e Quelles sp´cifications ne sont exe prim´es ? e La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 5 / 36
  6. 6. Introduction Pourquoi OCL ? Illustration par l’exemple Application bancaire Sp´cification e Un compte doit avoir un solde toujours positif Un client peut poss´der plusieurs comptes e Un client peut ˆtre client de plusieurs banques e Un client d’une banque poss`de au moins un compte dans cette banque e Une banque g`re plusieurs comptes e Une banque poss`de plusieurs clients e Le diagramme de classe ne permet pas d’exprimer tout ce qui est d´fini e dans la sp´cification e La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 6 / 36
  7. 7. Introduction Pourquoi OCL ? Illustration par l’exemple Diagramme d’objets coh´rent avec le diagramme de classes et la e sp´cification. e La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 7 / 36
  8. 8. Introduction Pourquoi OCL ? Illustration par l’exemple Diagramme d’objets coh´rent avec le diagramme de classes mais qui ne e respecte pas la sp´cification attendue. e Une personne a un compte dans une banque o` elle n’est pas cliente u Une personne est cliente d’une banque mais sans y avoir de compte La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 7 / 36
  9. 9. Introduction OCL - Object Constraint Language Langage de description de contraintes d’UML Langage formel (mais simple ` utiliser), non ambig¨, grammaire a u pr´cise e Sp´cifier des information suppl´mentaires importantes qui n’ont pas e e pu l’ˆtre avec les ´l´ments de mod´lisation d’UML e ee e Standardis´ par l’OMG : sp´cification v2.0 e e http://www.omg.org/spec/OCL/ La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 8 / 36
  10. 10. Introduction Utilisation Principe Langage d´claratif : les contraintes ne sont pas op´rationnelles. e e Langage sans effet de bord : les instances ne sont pas modifi´es par e les contraintes. Une expression OCL d´crit une contrainte ` respecter et pas une e a impl´mentation d’op´ration. e e OCL peut s’appliquer sur la plupart des diagrammes UML La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 9 / 36
  11. 11. Introduction Utilisation Les contraintes OCL servent dans plusieurs situations : description d’invariants de classe Une contrainte qui doit ˆtre respect´e en permanence par toutes les e e instances d’une classe pr´-condition et post-conditions ` l’ex´cution d’une op´ration e a e e Une contrainte qui doit ˆtre toujours vraie avant/apr`s l’ex´cution e e e d’une op´ration e contraintes sur la valeur retourn´e par une m´thode e e initialisation d’un attribut r`gles de d´rivation des attributs e e Pr´ciser la valeur d’un attribut d´riv´ e e e expression des gardes (conditions dans les diagrammes dynamiques) sp´cification du corps d’une op´ration e e sp´cification d’une op´ration sans effet de bord (query) e e ... La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 10 / 36
  12. 12. Introduction Exemple de mod`le e La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 11 / 36
  13. 13. Typologie des contraintes Plan 1 Introduction 2 Typologie des contraintes 3 Conception par contrats pour op´rations e 4 Types de base et op´rations e 5 Acc`s aux objets et navigation e 6 Collection 7 Conclusion La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 12 / 36
  14. 14. Typologie des contraintes Notion de contexte Toute contrainte OCL est li´e ` un contexte sp´cifique, l’´l´ment e a e ee auquel la contrainte est attach´e. e Syntaxe : context monContexte <st´r´otype> nomContrainte : Expression de la contrainte e e Le contexte peut ˆtre utilis´ ` l’int´rieur d’une expression grˆce au e ea e a mot-clef self Exemple : context Compte : l’expression OCL s’applique ` la classe Compte, a c’est-`-dire ` toutes les instances de cette classe a a context Compte::getSolde() : Real : l’expression OCL s’applique ` la m´thode getSolde() a e context Compte::cr´diter(somme : Real) : l’expression OCL e s’applique ` la m´thode cr´diter a e e context Compte:solde : Real : l’expression OCL s’applique ` a l’attribut solde La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 13 / 36
  15. 15. Typologie des contraintes Invariants Un invariant exprime une contrainte sur un objet ou un groupe d’objets qui doit ˆtre respect´e en permanence e e <st´r´otype> : inv e e context Compte inv: solde > 0 -- solde d’un compte doit toujours etre positif ^ context Personne inv: (age <= 140) and (age >=0) -- l’^ge est compris entre 0 et 140 ans a context Personne inv : (self.age <= 140) and (self.age >=0) context p:Personne inv borneAge: (p.age <= 140) and (p.age >=0) . permet d’acc´der ` une caract´ristique d’un objet (m´thode, e a e e attribut, terminaison d’association) self objet d´sign´ par le contexte e e La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 14 / 36
  16. 16. Typologie des contraintes Pr´-conditions & Post-conditions e Sp´cifie une contrainte qui doit ˆtre v´rifi´e avant/apr`s l’appel e e e e e d’une op´ration e Contraindre l’ensemble des valeurs d’entr´e d’une op´ration (pre) e e Sp´cifier la s´mantique d’une op´ration : ce qu’elle fait et non e e e comment elle le fait (post concerne les effets de bord (modification d’un argument, d’un autre membre de la classe, etc.)) <st´r´otype> : pre post e e context Personne::setAge(a :entier) pre : (a <= 140) and (a >=0) and (a >= age) post : age = a -- on peut ´crire ´galement a=age e e La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 15 / 36
  17. 17. Typologie des contraintes Pr´-conditions & Post-conditions e Sp´cifie une contrainte qui doit ˆtre v´rifi´e avant/apr`s l’appel e e e e e d’une op´ration e Contraindre l’ensemble des valeurs d’entr´e d’une op´ration (pre) e e Sp´cifier la s´mantique d’une op´ration : ce qu’elle fait et non e e e comment elle le fait (post concerne les effets de bord (modification d’un argument, d’un autre membre de la classe, etc.)) <st´r´otype> : pre post e e Op´rateurs sp´ciaux : e e @pre : acc`s ` la valeur d’une propri´t´ avant l’ex´cution de e a ee e l’op´ration e result : acc`s au r´sultat de l’op´ration e e e context Compte::d´biter(somme : Real) e pre: somme > 0 post: solde = solde@pre - somme context Compte::getSolde() : Real post: result = somme La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 15 / 36
  18. 18. Typologie des contraintes Retour d’une op´ration e Sp´cifie le corps d’une op´ration e e D´finit directement le r´sultat d’une op´ration e e e <st´r´otype> : body e e context Compte::getSolde() : Real body : solde La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 16 / 36
  19. 19. Typologie des contraintes Valeur initiale et d´riv´e d’un attribut e e Sp´cifier la valeur initiale ou d´riv´ d’un attribut e e e <st´r´otype> : init derive e e context Personne::age :entier init : 0 context Personne::age : entier derive : dateDeNaissance.getYear() - Date::current().getYear() La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 17 / 36
  20. 20. Typologie des contraintes D´finition de variables et d’op´rations e e D´finir des variables pour simplifier l’´criture de certaines expressions e e syntaxe : let variable : type = expression1 in expression2 context Personne inv : let montantImposable : Real = salaire*0.8 in if (montantImposable >= 100000) then impot = montantImposable*45/100 else if (montantImposable >= 50000) then impot = montantImposable*30/100 else impot = montantImposable*10/100 endif endif La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 18 / 36
  21. 21. Typologie des contraintes D´finition de variables et d’op´rations e e D´finir des variables pour simplifier l’´criture de certaines expressions e e syntaxe : let variable : type = expression1 in expression2 D´finir des variables/op´rations utilisables dans plusieurs contraintes e e de la classe syntaxe : def variable : type = expression1 context Personne def : montantImposable : Real = salaire*0.8 context Personne def : ageCorrect(a :Real) :Boolean = (a>=0) and (a<=140) on peut r´´crire l’invariant sur l’age : ee context Personne inv: ageCorrect(age) -- l’^ge ne peut depasser 140 ans a La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 18 / 36
  22. 22. Conception par contrats pour op´rations e Plan 1 Introduction 2 Typologie des contraintes 3 Conception par contrats pour op´rations e 4 Types de base et op´rations e 5 Acc`s aux objets et navigation e 6 Collection 7 Conclusion La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 19 / 36
  23. 23. Conception par contrats pour op´rations e Conception par contrats D´finition e La programmation par contrat est un paradigme de programmation dans lequel le d´roulement des traitements est r´gi par des r`gles ou e e e contraintes appel´es assertions ou contrats e Le contrat est pass´ entre l’appelant d’une op´ration et l’appel´ e e e (celui qui ex´cute l’op´ration) par l’interm´diaire des contraintes e e e Le but principal est de r´duire le temps de d´bogage des programmes e e Librairie Java jContractor La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 20 / 36
  24. 24. Conception par contrats pour op´rations e Conception par contrats 3 types d’assertion Invariants, pr´ et postconditions permettent de faire une conception e par contrat Si l’appelant respecte les contraintes de la pr´condition alors l’appel´ e e s’engage ` respecter la post-condition a Si l’appelant ne respecte pas la pr´condition, alors le r´sultat de e e l’appel est ind´fini e Tester la satisfaction des assertions : → Avant l’appel de la m´thode : confiance dans l’utilisateur e → Dans le corps de la m´thode : lever une exception e → Pr´compilation e → Outils Java 1.5 pour mettre en place des assertions : le mot-cl´ e assert Pour l’exemple pr´c´dent : Si l’appelant de l’op´ration d´biter e e e e passe une somme positive en param`tre, alors le compte est bien e d´bit´ de cette somme e e La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 21 / 36
  25. 25. Types de base et op´rations e Plan 1 Introduction 2 Typologie des contraintes 3 Conception par contrats pour op´rations e 4 Types de base et op´rations e 5 Acc`s aux objets et navigation e 6 Collection 7 Conclusion La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 22 / 36
  26. 26. Types de base et op´rations e Types de base et op´rations associ´es e e Type Boolean Integer Real String Exemples de valeurs Op´rateurs e true ; false and ; or ; xor ; not ; implies ; if-then-else-endif ; ... 1 ; -5 ; 2 ; 34 ; 26524 ; ... * ; + ; - ; / ; abs() ; ... 1,5 ; 3,14 ; ... * ; + ; - ; / ; abs() ; floor() ; ... “To be or not to be ...” concat() ; size() ; substring() ; ... Types et op´rateurs pr´d´finis dans les contraintes OCL. e e e Op´rateurs conditionnels e Certaines contraintes sont d´pendantes d’autres contraintes e if expr1 then expr2 else expr3 endif Si l’expression expr1 est vraie alors expr2 doit ˆtre vraie sinon expr3 doit ˆtre e e vraie expr1 implies expr2 Si l’expression expr1 est vraie, alors expr2 doit ˆtre vraie ´galement. e e Si expr1 est fausse, alors l’expression compl`te est vraie e context Personne inv : if age >=18 then majeur=vrai else majeur=faux endif La¨titia Matignon e context Personne inv : mari´ implies majeur e SIMA - OCL - Object Constraint Language 2012 23 / 36
  27. 27. Types de base et op´rations e Types de base et op´rations associ´es e e D´finir plusieurs contraintes pour un invariant, une pr´ ou postcondition : e e and : et logique : l’invariant, pr´ ou postcondition est vrai si e toutes les expressions reli´es par le and sont vraies e or et xor Types ´num´r´s e ee Utilisation d’une valeur d’une ´num´ration e e NomEnum::valeur Ancienne notation : #valeur context Personne inv : if age <=12 then cat =Cat´gorie::enfant e else if age <=18 then cat =Cat´gorie::ado e else cat=Cat´gorie::adulte e endif endif context Personne inv: genre = Genre::femme La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 24 / 36
  28. 28. Types de base et op´rations e Op´rations pr´d´finies sur les objets e e e Types reli´s par une relation de sp´cialisation e e Prise en compte des sp´cialisations entre classes du mod`le avec e e op´rations OCL d´di´es ` la gestion des types : e e e a oclIsKindOf(type) : vrai si l’objet est du type type ou un de ses sous-types oclIsTypeOf(type) : vrai si l’objet est du type type oclAsType(type) : l’objet est cast´ en type type e Exemple : une classeB h´rite d’une classeA : e dans le contexte de classeB, self.oclIsKindOf(ClasseB) et self.oclIsKindOf(ClasseA) sont vraies ; dans le contexte de classeA, self.oclIsKindOf(ClasseB) est fausse ; dans le contexte Soci´t´, directeur.oclIsTypeOf(Personne) est e e vraie alors que self.oclIsTypeOf(Personne) est fausse. La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 25 / 36
  29. 29. Types de base et op´rations e Types Collection Plusieurs sous-types du type abstrait Collection Set : ensemble non ordonn´ d’´l´ments uniques e ee OrderedSet : ensemble ordonn´ d’´l´ments uniques ({ordered}) e ee Bag : collection non ordonn´e d’´l´ments identifiables e ee Sequence : collection ordonn´e d’´l´ments identifiables. e ee La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 26 / 36
  30. 30. Acc`s aux objets et navigation e Plan 1 Introduction 2 Typologie des contraintes 3 Conception par contrats pour op´rations e 4 Types de base et op´rations e 5 Acc`s aux objets et navigation e 6 Collection 7 Conclusion La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 27 / 36
  31. 31. Acc`s aux objets et navigation e Acc`s aux objets et navigation e Dans une contrainte OCL associ´e ` un objet, on peut e a Acc´der ` l’´tat interne de cet objet (ses attributs) : self.attribut e a e Acc´der aux op´rations de cet objet : self.operation e e Naviguer le long des liens : acc´der de mani`re transitive ` tous les objets ou e e a groupe d’objets (et leur ´tat) avec qui l’objet d´sign´ par le contexte est en e e e association syntaxe : nom de la classe associ´e avec minuscule (si pas d’ambigu¨ e) OU nom e ıt´ du rˆle o ambiguit´ → multiples associations entre objet d´sign´ par le contexte et objet e e e associ´ e → association emprunt´e est r´flexive e e context Soci´t´ e e inv: self.personne.age >= 50 --ambigue inv: self.directeur.age >= 50 La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 28 / 36
  32. 32. Acc`s aux objets et navigation e Acc`s aux objets et navigation e Type du r´sultat e Objet r´f´renc´ instance de la classe X et multiplicit´ de l’association du cˆt´ de cette ee e e oe classe X est : 1 : le type du r´sultat est X ; e ∗ ou O..n : le type du r´sultat est Set(X) ; e ∗ ou O..n avec contrainte {ordered} : le type du r´sultat est OrderedSet(X) ; e si l’on emprunte plusieurs associations/propri´t´s : le type du r´sultat peut ˆtre ee e e Bag Exemple : Dans le contexte de la classe Soci´t´ : e e directeur de type Personne ; employ´s de type Set(Personne) ; e employ´s.compte de type Bag(Compte) ; e employ´s.dateDeNaissance de type Bag(Date). e context Personne inv: self.compte.solde->sum() > 0 -- r´sultat de type collection e La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 29 / 36
  33. 33. Acc`s aux objets et navigation e Acc`s aux objets et navigation e Dans une contrainte OCL associ´e ` un objet, on peut e a Naviguer vers une classe association : nom de la classe association en minuscule Naviguer ` partir d’une classe association : nom des rˆles (r´sultat est toujours a o e un objet unique) context Soci´t´ e e inv: self.emploi.salaireMensuel -- salaires de tous les employ´s e context Personne inv: self.mariage[femme].date -- dates de mariage de toutes les femmes --pr´ciser par quelle extremit´ on emprunte l’association avec nom du e e role entre crochet context Emploi inv: self.employ´s.age >= 18 -- produit un singleton e La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 30 / 36
  34. 34. Collection Plan 1 Introduction 2 Typologie des contraintes 3 Conception par contrats pour op´rations e 4 Types de base et op´rations e 5 Acc`s aux objets et navigation e 6 Collection 7 Conclusion La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 31 / 36
  35. 35. Collection Op´rations sur les Collections e size() : retourne le nombre d’´l´ments de la collection ee count(obj) : retourne le nombre d’occurence d’un objet dans la collection sum() : addition de tous les ´l´ments de la collection ee exists(uneExpression) : vaut vrai si et seulement si au moins un ´l´ment de la ee collection satisfait uneExpression. isEmpty()/notEmpty() : retourne vrai si la collection est/n’est pas vide (tester l’existence d’un lien dans une association dont la multiplicit´ inclut 0) e Notation : collection->operation() context Soci´t´ e e inv : self.employ´s->notEmpty() --une soci´t´ a au moins un employ´ e e e e context Soci´t´ e e inv : self.directeur->size()=1 --une soci´t´ poss`de exactement un e e e directeur context Soci´t´ e e inv : self.employ´s->exists(age>50) --une soci´t´ doit poss´der au moins e e e e une personne de + de 50 ans context Soci´t´ e e inv : not(self.employ´s->exists(age<18)) --n’existe pas d’employ´s dont e e l’age <18 La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 32 / 36
  36. 36. Collection Op´rations sur les Collections e includes(obj)/excludes(obj) : vrai si la collection inclut/n’inclut pas l’objet obj including(obj)/excluding(obj) : la collection r´f´renc´e doit ˆtre cette collection ee e e en incluant/excluant l’objet obj includesAll(ens)/excludesAll(ens) : la collection contient tous/ne contient aucun des ´l´ments de la collection ens ee AllInstances() : retourne toutes les instances de la classe r´f´renc´e ee e forAll(elem :T|uneExpression) : vaut vrai si et seulement si uneExpression est vraie pour tous les ´l´ments de la collection. ee Notation : collection->operation() context Soci´t´ e e inv : self.employes->includes(self.directeur) --le directeur est ´galement un employe e context Personne inv: Personne.allInstances() -> forAll(p1, p2 | p1 <> p2 implies p1.nom <> p2.nom) La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 33 / 36
  37. 37. Collection Op´rations sur les Collections e union : Retourne l’union de deux collections intersection : Retourne l’intersection de deux collections Exemple : (col1 -> intersection(col2)) -> isEmpty() : Renvoie vrai si les collections col1 et col2 n’ont pas d’´l´ment en commun ee col1 = col2 -> union(col3) : La collection col1 doit ˆtre l’union des e ´l´ments de col2 et de col3 ee G´n´rer une sous-collection en filtrant les ´l´ments de la collection self : e e ee select : retourne les ´l´ments de la collection self dont les ´l´ments ee ee respectent la contrainte sp´cifi´e e e reject : retourne tous les ´l´ments de la collection self except´ ceux qui ee e satisfont la contrainte sp´cifi´e e e context Soci´t´ e e inv: self.employ´s->select(age > 50)-> notEmpty() e context Personne inv: compte -> select( c |c.solde > 1000) inv: compte -> reject( c |c.solde > 1000) La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 34 / 36
  38. 38. Conclusion Plan 1 Introduction 2 Typologie des contraintes 3 Conception par contrats pour op´rations e 4 Types de base et op´rations e 5 Acc`s aux objets et navigation e 6 Collection 7 Conclusion La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 35 / 36
  39. 39. Conclusion Conclusion Conseils de mod´lisation e Faire simple : les contrats doivent am´liorer la qualit´ des e e sp´cifications et non les rendre plus complexes e Combiner OCL avec un langage naturel : les contrats servent ` a rendre les commentaires moins ambigus et non ` les remplacer a Outils USE (Mark Richters) UML-based Specification Environment http ://sourceforge.net/projects/useocl/ Octopus (Warmer & Kleppe) http ://octopus.sourceforge.net/ Dresden OCL http ://dresden-ocl.sourceforge.net/ La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 36 / 36

×