Unidade B - Banco de Dados Orientado a Objetos

2. Modelo de Objetos

O modelo de objetos do ODMG é o modelo de referência para um banco de dados orientado a objetos. Esse modelo especifica construções que são suportadas por um SGBDOO, tais como: características dos objetos, relacionamentos entre os objetos, e como os objetos podem ser nomeados e identificados.

 Veja as principais características do modelo de objetos ODMG.

O conceito de chaves no modelo de objetos ODMG é apenas uma restrição de unicidade de valor e não tem o papel de OID, nem de referência entre objetos. Portanto, chave em ODMG corresponde a um ou a mais atributos cujos valores identificam uma instância dentro de uma extensão. Essa chave deve ser definida pelo usuário, enquanto o OID é definido pelo sistema.

Abaixo temos um exemplo de uma definição de chave no modelo OO:

class Pessoa (extend pessoas key codigo) {
    attribute short codigo;
};

Existem alguns aspectos que devem ser conhecidos em relação aos objetos:

Os literais não possuem identificadores. Três tipos de literais são suportados pelo Modelo de Objetos:

A herança pode ser definida de duas formas:

A extensão de um tipo (extend) é formada por todas as instâncias deste tipo que existem no banco de dados. Se o projetista desejar, esta extensão é mantida automaticamente pelo SGBDOO. A manutenção do extend envolve a inclusão e remoção de instâncias, bem como a criação e manutenção de índices para estas.

Por exemplo, na classe Pessoa, pode-se declarar o seu extend conforme descrito a seguir:

class Pessoa (extend pessoas){
    ...
};

Os relacionamentos são propriedades definidas entre, no máximo, dois tipos, em que cada tipo participante do relacionamento tem que possuir um OID. O ODMG permite apenas relacionamentos binários, podendo ter cardinalidade um-para-um, um-para-muitos ou muitos-para-muitos.

Um relacionamento é definido explicitamente pela declaração de caminhos que permitem à aplicação usar as conexões lógicas entre os objetos envolvidos no relacionamento. Esses caminhos são declarados em pares, um para cada direção.

A seguir, vemos um exemplo em que um professor ensina um conjunto de disciplinas, e uma disciplina é ensinada por um professor. O relacionamento declarado nas duas direções é apresentado nas duas classes Professor e Disciplina:

class Professor
{...
    relationship set <Disciplina> ensina
    inverse Disciplina :: é_ensinada_por;
...};

class Disciplina
{...
    relationship Professor é_ensinada_por
    inverse Professor :: ensina;
...};

O SGBDOO é responsável por manter a integridade referencial dos relacionamentos. Se um objeto que participa de um relacionamento for removido, então qualquer caminho para aquele objeto deve ser removido também.

As operações são representadas apenas pelas suas assinaturas, que contêm o nome da operação, nome e tipo de cada argumento, tipo de valor retornado e exceções que podem ser sinalizadas pela operação. O nome de uma operação deve ser único apenas dentro de uma definição de tipo.

Assim, tipos diferentes podem ter operações definidas com o mesmo nome. Nestes casos, quando uma operação é chamada, uma operação específica deve ser selecionada para execução. Esta seleção é feita pegando-se o tipo mais específico do objeto fornecido como primeiro argumento da chamada.

Operações podem criar exceções, e estas podem passar os resultados das exceções. Quando uma exceção é criada, as informações sobre a sua causa são passadas para o manipulador de exceções como propriedades de uma exceção.

Conhecendo o modelo orientado a objetos, detalhado acima, podemos passar a estudar, como dito anteriormente, as linguagens de manipulação de BDOs. Quando virmos os exemplos de uso destas linguagens, vários conceitos discutidos aqui ficarão ainda mais claros. Antes de concluir, vamos conhecer os SGBDOOs que estão disponíveis atualmente e que implementam os conceitos que estamos estudando.