Código e saída de exemplo do ODM

As tabelas Fictional_Characters, Friend_Table e Enemy_Table Object Classes e Relacionamentos listam as classes de objetos e objetos criados pelo código de exemplo nesta seção.

Tabela 1. Personagens fictícios
Story_Star (char) Aniversário (char) Idade (curta) Amigos_de (link) Inimigos_de (link) Do_This (método)
Cinderela Uma vez por vez 19 Cinderela Cinderela echo Limpa a casa
Branca de neve Uma vez por vez 18 Branca de neve Branca de neve echo Limpa a casa
Tabela 2. Mesa_Amigo
Friend_of (char) Amigo (char)
Cinderela Fada Madrinha
Cinderela camundões
Branca de neve Espirrado
Branca de neve Sonolento
Cinderela Príncipe
Branca de neve Feliz
Tabela 3. Tabela de Inimigos
Inimigo_de (char) Inimigo (char)
Cinderela meia-noite
Cinderela Madrasta Média
Branca de neve Madrasta Média

ODM código de entrada de exemplo para criar classes de objeto

O código de exemplo a seguir no arquivo MyObjects.cre cria três classes de objeto quando usado como um arquivo de entrada com o comando 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. *

Os comandosFictional_Charactersclasse de objeto contém seis descritores:

  • Story_StareBirthday,cada um com um tipo de descritor de char e um comprimento máximo de 20 caracteres.
  • Agecom um tipo de descritor de curta duração.
  • Friends_ofeEnemies_ofsão tanto da classe de link quanto de link para as duas classes de objetos previamente definidas.
    Nota: O link de classe de objeto é repetido duas vezes.
  • Do_Thiscom um tipo de descritor de método.

Para gerar os arquivos de classe de objeto necessários pelo ODM, o arquivo que contém esse código deve ser processado com o comando odmcreate

ODM exemplo de saída para definições de classe de objeto

O processamento do código no arquivo MyObjects.cre com o comando odmcreate gera as seguintes estruturas em um arquivo .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.

ODM código de exemplo para incluir objetos em classes de objeto

O código a seguir pode ser processado pelo comando odmadd para preencher as classes de objeto criadas pelo processamento do arquivo 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: O comentário * (asterisco) ou o comentário # (sinal de libra) no código de exemplo anterior não irá entrar no arquivo objeto. Se o início da linha fizer com que a linha seja um comentário, o comando não irá no arquivo objeto. O comentário será incluído no arquivo e tratado como uma string se ele for incluído dentro do "" (marcas de aspas duplas).