Paradigma de Orientação a Objetos: Fundamentos
Paradigma de Orientação a Objetos: Fundamentos
[Link] [Link]/~juliano
Agenda
Visão geral do paradigma orientado a objetos
ִOrigens e aplicações: Linguagens; BD; IA; ...
Princípios do paradigma
ִObjeto; encapsulação; interface; herança; ...
Representação de conceitos com o paradigma
ִClassificação; composição; associação; ...
Mecanismos essenciais do paradigma
ִHerança e Polimorfismo
ִSuporte para persistência, concorrência e distribuição
Desenvolvimento de software OO
ִCiclo de vida e métodos OO
1
O Paradigma de Orientação a Objetos
Origens do Paradigma OO
2
Origens do Paradigma OO
Origens do Paradigma OO
3
Aplicações de Orientação a Objetos
Linguagens de Programação
ִSimula, Smalltalk, Ada, Eiffel, C++, Java
O POO é utilizado como base das principais
construções dessas linguagens
CASE e Ambientes de Desenvolvimento
ִVisual Basic, Delphi, Rose, Poseidon
Usam o POO como base para modelagem e
implementação de software
4
Aplicações de Orientação a Objetos
SGBD OO
ִO2, GemStone, Versant, ObjectStore, Ontos,
Itasca, Matisse, Objectivity, Poet, Caché
SGBD Objeto-Relacional
ִPostgreSQL, Oracle (>v8), Illustra
Em breve todos os grandes SGBD relacionais se
tornarão objeto-relacionais
O modelo de dados OO é a base desses SGBD
5
Aplicações de Orientação a Objetos
10
Engenharia de Software
ִUML, RUP, Java, Use Cases, Component Based
Design, Agentes Inteligentes, Business Modeling,
Design Patterns, Frameworks, ...
ִTodos os principais processos, métodos, técnicas
e ferramentas que têm sido propostos e adotados
na Engenharia de Software seguem o POO
11
6
Fundamentos do Paradigma OO
12
Definição de Objeto
É uma representação de um conceito existente
em um determinado Contexto de Modelagem
ִUm objeto pode representar um conceito
Concreto:
• um carro é uma entidade que tem cor, ano, marca, modelo,
proprietário, ...
Abstrato:
• um projeto é uma entidade que envolve cronograma, equipe,
líder, objetivos, orçamento, ...
13
7
Propriedades de Objeto
Características de Objeto
8
Estado de Objeto
16
Identidade de Objeto
9
Encapsulação de Objeto
19
10
Interface e Operações de Objeto
11
Implementação de Objeto
23
12
Níveis de Encapsulação
Linha de código: nível 0
ִAusência de encapsulação
Módulo ou subrotina: nível 1
ִum termo para se referir a um grupo de linhas
Objeto: nível 2
ִdados e funções agrupados em um único conceito
Pacote: nível 3
ִgrupo de classes de um mesmo nível de abstração
classes não necessariamente interagem
Componente ou framework: nível 4
ִclasses de diversos níveis interagem para compor uma
solução reutilizável para um certo domínio de problema 24
Protocolo de Comunicação OO
13
Execução da Comunicação entre Objetos
Interface
Operação(parâmetros) Interface
Implementação Implementação
Cliente Resposta
Servidor
26
Iniciativa de Comunicação OO
27
14
Mecanismo de Resposta
28
Categorias de Mensagens
15
Comunicações Complexas
Interface Operação(parâmetros)
30
Delegação de funções
ִredirecionamento de responsabilidades
Distribuição de objetos
ִtransparência de localização = ODP
Concorrência inter e intra objetos
ִobjetos e sistemas de objetos multi-thread
sincronismo embutido no intercâmbio de mensagens
Suporte a tempo-real
ִmecanismo de prioridade de mensagens 31
16
O Conceito de Abstração
Abstração: [Aurélio, 1998] S. f.
Ato de separar um ou mais elementos de uma
totalidade complexa (coisa, representação, fato), os
quais só mentalmente podem subsistir fora dessa
totalidade
Uma abstração permite capturar um determinado
aspecto existente em uma realidade, eliminando
detalhes irrelevantes
Cada tipo de abstração representa fielmente o seu
aspecto alvo, de acordo com um significado predefinido
• Exemplo: a taxonomia é uma abstração que permite identificar
propriedades que caracterizam um certo conjunto de conceitos
32
Abstrações do paradigma OO
17
Classificação
Instanciação
Cria instâncias distintas a partir de uma classe
ִInstâncias são objetos e possuem todas as
propriedades de sua classe
Ex: Folha de São Paulo é uma instância da classe
Jornal
• compartilha todas as propriedades da classe Jornal com os
demais objetos desta classe
• define um estado particular (valores) para essas propriedades
ִUma instância é o resultado da aplicação da
abstração de instanciação sobre uma Classe de
Objetos
é uma maneira de criar objetos, mas não a única
maneira 35
18
Criação de Instâncias via Classe
36
37
19
Identificação
Associação
Estabelece uma correlação entre conceitos
ִEx.: o objeto OPopular, da classe Jornal, está
associado ao objeto Gráfica J.Câmara, da classe
Editora
ִObjetos específicos são abstraídos, permanecendo
a associação entre as Classes de Objetos
envolvidos
Ex.: todo objeto da classe Jornal deve estar associado a
um objeto da classe Editora
• Diferença entre Ligação e Associação
39
20
Composição
40
Objetos Complexos
41
21
Agregação
42
Especialização
43
22
Generalização
44
Estrutura de um Sistema OO
23
Classe de Objetos
ִMecanismo para reutilização de
implementação
as propriedades (estrutura e comportamento)
de objetos de uma classe são definidas uma
única vez, na classe, e não para cada objeto
ִClasse é fábrica e armazém de objetos
Classes podem ser consideradas meta-objetos
• Atributos de classe: quantidade de instâncias, ...
• Métodos de classe: criação de instância, ...
• Em sistemas OO “puros”, a classe é um objeto
46
Superclasse e Subclasse
A especialização/generalização origina um
relacionamento do tipo É-Um entre classes
ִMecanismo para reutilização de projeto
a subclasse reutiliza as soluções da superclasse
ִMecanismo para estruturação do sistema
Hierarquia de especialização
• a especialização não pode ser recursiva
• Super e Subclasse não são definições absolutas, mas papéis de
uma classe numa especialização
• Um objeto é instância de sua classe e membro de todas as suas
superclasses
47
24
Herança
É um mecanismo de reutilização
ִUm “cliente de herança” reutiliza (herda)
definições de um “servidor de herança”
Não deve ser confundida com Especialização!
ִHá várias taxonomias de herança
quanto à escolha das propriedades a reutilizar
quanto ao número de servidores
quanto ao tipo de servidor
quanto ao momento em que a reutilização pode ocorrer
48
25
Herança Simples ou Múltipla
Define o número de servidores diretos da herança
ִNa Herança Simples um único servidor é a fonte direta das
propriedades a serem reutilizadas
pode haver servidores indiretos na hierarquia de
generalização
ִNa Herança Múltipla muitos servidores contribuem com
propriedades que o cliente reutiliza
Pode gerar conflito de nomes
• resolução pelo sistema (regra default)
• resolução pelo projetista (escolha explícita)
50
26
Herança Estática ou Dinâmica
52
27
Questões sobre Herança
Herança viola encapsulação!
ִCliente não deve usar o conhecimento herdado
ִAcesso via interface do servidor da herança
Evolução de Esquema é potencialmente perigosa!
ִEsta evolução não é herança dinâmica (a mudança de
comportamento não decorre da interação entre objetos)
ִMudança em servidor de herança é propagada para todos
os clientes
Pode afetar a compatibilidade das substituições, mesmo que o
cliente da herança respeite a encapsulação
54
Mecanismos de reutilização
ִClassificados quanto
ao momento de definição: estático ou dinâmico
ao tipo de declaração: implícito ou explícito
ao cliente do mecanismo: objeto ou grupo de objetos
ִAbordagem Template: Classe e Herança
objetos são criados pela fôrma da classe da qual reutilizam
(estaticamente) as definições de propriedades, as quais podem ser
redefinidas (implicitamente) via subclasse (cliente da reutilização é
o grupo de objetos)
ִAbordagem Empatia: Protótipo e Delegação
objetos são criados à imagem de um objeto protótipo. e reutilizam
(dinamicamente) propriedades pela delegação (explícita) de tarefas
(cliente da reutilização é cada objeto)
55
28
Polimorfismo
Polimorfismo em Sistemas OO
57
29
Polimorfismo Intra Objeto: falso polimorfismo
58
Polimorfismo e Herança
Polimorfismo permite redefinição de
comportamento herdado
ִisto contribui para a flexibilidade e adaptabilidade
um novo objeto pode ser introduzido para realizar todo
o comportamento do objeto existente (por herança),
adaptando partes desse comportamento a uma nova
realidade (por polimorfismo)
ִtanto o comportamento antigo quanto o novo
podem conviver simultaneamente no Sistema OO
59
30
Polimorfismo e Herança de Classe
60
31
Suporte de Tempo de Execução OO
Nomeação e persistência de objetos
ִOID, indexação, estruturas de armazenamento, cluster de
objeto, acesso ao “dicionário de objetos”
Concorrência e criação dinâmica
ִsincronização de comunicações, coleta de lixo, mensagens
prioritárias (tempo real), polimorfismo (ligação dinâmica),
transações, tratamento de exceções
Distribuição e replicação
ִtransparência de localização, controle de versões e
réplicas, evolução de esquema, recuperação de falhas
62
Persistência de Objetos
63
32
SGBD OO
ִPrecisam oferecer todos os serviços de SGBD
tradicionais
transações, persistência, distribuição, recuperação de falhas, ...
ִPrecisariam prover todos os mecanismos de tempo de
execução OO, mas ainda não o fazem com eficiência
nomeação de objetos distribuída, evolução de esquema, ...
ִDificuldades adicionais
ausência de modelo de dados e linguagem padronizadas
(ODMG/OQL é uma proposta)
ausência de diretivas de projeto (“normalização” OO)
64
Ambiente de Desenvolvimento OO
ִPrecisariam oferecer todas as facilidades dos CASE
tradicionais
gerência de configuração, referências cruzadas, ...
ִPrecisariam prover suporte para métodos de projeto OO,
mas se limitam ao suporte à programação OO
o ambiente deveria guiar o desenvolvedor no processo de
estruturação do software OO: escolha de objetos, interfaces, ...
ִDificuldades adicionais
selecionar elementos para reutilização em bases de objetos que
evoluem constantemente
propagação de atualizações nas bases de reutilização
65
33
Teoria e Prática de Desenvolvimento OO
66
34
Processo de Desenvolvimento OO
Um sistema OO
ִnão é um conjunto de funções!
ִum conjunto de objetos interagindo em uma
arquitetura cliente/servidor
Análise e Projeto de alto nível determinam
ִserviços oferecidos e protocolo de comunicação
Projeto detalhado inclui
ִespecificação de estruturas e algoritmos
68
Processo de Desenvolvimento OO
69
35
Conseqüências da Abordagem OO
Reutilização em Desenvolvimento OO
71
36
Fatoração no Desenvolvimento OO
72
Desenvolvimento OO é a Solução?
73
37
Projeto OO
ִEnfoque bottom-up
detalha as propriedades de cada objeto
ִEnfoque top-down
estrutura: composição, associação e especialização
comunicação: interações em serviços complexos
ִFase inicial do projeto
identificar classes que modelam a realidade
distribuir o comportamento entre as classes
determinar colaborações entre componentes
74
Projeto OO
Refinamento
ִfatorar e estruturar propriedades
hierarquias de herança
ִdeterminar protocolos de comunicação
consolidar interfaces de classes e componentes
ִidentificar classes Concretas e Abstratas
• Classe abstrata não é instanciada, mas especializada
– define atributos e métodos básicos (herança)
– mecanismo de especificação de outras classes
• Classe concreta é instanciada em objetos
– reutilização por instanciação, não por herança 75
38
Frameworks Orientados a Objetos
76
77
39
Conclusões
78
Bibliografia
Object-Oriented Concepts, Databases, and Applications.
Editado por Won Kim e Frederick Lochovsky. Addison-
Wesley, 1989.
Communications of the ACM - Special issue on Object-
Oriented Paradigm. Vol.33, num.9, set/90.
Engenharia de Software. Roger S. Pressman. Ed. McGraw-
Hill, terceira edição, 1995.
Análise Baseada em Objetos. Peter Coad e Edward Yourdon.
Ed. Campus, segunda edição, 1991.
Design Patterns for Object-Oriented Software Development.
Wolfgang Pree. Addison-Wesley, 1994.
Object-Oriented Database Systems – Concepts and
Architectures. Elisa Bertino e Lorenzo Martino. Addison-
Wesley, 1993.
79
40
Bibliografia
Object-Oriented Software Construction. Bertrand Meyer.
Prentice-Hall, 1997, segunda edição.
Object-Oriented Modeling and Design for Database
Applications. Michael Blaha e William Premerlani. Prentice-
Hall, 1998.
Análise e Projeto Orientados a Objetos – Estudos de Caso.
Edward Yourdon e Carl Argila. Makron Books, 1999.
UML Destilled – Applying the Standard Object Modeling
Language. Martin Fowler e Kendall Scott. Addison-Wesley,
1997.
The Unified Modeling Language User Guide. Grady Booch,
James Rumbaugh e Ivar Jacobson. Addison-Wesley, 1999.
Design Patterns – Elements of Reusable Object-Oriented
Software. Erich Gamma et al. Addison-Wesley, 1995.
80
41