Cours complet sur ATL (ATLAS Transformation Language) : Les expressions déclaratives dans OCL / ATL
Dans l'article précédent :
https://www.urbanisation-si.com/cours-complet-sur-atl-atlas-transformation-language-les-elements-de-modeles-des-metamodeles
nous avion abordé les énumérations ATL. Voyons à présent les les expressions déclaratives dans OCL / ATL.
Les expressions déclaratives dans OCL
Il existe dans OCL 2 instructions de contrôle : if et let
Le « if »
Il s’agit du if que l’on trouve dans tous les langages de programmation.
ATTENTION le else est obligatoire :
if condition
then
exp1
else
exp2
endif
Je ne vous ferais l’affront de vous expliquez comment ça marche, même les apprentis geek de 10 ans savent ce que c’est qu’un if.
Un petit exemple juste pour la forme :
if 3 > 2
then
'three is greater than two'
else
'this case should never occur'
endif
if mySequence->notEmpty()
then
if mySequence->includes(myElement)
then
'the element is at position '
+ mySequence->indexOf(myElement).toString()
else
'the sequence does not contain the element'
endif
else
'the sequence is empty'
endif
L’expression « let »
Elle permet de définir une variable :
let var_name : var_type = var_init_exp in exp
Exemples :
let a : Integer = 1 in a + 1
let x : Real =
if aNumber > 0
then
aNumber.sqrt()
else
aNumber.square()
endif
in let y : Real = 2 in x/y
Une variable OCL est visible à partir de sa déclaration jusqu’à la fin de l’expression OCL à laquelle elle appartient.
ATTENTION : il n’est pas conseillé qu’un développeur déclare plusieurs varaibles avec le même nom à l’intérieur d’une expression. Si tel était le cas, la dernière masquerait toutes les autres.
Très utile pour déboguer, par exemple dans l’espression suivante, si la la collection est vide, l’opération first() renvoie la valeur OclUndefined. L’opération square() invoquée sur OclUndefined,va renvoyer une erreur au runtime. Donc dans ce cas il est intéressant pour pouvoir le verifier de stocker le 1er element de la séquence dans une variable.
aSequence->first().square()
let firstElt : Real = aSequence->first() in firstElt.square()
"Pour différentes raisons, la plupart des gens sont tellement pris par leur quotidien qu'ils n'ont pas le temps de s'étonner de la vie."
Jostein Gaarder
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
A découvrir aussi
- Model-Driven Engineering (MDE) : modèles, métamodèles, métamétamodèles, méta... ?
- Ingénierie Dirigée par les Modèles : métamodèle de mindmap, en veux tu en voilà
- Ingénierie Dirigée par les Modèles (IDM) : cours complet sur ATL (ATLAS Transformation Language) : librairie ATL
Inscrivez-vous au site
Soyez prévenu par email des prochaines mises à jour
Rejoignez les 769 autres membres