Cours complet sur ATL (ATLAS Transformation Language) : les éléments de modèles des métamodèles
Dans l'article précédent :
https://www.urbanisation-si.com/cours-complet-sur-atl-atlas-transformation-language-les-tuples
nous avion abordé les énumérations ATL. Voyons à présent les types des éléments du modèle.
Les types des éléments du modèle
Il s’agit des types ou classes des métamodèles source et cible.
Dans ATL, une variable d’un élément de modèle est référencée par metamodel!class où metamodel identifie un des métamodèles gérés par la transformation, et où class pointe sur un élément de modèle (classe) de ce métamodèle.
La notation OCL ne précise pas le métamodèle contrairement à ATL qui gère plusieurs métamodèles en même temps.
Un élément de modèle possède des propriétés qui sont des attributs et des références. Les 2 sont accessibles avec la notation « point » self.propriete.
Exemple : dans le contexte du métamodèle MMAuthor, anAuthor.name permet d’accéder à l’attribut name de l’instance anAuthor de la classe Author class.
Dans ATL, un élément de modèle ne peut être généré que dans une règle ATL (matched ou called rules). L’initialisation d’un nouvel élément de modèle se fait avec les règles de correspondance avec le modèle cible.
L’opération oclIsUndefined(), definie dans le type OclAny, teste si la valeur d’une expression est indefinite. Cette opération est utile lorqu’un attribut à une multiplicité 0..1 (void ou non). Les attributs avec la multiplicité * sont représentés par une collection vide ou non.
Nom complet pour référencer une classe du métamodèle
<Package1Name>::<Package2Name>::<ClassifierName>
Comme le parseur ATL ne supporte pas le "::", on doit ajouter des ".
MM!"P1::C1"
MM!"P1::P2::C2"
MM!"P3::C3"
Cas ou cette notation est obligatoire :
package P1 {
class C1 {}
package P2 {
class C1 {}
}
}
package P3 {
class C1 {}
}
MM!C1 n’est pas correct car il y a ambiguité. Un avertissement est généré dans la console. L’expression correcte est la suivante :
MM!"P1::C1"
MM!"P1::P2::C1"
MM!"P3::C1"
Exemples
Voici des exemples d’expression d’OCL utilisant des propriétés d’éléments de modèle. Ils sont définis dans le context du MOF métamodèlele :
- Récupérer toutes les classes du MOF :
MOF!Class.allInstances()->collect(e | e.name)
- Récupérer tous les types primitifs du MOF :
MOF!DataType.allInstances()
->select(e | e.oclIsTypeOf(MOF!PrimitiveType))
->collect(e| e.name)
- La même chose mais en plus simple (mais pourquoi faire simple quand on peut faire compliquer ? ) :
MOF!PrimitiveType.allInstances()->collect(e| e.name)
- Une énumaration du MOF :
MOF!VisibilityKind.labels
- Récupérer le nom de toutes les classes qui héritent de plus d’une classe :
MOF!Class.allInstances()
->select(e | e.supertypes->size() > 1)
->collect(e | e.name)
Les commentaires ATL
Exemples :
-- this is an example of a comment
Pour specifier la documentation des ATL helpers et règles qui apparaissent dans l’aide automatique :
--- Evaluates whether the context has the given stereotype or not.
helper context UML!Element def: hasStereotype(stereotype : String) : Boolean =
self.getAppliedStereotypes() -> collect(st | st.name) -> includes(stereotype);
"C'est quand on serre une femme de trop près qu'elle trouve qu'on va trop loin."
Alphonse Allais
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 : métamodèle simplifié de mindmap
- Ingénierie Dirigée par les Modèles : fini Eclipse GMF, vive Eclipse Sirius ( didacticiel / tutoriel Sirius)
- Ingénierie Dirigée par les Modèles (IDM) : cours complet sur ATL (ATLAS Transformation Language) : les types ATL
Inscrivez-vous au site
Soyez prévenu par email des prochaines mises à jour
Rejoignez les 769 autres membres