banco de dados orientado a objetos - lyfreitas.com.br · 4 o projeto conceitual inicia a partir da...

60
UNIVERSIDADE FEDERAL DE SÃO CARLOS DEPARTAMENTO DE COMPUTAÇÃO Banco de Dados Orientado a Objetos Marina Teresa Pires Vieira Setembro 2001

Upload: vuhanh

Post on 10-Nov-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

UNIVERSIDADE FEDERAL DE SÃO CARLOS DEPARTAMENTO DE COMPUTAÇÃO

Banco de Dados Orientado a Objetos

Marina Teresa Pires Vieira

Setembro 2001

1

Conteúdo

Conteúdo___________________________________________________________1 1. Conceitos Avançados sobre Modelagem de Dados ________________________3

1.1. Introdução _________________________________________________________ 3

1.2. Modelos de Dados ___________________________________________________ 5 1.2.1. Abstrações no Projeto Conceitual de Banco de Dados____________________________5

1.3. Modelo EER (Extended Entity-Relationship) ____________________________ 6 1.3.1. Atributos compostos: _____________________________________________________7 1.3.2. Hierarquia de Generalização _______________________________________________7

1.4. Exercícios _________________________________________________________ 10

2. Modelos de Dados Orientados a Objetos_______________________________12 2.1. Introdução ________________________________________________________ 12

2.2. Conceitos Básicos___________________________________________________ 13 2.2.1. Objetos e Identidade_____________________________________________________ 13 2.2.2. Valores _______________________________________________________________ 14 2.2.3. Estrutura do objeto ______________________________________________________ 14 2.3.4. OIDs x Chaves Primárias _________________________________________________ 14 2.3.5. Objetos Complexos _____________________________________________________ 15 2.3.6. Encapsulamento ________________________________________________________ 15 2.3.7. Métodos ______________________________________________________________ 16 2.3.8. Tipos e Classes_________________________________________________________ 16 2.3.9. Herança_______________________________________________________________ 16 2.3.10. Polimorfismo _________________________________________________________ 19

3. Modelagem de Dados Orientada a Objetos _____________________________21 3.1. Motivação_________________________________________________________ 21

3.2. Desenvolvimento de Sistemas Orientados a Objetos ______________________ 21

3.3. Modelando Objetos _________________________________________________ 22 3.3.1. Definição de classe______________________________________________________ 22 3.3.2. Herança_______________________________________________________________ 23

3.4. Representação gráfica_______________________________________________ 24 3.4.1. Representação de uma classe de objetos _____________________________________ 24 3.4.2. Representação de conjunto, lista e tupla______________________________________ 24 3.4.3. Herança simples ________________________________________________________ 25 3.4.4. Herança múltipla _______________________________________________________ 25 3.4.5. Definição recursiva______________________________________________________ 26 3.4.6. representação de referências inversas _______________________________________ 26

3.5. Geração do Esquema Lógico _________________________________________ 26

3.6. Exemplo: Banco de Dados para Gerenciamento de Projetos _______________ 28

3.7. Notação adotada X diagrama de classes UML ___________________________ 31

3.8. Exercícios _________________________________________________________ 37

4. Manipulando Objetos______________________________________________39

2

4.1. Características de Linguagens de Consulta OO (LCOO) __________________ 39 4.1.1. Hierarquias de Agregação ________________________________________________ 39 4.1.2. Hierarquia de Herança ___________________________________________________ 40

4.2. Consultando Objetos________________________________________________ 40 4.2.1. Hierarquias de Agregação ________________________________________________ 40 4.2.2. Hierarquia de Herança ___________________________________________________ 42

4.3. Definição de Métodos _______________________________________________ 42

4.4. Exercícios _________________________________________________________ 46

5. Sistemas de Gerenciamento de Banco de Dados Orientados a Objetos_______48 5.1. Características dos SGBDs Orientados a Objetos ________________________ 48

5.2. Vantagens dos SGBDOOs ___________________________________________ 52

5.3. Alguns SGBDOOs Existentes ________________________________________ 53

6. Padrões para SGBDOOs ___________________________________________56 6.1. SQL3 ____________________________________________________________ 56

6.2. ODMG-93_________________________________________________________ 57

7. Bibliografia______________________________________________________59

3

1. Conceitos Avançados sobre Modelagem de Dados

1.1. Introdução Bancos de dados são componentes importantes dos sistemas de informação

(SIs) e consequentemente, o projeto do banco de dados apresenta-se como uma

atividade essencial na fase de desenvolvimento dos SIs. Projetar bancos de dados tem

se tornado uma atividade popular, as vezes realizada não somente por profissionais da

área de banco de dados, mas também por não especialistas.

Freqüentemente, a falta de abordagens adequadas para o projeto de um banco

de dados pode incorrer em resultados indesejáveis, como ineficiência em atender a

demanda de aplicações e problemas com a manutenção do banco de dados.

Geralmente a causa disso é a falta de clareza em entender a natureza exata dos dados

em um nível conceitual (abstrato).

O projeto de um banco de dados é decomposto em Projeto Conceitual,

Projeto Lógico e Projeto Físico, conforme mostrado na figura 1.1.

Requisitos de dados Esquema conceitual Esquema Lógico

Esquema Físico

Fig. 1.1

Projeto Conceitual

Projeto Lógico

Projeto Físico

4

O Projeto Conceitual inicia a partir da especificação dos requisitos e resulta

no esquema conceitual do banco de dados. Um esquema conceitual é uma descrição

em alto nível da estrutura do banco de dados, independente do Sistema de

Gerenciamento de Banco de Dados (SGBD) adotado para implementá-lo. Um modelo

conceitual é usado para descrever os esquemas conceituais.

O propósito do projeto conceitual é descrever o conteúdo de informação do

banco de dados ao invés das estruturas de armazenamento que serão necessárias para

gerenciar essa informação.

O Projeto Lógico inicia a partir do esquema conceitual e resulta no esquema

lógico. Um esquema lógico é uma descrição da estrutura do banco de dados que pode

ser processada por um SGBD. Um modelo lógico é usado para especificar esquemas

lógicos. Os modelos lógicos mais amplamente usados pertencem a três classes:

relacional, em redes e hierárquico. O projeto lógico depende da classe do modelo de

dados usado pelo SGBD, mas não do SGBD específico usado.

O Projeto Físico inicia a partir do esquema lógico e resulta no esquema físico.

Um esquema físico é uma descrição da implementação do banco de dados em

memória secundária; ele descreve as estruturas de armazenamento e métodos de

acesso usados para efetivamente realizar o acesso aos dados. O projeto físico é

direcionado para um SGBD específico. Decisões tomadas durante o projeto físico,

para melhorar o desempenho, podem afetar a estrutura do esquema lógico.

Uma vez que o projeto físico do banco de dados é completado, os esquemas

lógico e físico são expressos usando a linguagem de definição de dados do SGBD

adotado. O banco de dados é criado e populado e pode ser testado para se tornar

operacional.

O esquema físico do banco de dados é influenciado pelas fases por que passou

a construção do banco de dados. A fase de projeto conceitual é tida como uma das

mais (senão a mais) delicadas em todo esse processo, pois depende muito da

habilidade do projetista do banco de dados e das qualidades do modelo de dados

adotado para a elaboração do esquema conceitual. A meta nessa fase é obter um

esquema conceitual do banco de dados que seja tão completo e expressivo quanto

possível. Esse esquema deve procurar expressar o máximo da semântica envolvida na

informação. Mecanismos de representação de alto nível são empregados, tais como

5

representação de hierarquias de subconjunto e de generalização, representação de

restrições de cardinalidade e de atributos compostos e multivalorados.

O esquema conceitual deve permanecer como uma parte da documentação do

processo de projeto, sendo utilizado durante a operação e manutenção do banco de

dados, pois facilita o entendimento dos esquemas de dados e das aplicações que os

utilizam.

Para auxiliar o projetista a elaborar o projeto conceitual de um banco de

dados existem as abstrações de dados, que apresentam as vantagens:

ajudam o projetista a entender, classificar e modelar a realidade,

melhoram a eficiência de implementações subsequentes,

permitem melhor representar a semântica das novas aplicações de banco de dados,

provenientes de áreas não tradicionais.

1.2. Modelos de Dados Modelos de dados são veículos para descrever a realidade. Um modelo de

dados é uma coleção de conceitos que podem ser usados para descrever um conjunto

de dados e operações para manipular os dados. Os modelos de dados servem de base

para o desenvolvimento de Sistemas de Gerenciamento de Banco de Dados (SGBDs).

Distinguem-se dois tipos de modelos de dados:

Modelos conceituais, que são ferramentas para representar a realidade em alto nível

de abstração;

Modelos lógicos, que suportam descrições de dados que podem ser processados por

um computador (ex: modelos relacional, hierárquico, em redes). Esses modelos são

facilmente mapeados para a estrutura física do banco de dados .

1.2.1. Abstrações no Projeto Conceitual de Banco de Dados Para auxiliar o projetista na tarefa de modelar os dados, existem os

mecanismos de abstração de dados que permitem melhor representar a semântica da

informação envolvida na aplicação. As abstrações comumente usadas no projeto

conceitual são: classificação, agregação e generalização.

6

Abstração de Classificação: é usada para alocar objetos similares, caracterizados

por propriedades comuns, em classes de objetos. A classificação estabelece um

relacionamento É-INSTANCIA-DE entre cada elemento da classe e a classe.

Ex: classe EMPREGADO - instancias : (João, Pedro, ..., José).

Abstração de Agregação: é um conceito de abstração para construir objetos

compostos a partir de seus objetos componentes. Essa abstração estabelece um

relacionamento É-PARTE-DE entre os componentes e a classe.

Ex:

- Uma entidade é uma agregação de atributos: PESSOA, composta por Nome,

Sexo, Profissão;

- Um relacionamento é uma agregação de entidades e atributos;

- Um atributo composto é uma agregação de atributos;

- Pode-se agregar entidades relacionadas entre si, compondo uma entidade de

