OCL : contraintes sur métamodèles Philippe Collet (revisité by Sébastien Mosser

OCL : contraintes sur métamodèles Philippe Collet (revisité by Sébastien Mosser) SI5 – M2 IFI : Domain Specific Languages Novembre 2014 Ph. Collet 2 Objectifs r Comprendre la nécessité et la portée d’OCL r Apprendre OCL et la manière de spécifier avec ce langage r Mettre en œuvre OCL dans l'ensemble d'une modélisation UML r Appliquer à la spécification de métamodèles Ph. Collet 3 1ère partie r Introduction n OCL et UML n Motivations n OCL : principes et forme du langage r OCL : première approche n Contraintes et contexte n Commentaires n Stéréotypes et mots-clés pour structurer les spécifications n Types de spécification r Types et valeurs de base n Types du modèle n Règles de précédence n Enumérations n Conformance de type Ph. Collet 4 OCL et UML r UML est un langage de modélisation essentiellement graphique. r Dans les diagrammes il est difficile, voire impossible dans certains cas, de préciser de manière complète toutes les subtilités d'un modèle. Ph. Collet 5 OCL et UML r Contourner le problème ? n écrire des spécifications plus complètes en langue naturelle n inconvénient : des ambiguïtés restent possibles r l'utilisation d'un langage formel avec une sémantique connue s'impose ! r OCL est une réponse à ces attentes n un langage formel n pour annoter les diagrammes UML n permettant notamment l'expression de contraintes Ph. Collet 6 OCL : objectifs r Accompagner les diagrammes UML de descriptions : n précises n non ambiguës r Eviter les désavantages des langages formels traditionnels n peu utilisables par les utilisateurs et les concepteurs non « matheux » r Rester facile à écrire n Tout en étant orienté objet r Et facile à lire Ph. Collet 7 Petit historique r OCL s'inspire de Syntropy n méthode basée sur une combinaison d'OMT (Object Modeling Technique) et d'un sous-ensemble de Z. r Origine n OCL a été développé à partie de 95 par Jos Warmer (IBM) n sur les bases du langage IBEL (Integrated Business Engineering Language). r Première définition : IBM, 1997 r Formellement intégré à UML 1.1 en 1999 r OCL2.0 intégré dans la définition d’UML2.0 en 2003 n conforme à UML 2 et au MOF 2.0 n fait partie du catalogue de spécifications de l'OMG n chapitres 7 (OCL Language Description) et 11 (OCL Standard Library) Ph. Collet 8 OCL : principes r La notion de contrainte n Définition : Une contrainte est une expression à valeur booléenne que l'on peut attacher à n'importe quel élément UML n Elle indique en général une restriction ou donne des informations complémentaires sur un modèle r OCL : Langage typé, basé sur n La théorie des ensembles n La logique des prédicats r OCL : Langage déclaratif n Les contraintes ne sont pas opérationnelles. u On ne peut pas invoquer de processus ni d'opérations autres que des requêtes u On ne décrit pas le comportement à adopter si une contrainte n'est pas respectée r OCL : Langage sans effet de bord n Les instances ne sont pas modifiées par les contraintes Ph. Collet 9 Utilisation des contraintes r Description d'invariants sur les classes et les types r Préconditions et postconditions sur les opérations r Contraintes sur la valeur retournée par une opération r Règles de dérivation des attributs r Description de cibles pour les messages et les actions r Expression des gardes n conditions dans les diagrammes dynamiques r Invariants de type pour les stéréotypes n Les contraintes servent en particulier à décrire la sémantique d'UML. Ph. Collet 10 Contraintes et contexte r Une contrainte OCL est liée à un contexte : n le type, n la méthode n ou l'attribut auquel la contrainte se rapporte context moncontexte <stéréotype> : Expression de la contrainte r Exemple : context Personne inv : (age <= 140) and (age >=0) -- l'âge ne peut dépasser 140 ans -- : commentaire en OCL (qui s'achève avec la fin de la ligne) Ph. Collet 11 Contraintes : les stéréotypes r Le stéréotype peut prendre les valeurs suivantes : n inv invariant de classe n Un invariant exprime une contrainte prédicative sur un objet, ou un groupe d’objets, qui doit être respectée en permanence context Personne inv : (age <= 140) and (age >=0) n pre précondition n post postcondition n Une précondition (respectivement une postcondition) permet de spécifier une contrainte prédicative qui doit être vérifiée avant (respectivement après) l’appel d’une opération context Personne::setAge(a : integer) pre: (a <= 140) and (a >=0) and (a >= age) post: age = a Ph. Collet 12 Contraintes : les stéréotypes (suite) n body indique le résultat d'une opération query n Ce type de contrainte permet de définir directement le résultat d’une opération context Personne::getAge() : integer body: age n init indique la valeur initiale d'un attribut context Personne::age : Boolean init: 0 n derive indique la valeur dérivée d'un attribut context Personne::majeur : integer derive: age>=18 Ph. Collet 13 Référence, nommage des objets r Le mot-clef « self » permet de désigner l'objet à partir duquel part l'évaluation n Exemple : context Personne inv: (self.age <= 140) and (self.age >=0) -- l'âge ne peut depasser 140 ans n Caractère « . » : accès à l’attribut (cf. navigation) r Un nom formel peut être donné à l'objet à partir duquel part l'évaluation n Exemple : context p : Personne inv: (p.age <= 140) and (p.age >=0) -- l'age ne peut depasser 140 ans Ph. Collet 14 Exercice r Ajoutez un attribut mère de type Personne dans la classe Personne. r Ecrivez une contrainte précisant n que la mère d'une personne ne peut être cette personne elle-même n et que l'âge de la mère doit être supérieur à celui de la personne context Personne inv: self.mere <> self and self.mere.age > self.age Ph. Collet 15 Types r Les types de base prédéfinis : n Entier n Réel n String n Booléen r Des types spéciaux s'y ajoutent : n OclModelElement (énumération des éléments du modèle) n OclType (énumération des types du modèle) n OclAny (tout type autre que Tuple et Collection) n OclState (pour les diagrammes d'états) n OclVoid sous-type de tous les types Ph. Collet 16 Types de base r Le type entier (Integer) n Les constantes littérales s'écrivent de manière ordinaire : u 1 -5 22 n Les opérateurs sont les suivants : u = <> + - * / abs div mod max min < > <= >= n L'opérateur - est unaire ou binaire r Le type réel (Real) n Les constantes s'écrivent de manière ordinaire : u 1.56 -5.7 3.14 n Les opérateurs sont les suivants : u = <> + - * / abs floor round max min < > <= >= n L'opérateur - est unaire ou binaire Ph. Collet 17 Types de base r Le type chaîne de caractères (String) n Les constantes s'écrivent entre simples quotes : u 'ceci est une chaîne OCL' n Les opérateurs sont (notamment) les suivants : u = u size u concat(String) u toUpper u toLower u substring(Entier, Entier) Ph. Collet 18 Types de base r Le type booléen (Boolean) n Les constantes s'écrivent u true u false n Les opérateurs sont les suivants : u = or xor and not u b1 implies b2 u if b then expression1 else expression2 endif Ph. Collet 19 Exercice r Avec la classe Personne « étendue » n Indiquez qu’une personne mariée est forcément majeur context Personne inv: marié implies majeur n Trouvez une version plus compacte de l’expression suivante context Personne inv majeurIf: if age >=18 then majeur=vrai else majeur=faux endif context Personne inv: majeur = age >= 18 Ph. Collet 20 Types énumérés r Leur syntaxe est la suivante n <nom_type_enuméré>::valeur r Le nom du type est déduit de l’attribut de déclaration n catégorie => Catégorie r Exemple : context Personne inv: if age <=12 then categorie = Categorie::enfant else if age <=18 then categorie = Categorie::ado else categorie = Categorie::adulte endif endif Ph. Collet 21 2ème partie r Navigation dans les modèles n Accès aux attributs, opérations n Navigations sur les associations n Navigations sur les classes-association r Autres éléments du langage n Structures let et def n if n @pre n result n Types OCL avancés r Collections n Hiérarchie n Opérations spécifiques n Opérations collectives n Conformance de type Ph. Collet 22 Navigation : accès aux attributs r Pour faire référence à un attribut de l’objet désigné par le contexte, il suffit d’utiliser le nom de cet élément context Personne inv: …age… r L’objet désigné par le contexte est également accessible par l’expression self n On peut donc également utiliser la notation pointée context Personne inv: self.age… Ph. Collet 23 Navigation : accès aux attributs r L'accès (navigation) vers un attribut s'effectue en mentionnant l'attribut derrière l'opérateur d'accès noté '.' context Voiture inv propriétaireMajeur : self.propriétaire.age >= 18 context Voiture inv propriétaireMajeur : propriétaire.age >= 18 context v : Voiture inv propriétaireMajeur : v.propriétaire.age >= 18 Ph. Collet 24 Exercice r Ecrivez la contrainte qui caractérise l'attribut dérivé uploads/s3/ 3-contraintes-ocl.pdf

  • 26
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager