Modelo de Objetos ODMG
ODMG • Modelo de objetos • ODL • OQL
Modelo ODMG • Objetos • Identidade de objeto • Estado de objeto • Comportamento de objeto • Tipos de objeto • Definição de tipo de objeto • Tipos literais • Propriedade de Objeto • Herança • Herança : relacionamento de Super/Subtipo • Herança: relacionamento EXTENDS • Herança: Late binding
ODMG Objeto • Instância de tipo • Tem estado : valor de seu atributo • Tem identidade • Subtipo • Mutabilidade • instância de tipo “object”: mutável • Instância de tipo “literal”: imutável • Encapsula estado e comportamento • Semântica rica e integridade
ODMG Identidade de Objeto • OID • Mantida pelo sistema • Atribuição automática e imutável • Uso para associações entre objetos
ODMG Estado de objeto • Armazenado na atributo/propriedade do objeto • Objeto attribute • Tem nome e valor • Sem OID • Vinculado a um objeto com OID • podem ser keys ( mantidas pelo usuário)
ODMG Estado de objeto • Relacionamento • Associação entre entidades (objetos) • Descrito por até 2 nomes • o primeiro é o “caminho” do relacionamento • O segundo, opcional, é o caminho inverso • Não possui OID • existe sse sobre um objeto com OID
ODMG Comportamento de objeto • Coleção de operações oferecidas na interface • Operação tem • valores de parâmetros • Valores de retorno • Executa tratamento de exceção
ODMG Tipos de Objeto • Instâncias de objetos • Descrição da interface do objeto • Várias implementações possíveis • Representação ( conjunto de estruturas de dados) • métodos ( corpo de procedimentos) • UML ou ODL
ODMG Tipo de definição de objeto • interface do objeto • incompleta se operações não são definidas • Insuficiente para criar objeto • Classe de implentação • Definição completa • Pode ser instanciada
ODMG Tipo literal • ODMG tem tipos Simples e Estruturados • Simples • Integer • Float/ Real • Boolean • Char • String • Octet
ODMG Tipo literal • Estruturados : construídos sobre tipos literais. • Date • Time • Timestamp • Interval • Imutáveis • Novos tipos : type generator • Especifica apenas estado • não comportamento ( operações)
ODMG Propriedades de objeto • Noção de tipo • Supertipo • Extensão • Chave • Propriedade de instância • Attribute tem nome e tipo • Relashionship tem caminho e multiplicidade • Não tem nome, mas o caminho sim • OID do objeto associado
ODMG Propriedades de objeto • Operação de instância • Nome • Valor de retorno • Assinatura ( composição de tipos de parâmetros, tipo do retorno e exceções) • Semântica padrão definida pela implementação , senão, por fórmula
ODMG Herança • Particionamento de problema • Reutilização • 2 tipos • relacionamento de supertipo/subtipo ( herança de comportamento) • EXTENDS (comportamento e estado)
ODMG Herança • relacionamento de supertipo/subtipo • Subtipo • Um ou mais supertipos automatic. • Herda tudo ( operação, atributo, relacion.) • Pode haver redefinição ou adição de outras características • O objeto é uma instância de seus tipos e supertipos
ODMG Herança • relacionamento de supertipo/subtipo • Supertipo • Herança de Interface • Uma classe deve ser interface • Não deve ter subtipo
ODMG Herança • relacionamento de supertipo/subtipo • Supertipo • Herança de Interface • Uma classe deve ser interface • Não deve ter subtipo • Herança múltipla é possível • Mais de um supertipo
ODMG Relacionamento EXTENDS • Especializar uma classe • Reuso da interface e implementação • Herança múltipla aqui não é possível • Contudo pode haver mais de 1 supertipo
ODMG Late Binding • Operações podem ser sobrecarregadas • Mesmo nome, mesma assinatura com diferente implementação • Se esta operação usa relacionamento EXTENDS : implementação do tipo específico será selecionada em tempo de execução
ODMG Entidades Compostas • Outros tipos de objetos • Classe é tipo básico • Relacionamento só pode derivar de classe • Tipo: Coleção/ estruturas • Set • Bag • List • Array • Dictionary • Definidos por collection type generator
ODMG ODL • Object Definition Language • Equivale a CREATE TABLE no SQL • Definir classes persistentes • Objetos que permanecem armazenados • Definição é parte da linguagem OO host do BD
ODMG ODL • Declaração de classe • Nome da classe • Declaração opcional de chave ( key) • Declaração extent • Declaração de element • Attribute • Relationship • method
ODMG ODL – definição de classe class <nome> { <lista de declaração de elementos separados por vírgulas> }
ODMG ODL – definição de classe class Restaurante { attribute string nome; attribute string endereço; relationship Set<Prato> serve inverse Prato::servidoEm; } class Prato { attribute string nome; attribute string nacionalidade; relationship Set<Restaurante> servidoEm inverse Restaurante::serve; }
ODMG ODL- tipos de relacionamento • Classe : Restaurante • Set<Restaurante> : conecta este objeto com conjunto de objetos Prato • Bag<Restaurante>, List<Restaurante>, Array<Restaurante> : o object é conectado a bag,list, array de objetos Restaurante
ODMG ODL - relacionamentos • Sempre binários • Muitos-para-muitos • SET<> para o tipo de relacionamento e o seu “inverso” • Muitos-para-um • Set<> no relacionamento para classe-única e apenas a classe para a classe-“muitos” • Um-para-um • Tem classes no tipo em ambas direções
ODMG ODL - relacionamentos class Consumidor { relationship Set<Produto> compra inverse Produto::frequente; relationship Produto sempreCompra inverse Produto::favorito;} class Produto { relationship Set<Consumidor> frequente inverse Consumidor::compra; relationship Set<Consumidor> favorito inverse Consumidor::sempreCompra; } Muitos para muitos Um-para- muitos
ODMG ODL • Se há necessidade • criar uma classe de conexão • os objetos representam tuplas de objetos que se deseja conectar • Ex. Conectar classe Consumidor, Produto e Preço • Criar classe de conexão CPP • Considere que cada produto tem um preço em cada estabelecimento ( preço não é atributo de produto)
ODMG ODL - relacionamentos class CPP { attribute preço : real; relationship Restaurante oRest inverse Restaurante::comCPP; relationship Produto umProd inverse Produto::comCPP; } Será preciso alterar Restaurante e Produto para inlcuir relacionamentos comCPP e ambos do tipo SET(comCPP)
ODMG ODL- tipos complexos attribute [STRUCT] |[ENUM] <nome> { <declarações>} <nome do atributo> ;
ODMG ODL- tipos complexos • Class Restaurante { attribute string nome; attribute STRUCT end {string rua, string cidade, string uf} endereco; attribute ENUM lic {boate, nenhuma, bar} licença
ODMG ODL - subclasse • Equivalente à LPOO • Indicar superclasse com vírgula e nome • subclasse lista apenas suas propriedades • Herda as propriedades da superclasse • Ex. • class BarX : Restaurante {...}
ODMG ODL – declarar método • Tipo de retorno, se houver • Nome de método • Modo de argumentos e tipos (sem nome) • Modos : In / out / inout • Exceção, se houver • Ex. real fecharConta ( in string) raise (semProduto);
ODMG ODL – chaves • Key Class Restaurante ( key CNPJ, (telefone,IE)) { ... }
ODMG OQL • Object Query Language • Consulta no padrão OO • Usa ODL como esquema de definição • Tipos em OQL são os de ODL • Tipos SET e BAG seguem a regra das relações
ODMG OQL –Expressões de caminho • Seja x um objeto da classe C • Se a é um atributo de C então • x.a é o valor desse atributo 2. SE r é um relacionamento de C então • x.r é o valor para o qual x está conectado a r. • Resposta : pode ser objeto ou um conjunto de objetos, dependendo do tipo de r 3. SE m é um método de C ENTÃO • x.m(…) é resultado da aplicação de m em x.
ODMG OQL • Ex. Seja s uma variável do tipo CPP, objeto Produto-Consumidor-Preço • s.preço : preço no objeto s • s.restaurante.endereco
ODMG OQL • Computar relações como coleções SELECT <lista de valores> FROM <lista de coleções e nome para os membros> WHERE <condição> • Onde coleção pode ser : • Extent de qualquer classeExpressão avaliada de uma coleção
ODMG OQL
ODMG OQL • Object Query Language • Tenta trabalhar como SQL num contexto OO
Referências • SETZER- Projetos de BDOO • ELMARSI/ NAVATHE- Sistemas de BD • ULLMAN – Notas de aula • http://is.twi.tudelft.nl/~szivan/oodbs/tit.html • http://en.wikipedia.org/wiki/Object_Database_Management_Group