urbanisation-si.com

urbanisation-si.com

Cours complet sur ATL (ATLAS Transformation Language) : Les expressions déclaratives dans OCL / ATL

cours-complet-atl-atlas-transformation-language-les-expressions-declaratives-ocl-atl.jpg

 

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/

http://bonnes-pratiques-si.eklablog.com/

http://urbanisation-si.eklablog.com/



02/10/2015
0 Poster un commentaire

A découvrir aussi


Inscrivez-vous au site

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 769 autres membres