nível mais alto.

Abstração de Generalização: define um relacionamento de subconjunto entre os

elementos de duas ou mais classes. Essa abstração estabelece um relacionamento

É-UM entre a classe pai (chamada superclasse) e cada classe filha (subclasse).

Ex: classes CARRO e BICICLETA são subconjuntos da classe VEÍCULO.

As subclasses são definidas com base em alguma característica da superclasse. No

exemplo dado, essa característica é tipo de veículo (Carro, Bicicleta).

Propriedade Fundamental da Generalização: Todas as abstrações definidas para a

classe genérica são herdadas por todas as classes que são subconjunto.

1.3. Modelo EER (Extended Entity-Relationship) Devido à popularidade e ampla utilização do modelo Entidade-Relacionamento (ER)

para o projeto conceitual de bancos de dados, várias extensões desse modelo foram

7

propostas, visando sua utilização para a modelagem de informações mais complexas.

O modelo ER foi proposto por Peter Chen em 1976, sendo que originalmente o

modelo incluia somente os conceitos de entidade, relacionamento e atributos;

posteriormente outros conceitos foram introduzidos no modelo, tais como atributos

compostos e hierarquias de generalização.

1.3.1. Atributos compostos: Um atributo composto representa um grupo de atributos que possuem uma afinidade

em significado ou uso. Como exemplo, considere o atributo endereço na figura 1.2,

que é composto por Rua, Cidade, Estado, País e CEP.

1.3.2. Hierarquia de Generalização Uma classe E é uma generalização de um grupo de classes E1, E2, ..., En se cada objeto das

classes E1, E2, ..., En é também um objeto da classe E. Uma forma de representar uma

hierarquia de generalização é dada na figura 1.3.

Fig. 1.3- Hierarquia de generalização

E

E1 E2 En . . .

Professor

Rua Cidade Estado País CEP

endereço

Fig. 1.2 - atributo composto

8

Propriedades de Cobertura da generalização

� Cobertura TOTAL ou PARCIAL

A cobertura de uma generalização é total (t) se cada elemento da classe

genérica é mapeada para pelo menos um elemento das classes especializadas.

Ex: A generalização formada pela classe PESSOA e as subclasses HOMEM e

MULHER (figura 1.4) possui cobertura total.

A cobertura é parcial (p) se existe algum elemento da classe genérica que não

é mapeado para nenhum elemento das subclasses.

Exemplo: Suponha que VEÍCULO é uma classe cujos elementos são todos os

possíveis tipos de veículos. A generalização da figura 1.5 é parcial.

� Cobertura EXCLUSIVA ou de SOBREPOSIÇÃO: A cobertura de uma generalização é exclusiva (e) se cada elemento da classe genérica

possui no máximo um elemento correspondente em uma das subclasses.

Ex: A figura 1.6 representa uma cobertura exclusiva.

A cobertura é de sobreposição (s) se existe algum elemento da classe genérica que

possui elementos correspondentes em duas ou mais subclasses.

Ex: Na figura 1.6, suponha que pode existir aluno que cursa a graduação e a pós-

graduação ao mesmo tempo.

Pessoa

Homem Mulher

Veículo

Carro Bicicleta

Fig.1.4 - cobertura total Fig.1.5 - cobertura parcial

9

Notação: Para denotar o tipo de cobertura de uma hierarquia de generalização será

usada a seguinte notação: (t,e), (t,s), (p,e), (p,s), como exemplificado na figura 1.7.

Quando numa generalização a cobertura não está especificada, admite-se que é (t,e).

Hierarquia de Subconjunto Uma entidade E1 é um subconjunto de outra entidade E2 se toda ocorrência de E1 for

também uma ocorrência de E2. É um caso particular da hierarquia de generalização.

Numa hierarquia de subconjunto o tipo de cobertura é (p,e) sempre, não sendo

necessária sua representação no esquema conceitual.

A figura 1.8 é um exemplo de hierarquia de subconjunto.

Observações: 1. O identificador da entidade genérica é também um identificador para as entidades

da especialização.

Aluno

Aluno- Graduaçao

Aluno-Pós- Graduação

Fig. 1.6 - cobertura de overlapping

(p,e)

Veículo

Carro Bicicleta

Fig. 1.7 - cobertura parcial e exclusiva

Cliente

Cliente Especial

nro-cli nome-cli endereço

taxa-desconto

Fig.1.8 - hierarquia de subconjunto

10

2. Entidades da especialização podem ter outros identificadores, como mostrado na figura 1.9.

1.4. Exercícios 1. Indique na figura 1.4 se a cobertura é exclusiva ou de sobreposição. 2. Indique na figura 1.6 se a cobertura é total ou parcial. 3. Indique as propriedades de cobertura da generalização na figura 1.10.

Suposições: - só existem jogadores de futebol e de tênis;

- pode ter jogadores que jogam os dois esportes.

4. Verifique como as propriedades de cobertura da hierarquia de generalização se relacionam com as restrições de cardinalidade de relacionamento. (Sugestão: interprete hierarquias de generalização como tipos especiais de relacionamento entre classes). 5. Transforme as hierarquias do exerc.4 em relacionamentos entre a classe genérica e as subclasses.

6. Considerando a propriedade fundamental de hierarquias de generalização, simplifique o esquema da figura 1.11.

nome- nro-emp nome-divisão categoria posição solteira Fig. 1.9

situação-serv-mil

Pessoa

Homem Mulher Empr Chefe Gerente Militar divisão ident-na- divisão

RG nome título

Jogador

Futebol Tênis

Fig. 1.10

11

mora (1,n) (1,n) nome nasci- da (1,1) (1,n) (1,1) (1,1) reside (0,n) idade tra- balha (0,1) idade

7. Considere o esquema da figura 1.11. Como você pode mudá-lo para representar no esquema todos os empregados, homens e mulheres?

8. Faça o esquema conceitual usando o modelo Entidade-RelacionamentoEstendido,

do seguinte problema:

Uma companhia mantém informações sobre as pessoas que, de alguma forma, possuem com ela algum vínculo, dentre essas seus funcionários. Os seguintes requisitos foram levantados junto aos usuários: a. De cada pessoa mantém-se um código, o nome, endereço. b. De cada funcionário guarda-se também seu salário e o departamento a que ele pertence. Desses funcionários, alguns são gerentes e para cada um destes guarda-se os nomes dos projetos que eles gerenciam. c. Dos demais funcionários que são operários, guarda-se suas habilidades (um operário pode ter várias habilidades). d. Mantém-se também os trabalhos executados na Companhia (código e característica) e os operários que executaram cada trabalho, juntamente com o período que isto se deu. Sabe-se também que pode haver operários que não exercem nenhum tipo de trabalho dentre os cadastrados. e. Deve-se também manter os dependentes de cada funcionário (nome, sexo e data de nascimento).

Masculino

Pessoa

Feminino

Cidade

Soldado Empregado

Fig. 1.11

12

2. Modelos de Dados Orientados a Objetos

2.1. Introdução A técnica da orientação a objetos está cada vez mais popular para projetar e

implementar sistemas de natureza variada. Com relação a bancos de dados, essa

técnica tem sido empregada, com predominância, nos casos aonde os dados

envolvidos na aplicação considerada apresentam estrutura complexa.

A diferença existente entre os modelos de dados tradicionais (relacional,

hierárquico e em redes) e os modelos de dados orientados a objetos está na maneira

como eles vêem os dados.

Os modelos de dados tradicionais vêem os dados como uma coleção de tipos

de registros ou relações, cada um tendo uma coleção de registros ou tuplas

armazenadas em um arquivo. Já num modelo de dados orientado a objetos um banco

de dados é considerado como uma coleção de objetos do mundo real.

Embora a informação sobre objetos complexos do mundo real possa ser

espalhada em tabelas relacionais, a meta dos bancos de dados orientados a objetos é

manter uma correspondência direta entre os objetos do mundo real e os do banco de

dados, podendo estes serem identificados e manipulados como um todo. Representar

um objeto complexo no modelo relacional significa que o objeto tem que ser

subdividido em um grande número de tuplas, o que leva à necessidade de realizar um

considerável número de operações de junção para recuperar o objeto.

Os conceitos da orientação a objetos formam uma boa base para aplicações de

banco de dados mais avançadas, como por exemplo: aplicações de engenharia tais

como CAD/CAM (Computer Aided Design/Computer Aided Manufacturation),

CASE (Computer Aided Software Engineering), sistemas de informação geográfica,

sistemas de informação multimídia, sistemas de interface de usuário avançadas, etc.

Essas aplicações tem requisitos e características que diferem das aplicações

comerciais tradicionais, tais como estruturas de dados mais complexas, transações de

duração mais longa, novos tipos de dados para armazenar imagens ou textos longos e

a necessidade de definição de operações não padrões específicas da aplicação. Os

bancos de dados orientados a objetos foram propostos para dar suporte às

necessidades dessas aplicações mais complexas.

13

Os modelos de dados orientados a objetos usam os conceitos de abstração de

dados dos modelos semânticos (classificação, generalização e agregação) e

incorporam outros conceitos.

2.2. Conceitos Básicos Alguns conceitos encontrados nas linguagens de programação orientadas a

objetos (LPOO) são também aplicados nos modelos de dados orientados a objetos,

porém bancos de dados requerem alguns conceitos próprios. Os objetos, em uma

LPOO, existem somente durante a execução do programa e são por isso chamados de

transitórios. Um banco de dados orientado a objetos pode estender a existência dos

objetos de modo que eles sejam armazenados permanentemente, isto é, os objetos são

