L'idée c'est de modéliser les langages de programmation comme tu modélises une application.
J'ai ma méta-classe "classe" qui hérite de la méta-classe "type", qui contient un méta-attribut "nom" et qui est lié à la méta-classe "attribut", elle même ayant un méta-attribut "type" etc ...
Ainsi, un programme écrit en java pourra se représenter comme une instance de ce méta-modèle. La classe "Personne" que j'ai écrit en java sera une instance de la méta-classe "classe", etc, etc ...
Bon, comme tu le dis, si on s'en arète là, ça s'apparente fortement à de l'onanisme cérébral.
Une idée c'est ensuite d'ajouter des méta-méthodes au méta-classes. Par exemple, une méta-méthode "rename" à la méta-classe "classe". Cette méthode renommera la classe mais aussi toutes les références à cette classe. Tu viens de créer un outil de refactoring de manière relativement aisée.
Une autre idée est l'approche MDA (Model Driven Architecture) de l'OMG (Object Management Group).
On commence par décrire l'application dans un modèle générique (disons UML puisqu'il vient aussi de l'OMG), c'est ce qu'on apelle le PIM (Platform Independant Model).
On utilise ensuite une transformation de modèle pour transformer notre application en son équivalent dans un modèle spécifique, par exemple Java, c'est ce qu'on appelle le PSM (Platform Specific Model).
Cette transformation est effectuée par un programme de niveau méta qui remplace chaque instance de "UML::Classe" par une instance de "Java::Classe" et ainsi de suite pour toutes les méta-classes du modèle de départ en s'appuyant sur un PDM (Platform Description Model).
On obtient ainsi un équivalent Java de notre application UML initiale.
Pourquoi s'emmerder à faire ça ? Eh bien, l'idée est de coder de manière indépendante de la plateforme d'exécution, puis, les spécificités de la plateforme sont décrites dans le PDM. Tu as donc une sorte de phase de compilation pour s'adapter à la plateforme et tu obtiens en résultat différent en fonction de tes ressources, de tes contraintes, etc ... Y compris, peut être dans un langage différent.
[^] # Re: Ca a l'air vachement bien
Posté par Julien . En réponse à la dépêche Sortie de ATL 2. Évalué à 10.
J'ai ma méta-classe "classe" qui hérite de la méta-classe "type", qui contient un méta-attribut "nom" et qui est lié à la méta-classe "attribut", elle même ayant un méta-attribut "type" etc ...
Ainsi, un programme écrit en java pourra se représenter comme une instance de ce méta-modèle. La classe "Personne" que j'ai écrit en java sera une instance de la méta-classe "classe", etc, etc ...
Bon, comme tu le dis, si on s'en arète là, ça s'apparente fortement à de l'onanisme cérébral.
Une idée c'est ensuite d'ajouter des méta-méthodes au méta-classes. Par exemple, une méta-méthode "rename" à la méta-classe "classe". Cette méthode renommera la classe mais aussi toutes les références à cette classe. Tu viens de créer un outil de refactoring de manière relativement aisée.
Une autre idée est l'approche MDA (Model Driven Architecture) de l'OMG (Object Management Group).
On commence par décrire l'application dans un modèle générique (disons UML puisqu'il vient aussi de l'OMG), c'est ce qu'on apelle le PIM (Platform Independant Model).
On utilise ensuite une transformation de modèle pour transformer notre application en son équivalent dans un modèle spécifique, par exemple Java, c'est ce qu'on appelle le PSM (Platform Specific Model).
Cette transformation est effectuée par un programme de niveau méta qui remplace chaque instance de "UML::Classe" par une instance de "Java::Classe" et ainsi de suite pour toutes les méta-classes du modèle de départ en s'appuyant sur un PDM (Platform Description Model).
On obtient ainsi un équivalent Java de notre application UML initiale.
Pourquoi s'emmerder à faire ça ? Eh bien, l'idée est de coder de manière indépendante de la plateforme d'exécution, puis, les spécificités de la plateforme sont décrites dans le PDM. Tu as donc une sorte de phase de compilation pour s'adapter à la plateforme et tu obtiens en résultat différent en fonction de tes ressources, de tes contraintes, etc ... Y compris, peut être dans un langage différent.