DataFlowGenerator:reference

De Wikip
Révision datée du 24 juillet 2026 à 19:08 par WikiAdmin (discussion | contributions) (1 version importée : dfg)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

Les références de classes évitent de redéfinir des noms de classes et de dupliquer la structure d'une classe existante.

Exemple d'utilisation de référence de classe :

<el name="vecteur" type="CVecteur">
  <el name="x" type="float"/>
  <el name="y" type="float"/>
</el>

<el name="vitesse" type="@CVecteur" />

En l'utilisation des types primitifs revient à utiliser des références mais sans le caractère "@". Dans ce cas pourquoi utiliser ce caractère pour les autres types ? C'est parce que nous n'aurions aucun moyen de distinguer une classe vide d'une référence de classe. L'exemple suivant :

<el name="vecteur" type="CVecteur"/>
<el name="vitesse" type="@CVecteur" />

donnerait :

<el name="vecteur" type="CVecteur"/>
<el name="vitesse" type="CVecteur"/>

Nous pourrions aussi dire que toute classe vide est une référence de classe, mais ceci n'a pas été retenu comme solution.

Rq Dans un langage de programmation cette question ne se pose pas, car on sépare en général la définition d'une classe des instanciations de celle-ci. Dans notre grammaire la première définition est une instaciation sauf si l'attribut OnlyDefinition est positionné.

Les références permettent aussi définir récursivement. Voici un exemple :

<el name="recurence" type="CRecurence">
  <el name="sub1" type='@CRecurence' cardinality="?"/>
  <el name="subn" type='@CRecurence' cardinality="*"/>
</el>
Al1
Attention16.png

Attention, ne faites pas l'erreur suivante :

<el name="recurence" type="CRecurence">
  <el name="sub1" type='@CRecurence'/>
</el>
Car, une fois le code du driver généré, quand le code sera exécuté, si la compilation est acceptée, il y aura une erreur de récursion infinie.