Héritage et polymorphisme

Les templates sont définis sur une métaclasse particulière dans un fichier de définition de langage ou dans une extension et sont hérités par et disponibles pour les enfants de cette métaclasse. Par exemple, un template défini sur la métaclasse Classifier est disponible pour les templates ou fichiers générés définis sur les métaclasses Class et Interface.

GTL prend en charge les concepts orientés objet suivants comme faisant partie de l'héritage :

Vous pouvez définir le même template plusieurs fois dans la hiérarchie de fichiers de définition de langage ou d'extension, et PowerAMC le résoudra en utilisant des règles d'héritage. Par exemple, le fichier de définitions de langage de MOO monLang et le fichier d'extension monExtension contiennent chacun un template %t% défini sur chacune des métaclasses Classifier et Class :

Fichier de définition de langage monLang Fichier d'extension monExtension
  • Classifier :
    • fichier généré monFichier
    • template %t% template
  • Class :
    • %t% template
  • Classifier :
    • fichier généré monAutreFichier
    • template %t%
  • Class :
    • %t% template

Les métaclasses Class et Interface héritent toutes deux de la métaclasse Classifier, et génèrent chacune un monFichier et un monAutreFichier.

Les appels de template suivants sont possibles dans monLang/Classifier/monFichier (qui ne peut pas accéder aux templates contenus dans monExtension) :
Appel de template dans monFichier Template appelé

%t% or

%monLang::t%

monLang/Class/t

%Classifier::t% or

%monLang::Classifier::t%

monLang/Classifier/t
Les appels de template suivants sont possibles dans myExtension/Classifier/monAutreFichier (qui peut accéder à la fois à ses propres templates et à ceux contenus dans monLang) :
Appel de template dans monAutreFichier Template appelé

%t% or

%myExtension::t%

myExtension/Class/t

%Classifier::t% or

%myExtension::Classifier::t%

myExtension/Classifier/t

%monLang::t% or

%monLang::Class::t%

monLang/Class/t

%monLang::Classifier::t%

monLang/Classifier/t
Remarque : Pour qu'un fichier d'extension puisse atteindre des templates définis dans un fichier de définition de langage, la propriété Compléter la génération de langage doit être sélectionnée dans l'extension (voir Propriétés d'un fichier d'extension).