Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'
Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles OCL : Object Constraint Language Une introduction Marianne Huchard 13 janvier 2009 Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Sommaire Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Objectifs du langage • Accompagner les diagrammes UML de descriptions : • précises • non ambiguës • véri ables automatiquement sur les modèles • éventuellement compilables vers les langages • Eviter les formalismes obscurs : • rester facile à écrire ... • et facile à lire, • utiliser la navigation des modèles Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Historique • Source d'inspiration : Syntropy (OMT + Z) • 1997 : développement chez IBM (Jos Warmer) • 1999 : intégration dans UML 1.1 • 2003 : OCL 2.0 dans UML 2.0 Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Principes Contrainte • Expression à valeur booléenne qui s'attache à un élément UML • Restriction ou informations complémentaires sur un modèle Langage déclaratif • Les contraintes ne sont pas opérationnelles • Pas d'invocation de processus ni d'opérations autres que des requêtes • Pas de description du comportement à adopter si une contrainte n'est pas respectée Langage sans eet de bord Les instances ne sont pas modi ées par les contraintes Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Principes Contextes d'utilisation • Modèles • Pro ls UML • Méta-modèles Types d'utilisation • description d'invariants sur les classes et les types • pré- / post-conditions sur les opérations et méthodes • contraintes sur la valeur retournée • règles de dérivation des attributs • description de cibles pour messages et actions • expression des gardes (diagrammes dynamiques) • invariants de type pour les stéréotypes Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles La notion de contexte Une contrainte OCL est liée à un contexte →type, opération ou attribut Contexte context monContexte <stéréotype> : Expression de la contrainte Le stéréotype peut prendre les valeurs suivantes : • inv invariant de classe • pre précondition • post postcondition • body indique le résultat d'une opération query • init indique la valeur initiale d'un attribut • derive indique la valeur dérivée d'un attribut Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Invariant de classe Personne − age : entier + setAge(in a : entier) + getAge():entier {query} − /majeur : booléen context Personne inv : (age <= 140) and (age >=0) - - l'âge est compris entre 0 et 140 ans Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Pre/post conditions Personne − age : entier + setAge(in a : entier) + getAge():entier {query} − /majeur : booléen context Personne::setAge(a :entier) pre : (a <= 140) and (a >=0) and (a >= age) post : age = a - - on peut écrire également a=age Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Body Personne − age : entier + setAge(in a : entier) + getAge():entier {query} − /majeur : booléen context Personne::getAge() :entier body : age Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Initialisation Personne − age : entier + setAge(in a : entier) + getAge():entier {query} − /majeur : booléen context Personne::age :entier init : 0 Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles La notion de contexte Personne − age : entier + setAge(in a : entier) + getAge():entier {query} − /majeur : booléen context Personne::majeur :booléen derive : age>=18 Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Version visuelle Personne − age : entier + setAge(in a : entier) {<<invariant>> (age<=140 and age >=0) } Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Nommage de la contrainte Personne − age : entier + setAge(in a : entier) + getAge():entier {query} − /majeur : booléen context Personne inv ageBorné : (age <= 140) and (age >=0) - - l'âge ne peut depasser 140 ans Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Utilisation du mot-clef self pour désigner l'objet Personne − age : entier + setAge(in a : entier) + getAge():entier {query} − /majeur : booléen context Personne inv : (self.age <= 140) and (self.age >=0) - - l'âge ne peut depasser 140 ans Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Utilisation du mot-clef self pour désigner l'objet Personne − age : entier + setAge(in a : entier) + getAge():entier {query} − /majeur : booléen En ajoutant un attribut mère : La mère d'une personne ne peut être cette personne elle-même et l'âge de la mère doit être supérieur à celui de la personne context Personne inv : self.mère <> self and self.mère.age > self.age Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Utilisation d'un nom d'instance formel Personne − age : entier + setAge(in a : entier) + getAge():entier {query} − /majeur : booléen context p :Personne inv : (p.age <= 140) and (p.age >=0) - - l'age ne peut depasser 140 ans Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Sommaire Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Hiérarchie des types OclAny Réel Booléen String du modèle Collection OclState OclVoid types de base prédéfinis Entier OclType OclModelElement types et éléments Tuple Bag Sequence OrderedSet Set ............ Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Types de base Prédé nis • Entier (Integer) • Réel (Real) • String • Booléen (Boolean) Spéciaux • OclModelElement (énumération des éléments du modèle) • OclType (énumération des types du modèle) • OclAny (tout type autre que Tuple et Collection) • OclState (pour les diagrammes d'états) • OclVoid sous-type de tous les types Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Entier opérateurs = <> + - * / abs div mod max min < > <= >= - est unaire ou binaire Réel opérateurs = <> + - * / abs oor round max min < > <= >= - est unaire ou binaire String opérateurs = size() concat(String) toUpper() toLower() substring(Entier, Entier) Les chaînes de caractères constantes s'écrivent entre deux simples quotes : 'voici une chaîne' Booléen opérateurs = or xor and not b1 implies b2 if b then expression1 else expression2 endif Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Opérateurs booléens, exemples − age : entier − majeur : Booléen − marié : Booléen − catégorie : enum {enfant,ado,adulte} Personne context Personne inv : marié implies majeur Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Opérateurs booléens, exemples − age : entier − majeur : Booléen − marié : Booléen − catégorie : enum {enfant,ado,adulte} Personne context Personne inv : if age >=18 then majeur=vrai else majeur=faux endif Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Opérateurs booléens, exemples − age : entier − majeur : Booléen − marié : Booléen − catégorie : enum {enfant,ado,adulte} Personne context Personne inv : majeur = age >=18 Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Précédence des opérateurs . -> not - unaire * / + - if then else < > <= >= <> = and or xor implies Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Types énumérés Leurs valeurs apparaissent précédées de # − age : entier − majeur : Booléen − marié : Booléen − catégorie : enum {enfant,ado,adulte} Personne context Personne inv : if age <=12 then catégorie =#enfant else if age <=18 then catégorie =#ado else catégorie=#adulte endif endif Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Types des modèles Les types des modèles utilisables en OCL sont les classi cateurs (classi ers) , notamment les classes, les interfaces et les associations. • oclAsType(t) (conversion ascendante ou descendante vers t) • la conversion ascendante sert pour l'accès à une propriété redé nie • la conversion descendante sert pour l'accès à une nouvelle propriété • oclIsTypeOf(t) (vrai si t est supertype direct) • oclIsKindOf(t) (vrai si t est supertype indirect) Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Types des modèles Polygone Rectangle p : Polygone r : Rectangle Figure: Polygones et rectangles • p = r • p.oclAsType(Rectangle) • r.oclIsTypeOf(Rectangle) (vrai) • r.oclIsKindOf(Polygone) (vrai) Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Sommaire Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Accès aux attributs Opérateur d'accès noté '.' Personne − age : Entier + getAge():Entier{query} Voiture − propriétaire : Personne context Voiture inv propriétaireMajeur : self.propriétaire.age >= 18 Introduction Types OCL Navigation Eléments du langage Collections Diagrammes d'états Méta-modèles Accès aux opérations query Opérateur uploads/Voyage/ ocl-slides.pdf
-
17
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jan 31, 2022
- Catégorie Travel / Voayage
- Langue French
- Taille du fichier 0.8293MB