Gestion de la hiérarchie des classes d'entités


o D_InstallMetaClasses
Fonction d'installation des métaclasses, instances de Metaclass, pour chaque sous-classes de BasicEntity propres à DIESE.
o SetHierarchy
Fonction d'installation des relations d'ascendance et de descendance entre les classes.
o CreateMetaClass
Crée la métaclasse de symbole id et de nom nom dans la table des métaclasses.
o DisplayClasses
Affiche les informations sur les sous-classes d'entités pour lesquelles au moins une instance a été créée par l'utilisateur.
o IsTerminalClass
Renvoie vrai si la classe passée en argument (par son symbole) est une classe 'terminale', au sens où aucune autre classe n'en est une spécialisation, et faux sinon.
o TerminalDescendantIdTab
Etablit le tableau des symboles de classe des classes terminales qui héritent de celle dont le symbole est passée en argument.
o AncestorIdTab
Renvoie le tableau des symboles des classes dont hérite, directement ou non, la classe passée en argument (par son symbole).
o AncestorIdTab
Même rôle que la précédente, mais le résultat devient la valeur du second argument (transmis par référence au programme appelant).
o ParentIdTab
Renvoie le tableau des symboles des classes dont hérite directement la classe passée en argument (par son symbole).
o ChildIdTab
Renvoie le tableau des symboles des classes qui héritent directement de la classe passée en argument (par son symbole).
o DescendantIdTab
Renvoie le tableau des symboles des classes qui héritent, directement ou non, de la classe passée en argument (par son symbole de classe).
o DescendantIdTab
Même rôle que la précédente, mais le résultat devient la valeur du second argument (transmis par référence au programme appelant).
o DescendantIdTab
Renvoie le tableau des symboles des classes qui héritent, directement ou non, de la classe passée en argument (par son nom de classe).
o DescendantIdTab
Même rôle que la précédente, mais le résultat devient la valeur du second argument (transmis par référence au programme appelant).
o IsAncestorOf
Renvoie vrai si la classe de symbole idf est une sous-classe, immédiate ou non, de la classe de symbole idm, faux sinon.
o IsParentOf
Renvoie vrai si la classe de symbole idf est une sous-classe immédiate de la classe de symbole idm, faux sinon.
o IsChildOf
Equivalente à IsParentOf(idm, idf).
o IsDescendantOf
Equivalente à IsAncestorOf(idm, idf).
o HaveCommonAncestor
Renvoie vrai si les deux classes passées en arguments ont un ancêtre commun (hormis O_ENTITY), et faux sinon.
o FirstCommonAncestorId
Renvoie le symbole de classe du premier ancêtre commun aux entités du tableau passé en argument.
Mode d'installation de la hiérarchie :

Les entités du domaine sont regroupées par l'utilisateur en classes et sous-classes, qui héritent de la classe prédéfinie BasicEntity (et généralement de sa sous-classe Entity), directement (pour les classes) ou indirectement (pour les sous-classes).

A chaque classe d'entité propre à l'application, l'utilisateur doit associer une instance d'une classe prédéfinie dédiée à la gestion des classes d'entités : c'est la classe MetaClass, une "classe sur les classes", appelée ci-après "métaclasse". Pour la classe d'entités A, cette instance encapsule des informations générales telles que le nombre et la liste des instances de A déjà créées et, c'est l'objet de la présente documentation, la place de A dans la hiérarchie des classes d'entités.

Ainsi, pour installer une hiérarchie de classes d'entités, l'utilisateur opére normalement de la façon suivante :

  1. Les classes du domaine. Un fichier UserEntity.h contient la déclaration des classes du domaine, avec pour le moins un constructeur sans argument, et avec spécification de l'héritage. Dans cet exemple, la classe A hérite de la classe B :

    class A : public Entity { public: A();};
    class B : public A { public: B();};
    

  2. Les métaclasses. Quelque part dans le code, mais normalement dans une fonction dédiée, couramment appelée App_InstallMetaClasses, on crée les instances de MetaClass associées à A et B ... :

    void App_InstallMetaClasses() {
      MetaClass* pMC;
      pMC = CreateMetaClass(ID_A, "a"); pMC->SetParentClassId(BD_ENTITY);
      pMC = CreateMetaClass(ID_B, "b"); pMC->SetParentClassId(ID_A);
    }
    
    ... où ID_A et ID_B (resp. "a" et "b") sont les symboles (resp. les noms) de classes choisis pour A et B.

    Cette fonction est invoquée au début du code de toute application (mais après la création d'une instance de Simulation et après l'invocation de D_InstallMetaClasses, qui a le même rôle pour les classes prédéfinies de DIESE).

    int main(int argc, char argv[]) {
      ...
      pCurrentSim = new Simulation();
      D_InstallMetaClasses();
      App_InstallMetaClasses();
      SetHierarchy();
      ...
    }
    

  3. Les constructeurs des classes du domaine. Le fichier UserEntity.cc contient la réalisation des constructeurs des classes d'entités. Chaque constructeur installe le lien entre la classe d'entités et sa métaclasse. En outre , le constructeur précise les types des composants ou le type des éléments de l'entité, les types des sur-ensembles, les classes des descripteurs constants et variables (voir page 'Les entités').

    A::A() {
      SetMetaClass(ID_A);
      AddInstanceToClass();
      ...
      ElementClassId(ID_A_ELEM);
      AddSuperSetClassIdID_SET_OF_A);
      Descriptor* pD = new X(); AddConstantDescriptor(pD);
      ...
    }
    B::B() {
      SetMetaClass(ID_B);
      AddInstanceToClass();
      ...
    }
    

    SetMetaClass(ID_A) installe dans l'instance de A un pointeur vers la métaclasse (toutes les instances de A pointent vers la même métaclasse).

    AddInstanceToClass() ajoute dans la métaclasse un pointeur vers l'instance de A. Donne en outre un nom propre à l'instance (on l'appelle le "nom d'instance"), construit comme la concaténation du nom de classe et d'un numéro d'ordre global unique (par exemple "a_118"). De manière plus générale, par AddInstanceToClass, l'instance créée est ajoutée à la liste des instances de toutes ses classes ascendantes jusqu'à la classe de base BasicEntity

  4. Les symboles des classes. Le fichier UserTypes.h contient l'énumération (nommée par exemple App_ClassId) des symboles de classe. Les nombres doivent être tous plus grand que la valeur de la variable globale g_BD_ReservedUserClassId.

     enum App_ClassId {ID_A=11, ID_B};
    

  5. Destructeurs. L'écriture d'un destructeur explicite n'est pas exigée. L'appel au destructeur implicite (par un delete <pointeur>; explicite ou bien dans DeleteInDepth) fait appel aux destructeurs implicites des classes ascendantes, jusqu'à celui de la classe de base des entités (BasicEntity). Ce dernier retire l'instance en cours de suppression de la liste des instances de toutes les métaclasses dont elle hérite, jusqu'à la métaclasse de base (voir page 'La classe des entités avec descripteurs et méthodes').

This page was generated with the help of DOC++.