Exemple de code et de sortie ODM

Les tables Fictional_Characters, Friend_Table et Enemy_Table Object Classes and Relationships suivantes répertorient les classes d'objets et les objets créés par l'exemple de code de cette section.

Tableau 1. Caractères_fictionnels
Story_Star (car) Anniversaire (car) Age (court) Friends_of (lien) Enemies_of (lien) Do_This (méthode)
Cendrillon Une fois sur une heure 19 Cendrillon Cendrillon echo Cleans Maison
Blanc neige Une fois sur une heure 18 Blanc neige Blanc neige echo Cleans Maison
Tableau 2. Table_amis
Friend_of (car) Ami (car)
Cendrillon Fée Parrain
Cendrillon souris
Blanc neige Atchoum
Blanc neige Somnolent
Cendrillon Le Prince
Blanc neige Heureux
Tableau 3. Table_lavement
Enemy_of (car) Ennemi (car)
Cendrillon minuit
Cendrillon Mère moyenne
Blanc neige Mère moyenne

ODM Exemple de code d'entrée pour la création de classes d'objets

L'exemple de code suivant dans le fichier MyObjects.cre crée trois classes d'objets lorsqu'il est utilisé comme fichier d'entrée avec la commande odmcreate :

*      MyObjects.cre
*       An input file for ODM create utilities.
*       Creates three object classes:
*               Friend_Table
*               Enemy_Table
*               Fictional_Characters
class   Friend_Table {
        char    Friend_of[20];
        char    Friend[20];
};
class   Enemy_Table {
        char    Enemy_of[20];
        char    Enemy[20];
};
class   Fictional_Characters {
        char    Story_Star[20];
        char    Birthday[20];
        short   Age;
        link    Friend_Table Friend_Table Friend_of Friends_of;
        link    Enemy_Table Enemy_Table Enemy_of Enemies_of;
        method  Do_This;
};
* End of MyObjects.cre input file for ODM create utilities. *

:NONE.Fictional_CharactersLa classe d'objets contient six descripteurs:

  • Story_StaretBirthday,chacun avec un type de descripteur de caractère et une longueur maximale de 20 caractères.
  • Ageavec un type de descripteur court.
  • Friends_ofetEnemies_ofsont à la fois de la classe de lien et du lien vers les deux classes d'objets précédemment définies.
    Remarque: Le lien de classe d'objets est répété deux fois.
  • Do_Thisavec un type de descripteur de méthode.

Pour générer les fichiers de classe d'objets requis par ODM, le fichier contenant ce code doit être traité avec la commande odmcreate .

Exemple de sortieODM pour des définitions de classe d'objets

Le traitement du code dans le fichier MyObjects.cre à l'aide de la commande odmcreate génère les structures suivantes dans un fichier .h :

* MyObjects.h
* The file output from ODM processing of the MyObjects.cre input
* file. Defines structures for the three object classes:
*       Friend_Table
*       Enemy_Table
*       Fictional_Characters
#include <odmi.h>

struct  Friend_Table {
       long     _id;     * unique object id within object class *
       long     _reserved;  * reserved field *
       long     _scratch;   * extra field for application use *
       char     Friend_of[20];
       char     Friend[20];
};
#define Friend_Table_Descs 2
extern struct Class Friend_Table_CLASS[];
#define get_Friend_Table_list(a,b,c,d,e) (struct Friend_Table * )odm_get_list (a,b,c,d,e)
struct  Enemy_Table {
        long    _id;
        long    _reserved;
        long    _scratch;
        char    Enemy_of[20];
        char    Enemy[20];
};
#define Enemy_Table_Descs 2
extern struct Class Enemy_Table_CLASS[];
#define get_Enemy_Table_list(a,b,c,d,e) (struct Enemy_Table * )odm_get_list (a,b,c,d,e)
struct  Fictional_Characters {
        long    _id;
        long    _reserved;
        long    _scratch;
        char    Story_Star[20];
        char    Birthday[20];
        short   Age;
       struct  Friend_Table *Friends_of;    * link *
        struct  listinfo *Friends_of_info;   * link *
        char    Friends_of_Lvalue[20];       * link *
        struct  Enemy_Table *Enemies_of;     * link *
        struct  listinfo *Enemies_of_info;   * link *
        char    Enemies_of_Lvalue[20];       * link *
        char    Do_This[256];                * method *
};
#define Fictional_Characters_Descs 6
 
extern struct Class Fictional_Characters_CLASS[];
#define get_Fictional_Characters_list(a,b,c,d,e) (struct Fictional_Characters * )odm_get_list (a,b,c,d,e)
* End of MyObjects.h structure definition file output from ODM    * processing.

Exemple de codeODM pour ajouter des objets à des classes d'objets

Le code suivant peut être traité par la commande odmadd pour remplir les classes d'objets créées par le traitement du fichier d'entrée MyObjects.cre :

* MyObjects.add
* An input file for ODM add utilities.
* Populates three created object classes:
*       Friend_Table
*       Enemy_Table
*       Fictional_Characters
Fictional_Characters:
Story_Star = "Cinderella" #a comment for the  MyObjects.add file.
Birthday        =       "Once upon a time"
Age             =       19
Friends_of      =       "Cinderella"
Enemies_of      =       "Cinderella"
Do_This =               "echo Cleans house"
Fictional_Characters:
Story_Star      =       "Snow White"
Birthday        =       "Once upon a time"
Age             =       18
Friends_of      =       "Snow White"
Enemies_of      =       "Snow White"
Do_This   =              "echo Cleans house"
Friend_Table:
Friend_of       =       "Cinderella"
Friend          =       "Fairy Godmother"
Friend_Table:
Friend_of       =       "Cinderella"
Friend          =       "mice"
Friend_Table:
Friend_of       =       "Snow White"
Friend          =       "Sneezy"
Friend_Table:
Friend_of       =       "Snow White"
Friend          =       "Sleepy"
Friend_Table:
Friend_of       =       "Cinderella"
Friend          =       "Prince"
Friend_Table:
Friend_of       =       "Snow White"
Friend          =       "Happy"
Enemy_Table:
Enemy_of        =       "Cinderella"
Enemy           =       "midnight"
Enemy_Table:
Enemy_of        =       "Cinderella"
Enemy           =       "Mean Stepmother"
Enemy_Table:
Enemy_of        =       "Snow White"
Enemy           =       "Mean Stepmother"
* End of MyObjects.add input file for ODM add utilities. *

Remarque: Le commentaire * (astérisque) ou # (signe dièse) de l'exemple de code précédent ne sera pas placé dans le fichier objet. Si le début de la ligne entraîne la mise en commentaire de la ligne, la commande ne figure pas dans le fichier objet. Le commentaire sera inclus dans le fichier et traité comme une chaîne s'il est inclus dans "" (guillemets).