Cours complet sur ATL (ATLAS Transformation Language) : les types primitifs
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/
A découvrir aussi
- Ingénierie Dirigée par les Modèles (IDM) : un exemple vaut mieux qu'un long discours
- Ingénierie Dirigée par les Modèles : les métamodèles mindmap, l'embarras du choix !
- 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 786 autres membres