# Métamodèle

Dans le cadre d'une modélisation, un métamodèle est un modèle dont les instances sont elles-mêmes des modèles. Comme l'indique le préfixe méta-, un métamodèle est une abstraction permettant de décrire des modèles. La métamodélisation désigne au sens large la conception de métamodèles.
Les métamodèles peuvent prendre diverses formes et être utilisés dans divers domaines. En informatique, et plus particulièrement en génie logiciel, la notion de métamodèle est centrale à l'ingénierie dirigée par les modèles, un ensemble de pratiques qui ont en commun la création et l'utilisation de modèles pour conceptualiser un domaine d'application. Cet usage s'étend également à l'ingénierie des systèmes.

## Définition

Un métamodèle est un modèle qui décrit la structure de modèles. En particulier, il permet la construction de langages de modélisation, la création de relations entre les modèles et la définition de règles de modélisation. On dit que le métamodèle représente le modèle, tandis que le modèle instancie le métamodèle. Par exemple, un système logiciel peut être représenté par un diagramme d'objets qui peut lui-même être représenté par un diagramme de classes en UML. Ainsi, le système logiciel représente l'original, c'est-à-dire l'objet réel modélisé, tandis que le diagramme d'objets est son modèle et que le diagramme de classes est un métamodèle.

## Spécification d'un métamodèle

Quatre aspects sont nécessaires à la spécification d'un métamodèle : une syntaxe abstraite, une syntaxe concrète, une sémantique statique et une sémantique dynamique$^,$. Idéalement, ces éléments sont définis à l'aide d'un langage formel. Pour cette raison, un métamodèle est aussi parfois défini comme le modèle d'un langage de modélisation.

### Syntaxe abstraite

La syntaxe abstraite d'un métamodèle décrit les constructions qui composent ses modèles, par exemple leurs propriétés et leurs relations. Par exemple, la syntaxe abstraite d'un diagramme de classes est composée de classes, d'attributes, d'associations, etc.

### Syntaxe concrète

La syntaxe concrète d'un métamodèle décrit la représentation des constructions définies par sa syntaxe abstraite. Cette représentation est le plus souvent graphique ou textuelle. Elle peut aussi correspondre à un format de données. À chaque syntaxe abstraite correspondent une ou plusieurs syntaxes concrètes. Ainsi, une classe d'un diagramme de classes est représentée par un rectangle comportant trois sections (nom, associations, opérations) tandis qu'une association est représentée comme une flèche. Un diagramme de classes peut aussi être représenté textuellement en XMI.

### Sémantique statique

La sémantique statique (aussi appelée sémantique structurelle) d'un métamodèle décrit les critères et les règles de modélisation qui ne peuvent pas être représentés par la syntaxe abstraite. Il existe des langages spécifiques pour la formulation de ces règles. Par exemple, OCL permet de décrire la sémantique statique d'un diagramme de classes. En ingénierie dirigée par les modèles, les règles de sémantique statique peuvent être utilisées pour vérifier qu'un modèle respecte les propriétés de son métamodèle. Dans ce cas, les règles doivent être automatiquement vérifiables, c'est-à-dire décidables.

### Sémantique dynamique

La sémantique dynamique d'un métamodèle est une description du sens qui lui est donné. Contrairement aux aspects précédents, la sémantique dynamique est rarement exprimée à l'aide d'un langage formel. Le langage naturel est pour cela privilégié.

## Méta-métamodèle
### Définition

Il est toujours possible de définir un modèle pour un objet ou un concept donné. Par conséquent, un métamodèle peut lui-même être représenté par un métamodèle qui définit les concepts disponibles pour la métamodélisation. Un tel métamodèle est appelé méta-métamodèle. En théorie, il n'y a pas de limite au nombre de niveaux de modélisation : chaque métamodèle est représenté par un autre métamodèle à un niveau supérieur. En pratique, le nombre de niveaux de modélisation est fixe et le métamodèle le plus abstrait est souvent auto-descriptif (ou réflexif, ou méta-circulaire), c'est-à-dire qu'il peut se représenter lui-même.

### Architecture dirigée par les modèles

