urbanisation-si.com

urbanisation-si.com

Cours complet sur ATL (ATLAS Transformation Language) : les éléments de modèles des métamodèles

cours-complet-ATL-atlas-transformation-language-les-types-element-de-modele-1.png

 

 

cours-complet-ATL-atlas-transformation-language-les-types-element-de-modele-2.png

 

 

cours-complet-ATL-atlas-transformation-language-les-types-element-de-modele-3.png

 

 

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!classmetamodel 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/

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 705 autres membres