persistentes (eles persistem após o término do programa e podem ser recuperados

posteriormente e compartilhados por outros programas.

A seguir são apresentados os principais conceitos envolvidos em bancos de

dados orientados a objetos.

2.2.1. Objetos e Identidade Cada entidade do mundo real é modelada como um objeto.

A cada objeto é associado um estado e um comportamento: o estado é representado

pelos valores dos atributos do objeto; o comportamento é definido pelos métodos que

agem sobre o estado do objeto pela invocação de operações.

A cada objeto armazenado no banco de dados é associado um identificador único

(OID: Object Identifier), que é gerado pelo SGBDOO (sistema de gerenciamento de

banco de dados orientado a objetos). O valor do OID não e visível ao usuário, mas é

usado internamente pelo sistema para identificar cada objeto de forma única e criar e

gerenciar referências entre objetos.

A principal propriedade de um OID é que ele é imutável, isto é, o valor do OID de um

particular objeto não deve mudar. O SGBDOO deve ter algum mecanismo para

gerenciar OIDs e preservar a propriedade de imutabilidade. É também desejável que

cada OID seja usado somente uma vez, isto é, os OIDs dos objetos que são removidos

do banco de dados não são reaproveitados.

As duas propriedades acima implicam que o OID não deve depender de nenhum valor

de atributo do objeto. Geralmente é considerado não apropriado basear o OID no

endereço físico do objeto no meio de armazenamento, uma vez que o endereço físico

14

pode mudar após a reorganização do banco de dados. Entretanto, alguns sistemas

usam o endereço físico como OID, para aumentar a eficiência de recuperação do

objeto. Nesse caso, se o endereço físico do objeto muda, pode ser colocado um

ponteiro indireto no primeiro endereço, indicando a nova localização física do mesmo.

É mais comum usar inteiros longos como OIDs e uma função hash para mapear o

valor do OID para o endereço físico do objeto.

2.2.2. Valores A maioria dos SGBDOOs representam as entidades primitivas, tais como inteiros ou

caracteres, por valores (não possuem OIDs), enquanto as entidades não primitivas são

representadas como objetos. Já outros sistemas, como o O2, permitem a definição de

valores complexos que não podem ser compartilhados por outros objetos, uma vez

que valores não possuem OIDs.

2.2.3. Estrutura do objeto O valor de cada atributo de um objeto pode ser:

- atômico: integer, real, character, booleano, etc.

- complexo: definido através de construtores: tuple, set, list, bag e array.

O construtor de tipo tuple serve para agregar informações afins. É freqüentemente

chamado de tipo estruturado, pois corresponde ao construtor struct nas linguagens de

programação C e C++.

Os construtores de tipo set, list, array e bag são chamados de tipos de coleção e

servem para definir atributos multivalorados. Podem ser não ordenados (set e bag) ou

ordenados (list e array). Em um set não pode haver dois elementos com o mesmo

valor, enquanto que na bag isso é possível.

2.3.4. OIDs x Chaves Primárias Nos modelos orientados a objetos não existe o conceito de chave primária como

acontece no modelo relacional. Ao invés disso, existem os OIDs dos objetos que,

como já dito, são criados e mantidos pelo sistema de gerenciamento de banco de

dados e não são de acesso do usuário.

As vantagens do uso de OIDs com relação às chaves são:

- os programadores de aplicações não precisam se preocupar com a seleção de chaves

para as várias classes de objetos;

15

- obtém-se melhor desempenho, pois os OIDs são implementados em baixo nível pelo

sistema;

- embora as chaves sejam mais significativas ao usuário, muitas vezes o usuário

precisa usar códigos artificiais, sem significado semântico, para poder identificar as

tuplas de uma relação.

2.3.5. Objetos Complexos A composição estrutural de um objeto é definida através de um conjunto de

atributos. O valor de cada atributo pode ser primitivo, um objeto ou uma

combinação dos construtores tupla, lista, array, conjunto ou bag, envolvendo outros

objetos ou não. Objetos complexos são definidos através de construtores envolvendo

outros objetos.

Quando o valor de um atributo de um objeto O é um objeto O’, o sistema armazena o

identificador de O’ em O ou todo o valor complexo é armazenado no atributo do

objeto.

2.3.6. Encapsulamento A cada objeto está associada sua estrutura e seu comportamento (os métodos ou

operações). O comportamento é armazenado no banco de dados junto com a estrutura

do objeto.

O conceito real de encapsulamento determina que somente as operações sobre os

objetos são visíveis e sua estrutura é escondida. Em banco de dados a noção de

invisibilidade da estrutura do objeto é afrouxada. É desejável, por exemplo, poder

consultar os atributos do objeto através de uma linguagem de consulta. Assim, a

maioria dos SGBDOOs permitem acesso direto aos atributos fornecendo operações

definidas pelo sistema para a leitura e modificação dos atributos, o que livra o usuário

da incumbência de implementar uma considerável quantidade de métodos cujo único

propósito é ler e escrever os valores dos vários atributos dos objetos. Isso é um

exemplo de violação do encapsulamento permitida pelos SGBDOOs. Esses sistemas,

porém, possuem mecanismos para que o usuário possa proteger o acesso aos atributos

dos objetos, caso desejável. O sistema O2, por exemplo, permite o usuário estabelecer

quais atributos e métodos são visíveis na interface do usuário, através da declaração

public, o que permite serem invocados por qualquer outro objeto. Os não visíveis são

referidos como private.

16

2.3.7. Métodos Os objetos nos SGBDOOs são manipulados através de métodos. Em geral, a definição

de um método consiste de assinatura e corpo. A assinatura especifica o nome do

método, os nomes e classes dos argumentos e a classe do resultado, se existir. O corpo

representa a implementação do método e consiste de um conjunto de instruções

expressas em uma dada linguagem de programação.

2.3.8. Tipos e Classes Um tipo modela as características comuns de um conjunto de objetos e corresponde à

noção de tipos abstratos de dados. Uma classe é um conjunto de objetos que tem

exatamente a mesma estrutura interna, i.é, os mesmos atributos e mesmos métodos.

Os modelos de dados orientados a objetos usam o conceito de classe como uma base

para instanciação.

2.3.9. Herança É um mecanismo de reusabilidade muito poderoso. Com herança, uma classe chamada

uma subclasse pode ser definida com base na definição de outra classe chamada a

superclasse. A subclasse herda os atributos, métodos e mensagens de sua superclasse

e pode ter atributos específicos, métodos e mensagens adicionais.

Exemplo: Considere duas classes com informações sobre um conjunto de ônibus e

caminhões. As características das duas classes são mostradas na figura 2.1 cuja

notação gráfica utilizada representa cada classe por um retângulo dividido em 3

partes. A parte superior contém o nome da classe; a do meio contém os atributos e a

inferior contém os métodos definidos pelo usuário. Como as duas classes possuem

algumas características em comum, pode-se criar a classe Veículo para conter essas

características, como na figura 2.2. Somente as características próprias de cada

subclasse são mantidas na mesma.

17

Vantagens da utilização de hierarquias de classe:

- diminui a quantidade de código a ser escrito;

- propicia uma descrição mais precisa e concisa da realidade.

Em certos sistemas, uma classe pode ter várias superclasses, em cujo caso diz-se que

ocorre herança múltipla (fig.2.3), enquanto outros impõem a restrição de uma única

superclasse, dita herança simples.

Caminhão nro-placa:STRING modelo:STRING licença:NUMBER data_última_revisão:DATE valor_estimado:NUMBER próxima_revisão:DATE

Ônibus nro-placa:STRING modelo:STRING lugares:NUMBER data_última_revisão:DATE próxima_revisão:DATE

Fig.2.1

Veículo nro-placa:STRING modelo:STRING data_última_revisão:DATE próxima_revisão:DATE

Caminhão licença:NUMBER valor_estimado:NUMBER

Ônibus lugares:NUMBER

Fig. 2.2 - Hierarquia de herança

18

A herança múltipla pode provocar problemas de conflitos, como por exemplo, duas ou

mais superclasses podem ter um atributo com o mesmo nome, mas com diferentes

domínios. Esses conflitos precisam ser tratados pelo sistema. Se existe uma relação de

inclusão entre os domínios, então o domínio mais específico será escolhido como o

domínio para a subclasse. Por exemplo, se na classe Veículo existir o atributo

combustível cujo domínio é: (gasolina, álcool, diesel) e em Veículo_Passageiro

existir também o atributo combustível cujo domínio é (diesel), a classe Ônibus

herdará o atributo combustível cujo domínio será (diesel) (figura 2.4), isto é, o

domínio mais restrito. Se essa relação não existe, uma solução adotada é a escolha do

domínio com base na ordem de precedência entre as superclasses. Outros sistemas

deixam por conta do usuário a resolução do conflito.

Em um esquema de bd, as classes podem ser organizadas em uma hierarquia de

herança, formando um grafo acíclico dirigido.

Veículo nro-placa:STRING modelo:STRING data_última_revisão:DATE próxima_revisão:DATE

Caminhão licença:NUMBER valor_estimado:NUMBER

Ônibus lugares:NUMBER

Veículo_Passageiro rota: STRING preço:NUMBER horário_saída:NUMBER

Fig. 2.3 - Herança múltipla

19

2.3.10. Polimorfismo Os SGBDOOs oferecem o recurso de polimorfismo de operações, também conhecido

como sobrecarga de operador (overloading). Outros conceitos relacionados com o

polimorfismo são os de late binding (ligação tardia) e overriding (redefinição de

operação).

Para melhor expor esses conceitos, considere uma operação display que recebe um

objeto como entrada e apresenta o objeto na tela. Se o objeto for:

- uma imagem: deseja-se apresentar a imagem;

- uma pessoa: deseja-se apresentar os dados sobre a pessoa (nome, endereço, etc);

- um gráfico: deseja-se apresentar uma representação gráfica.

Usando um sistema convencional, seriam necessárias 3 operaçoes: display_pessoa,

display_figura e display_gráfico, como mostrado a seguir:

for x in X do begin case of type(x) pessoa: display_pessoa(x); figura: display_figura(x); gráfico: display_gráfico(x); end; end;

Veículo

nro-placa:STRING modelo:STRING data_última_revisão:DATE combustível:(gasolina, álcool,diesel) próxima_revisão:DATE

Ônibus lugares:NUMBER

Veículo_Passageiro rota: STRING preço:NUMBER horário_saída:NUMBER combustível:(diesel)

Fig. 2.4 - Herança múltipla

combustível:(diesel)

20

Em um sistema orientado a objetos, a operação display pode ser definida em uma

classe mais geral. A operação tem um único nome e pode ser chamada

indiscriminadamente por vários objetos. A implementação da operação é redefinida

para cada uma das subclasses. Essa redefinição é chamada overriding. O sistema

decide qual implementacão usar para execução. Assim, o código dado é simplificado

para:

for x in X do display(x)

A ligação do nome da operação com a correspondente implementação é realizada em

tempo de execução. Essa ligação retardada é dita late binding.

A sobrecarga (overloading) de operador refere-se ao uso do mesmo símbolo de

operador para denotar operações distintas sobre diferentes tipos de dados.

21

3. Modelagem de Dados Orientada a Objetos

3.1. Motivação A motivação mais imediata para a adoção dos princípios da orientação a

objetos para a modelagem de dados é que o mundo real pode ser visto como uma

variedade de objetos inter-relacionados.

Os objetos podem ser vistos em diferentes níveis de detalhe. Por exemplo, para

um observador, uma árvore pode ser vista como um objeto indivisível, sem levar em

consideração sua composição em folhas, troncos, raiz, etc. Outro observador pode

estar interessado em analisá-la com mais detalhe, por exemplo, considerando a cor,

textura e forma das folhas. Neste caso, as folhas são consideradas objetos que fazem

parte da composição do objeto árvore.

Essa maneira natural de ver a composição dos objetos deve ser conservada na

modelagem dos objetos e é o objetivo dos modelos de dados orientados a objetos,

fornecendo uma representação mais natural do mundo real.

Assim como na modelagem de dados convencional, a modelagem de dados

orientada a objetos aqui abordada será realizada em 2 fases:

1. Projeto conceitual:

Essa fase visa o projeto de um esquema conceitual que apresente uma abstração do

problema do mundo real. Uma diferença quando se trata de projeto conceitual do

banco de dados orientado a objetos é que, além da definição da estrutura dos objetos,

também são definidos os métodos que manipulam esses objetos. Assim, toda a

funcionalidade do sistema é definida juntamente com a estrutura dos objetos.

2. Projeto lógico: projeto de uma estrutura lógica, representando o esquema lógico

do banco de dados orientado a objetos, com base no esquema conceitual.

3.2. Desenvolvimento de Sistemas Orientados a Objetos O desenvolvimento de sistemas orientados a objetos usa uma abordagem

diferenciada daquela utilizada para o desenvolvimento de sistemas de informação

tradicionais.

22

Desenvolvimento de sistemas tradicionais:

O desenvolvimento de sistemas de informação nos moldes convencionais é

realizando com base na perspectiva dos dados e na dos processos.

Do ponto de vista da perspectiva dos dados, o desenvolvimento do sistema

envolve a modelagem E-R dos dados, a análise relacional, a geração do esquema

lógico e a implementação física do bd.

Sob a perspectiva dos processos, o desenvolvimento do sistema trata os

requisitos funcionais do sistema envolvendo a construção de DFDs (diagramas de

fluxos de dados), especificação das funções do sistema e dos módulos de programa.

Desenvolvimento orientado a objetos:

O desenvolvimento orientado a objetos usa o princípio de abstração de dados, aonde

as funcionalidades do sistema são associadas com os objetos (objetos encapsulam

dados e comportamento).

3.3. Modelando Objetos Na modelagem da estrutura dos objetos, dois tipos de hierarquias são

utilizadas: a hierarquia de agregação (relacionamento É-PARTE-DE) e a hierarquia de

generalização/especialização (relacionamento É-UM). No esquema lógico do banco de

dados o.o., hierarquia de agregação é estabelecida através de referências. A hierarquia

de generalização/especialização é estabelecida através de declarações próprias. A

seguir apresenta-se, através de exemplos usando uma linguagem de definição de

objetos fictícia, como é realizada a definição das classes e a definição de hierarquias

de generalização/especialização.

3.3.1. Definição de classe A definição de classe é uma especificação abstrata. Por exemplo: classe

Conta_Corrente com as propriedades: nro_conta, proprietário, saldo_corrente (veja

especificação abaixo). As propriedades podem ser definidas em termos de outras

classes: o proprietário de uma conta é uma instância de uma classe Cliente. As

propriedades de proprietário representam objetos inteiros, não valores de chaves ou

ponteiros.

23

class Conta_Corrente properties nro_conta: Integer; proprietário: Cliente; saldo_corrente: Money; operations deposito(quantia: Money); retirada(quantia: Money); end Conta_Corrente.

class Cliente properties nome: String; . . . operations . . . end Cliente

3.3.2. Herança Para especificar a hierarquia de classe e subclasse será utilizada a declaração

inherits. No exemplo a seguir tem-se que a classe Carro herda todas as propriedades e

operações da classe Veículo.

class Veículo properties nro_reg, marca, modelo: String; cor: String; milhas: Integer; tipo_combustível: (álcool, gasolina, dísel); ano: Integer; operations . . . end Veículo.

class Carro inherits Veículo properties tipo_combustível: (álcool, gasolina); {redefinido} {propriedades adicionais de carro} tamanho: (compacto, médio, grande); extras: set(String); end Carro.

24

3.4. Representação gráfica A seguir será apresentada uma notação gráfica para representação conceitual

de objetos, que tem como objetivo oferecer uma forma simplificada para a modelagem

de um banco de dados orientado a objetos. Várias notações existem na literatura, entre

elas a UML, que podem ser adotadas para essa fase do projeto do banco de dados o.o.

A adoção dessa notação visa simplicidade e utilização dos recursos dos construtores

tuple, list e set, que são bastante expressivos para uma variedade de aplicações de

bdoo.

3.4.1. Representação de uma classe de objetos

3.4.2. Representação de conjunto, lista e tupla

Exemplo:

Na figura 3.1 está representado que uma pessoa pode ter vários telefones, sendo que os mesmos devem ser armazenados segundo uma ordem. Essa ordem é definida de acordo com a semântica da aplicação; por exemplo, a lista de telefones pode estar representando a ordem de preferência a ser usado para se entrar em contato

nome da classe nome_método(param);...

atributo1 atributo2

. . . atributon

Conjunto (SET): Tupla (TUPLE): Lista (LIST):

Pessoa

nome endereço telefone filhos

ruabairro

Dependente

nome-rua número

nomesexo datanasc

Fig. 3.1

25

com a pessoa. Cada pessoa pode possuir vários filhos, que estão representados por um conjunto de objetos do tipo Dependente.

ATENÇÃO:

Quando um atributo possui tipo simples e envolve o construtor SET ou LIST, a

indicação desse construtor é inserida na seta de definição do atributo.

3.4.3. Herança simples

3.4.4. Herança múltipla

* : indica o atributo a ser herdado no caso de conflito.

nro-cliente débito

Pessoa

Cliente

nome endereço telefone

nro-cliente ender-comercial

Pessoa

Cliente- Casual

nome endereço telefone

renda limite-cred

Cliente-Frequente

Fig. 3.2 a e b - Herança Simples

a) uma só subclasse b) várias subclasses