En architecture dirigée par les modèles (MDA), le standard Meta-Object Facility (MOF) fournit un méta-métamodèle qui permet de représenter d'autres métamodèles comme le métamodèle du langage UML ou des langages de transformation QVT. La représentation des métamodèles avec MOF s'appuie le plus souvent sur quatre couches de modélisation. Chaque couche est une abstraction de la couche inférieure :
* M3 est un méta-métamodèle auto-descriptif de MOF ;
* M2 est un métamodèle construit selon le standard MOF (par exemple, UML 2.0) ;
* M1 est un modèle utilisateur ;
* M0 est un objet de la réalité, sujet à une modélisation ;
L'architecture en quatre couches est considérée dans l'approche MDA comme étant suffisamment générale pour un processus de modélisation logicielle. Bien qu'étant la plus fréquente, cette architecture n'est cependant pas la seule. Le standard MOF requiert au minimum deux couches de modélisation et n'impose pas de nombre de couches maximum. Ainsi, une spécification en deux couches (par exemple, classe (M1) – objet (M0)) est conforme à l'approche MDA bien qu'elle ne définisse pas de méta-métamodèle.
La définition du méta-métamodèle du standard MOF reprend les principaux concepts des diagrammes de classes en UML (classifieurs, attributs, associations, etc.). Puisque le méta-métamodèle est auto-descriptif, il est également représenté en utilisant ces concepts.

## Applications
### En génie logiciel
#### Échange de modèles

La conception d'un métamodèle capable de représenter plusieurs modèles facilite la sérialisation, la manipulation et l'échange de ces modèles. Le standard MOF fournit par exemple XMI, une procédure permettant de représenter un modèle ou un métamodèle dérivé du méta-métamodèle MOF à l'aide du langage XML.

#### Validation et transformation de modèles

En ingénierie dirigée par les modèles, la validation de modèles est un processus par lequel on vérifie que les éléments d'un modèle satisfont des contraintes. Par exemple, une contrainte peut limiter les valeurs que prend l'attribut d'une classe en UML. Ces contraintes peuvent être définies dans la sémantique statique d'un métamodèle, par exemple avec le langage OCL, puis vérifiées pour les instances du métamodèle.
Les transformations de modèles sont des programmes qui modifient de manière automatique ou semi-automatique des modèles. Ces transformations sont par exemple utilisées pour vérifier qu'un ensemble de modèles est cohérent. La spécification d'une transformation définit des relations entre les éléments des métamodèles. Ensuite, l'exécution d'une transformation crée ou modifie des modèles selon les règles définies entre les métamodèles. À ce titre, les langages de transformation de modèles comme ATL offrent la possibilité de manipuler les éléments des métamodèles.

#### Urbanisation des systèmes d'information

L'urbanisation est un processus de transformation du système d'information d'une organisation afin qu'il soit mieux adapté aux missions et à l'évolution de l'organisation. Ce processus peut être amorcé grâce à la définition d'un métamodèle d'urbanisme.

#### Zoos de métamodèles

Les zoos de métamodèles sont des répertoires de métamodèles qui peuvent être utilisés comme matériel de test et d'expérimentation en ingénierie dirigée par les modèles. Les métamodèles d'un zoo sont exprimés à l'aide d'un langage de modélisation et sont donc tous des instances d'un même méta-métamodèle (par exemple, UML ou Ecore).

### En intelligence artificielle

En intelligence artificielle, et plus précisément en représentation des connaissances, une ontologie est une spécification qui décrit et analyse les relations entre différents concepts. En cela, les ontologies s'apparentent à des métamodèles. Lorsqu'une ontologie est construite comme un métamodèle, son domaine d'application est un champ d'informations. Un métamodèle constitue une façon de définir une ontologie mais il en existe d'autres.

### En gestion des processus métiers

La gestion des processus métiers (ou business process management) est une discipline de management dont le but est formaliser les processus métiers d'une organisation ainsi que leurs interactions. À cet effet, l'Object Management Group (OMG) a mis en place un business process definition metamodel (BPDM) en 2003. BPDM est un métamodèle qui unifie les diverses notations utilisées dans la définition des processus métiers.

### En ingénierie des systèmes

Les avantages apportés par la métamodélisation peuvent également être utilisés en dehors de la conception logicielle. Par exemple, le langage SysML est un langage de modélisation utilisé en ingénierie des systèmes et défini comme un sous-ensemble d'UML. Sa définition utilise un métamodèle construit à partir de profils UML. C'est un métamodèle de la couche M2 dans l'architecture en quatre couches de l'approche MDA.