urbanisation-si.com

urbanisation-si.com

Cours complet sur ATL (ATLAS Transformation Language) : les types primitifs

cours-complet-atl-atlas-transformation-language-les-types-primitifs.jpg

 

Dans l'article précédent :

https://www.urbanisation-si.com/ingenierie-dirigee-par-les-modeles-idm-cours-complet-sur-atl-atlas-transformation-language-les-types-atl

nous avion commencé à aborder les types ATL, voyons maintenant de manière quick and dirty les types primitifs ATL.

Ils sont  largement basés sur OCL (voir l’article : ) qui défini 4  types primitifs de base :

  • Boolean  true ou false;
  • Integer  (1, -5, 2, 34, 26524, ...);Real  (1.5, 3.14, ...);
  • String ('Les 2 choses les plus difficiles à dire sont bonjour pour la première fois et au revoir pour la dernière', ...). Caractère d’échappement \. Pour les geeks Javaiste, gourous du C++ ou Prolog, en OCL un caractère est codé comme une chaîne de 1 et les caractères d’une chaîne sont numérotés à partir de 1 jusqu’à la taille de chaîne.

Les operations sur des types booléens

  • and, or, xor, not;
  • implies(b : Boolean) renvoie false is self est true et b est false et renvoie true dans les autres cas.
  • Cas de 2 expressions reliées par un and :
    if (exp1 and exp2) 
    then ...
    else ...
    endif
    Contrairement aux autres langages, si la 1ère expression est fausse, la 2ème est quand même évaluée
    Attention donc aux pièges :
    if (self.attributes->size() > 0 and self.attributes->first().attr)
    Même si la 1ère expression est fausse, la 2ème est appellee sur “attr” qui n’est pas défini, ce qui provoque naturellemnt une erreur !

Les operations sur les chaînes de caractères

  • size() renvoie le nombre de caractères de la chaîne self;
  • concat(s : String) renvoie la chaîne représentant la concatenation de self +“s'
  • substring(lower : Integer, upper : Integer) renvoie la sous-chaîne de self commençant à lower jusqu’à upper;
  • toInteger() et toReal().
  • comparison operators: <, >, >=, <=;
  • la concatenation de chaînes (+) identique à concat()
  • toUpper(), toLower() renvoie une copie de self en majuscule ou minuscule
  • toSequence() renvoie une sequence de caractères correspondant à self
  • trim() renvoie une chaîne sans les espaces au début et à la fin (' ', '\t', '\n', '\f', '\r') sont omis
  • startsWith(s : String), endsWith(s : String) renvoie true si self commence/se termine avec s
  • indexOf(s : String), lastIndexOf(s : String)  renvoie l’index (entier) de la 1ère occurrence de s qui apparaît dans self
  • split(regex : String) éclate self en function de l’expression régulière regex (Java regular expressions) et renvoie une séquence de chaîne
  • replaceAll(c1 : String, c2 : String) renvoie uen copie de self dans laquelle chaque occurrence du caractère c1 est remplacé par le caractgère c2. Attention, c1 et c2 sont types comme des chaînes OCL, mais seuls le premier caractère de c1 et c2 sont considérés.
  • regexReplaceAll(regex : String, replacement : String) renvoie une copie de self  dans laquelle chaque sous-chaîne qui correspond à l’expression régulière regex est remplacé avec la chaîne replacement.
  • writeTo(fileName : String) écrit la chaîne self dans un fichier fileName. (path complet)
  • println() écrit self dans la console Eclipse

Qu’en est il des opérations sur les types numériques ?

  • <, >, >=, <=;
  • *, +, -, /, max(), min();
  • abs().
  • ATTENTION : l’opérateur de signe – défini dans OCL, n’est pas défini dans ATL. Une solution de contournement est de faire 0-x
  • opérations sur les entiers : div(), mod();
  • opérations sur les réels : floor(), round().
  • toString() est disponible pour les entiers et les réels. Ils peuvent être converti en long avec longValue()
  • cos(), sin(), tan(), acos(), asin();
  • toDegrees(), toRadians();
  • exp(), log(), sqrt().

Vous voulez du concret ?

  • 'test'.oclIsTypeOf(OclAny)

    •  false

  • 'test'.oclIsKindOf(OclAny)

    • true

  • true or false

    • true

  • 'test'.substring(2, 3)

    • 'es'

  •  'test'.toUpper()

    • 'TEST'

  • 'test'.toSequence()

    • Sequence{'t', 'e', 's', 't'}

  • 'test'.endsWith('ast')

    • false

  • 'test'.lastIndexOf('t')

    • 4

  •  'test'.replaceAll('t', 'o')

    • 'oeso'

  • 'aaabaftaap'.regexReplaceAll('a*', 'A')

    • 'AbAftAp'

  • 23 div 2 or 23."div"(2)

    • 11

  • 23/2

    • 11.5

 

"Les choses ne changent pas, change ta façon de les voir, cela suffit."
Lao Tseu

 

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/



26/09/2015
0 Poster un commentaire

A découvrir aussi


Inscrivez-vous au site

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 705 autres membres