Cliente nome endereço cpf

Funcionário

Cliente Interno débito

nome* nro-carteira-trab endereço* salário

Fig. 3.3- Herança Múltipla

26

3.4.5. Definição recursiva

3.4.6. representação de referências inversas

Quando a referência entre duas classes é nos dois sentidos, usa-se a notação da figura 3.5, aonde está representado que cada projeto possui um conjunto de empregados (através do atributo empregs) e cada empregado atua em um projeto.

3.5. Geração do Esquema Lógico Para a geração do esquema lógico será adotada a linguagem utilizada na seção

3.3, cuja forma geral é dada seguir:

class nome_da_classe inherits nome_superclasse1, . . ., nome_superclassej properties nome_atrib1: tipo; nome_atrib2: tipo; . . . nome_atribj: tipo; operations nome_método(parâmetros); ... ; end nome_da_classe A definição do tipo segue a seguinte regra de sintaxe: tipo :: = tipo-básico / nome-classe /tipos_inversos tuple (nome-atributo: tipo [, nome-atributo:tipo] ...) / set(tipo) /

Pessoa

nome endereço filhos

Fig. 3.4 - Definição Recursiva

• Projeto empregs proj

Empregado

Fig. 3.5 - referências inversas

27

list(tipo) tipo-básico :: = Integer / Real / String / Boolean / ... nome-classe : nome de uma classe existente (um identificador) nome-atributo : identificador tipos_inversos: nome_classe_inversa inverse is nome_classe_inversa. atrib_inverso/ set(nome_classe_inversa) inverse is nome_classe_inversa. atrib_inverso/ list(nome_classe_inversa) inverse is nome_classe_inversa. atrib_inverso/ Por convenção, nos esquemas conceitual e lógico, os nomes dos atributos são escritos com letras minúsculas e os nomes das classes iniciam com letra maiúscula. Exemplo : O esquema da figura 3.1 é expresso como:

class Pessoa

properties

nome : String;

endereço: tuple ( rua: tuple ( nome_rua: String, número: Integer),

bairro:String);

telefone: list (Integer);

filhos: set (Dependente);

end Pessoa

class Dependente

properties

nome: String;

sexo: String;

data_nasc: Date;

end Dependente

A especificação das classes da figura 3.5 é dada a seguir:

class Projeto properties empregs: set(Empregado) inverse is Empregado.proj; end Projeto;

28

class Empregado properties proj: Projeto inverse is Projeto.empregs; end Empregado;

3.6. Exemplo: Banco de Dados para Gerenciamento de Projetos

Suponha que deseja-se manter um banco de dados com informações sobre os projetos

desenvolvidos pelos grupos de pesquisa de uma instituição. As informações a serem

armazenadas referem-se aquelas sobre projetos, especificando as tarefas que compõem

cada projeto, os grupos de pesquisa que desenvolvem as tarefas do projeto, os

