Código de ejemplo y salida de ODM

Las siguientes tablas Fictional_Characters, Friend_Table y Enemy_Table Object Classes and Relationships listan las clases de objeto y los objetos creados por el código de ejemplo de esta sección.

Tabla 1. Fictional_Characters
Story_Star (car) Cumpleaños (char) Edad (corta) Friends_of (enlace) Ados_de (enlace) Do_This (método)
Cinderela Érase una vez 19 Cinderela Cinderela echo Cleans House
Blanco nieve Érase una vez 18 Blanco nieve Blanco nieve echo Cleans House
Tabla 2. Tabla_amistoso
Amist_de (char) Amigo (char)
Cinderela Hada madrina
Cinderela ratones
Blanco nieve Estornudo
Blanco nieve Somnoliento
Cinderela Príncipe
Blanco nieve Feliz
Tabla 3. Tabla enemy_Table
Enemy_of (car) Enemigo (char)
Cinderela medianoche
Cinderela Madrastra media
Blanco nieve Madrastra media

Código de entrada de ejemplo ODM para crear clases de objeto

El código de ejemplo siguiente en el archivo MyObjects.cre crea tres clases de objeto cuando se utiliza como archivo de entrada con el mandato 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. *

Los 2Fictional_Charactersclase de objeto contiene seis descriptores:

  • Story_StaryBirthday,cada uno con un tipo de descriptor char y una longitud máxima de 20 caracteres.
  • Agecon un tipo de descriptor corto.
  • Friends_ofyEnemies_ofson de la clase de enlace y el enlace a las dos clases de objeto definidas anteriormente.
    Nota: El enlace de clase de objeto se repite dos veces.
  • Do_Thiscon un tipo de descriptor de método.

Para generar los archivos de clase de objeto necesarios para ODM, el archivo que contiene este código debe procesarse con el mandato odmcreate

Salida de ejemplo de ODM para definiciones de clase de objeto

El proceso del código en el archivo MyObjects.cre con el mandato odmcreate genera las estructuras siguientes en un archivo .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.

Código de ejemplo ODM para añadir objetos a clases de objeto

El mandato odmadd puede procesar el código siguiente para llenar las clases de objeto creadas por el proceso del archivo de entrada 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. *

Nota: el comentario * (asterisco) o # (signo de almohadilla) en el código de ejemplo anterior no irá al archivo de objeto. Si el principio de la línea hace que la línea sea un comentario, el mandato no va en el archivo de objeto. El comentario se incluirá en el archivo y se tratará como una serie si se incluye dentro del "" (comillas dobles).