��������� ������ �
��������������
��������������������������
��������� ������
��������������������������
� Novas áreas de aplicação� Envolvem dados complexos, designados objectos� Envolvem operações complexas sobre esses objectos
� Bases de dados relacionais� Para suportar o conceito de objecto obrigam a uma decomposição pouco
natural, de forma a que os objectos possam ser armazenados em tabelas� Um objecto complexo, normalmente, tem uma estrutura hierárquica que
não se coaduna a uma representação do tipo tuplo� Os objectos complexos quando suportados por bases de dados
relacionais, provocam um grave problema de desempenho dada a sua reconstrução só ser possível pela junção de tabelas
� As linguagens de programação não fornecem as facilidades necessárias para o processamento eficiente de grandes volumes de dados – os dados na memória central só existem durante a execução do programa
� As linguagens de programação OO incorporam mecanismos para representação e manipulação de dados complexos.
��������� ������ �
��������������������������
� O modelo Object-Oriented de bases de dados combina conceitos provenientes de três áreas:
� Linguagens de Programação Object-oriented – objectos, classes, métodos, encapsulamento, etc
� Bases de Dados – segurança, integridade, controlo da concorrência, etc
� Modelos de Dados Semânticos – generalização, agregação, etc
� Ainda que inspiradas nas LPOO (smaltalk, C++) as BDOO fornecem facilidades para representação de dados complexos.� Os objectos das LPOO apenas existem durante a execução do programa – são
objectos transientes;� os objectos das BDOO existem para além do programa que os criou – são objectos
persistentes.
��������� ������ �
��������������������������
� Características das Bases de Dados Object-OrientedA tecnologia das BD’s Orientadas a Objectos tem em conjunto os conceitos das BD’s e o conceito da programação orientada a objectos.
e é esta combinação de conceitos que dá às BDOO as vantagens de tratarem dados complexos.
��������� ������ �
��������������������������
Abordagem tradicional Abordagem object-oriented
��������� ������
��������������������������
� Orientação ao objecto, o que significa?� Construção de sistemas a partir de colecções cooperativas de objectos� Os objectos cooperam (comunicam) passando mensagens às quais os
outros objectos reagem� Os objectos estão organizados em classes, que são membros de uma
hierarquia de classes unidas através de relações de herança� As classes têm comportamento idêntico, mas objectos da mesma classe
podem guardar informação diferente
� Princípios básicos� Uma boa análise e modelização são aspectos essenciais no
desenvolvimento de software, seja qual for o paradigma usado, ou seja, antes de começar a escrever programas temos que decidir sobre o que escrever
� No paradigma object-oriented, grande parte do trabalho consiste em decidir quais são os objectos do sistema. O analista tem de decidir:� Como dividir o sistema num conjunto de objectos interactuantes, ou seja, quais as
classes que permitem resolver o sistema� Qual o comportamento de cada objecto deve ter� Qual a interface que cada objecto deve ter� Como é que os objectos se relacionam com outros objectos
��������� ������ �
��������������������������
� Object-oriented� (analysis) Análise “object-oriented”� (design) Modelização “object-oriented”� (programming) Programação “object-oriented”
� Object-oriented analysis� Identificação do problema a resolver.� Quais são os requisitos do sistema?� Quais são os objectos (classes) necessários e quais são
as suas responsabilidades?� Como interagem uns com os outros?� Identificar quando usar herança e quando usar composição
na definição das classes
��������� ������ �
��������������������������
� Object-oriented design� Refinamento das classes identificadas na fase de análise� Especificação dos atributos e métodos de cada classe� Decidir que estruturas de dados e algoritmos usar
� Object-oriented programming� Um objecto é uma instância de uma classe� Tudo são objectos� Um programa é um conjunto de objectos dizendo uns aos
outros o que fazer através do envio de mensagens� Todos os objectos de uma classe em particular podem
receber as mesmas mensagens
��������� ������ �
��������������������������
� Modelo Object-oriented – Conceitos básicos� Classe� Objecto� Atributo� Operação� Método
� Modelo Object-oriented - Elementos� Abstracção� Encapsulamento� Modularidade� Hierarquia
��������� ������ ��
����������� ��������������������������
� Classe� Estrutura lógica que representa um conjunto de objectos que
partilham a mesma estrutura e o mesmo comportamento� Objecto
� Instância de uma classe, mantendo a mesma estrutura de dados e de operações, mas contendo valores de dados próprios
� Atributo� Valor de um item de informação guardado pelos objectos de uma
classe� Operação
� Função ou transformação que pode ser aplicada aos objectos, ou por estes a outros objectos
� Método� Implementação de uma operação para uma classe
��������� ������ ��
��!������� ��������������������������
� Abstracção� A abstracção denota as características
essenciais de um objecto que o distinguem de todos ou outros tipos de objectos e desta forma constitui fronteiras conceptuais bem definidas, relativamente à perspectiva do observador
� Incide sobre a visão externa do objecto, e desta forma permite separar o comportamento essencial de um objecto da sua implementação
� Os sistemas são naturalmente complexos, e por isso:� Agregamos as coisas que têm algo em comum
que seja significante, ignorando diferenças triviais� Como decidimos abstrair vai depender daquilo
que consideramos ser significante
��������� ������ �
��!������� ��������������������������
� Encapsulamento� Encapsulamento significa a inclusão de algo dentro de
algo, de tal forma que aquilo que foi incluído não évisível
� No contexto object-oriented, encapsulamento significa a inclusão dentro de um objecto, de todos os recursos necessários para o objecto funcionar (dados e métodos)
� Os objectos publicam as suas interfaces, e os outros objectos fazem uso dessas interfaces sem se preocuparem como o objecto as implementa
� A idéia base é: “Não quero saber como fazes, faz!”� O encapsulamento permite:
� Esconder todos os detalhes (e implementação) que não contribuam para as características essenciais de uma classe
� Separar a interface de uma abstracção da sua implementação
� Pode mudar-se a implementação sem alterar a interface� Quem usa o objecto não necessita de saber detalhes sobre
a implementação
��������� ������ ��
��!������� ��������������������������
� Modularidade� É a propriedade de um sistema que foi decomposto num conjunto de
módulos coesos (agrupando abstracções logicamente relacionadas) e fracamente agrupados (minimizando a dependência entre módulos)
Exemplo:� Em C/C++ a convenção é criar dois ficheiros para cada classe. Um header file (sufixo
.h) para a interface da classe e um ficheiro de implementação (sufixo .c, .cp, …) para o código da classe
� Em C++ as dependências entre ficheiros são “declaradas” usando a macro #include.
// gplan.h#ifndef _GPLAN_H#define _GPLAN_H 1#include “gtypes.h”#include “except.h”#include “actions.h”class GrowingPlan …class GrainGrowingPlan ……#endif
��������� ������ ��
��!������� ��������������������������
� Hierarquia� Mecanismo para expressar a similaridade entre classes, simplificando a
definição de classes iguais a outras que já foram definidas (reutilização de código). É uma forma de organizar as abstracções (classes)
� As hierarquias mais importantes num sistema são a estrutura das classes (hierarquia ‘is a’) e a estrutura através de agregação (hierarquia ‘part of’)
� generalização/especialização � ‘is a’� À medida que formamos a hierarquia das classes
colocamos os estados e comportamento comuns ao nível das classes superiores.
� As classes de topo são mais genéricas (abstractas) e as classes de níveis inferiores são mais específicas (concretas)
� Normalmente apenas instanciamos as classes do nível inferior
� agregação � ‘part of’� Os objectos seriam demasiado extensos se não fosse possível agregá-los.� Por exemplo, um objecto da classe Grafo naturalmente que contém uma Lista de nós.
Sem a possibilidade de agregação a classe Lista teria de ser duplicada no grafo
��������� ������ ��
����������"����!�������# ������$$
� Identidade� Um objecto distingue-se dos outros pelo simples facto de existir� A sua identidade é independente dos valores dos seus atributos. Podemos
ter dois objectos idênticos, com todos os atributos iguais, que mesmo assim são dois objectos independentes
� Ao alocarmos dois objectos na memória do computador, embora possam ter todos os atributos iguais, os seus endereços de memória são diferentes
� Herança� Representa generalização e especialização� Torna explícitos os atributos e métodos comuns numa hierarquia de classes� Corresponde à transferência de propriedades estruturais e de
comportamento, de uma classe para as suas subclasses� Mensagem
� São a forma mais usada para a activação de métodos� Polimorfismo
� Capacidade de uma mesma mensagem ser entendida e executada de forma diferente por objectos distintos
� Também permite manipular objectos mais especializados como se fossem mais genéricos. Por exemplo, se a mensagem está definida numa especialização de uma classe, por herança estará definida na generalização
��������� ������ �
%�����"���&'����������&'��������������� 1ºEtapa – Identificação e descrição dos objectos
� Pessoas, lugares ou coisas� São os objectos mais fáceis de observar pois são físicos. Mesmo se
forem entidades abstractas, pelo próprio estudo do processo de negócio são facilmente detectados
� Exemplo: pessoa, carro, disciplina, país, …� Momentos ou intervalos
� São eventos que ocorrem no processo real e que devem ser registados� Exemplo: uma venda, um depósito, …
� Papéis� As pessoas, lugares ou coisas participam nos eventos desempenhando
algum tipo de papel específico� Exemplo: pessoa participa numa venda como vendedor ou comprador…
� Descrições� Quando algo possui uma descrição razoavelmente constante, essa
descrição pode ficar desagregada do objecto real e ser reutilizada por outros objectos
� Exemplo: um carro pode ter uma descrição geral (nºde portas, potência, etc.) que pode ser reutilizada por diversos carros do mesmo modelo
��������� ������ ��
����(�������������!���&'��������������
� Uma vez identificados os objectos há a necessidade de decidir quais os que vão ser incluídos no modelo de objectos.
� Codd e Yourdon sugeriram os seguintes critérios:� Necessidade de recordar alguma coisa
� Para o objecto Disciplina, o sistema tem de recordar atributos como o nome, nºde créditos, precedências, etc.
� Métodos necessários� Para o objecto Disciplina, o sistema esperará manter informação sobre o
regente num determinado ano lectivo� Mais do que um atributo
� Se um objecto candidato só tem um atributo, verificar se há a possibilidade de ter mais, ou então tentar integrá-lo noutro objecto
� Atributos comuns� Haverá um conjunto de atributos que se aplicam a cada ocorrência do
objecto?� Se alguns dos atributos só se aplicam a algumas ocorrências, isso
indicia a existência de uma hierarquia
��������� ������ ��
���������������������
� A um objecto estão associados:� Um conjunto de atributos que contêm a informação sobre o objecto� Um conjunto de mensagens às quais o objecto responde� Um conjunto de métodos, cada um consistindo em código que implementa
uma mensagem; um método devolve um valor como resposta a uma mensagem
� A representação física de um objecto só está visível a quem implementou
� As mensagens (e respostas) são a única interface possível com o objecto
� Os métodos são programas com as seguintes características� Só se podem usar (directamente) variáveis do próprio objecto� Dados de outros objectos só podem ser acedidos pelo envio de mensagens� Podem ser read-only ou permitir actualizações
� Levado ao extremo, cada atributo tem de ser representado por umavariável (que guarda o valor) e dois métodos (um para ler o valor, e outro para o alterar)
��������� ������ ��
%�����"���������������������
� Os identificadores dos objectos (OID) surgem da necessidade de distinguir os objectos entre si, quaisquer que sejam as suas características
� Cada objecto recebe, na altura da instanciação, um OID único e gerado pelo sistema
� Cada objecto tem apenas um OID, e o seu valor não seráreutilizado mesmo quando o objecto correspondente for eliminado do sistema
� No modelo OO, as referências entre objectos fazem-se utilizando os seus OID, pelo que é possível fazer qualquer alteração aos seus atributos, incluindo aqueles que conceptualmente são considerados chave
� Apesar disso, o conceito de chave pode continuar a desempenhar um papel importante ao nível da interface com os utilizadores, contudo, ao nível da base de dados OO esses atributos não têm qualquer estatuto especial
��������� ������ �
��)�����$�����������$�������2ª ETAPA – Identificação dos relacionamentos
LIGAÇÕES E ASSOCIAÇÕES – são meios para estabelecer relacionamentos entre objectos e classes
ligação opcional – 0-1
ligação obrigatória
ligação opcional – 0 – muitos
ligação obrigatória – 1- muitos
��������� ������ �
��)�����$�����������$�������� GENERALIZAÇÃO
Uma das características dos modelos de dados orientados a objectos é a que explicita as relações classe-subclasses.Generalização é o relacionamento entre uma classe e uma ou mais versões refinadas dela.A classe que estiver em processo de refinamento é chamada de super-classe e cada versão refinada é denominada de sub-classe.
A generalização hierárquica é um agrupamento hierárquico de objectos que têm em comum os mesmos atributos e métodos.
A generalização pode ser exaustiva O ou não exaustiva O
��������� ������
��)�����$�����������$�������� Exemplo
Generalização hierárquica simples, exaustiva e exclusiva
EMPLOYEE
HOURLY SALARIED CONSULTANT
��������� ������ �
��)�����$�����������$�������� HERANÇA
Significa que todas as propriedades (atributos e métodos) de uma classe de objectos se repercutem nas suas sub-classes.
Employee No.Name
AddressDate Hired
Date of Birth
Contract No.*Date Hired
Annual SalaryStock Option
Hourly Rate
EMPLOYEE
Hourly SALARIED CONSULTANT
CalculateAge
CalculateMonthlyWageAllocateToContractCalculateStockBenefit
��������� ������ �
��)�����$�����������$�������� Os atributos de EMPLOYEE aplicam-se a todas as três sub-classes.� Do mesmo modo o método de cálculo da idade – CalculateAge – se aplica atodos os
empregados – EMPLOYEE.� Propriedades únicas por cada sub-classe são assignadas a essa sub-classe.� Se um atributo se aplica a mais de uma sub-classe, mas não a todas, é assinalado na sub-
classe em que não se aplica com um * (ex., Date Hired)� No exemplo as sub-classes eram exclusivas (estrutura OR) . Mas podem não ser.
Estrutura AND
��������� ������ �
��)�����$�����������$�������� Outra situação é o facto das sub-classes não serem exaustivas, isto é, há outras
sub-classes não identificadas.
por exemplo, falta a sub-classe BICICLETA
VEÍCULO
AUTOMÓVEL AUTOCARRO MOTOCICLO