pesquisadores que fazem parte dos grupos e os documentos produzidos relativos aos

projetos. O esquema conceitual orientado a objetos desse banco de dados é mostrado

na figura 3.6, aonde se tem que:

- Um projeto pode ser organizado na forma de vários sub-projetos e a classe Projeto é

definida recursivamente em termos dela mesma.

- Um plano de trabalho, consistindo de várias tarefas, é associado a cada projeto.

- Cada tarefa é atribuída a um grupo de pesquisa que consiste de vários pesquisadores

e tem um coordenador. Note-se que o coordenador de uma tarefa não é

necessariamente o coordenador do grupo de pesquisa atribuído para a tarefa. Para cada

tarefa são identificadas as tarefas que a antecedem.

- Para cada projeto há vários documentos produzidos, que podem ser artigos

publicados em jornais ou conferências ( cujos autores são pesquisadores que

atuam no projeto), ou relatórios técnicos internos do projeto.

Os seguintes métodos devem ser definidos:

- Calcular_esforço, para a classe Tarefa, que calcula o esforço dedicado pelos

pesquisadores para desenvolvimento da tarefa, em termos do tempo dedicado.

29

- Associar_membro, para a classe Grupo, que insere um novo pesquisador num

determinado grupo de pesquisadores.

- Analisar_documento, que recupera documentos de uma determinada

classificação.

- Calcular_bônus, que calcula o valor total dos bônus recebidos pelos

pesquisadores.

A figura 3.6 mostra o esquema conceitual do banco de dados o.o. desse exemplo,

usando a notação dada. Para permitir uma comparação com a UML, uma versão desse

esquema, usando sua notação, é também fornecida na figura 3.10.

30

Fig.3.6 – Banco de Dados para Gerenciamento de Projetos

autor tipo_publ local_publ data_publ

Projeto

Documento analisar_doc(classif:String)

Relatório_ Técnico

Artigo

Tarefa calcular_esforço()

Pesquisador calcular_bonus()

Grupo associar_membro()

nome_ proj objetivo documento plano_trabalho sub_projeto

código_docnome classificação

tópicosinício_validade

fim_validadeevolução

data_início data_fim descrição_tarefa coordenador anos_homem participante precede

nome especialização salário bônus_produção

nome_grupo membro coordenador

31

3.7. Notação adotada X diagrama de classes UML UML (Universal Modeling Language) é uma linguagem de modelagem de objetos,

desenvolvida principalmente para projeto de software. Os diagramas de classes, que

fazem parte de UML, possuem alguma semelhança com os diagramas EER. Para

acompanhar a discussão a seguir, considere o esquema de banco de dados EER de

uma companhia, da figura 3.7, e sua representação na notação UML na figura 3.8

(apresentados no livro de Elmasri & Navathe, 2000). Os tipos de entidades da figura

3.7 são modelados como classes na figura 3.8. Na notação UML, uma classe é

representada por uma caixa com 3 seções: a do topo contém o nome da classe; a seção

do meio contém os atributos dos objetos da classe e a última seção contém as

operações que podem se aplicadas sobre esses objetos. Opcionalmente pode-se

especificar o domínio dos atributos (por exemplo: datanasc: date), como mostrado na

figura 3.8. Um atributo composto é modelado como um domínio estruturado, como

ilustrado pelo atributo Nome da classe Empregado. Um atributo multivalorado é

geralmente modelado como uma classe separada, conforme ilustrado pela classe

Localização.

Na terminologia UML, tipos de relacionamentos são chamados associações e

instâncias de relacionamentos são chamados links. Uma associação binária

(correspondendo a um tipo de relacionamento binário do modelo EER) é representada

através de uma linha conectando as classes participantes e podem opcionalmente Ter

um nome. Um atributo de relacionamento, chamado de atributo de ligação (link

attribute) é colocado em uma caixa que é conectada à linha da associação por uma

linha pontilhada. A notação (min, max) usada para especificar restrições de

relacionamento no modelo EER, é chamada de multiplicidade em UML.

Multiplicidades são representadas na forma min .. max, e o asterisco (*) indica que

não há limite máximo na participação. Note-se que as multiplicidades são colocadas

nos lados opostos do relacionamento quando comparadas à notação do modelo EER.

Em UML, um asterisco sozinho indica uma multiplicidade de 0..*, e 1 sozinho indica

uma multiplicidade de 1..1. Um relacionamento recursivo (relacionamento unário) é

chamado uma associação reflexiva em UML e os nomes dos papéis, da mesma forma

32

que as multiplicidades, são colocados nos lados opostos quando comparados ao

diagrama EER.

Em UML há dois tipos de relacionamentos: associação e agregação. Uma

agregação representa um relacionamento entre um objeto e suas partes componentes.

Na figura 3.8 as localizações de um departamento e a localização de um projeto foram

modelados como agregações. Associações e agregações não possuem propriedades

estruturais diferentes, elas diferem apenas no significado semântico. No modelo EER,

ambas são representadas como relacionamentos. Associações ou agregações

unidirecionais, em UML, são mostradas com uma seta para indicar que somente é

necessária uma direção para acessar os objetos. Instancias de relacionamento podem

ser especificadas como sendo ordenadas.

localização (1,n)

prim_nome

Supervisiona

sexo nroE

nome sobrenome

endereço salário

data nasc Empregado

Supervisiona

(0,n)

Departamento

nroD nome nro-empregados

(1,1) Trabalha

data-início

Gerência

Controla

Projeto

Dependente

Possui

Atua

horas

(0,1)

(0,n)

(1,n) (0,1)

(4,n)

(1,1)

(1,n)

(1,1)

(0,n)

(1,1)

é super- visionado

nome sexo

Data_nasc grau-parentesco

nro nome localização

Figura 3.7- Esquema EER - BD Companhia

33

As operações dadas em cada classe podem ser acompanhadas pelos parâmetros.

Entidades fracas podem ser modeladas usando o construtor chamado associação

qualificada (ou agregação qualificada). A chave parcial é colocada em uma caixa

anexada à classe proprietária.

1..1 1..*

Localização Nome

Empregado

nroE nome prim_nome sobrenome sexo: { M,F} endereço salário data_nasc: Date

idade muda-depto ...

Departamento

nroD nome

Adiciona-empr Nro-empregados Muda-gerente ...

Gerência Data_Inicio

Projeto Nome Nro Adiciona_empr Adiciona_projeto ...

Atua Horas

Nome Dependente

é supervisionado 1..* * 1..1

Dependente

Sexo: {M,F} Data nasc: Date Grau-parentesco

...

* 0..1 supervisiona

1..* controla

4..* Trabalha 1..1 1..1 0..1

0..*

0..*

Figura 3.8 – Diagrama de classes UML – BD Companhia

34

A notação UML para generalização/especialização é mostrada na figura 3.9. O

triângulo vazio indica cobertura exclusiva e o triângulo cheio indica cobertura de

sobreposição.

Na Figura 3.10 tem-se o BD Companhia modelado segundo a notação de objetos

considerada nesta apostila e a figura 3.11 mostra o BD de Projeto modelado segundo

a notação UML, usando a ferramenta Rational Rose.

Pessoa nro nome endereço RG

Empregado Salário

tipo cliente porcent-desconto

Cliente

Pessoa fisíca Pessoa Juridíca

CPF CGC

Figura 3.9 – Generalização/especialização em UML

35

grau_parentesco nome sexo data_nas

supervisor

nome nro localização

Empregado idade muda-depto ...

depto-trab • emprs nroD nome

gerente ger

data-início

projs depends

Dependente

...

Projeto adiciona-empr adiciona-proj

Departamento Adiciona-empr Nro-empregados Muda-gerente ...

prim_nome

sexo nroE

nome sobrenome

endereço salário data_nasc

atua horas proj

emps

Figura 3.10 – Esquema de Objetos - BD companhia

36

ClassName

attributes

operations()

1

0

0..10..*

1..*

*

Multiplicity

zero

one

zero or one

zero or moreone or moren

Class

Agregation

Association

Relatório_Técnicotópicos : stringinício_validade : datefim_validade : date

Documentocodigo_doc : intnome : stringclassificação : string

analisar_documento()

Projetonome_proj : stringobjetivo : string

0..1

0..*

+compõe0..1

+é_composto0..*

10..*

10..*

gera

Artigotipo_publ : stringlocal_publ : stringdata : date

Tarefadata_inicio : datedata_fim : datedescrição_tarefa : stringanos_homem : float

calcular_esforço()

1

1..*

1

1..*

possui

0..*

0..*

+é_precedida

0..*

+precede0..*

Gruponome_grupo : string

associar_membro()

1..*

1

1..*

1participa

Pesquisadornome : stringespecialização : stringsalário : floatbônus_produção : float

calcular_bônus()

0..*

1..*

0..*

1..*

escreve0..*

1

0..*

1

coordena

1..* 1..*1..* 1..*é membro

0..11

0..11

coordena

Legenda

Fig.3.11 - BD de Projeto- notação UML

37

3.8. Exercícios

1. Mapeie o esquema da figura 3.6 para a linguagem de especificação de objetos dada na seção 3.5. 2. Desenvolva o esquema conceitual orientado a objetos do problema do exercício 8

do capítulo 1 e faça o mapeamento para a linguagem de especificação de objetos dada.

3. Desenvolva o esquema conceitual orientado a objetos da aplicação a seguir,

referente ao cadastro imobiliário de uma cidade. Faça o mapeamento para a linguagem

de especificação de objetos dada.

Nessa aplicação estão envolvidas informações relativas a bairros, ruas,

quadras, segmentos de quadras e imóveis.

As informações a serem mantidas sobre cada bairro são: Nome do bairro,

delimitação (região que delimita o bairro) e composição (quadras que compõem o

bairro).

Sobre cada quadra, é necessário armazenar: código da quadra e composição

(imóveis que compõem a quadra).

Com relação às ruas, deve-se guardar o código da rua, nome, o início da rua

(ponto de coordenadas (x,y)) e a composição (segmentos de quadra que compõem a

rua).

Os segmentos de quadra devem possuir um código, número inicial, número

final e composição (uma seqüência ordenada de pontos (x,y)).

Quanto aos imóveis, as informações a serem mantidas são: código de

inscrição, proprietário (nome e categoria: particular, municipal,etc), localização (rua,

número, bairro).

No caso de haver construção no imóvel, deve-se guardar também informações

sobre: utilização (residencial, comercial,...) e delimitação da construção.

38

4. Deseja-se desenvolver um banco de dados que armazene informações sobre um

acervo de CDs e Livro. O banco de dados deve conter informações sobre os CDs,

como a nacionalidade, o tipo de CD, se musical ou multimídia, não permitindo para

um mesmo CD, ser de ambos os tipos. Se for CD de música, as informações

consistem no nome do CD, cantores e compositores, gênero, número de músicas e

tempo total gravado; caso seja multimídia, o tipo de software e a empresa responsável.

Para os Livros deseja-se informações como nome, autores, editora, gênero, edição e

encadernação. A base de dados também armazena informações sobre empréstimo de

CDs e Livros a pessoas físicas, armazenando o nome da pessoa, telefone, e-mail e a

data de empréstimo, permitindo assim, o controle do acervo.

Suponha que as seguintes atividades devem ser realizadas:

a) Dado um título (referente a um nome de Cd ou de Livro), recuperar:

- gênero e compositores, se for CD de música;

- empresa responsável, se for CD Multimídia; ou

- nomes dos autores, se for livro.

a) Dado o nome de um CD, recuperar nome e telefone da pessoa que emprestou o

CD.

b) Dado o nome de uma Pessoa Física, mostrar seu telefone e o nome dos CDs que

ela emprestou.

Faça um esquema conceitual e o esquema lógico correspondente.

39

4. Manipulando Objetos A manipulação de objetos é feita através de uma linguagem de consulta a

objetos. Uma linguagem de consulta oferece uma forma de recuperar informações do

banco de dados de uma maneira declarativa e formulada em alto nível. Muitos

Sistemas de Gerenciamento de Banco de Dados Orientados a Objetos utilizam uma

extensão da linguagem de consulta SQL (Structured Query Language), uma das mais

utilizadas para SGBDs relacionais, incorporando nesta mecanismos para manipulação

da estrutura complexa dos objetos.

A formulação de consultas podem ser feitas interativamente para recuperar

objetos do banco de dados ou podem ser embutidas em uma linguagem de

programação, na definição de métodos.

4.1. Características de Linguagens de Consulta OO (LCOO)

4.1.1. Hierarquias de Agregação No modelo relacional, para consultar informações envolvendo mais do que uma

tabela, usa-se a operação de junção sobre seus atributos chaves (primárias / estrangeiras).

Como exemplo, suponha as tabelas abaixo e, a seguir, uma consulta sobre essas

tabelas:

Projeto (codproj, nome_proj, objetivo, ...)

Tarefa (codtarefa, data-início, data-fim, ...,codproj, codpesq)

Pesquisador(codpesq, nome, especialização,salário)

Encontre todos os nomes de projetos que têm pelo menos uma tarefa possuindo, como

seu coordenador, um pesquisador especializado em banco de dados.

Essa consulta pode ser expressa em SQL como dado a seguir, aonde se nota a

utilização de dois predicados de junção :

SELECT DISTINCT Projeto.nome_proj FROM Projeto, Tarefa, Pesquisador WHERE Projeto.codproj = Tarefa.codproj and Tarefa.codpesq = Pesquisador.codpesq and Pesquisador.especialização = ‘BD’

40

Nas linguagens de consulta orientadas a objetos são utilizadas expressões de caminho

de modo que as junções sejam formuladas de forma mais direta, sendo referidas como

junções implícitas. Isso ocorre devido à forma em que os objetos são estruturados

envolvendo hierarquias de agregação, conforme mostrado na figura 4.1. Nessa figura,

o atributo de uma classe C1 tem como domínio uma classe C2 estabelecendo um

relacionamento de agregação entre as duas classes. C2, por sua vez, é definido em

termos da classe C3. Diz-se então que essas classes estão organizadas no esquema

através de uma hierarquia de agregação.

Isso implica em certas extensões à linguagem de consulta, para possibilitar a

navegação através da estrutura do objeto, com facilidade (tente imaginar, por

exemplo, como se pode expressar a consulta dada anteriormente, sobre o esquema da

figura 3.6, utilizando a junção implícita).

4.1.2. Hierarquia de Herança Numa hierarquia de herança, pode-se querer consultar só a classe raiz ou a classe e

todas as suas subclasses. É interessante que a linguagem de consulta ofereça as duas

possibilidades.

4.2. Consultando Objetos

4.2.1. Hierarquias de Agregação Numa hierarquia de agregação, a expressão de caminho pode envolver

referências simples ou multivaloradas. A seguir são apresentadas expressões de

consultas envolvendo essas duas formas de referência. A sintaxe apresentada baseia-se

em linguagens de consulta de gerenciadores existentes, mas não se refere exatamente à

sintaxe de um gerenciador específico.

Referências Simples

Com base na figura 4.1, a consulta:

C1 C2atrib_c1 atrib_c2 C3 atrib_c3

Fig. 4.1 - Hierarquia de agregação

41

“selecionar o valor do atributo atrib_c3 de um objeto x pertencente à classe

C1, que satisfaz uma certa condição”

pode ser expressa como:

Select x. atrib_c1. atrib_c2. atrib_c3

From x in C1

Where condição de seleção

Exemplo: Expressar a seguinte consulta no Banco de Dados de Projeto (figura 3.6):

“Selecionar o nome dos coordenadores das tarefas que iniciaram em 01/02/99”.

Select t.coordenador.nome

From t in Tarefa

Where t.data_início = '01/02/1999'

Referências Multivaloradas

Considere a figura 4.2 e a seguinte consulta:

“Selecionar os valores do atrib_c2 de um objeto x pertencente à classe C1, que

satisfaz uma certa condição”.

Como existe uma referência multivalorada de C1 para C2, é necessário percorrer

cada elemento do atributo atrib_c1 para recuperar o valor correspondente de

atrib_c2 desse elemento.

Select y.atrib_c2

From x in C1

y in x.atrib_c1

Where condição de seleção

atrib_c2 C1 C2atrib_c1

Fig. 4.2 - Uso de Referência Multivalorada

42

Exemplo: Na figura 3.6: Selecione o código e a classificação dos documentos

do Projeto "Projeto A".

Select d.código_doc, d.classificação

From p in Projeto

d in p.documento // documento é o nome do atributo e não da classe

Where p.nome_proj = "Projeto A"

4.2.2. Hierarquia de Herança A recuperação de informações de uma subclasse que foram herdadas de uma

superclasse, podem ser referenciadas como pertencente à subclasse. Exemplo: com

base na figura 3.5, pode-se formular a seguinte consulta: Selecione os nomes dos

artigos publicados em 20/05/99.

Select a.nome

From a in Artigo

Where a.data = "20/05/1999"

4.3. Definição de Métodos A seguir são apresentados os algorítmos de alguns métodos desenvolvidos para o

Banco de Dados da figura 4.3, que é uma simplificação do Banco de Dados de

Projeto. Alguns gerenciadores de banco de dados orientados a objetos possuem

uma linguagem de quarta geração, estilo C++, para a codificação dos métodos.

Opcionalmente permitem o uso de outras linguagens de programação, tais como

C++, C, Smalltalk, nas quais pode-se embutir comandos da linguagem de consulta

do gerenciador.

43

Alguns dos métodos definidos nas classes da figura 4.3 são dados a seguir, usando uma linguagem algorítmica.

1. Cadastrar um Projeto, sem documentos e com coordenador Método Cadastra_Projeto(nome_coord:String,codigo:Integer, obj:String, nome_projeto:String) da classe Projeto proj:Projeto; pesq:Pesquisador; { pesq=Busca_Pesq(nome_coord); proj.cod_proj=codigo; proj.objetivo=obj; proj.coordenador=pesq; proj.nome_proj=nome_projeto; Insira proj em Projeto; }

aut_princ tipo_publ local_publ data_publ

tópicosinício_validade

fim_validade

código_doc nome classificação

cod_proj objetivo documento coordenadornome_proj

Projeto Busca_Proj Cadastra_Projeto

Mostra_Documentos

Elimina_Proj

Documento Mostra

Relatório_ Técnico Cadastra_RT Mostra

Artigo Cadastra_Art Mostra

Pesquisador Busca_Pesq Cadastra_Pesq

Fig. 4.3 - BD de Projeto simplificado

nome especialização salário bônus_produção

44

2. Recuperar um Pesquisador, dado seu nome. Método Busca_Pesq(nome_pesq:String):Pesquisador da classe Pesquisador {Select pesq From pesq in Pesquisador Where pesq.nome=nome_pesq return(pesq); } 3. Recupera um projeto dado seu código. Método Busca_Proj(codigo_proj:Integer):Projeto da classe Projeto { Select proj From proj in Projeto Where proj.cod_proj=codigo_proj; return(proj); } 4. Mostrar os documentos (Relatório Técnico ou Artigo) de um projeto, dado seu código. Se Relatório Técnico, mostrar início e fim de validade e o nome. Se Artigo, mostrar tipo de publicação e nome do artigo. Método Mostra ( ) da classe Documento { } // não faz nada Método Mostra( ) da classe Relatório_Técnico // Mostrar início e fim de validade e nome do relatório técnico resultado: tupla(início_val:Date, fim_val:Date, nome_rel:String) {resultado.inicio_val = self.inicio_validade; resultado.fim_val = self.fim_validade; resultado.nome_rel = self.nome; display(resultado); }

45

Método Mostra( ) da classe Artigo //Mostrar tipo de publicação e nome do artigo resultado: tupla(tipo_pub:String, nome_art:String) {resultado.tipo_pub = self.tipo_publ; resultado.nome_art = self.nome; display(resultado); } Método Mostra_Documentos (cod_projeto:Integer) da classe Projeto

p:Projeto; { p=Busca_proj(cod_projeto); // recupera o projeto Para cada d de p.documento faça d.Mostra( ); // ativar o método mostra no documento d } 5. Eliminar um projeto de código dado (sem eliminar pesquisador e documento) Método Elimina_proj(cod_proj:Integer):Boolean da classe Projeto // sem eliminar um pesquisador e os documentos p:Projeto; { p=Busca_proj(cod_proj); // ou: selecione projeto p na classe Projeto onde p.cod_proj=cod_proj; Se achou então {Retira p de Projeto return(true)} senão return(false) } 6. Cadastrar um documento (pode ser relatório técnico ou artigo). Incluir esse documento no projeto que o gerou (é fornecido como entrada o código do projeto). Método Cadastra_RT (cod_doc:Integer, nome_doc:String, classific:String, tópicos:String; inicio_val, fim_val:Date, cod_proj:Integer) da classe Relatório_Técnico rt:Relatorio_Tecnico; proj:Projeto; { rt.codigo_doc=cod_doc; rt.nome=nome_doc; rt.classificacao=classific; rt.topicos=topicos;

46

rt.inici_validade=inicio_val; rt.fim_validade=fim_val; Insira rt em Relatorio_Tecnico; // Inserir o relatorio tecnico nos documentos do projeto dado proj=Busca_proj(cod_proj); Se proj≠nulo então Insira rt em proj.documento; }

4.4. Exercícios 1. Faça o método Cadastra_Artigo. Formule as consultas a seguir, com base no esquema da figura 3.6.

2. Recupere os documentos do projeto de nome “Projeto A”.

3. Supondo que os autores sejam modelados como uma lista de pesquisadores,

representando a ordem em que eles aparecem no artigo, formule a consulta:

a) Recupere o segundo autor do artigo cujo código é 520.

b) Recupere o nome do primeiro autor do artigo cujo código é 520

4.Recupere o nome dos coordenadores dos grupos que participam das tarefas que

iniciaram em 10/03/99.

5. Recupere o nome do coordenador de cada tarefa do projeto de nome “Projeto A”.

6. Recupere o nome do coordenador do grupo que participa de cada tarefa do projeto

de nome "Projeto A", bem como a descrição da respectiva tarefa.

Com base no esquema do Cadastro Imobiliário, expresse as consultas a seguir.

7. Recupere a localização de cada imóvel.

8. Recupere o bairro aonde está localizado o imóvel de código de inscrição 1000.

47

9. Recupere a composição do bairro aonde está localizado o imóvel de código de

inscrição 1000.

10. Para cada imóvel, selecione a composição do bairro em que ele está situado.

11. Para cada imóvel, selecione o código das quadras que compõem o bairro em que o

imóvel está situado.

12. Recupere os imóveis cuja área construida é maior que 200 m2.

13. Selecione o 70 segmento de quadra da rua de código ‘X’.

14. Formule uma consulta qualquer envolvendo 2 classes ou mais, e expresse-a na

linguagem de consulta adotada.

48

5. Sistemas de Gerenciamento de Banco de Dados Orientados a Objetos Neste capítulo resume-se as principais características dos SGBDs orientados a objetos

e apresenta-se alguns SGBDOOs existentes destacando, através de uma tabela, quais

dessas características cada um deles possui.

5.1. Características dos SGBDs Orientados a Objetos Os SGBDOOs são SGBDs baseados nos conceitos de modelos de dados orientados a

objetos. Diferentemente dos SGBDs Relacionais que foram desenvolvidos para dar

suporte às necessidades das aplicações comerciais tradicionais, os SGBDs orientados

a objetos foram desenvolvidos para satisfazer aos requisitos impostos por aplicações

mais avançadas, ditas não convencionais. Essas aplicações não convencionais

apresentam requisitos e características tais como:

- necessidade de estruturas complexas para representar objetos;

- necessidade de novos tipos de dados para armazenar informações, tais

como imagens, voz e documentos textuais grandes;

- requisitos de manipulação de dados não bem suportados pelos SGBDs

tradicionais.

Uma outra característica importante de bancos de dados orientados a objetos é a

possibilidade, que eles oferecem aos projetistas, de poder especificar a estrutura de

objetos complexos e as operações que podem ser aplicadas a esses objetos.

Identificador de Objeto (OID): a implementação de identidade de objeto em

sistemas de bdoo envolve 3 tipos de independência:

� Independência de local: a identidade do objeto é preservada quando ocorre

mudanças de localização física.

� Independência de valor: preservação da identidade independente do conteúdo.

49

�Independência de estrutura: preservação da identidade independente de mudanças

em sua estrutura.

Vantagens dos OIDs:

- facilidade para modelar a estrutura complexa dos objetos;

- propicia o compartilhamento de objetos;

- propagação de mudanças de valor de um objeto (através da referência)

- suporte ao relacionamento entre os objetos

- favorece o gerenciamento de versões

Atributos e Métodos Visíveis/Invisíveis : Alguns sistemas permitem o usuário

estabelecer quais atributos e métodos são visíveis (públicos) na interface do objeto

e podem ser invocados por outros objetos. Aqueles que não são visíveis são ditos

privados.

Instâncias Excepcionais: O sistema O2 permite a criação de instâncias de uma

classe com atributos e/ou métodos adicionais àqueles especificados para a classe.

Objeto Composto: Alguns sistemas (por ex. ORION) permitem aplicações

modelar um conjunto de objetos (ditos objetos componentes) como uma entidade

lógica. Isso significa que o sistema pode manipular esse conjunto de objetos como

uma unidade para bloqueio, autorização e clustering físico.

Gerenciamento de Versão:

O acesso a estados anteriores ou alternados de objetos é uma parte inerente de

muitas aplicações. Como exemplos de aplicações que exigem acesso à evolução

de estados de objetos estão as aplicações de projeto de engenharia por ex: desenho

auxiliado por computador e fabricação auxiliada por computador.

Nessas aplicações, o mesmo objeto passa por muitas alterações ou transições de

estado e é desejável acessar ou investigar estados prévios, ou versões, do objeto.

Por exemplo, considere os capítulos dessa apostila. Cada capítulo sofreu uma

50

evolução. Para alguns capítulos foram mantidas várias versões, que diferiam em

organização e conteúdo. Houve capítulo em que a versão final foi uma integração

de diversos componentes de versões anteriores. Foi muito útil manter-se as

versões anteriores e utilizar partes delas nas versões seguintes.

O gerenciamento de versões em um banco de dados orientado a objetos consiste

em ferramentas e construções que automatizam ou simplificam a construção e a

organização de versões ou configurações. Sem essas ferramentas, caberia ao

usuário organizar e manter as versões. Uma maneira de fazer isso seria utilizar

uma convenção de nome que controlasse as várias versões do mesmo objeto e a

relação entre as versões (árvore de derivação).Isso é muito trabalhoso e propenso a

erro. Assim, em aplicações de projeto complexas, o gerenciamento de versão é um

utilitário útil e poderoso.

Em aplicações de engenharia de projeto, os objetos de projeto são normalmente

armazenados em um repositório central (persistente). Os projetistas fazem o

check-out do objeto persistente no banco de dados, trabalham nele e, quando

acharem que possuem a melhor implementação, fazem o check-in do objeto como

uma versão diferente.

Depois que um objeto versionado é criado, a raiz de um conjunto de versões

contém todas as versões preexistentes de objetos. A principal propriedade comum

a todas as versões do mesmo objeto é a identidade do objeto. Por toda a história

versionada, um objeto pode passar por muitos estados e até por modificações

estruturais.

Em suma, a versões servem para registrar os vários estágios de um projeto, ou

para manter várias alternativas corretas do projeto. Cada alternativa correta pode

estar associada a um conjunto de versões, correspondendo aos vários estágio de

desenvolvimento daquela alternativa, para registrar a evolução do projeto,

conforme ilustrado na figura 5.1. Nessa figura tem-se que v2 e v3 são alternativas

de v1; v4 e v5 são alternativas de v2. Com exceção da versão inicial e da final,

cada versão possui sucessores e predecessores.

Algumas linguagens orientadas a objeto que suportam versionamento fornecem

construções na linguagem para:

- o check-out e o check-in deversões do objeto

51

- a recuperação de sucessores ou predecessores de versões.

Figura 5.1.- Conjunto de versões de O1

Gerenciamento de Transações

Tradicionalmente, uma transação é uma seqüência de ações que lê ou grava

objetos persistentes e satisfaz as propriedades ACID (atomicidade, consistência,

isolamento e durabilidade). Resumindo, atomicidade significa que a transação ou

é executada inteiramente ou não é executada. Consistência significa que as

transações mapeiam um banco de dados persistente de um estado coerente para

outro. Isolamento significa que as transações não lêem resultados intermediários

de outras transações não-efetivas. Durabilidade significa que, uma vez que uma

transação é efetivada, fica garantido que seus efeitos (i.é., atualizações) serão

suportados apesar das falhas.

Enquanto as transações em aplicações mais tradicionais são relativamente curtas,

recuperando e/ou atualizando poucos registros do banco de dados, as transações

de aplicações mais avançadas podem demorar horas e até mesmo dias.

Considere, por exemplo, a elaboração de um documento eletrônico em um

ambiente de escritório. Suponha quase trata de um documento que descreve o

plano diretor de 5 anos do departamento. Em certo sentido, a “transação” que cria

esse documento e que pode envolver muitos funcionários se completa quando o

documento é concluído.

V4

v7: versão final

v3

v6

v1: versão original

v2

v5

� versões alternativas

O1:

52

O documento passa por muitas fases intermediárias e sua preparação pode levar

dias. Esse tipo de transação apresenta alguns desafios e problemas relacionados às

estratégias de gerenciamento de transação mais tradicionais.

Diversos gerenciadores de banco de dados orientados a objetos oferecem algum

suporte para transações de longa duração. Por exemplo, o Versant e o ITASCA,

suportam a noção de transações de longa e de curta duração. A idéia é ter

transações curtas aninhadas dentro de transações demoradas. Quando o usuário

inicia uma transação de longa duração, ele pode fazer um check-out do objeto

complexo e seus subobjetos, do banco de dados concorrentemente compartilhado e

trabalhar nesses objetos em seu banco de dados pessoal. O usuário faz todas as

operações nos objetos e quando elas se completarem ele pode fazer o check –in

desses objetos.

Recuperação: um SGBD recuperável é aquele que pode alcançar um estado

consistente após uma falha. Recuperação em SGBDOO é mais complexa

principalmente devido à existência de transações de longa duração.

Gerenciamento de Dados Multimídia: Um SGBDOO que suporta dados

multimídia deve fornecer um sistema de armazenamento e recuperação de dados

mais eficiente.

5.2. Vantagens dos SGBDOOs

Possuem um poderoso modelo de dados.

Permitem representar a semântica do problema do mundo real de forma mais exata

do que através de um conjunto de tabelas planas.

Manipulam objetos complexos.

Objetos podem ser reusados em diferentes programas.

Herança de relacionamentos entre conjuntos de entidades.

Associam comportamento de objetos com definições de objeto ao nível de

esquema.

53

Junções implícitas ao longo de hierarquias de agregações, baseadas em identidade

de objetos.

Mecanismos de versões.

Melhor gerenciamento de transação e concorrência.

Linguagem de consulta mais expressiva.

Melhor suporte para trabalho cooperativo.

5.3. Alguns SGBDOOs Existentes

Há vários SGBDOOs em desenvolvimento por fabricantes, laboratórios de pesquisa,

universidades. Nos últimos anos, muitos protótipos experimentais e SGBDOOs

comerciais têm se tornado disponíveis. As tabelas 5.1 e 5.2 apresentam um resumo

das principais características de alguns SGBDOOs existentes. Esse levantamento foi

realizado em 1995. Desde então houveram mudanças em alguns desses gerenciadores.

Por exemplo, o sistema O2, atualmente chamado de Ardent e comercializado pela

Ardent Software, permite o uso de C++ e Java para definição de esquemas e

desenvolvimento de aplicações. O sistema ObjectStore permite integração com a

linguagem Java.

54

55

56

6. Padrões para SGBDOOs

O sucesso dos sistemas de banco de dados relacionais não resulta apenas de

um nível mais alto de independência de dados e um modelo de dados mais simples do

que os sistemas anteriores. Seu sucesso se deve também à padronização que sofreram.

A aceitação do padrão SQL permite o alto grau de portabilidade e

interoperabilidade entre sistemas, simplifica o aprendizado de novos SGBDs

relacionais e representa um amplo endosso da abordagem relacional. Portabilidade é

a capacidade de executar um programa de aplicação particular em diferentes sistemas

com modificações mínimas no programa. Interoperabilidade se refere à habilidade

de uma aplicação em acessar múltiplos sistemas distintos. Em termos de banco de

dados, isso significa que um mesmo programa de aplicação pode acessar alguns dados

armazenados segundo um certo SGBD e outros dados armazenados por um outro

SGBD.

Esses fatores são importantes também para SGBDs orientados a objetos. Na

indústria de software há vários grupos trabalhando sobre padrões que afetam os

SGBDOOs: o ODMG - Object Database Management Group (padrões gerais para

SGBDOOs), o OMG - Object Management Group (padrão CORBA – Commom

Object Request Broker Architecture, que permite que uma ampla variedade de objetos

interaja em um ambiente distribuído), ANSI X3H2 (SQL padrão), ANSI X3J16 (C++

padrão), ANSI X3J20 (Smalltalk padrão). Esses padrões visam a portabilidade de

código em alguma maneira.

Com relação a SGBD orientados a objetos, há três padrões: SQL-92, ODMG-

93 e SQL3. Os dois principais grupos que trabalham sobre padrões para SGBD são o

ODMG e o ANSI X3H2.

6.1. SQL3 ANSI X3H2 é um comitê técnico do American National Standards Institute

(ANSI), formado em 1978, para a definição de uma linguagem para bancos de dados

CODASYL ou redes. Em 1982, o modelo relacional estava adquirindo importância, o

que levou o comitê X3H2 a ser solicitado para desenvolver o padrão SQL. A versão

57

corrente da SQL é a SQL-92, que é a culminação de trabalhos sobre várias versões

anteriores. Ela é baseada na SQL-89, que por sua vez foi baseada na SQL-86.

SQL-92 é o padrão para SGBDs Relacionais. SQL-92 não introduz conceitos

de objetos. O comitê reconheceu a importância de adição de objetos à sua

especificação e tem trabalhado visando a definição da SQL3, que estende a SQL-92

para suportar objetos.

SQL3 mantém a compatibilidade com a SQL-92 (e versões anteriores do

padrão), o que interfere na forma de seu suporte a objetos. Estes, no modelo de

objetos da SQL3, são armazenados em tipos especiais de colunas em relações

particulares. Assim, objetos não são considerados “primeira classe” porque eles não

podem existir separadamente das relações, o que afeta operações tais como consultas.

Não é possível acessar um objeto diretamente em SQL3; é necessário fazê-lo através

da relação. Esse passo extra, de acesso a relação para poder recuperar o objeto, pode

afetar o desempenho da aplicação, conforme avaliado em (Barry 1996).

SQL3 difere do resto dos padrões industriais de objeto. É um sistema fechado,

definido somente em função de suas antecessoras. Ela não usa nenhum dos padrões do

OMG ou da comunidade de programação de objeto.

6.2. ODMG-93 ODMG (Object Database Management Group) é um consórcio de vendedores

e grupos de interesse que trabalham na criação de padrões para SGBDOOs. Ele foi

concebido em 1991 e a versão 1.0 da especificação do padrão ODMG-93 (também

chamado ODMG 1.0) foi publicada em agosto de1993. Em 1995 o grupo terminou a

versão 1.2 do padrão ODMG-93 e posteriormente foi revisado e chamado ODMG 2.0.

A linguagem de consulta a Objeto (OQL) do ODMG-93 é baseada na porção

de consulta da SQL-92, porém com algumas variações, pois a SQL-92 assume um

modelo relacional e a OQL assume um modelo de objeto.

A meta do ODMG é tornar disponível um conjunto de padrões permitindo que

um cliente de SGBDOO escreva aplicações portáveis, isto é, aplicações que possam

ser executadas por diferentes SGBDOOs. Assim, os esquemas de dados, ligações com

linguagens de programação; manipulação de dados e linguagens de consulta devem

ser portáveis.

58

Segundo Cattell, em (Cattell 1996), as companhias que são membro do

ODMG (Cattell é um dos membros do grupo), representando quase toda a indústria de

SGBDOO, estão suportando esse padrão. A meta não é a produção de SGBDOOs

idênticos, e sim, portabilidade de código fonte. Haverá diferenças entre produtos

relativas a desempenho, linguagens suportadas, funcionalidade única para segmentos

particulares do mercado, ferramentas de construção de aplicações, construtores de

interfaces de usuário gráficas (GUI), entre outros.

O trabalho de padronização, apresentado pelo grupo, é derivado,

principalmente, pela combinação das características mais fortes dos SGBDOOs

correntemente disponíveis.

O grupo define um SGBDOO como sendo um SGBD que integra capacidades

de banco de dados com capacidades de linguagem de programação orientada a

objetos. Um SGBDOO faz com que objetos do banco de dados apresentem-se como

objetos de linguagem de programação, em uma ou mais linguagens existentes. Os

SGBDOOs têm sido integrados com C++, C, Smalltalk e LISP.

Os principais componentes do OGMG-93 são:

- um Modelo de Objetos

- uma Linguagem de Definição de Objetos (ODL)

- uma Linguagem de Consulta a Objetos (OQL) declarativa (não procedural) para

consultar e atualizar objetos do banco de dados. Foi usado o padrão SQL como

base, porém OQL suporta capacidades mais poderosas. O grupo espera que SQL3

irá convergir com a OQL futuramente.

- Ligação com a linguagem C++. Isso inclui uma versão da ODL que usa a sintaxe

de C++, um mecanismo para invocar OQL e procedimentos para operações sobre

banco de dados e transações.

- Ligação com a linguagem Smalltalk e Java, com mesmos suportes acima para

C++.

Várias das idéias embutidas no modelo de objetos ODMG são baseadas em

duas décadas de pesquisa em modelagem conceitual e bancos de dados orientados a

objetos realizadas por muitos pesquisadores.

Várias companhias passaram a suportar esse padrão em seus produtos a partir final

de1995.

59

7. Bibliografia Barry, D.K. The Object Database Handbook. John Wiley & Sons, Inc. 1996. Bertino, E.; Martino, L. (1993). Object-Oriented Database Systems: Concepts and Architectures. Addison-Wesley, 1993. Blaha, M.; Premerli, W. Object-Oriented Modeling and Design for Database Applications. Prentice-Hall, 1998. Cattel, R.G.G. Object-Oriented and Extended Relational Database Systems. Addison-Wesley, 1994. Cattell, R.G.G. The Object Database Standard: ODMG-93 - Release 1.2, Morgan Kaufmann Publishers, inc., 1996. Elmasri, R.A.; Navathe, S.B. . Fundamentals of Database Systems. Addison-Wesley, 2000 (third edition). Hughes, J.G. Object-Oriented Databases. Prentice-Hall, 1991. Khoshafian, S. Banco de Dados Orientado a Objeto. Livraria e Editora Infobook S.A., 1994. Vieira, M.T.P. (1991) Um modelo de Objetos para um Sistema de Gerência de Objetos em Ambiente de Desenvolvimento de Sistemas Interativos. Tese de Doutorado, Departamento de Informática, PUC-RJ, 1991. Zand, M.; Collins, V.; Caviness, D. A Survey of Current Object-Oriented Databases. In: DATA BASE Advances in Information Systems, Vol.26, No. 1, February, 1995.