Post on 17-Apr-2015
1
Aula 8Aula 8Orientação àOrientação à
ObjetosObjetos
Universidade do Vale do Rio dos Sinos
< Página da Disciplina >
www.inf.unisinos.br/~barbosawww.inf.unisinos.br/~barbosa
<Endereço do Professor >
barbosa@exatas.unisinos.brbarbosa@exatas.unisinos.br
2
1 – Introdução
SumárioSumário
3
1 – Introdução2 – Programação Orientada a Objeto
SumárioSumário
4
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto
SumárioSumário
5
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk
SumárioSumário
6
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk5 – C++
SumárioSumário
7
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk5 – C++6 – Java
SumárioSumário
8
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk5 – C++6 – Java7 – Ada 95
SumárioSumário
9
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk5 – C++6 – Java7 – Ada 958 – Eiffel
SumárioSumário
10
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk5 – C++6 – Java7 – Ada 958 – Eiffel9 – Implementação de Construções O. O.
SumárioSumário
11
1 – Introdução - O que é uma plataforma O. O.? - Pura x Híbrida - O. O. imperativa - O. O. lógica - O. O. funcional - O. O. multiparadigma - Oz / Mozart
SumárioSumário
12
1 – Introdução2 – Programação Orientada a Objeto - Tipos Abstratos de Dados - Herança - Vinculação Dinâmica (polimorfismo)
SumárioSumário
13
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto
SumárioSumário
14
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto
SumárioSumário
15
- Exclusividade de objetos Tudo são objetos ou não?
Questões de ProjetoQuestões de Projeto
16
- Exclusividade de objetos Tudo são objetos ou não?- Subclasse como subtipos Qual a compatibilidade entre classe-pai e subclase?
Questões de ProjetoQuestões de Projeto
17
- Exclusividade de objetos Tudo são objetos ou não?- Subclasse como subtipos Qual a compatibilidade entre classe-pai e subclase?- Herança de interface x de Implementação Uma subclasse acessa interface ou implementação?
Questões de ProjetoQuestões de Projeto
18
- Exclusividade de objetos Tudo são objetos ou não?- Subclasse como subtipos Qual a compatibilidade entre classe-pai e subclase?- Herança de interface x de Implementação Uma subclasse acessa interface ou implementação?- Polimorfismo x Verificação de tipos Quando verificar tipos de variáveis polimórficas?
Questões de ProjetoQuestões de Projeto
19
- Exclusividade de objetos Tudo são objetos ou não?- Subclasse como subtipos Qual a compatibilidade entre classe-pai e subclase?- Herança de interface x de Implementação Uma subclasse acessa interface ou implementação?- Polimorfismo x Verificação de tipos Quando verificar tipos de variáveis polimórficas?- Herança simples x Herança múltipla Vale a pena suportar herança múltipla?
Questões de ProjetoQuestões de Projeto
20
- Exclusividade de objetos Tudo são objetos ou não?- Subclasse como subtipos Qual a compatibilidade entre classe-pai e subclase?- Herança de interface x de Implementação Uma subclasse acessa interface ou implementação?- Polimorfismo x Verificação de tipos Quando verificar tipos de variáveis polimórficas?- Herança simples x Herança múltipla Vale a pena suportar herança múltipla?- Alocação e desalocação de objetos Onde alocar os objetos?
Questões de ProjetoQuestões de Projeto
21
Código
DadosEstáticos
Heap
Pilha
22
Código
DadosEstáticos
Heap
Pilha
Objetos Estáticos
23
Código
DadosEstáticos
Heap
Pilha
Objetos Estáticos
Objetos Heap Dinâmicos
24
Código
DadosEstáticos
Heap
Pilha
Objetos Estáticos
Objetos Stack Dinâmicos
Objetos Heap Dinâmicos
25
- Exclusividade de objetos Tudo são objetos ou não?- Subclasse como subtipos Qual a compatibilidade entre classe-pai e subclase?- Herança de interface x de Implementação Uma subclasse acessa interface ou implementação?- Polimorfismo x Verificação de tipos Quando verificar tipos de variáveis polimórficas?- Herança simples x Herança múltipla Vale a pena suportar herança múltipla?- Alocação e desalocação de objetos Onde alocar os objetos?- Vinculação estática x Vinculação dinâmica Todas as vinculações são dinâmicas?
Questões de ProjetoQuestões de Projeto
26
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk - Todos os objetos alocados no Heap - Objetos acessados por variáveis de referência - Desalocação implícita (garbage collection) - Somente herança simples - Todas subclasses são subtipos - Toda herança é de implementação - Erros de tipos detectados durante execução - Busca da pureza total
SumárioSumário
27
SumárioSumário1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk - Todos os objetos alocados no Heap - Objetos acessados por variáveis de referência - Desalocação implícita (garbage collection) - Somente herança simples - Todas subclasses são subtipos - Toda herança é de implementação - Erros de tipos detectados durante execução - Busca da pureza total
28
Exemplos - ExpressõesExemplos - Expressões
21 + 2
soma / cont
(total – 3) * divisor
29
cont <- 1.soma <- 0.[cont <= 20] whileTrue: [soma <- soma + cont. cont <- cont + 1]
Exemplo – IteraçãoExemplo – Iteração
30
Exemplo – SeleçãoExemplo – Seleção
total = 0 ifTrue: [media <- 0] ifFalse: [media <- soma // total]
31
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk5 – C++ - Busca da compatibilidade retrógrada com C - Objetos estáticos, stack-dinâmicos e heap-dinâmicos - Desalocação explícita: Operador delete - Classe pode ser independente (sem superclasse) - Operador de resolução de escopo (operador ::) - Herança múltipla (operador de escopo) - Compatibilidade de variável polimórfica (pai – filhos) - Polimorfismo explícito (palavra VIRTUAL) - Comparação de desempenho (C++ dez vezes mais rápido do que Smalltalk)
SumárioSumário
32
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk5 – C++6 – Java - Todas as classes devem ter pai (classe raiz OBJECT) - Todos os objetos são heap dinâmicos explícitos - Desalocação implícita - Suporta somente herança simples - Método FINAL - Todas as chamadas são vinculadas dinamicamente
SumárioSumário
33
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk5 – C++6 – Java7 – Ada 95 - Não existe chamada de construtores e destrutores - Vinculação dinâmica forçada através tipo especial de classe (classe ampla) - Suporta herança múltipla
SumárioSumário
34
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk5 – C++6 – Java7 – Ada 958 – Eiffel - Linguagem O. O. pura (segundo Sebesta) - Todos os objetos alocados no heap - Operador CLONE (Java/ Eiffel / Holo, etc) - Desalocação implícita - Herança múltipla - Todas as vinculações são dinâmicas
SumárioSumário
35
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk5 – C++6 – Java7 – Ada 958 – Eiffel9 – Implementação de Construções O. O.
SumárioSumário
36
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk5 – C++6 – Java7 – Ada 958 – Eiffel9 – Implementação de Construções O. O. 1) Estruturas para Armazenamento de Variáveis de Instância 2) Vinculações dinâmicas de mensagens e métodos (polimorfismo)
SumárioSumário
37
1 – Introdução2 – Programação Orientada a Objeto3 – Questões de Projeto4 – Smalltalk5 – C++6 – Java7 – Ada 958 – Eiffel9 – Implementação de Construções O. O. 1) Estruturas para Armazenamento de Variáveis de Instância 2) Vinculações dinâmicas de mensagens e métodos (polimorfismo)
SumárioSumário
38
REGISTRO DE INSTÂNCIA DE CLASSE (RIC)REGISTRO DE INSTÂNCIA DE CLASSE (RIC)
• C++: Classe definidas como extensões de STRUCTs
39
REGISTRO DE INSTÂNCIA DE CLASSE (RIC)REGISTRO DE INSTÂNCIA DE CLASSE (RIC)
• C++: Classe definidas como extensões de STRUCTs• Estrutura da RIC é estática
40
REGISTRO DE INSTÂNCIA DE CLASSE (RIC)REGISTRO DE INSTÂNCIA DE CLASSE (RIC)
• C++: Classe definidas como extensões de STRUCTs• Estrutura da RIC é estática• Usada como modelo para criação de instâncias de classes
41
REGISTRO DE INSTÂNCIA DE CLASSE (RIC)REGISTRO DE INSTÂNCIA DE CLASSE (RIC)
• C++: Classe definidas como extensões de STRUCTs• Estrutura da RIC é estática• Usada como modelo para criação de instâncias de classes• Subclasses extendem o RIC da classe-pai
42
REGISTRO DE INSTÂNCIA DE CLASSE (RIC)REGISTRO DE INSTÂNCIA DE CLASSE (RIC)
• C++: Classe definidas como extensões de STRUCTs• Estrutura da RIC é estática• Usada como modelo para criação de instâncias de classes• Subclasses extendem o RIC da classe-pai• Estrutura estática permite acesso usando OFFSETs
43
REGISTRO DE INSTÂNCIA DE CLASSE (RIC)REGISTRO DE INSTÂNCIA DE CLASSE (RIC)
• C++: Classe definidas como extensões de STRUCTs• Estrutura da RIC é estática• Usada como modelo para criação de instâncias de classes• Subclasses extendem o RIC da classe-pai• Estrutura estática permite acesso usando OFFSETs
EXEMPLOEXEMPLOclass Pequena{ public int a,b,c;}class Grande extends Pequena{ public int d,e;}
44
REGISTRO DE INSTÂNCIA DE CLASSE (RIC)REGISTRO DE INSTÂNCIA DE CLASSE (RIC)
• C++: Classe definidas como extensões de STRUCTs• Estrutura da RIC é estática• Usada como modelo para criação de instâncias de classes• Subclasses extendem o RIC da classe-pai• Estrutura estática permite acesso usando OFFSETs
EXEMPLOEXEMPLOclass Pequena{ public int a,b,c;}class Grande extends Pequena{ public int d,e;}
abc
RICde
Pequena
45
REGISTRO DE INSTÂNCIA DE CLASSE (RIC)REGISTRO DE INSTÂNCIA DE CLASSE (RIC)
• C++: Classe definidas como extensões de STRUCTs• Estrutura da RIC é estática• Usada como modelo para criação de instâncias de classes• Subclasses extendem o RIC da classe-pai• Estrutura estática permite acesso usando OFFSETs
EXEMPLOEXEMPLOclass Pequena{ public int a,b,c;}class Grande extends Pequena{ public int d,e;}
abc
RICde
Pequena
46
REGISTRO DE INSTÂNCIA DE CLASSE (RIC)REGISTRO DE INSTÂNCIA DE CLASSE (RIC)
• C++: Classe definidas como extensões de STRUCTs• Estrutura da RIC é estática• Usada como modelo para criação de instâncias de classes• Subclasses extendem o RIC da classe-pai• Estrutura estática permite acesso usando OFFSETs
EXEMPLOEXEMPLOclass Pequena{ public int a,b,c;}class Grande extends Pequena{ public int d,e;}
abc
abcde
RICde
Grande
RICde
Pequena
47
VINCULAÇÕES DINÂMICAS (POLIMORFISMO)VINCULAÇÕES DINÂMICAS (POLIMORFISMO)
• Métodos vinculados de forma estática não precisam tratamento especial
48
VINCULAÇÕES DINÂMICAS (POLIMORFISMO)VINCULAÇÕES DINÂMICAS (POLIMORFISMO)
• Métodos vinculados de forma estática não precisam tratamento especial• Métodos vinculados de forma dinâmica devem ser tratados usando a RIC
49
VINCULAÇÕES DINÂMICAS (POLIMORFISMO)VINCULAÇÕES DINÂMICAS (POLIMORFISMO)
• Métodos vinculados de forma estática não precisam tratamento especial• Métodos vinculados de forma dinâmica devem ser tratados usando a RIC• Colocar ponteiros para métodos virtuais no RIC?
50
VINCULAÇÕES DINÂMICAS (POLIMORFISMO)VINCULAÇÕES DINÂMICAS (POLIMORFISMO)
• Métodos vinculados de forma estática não precisam tratamento especial• Métodos vinculados de forma dinâmica devem ser tratados usando a RIC• Colocar ponteiros para métodos virtuais no RIC?• Métodos vinculados dinamicamente a um objeto serão sempre os mesmos -> Apenas uma estrutura
51
VINCULAÇÕES DINÂMICAS (POLIMORFISMO)VINCULAÇÕES DINÂMICAS (POLIMORFISMO)
• Métodos vinculados de forma estática não precisam tratamento especial• Métodos vinculados de forma dinâmica devem ser tratados usando a RIC• Colocar ponteiros para métodos virtuais no RIC?• Métodos vinculados dinamicamente a um objeto serão sempre os mesmos -> Apenas uma estrutura• Tabela de Métodos Virtuais (VMT)
52
VINCULAÇÕES DINÂMICAS (POLIMORFISMO)VINCULAÇÕES DINÂMICAS (POLIMORFISMO)
• Métodos vinculados de forma estática não precisam tratamento especial• Métodos vinculados de forma dinâmica devem ser tratados usando a RIC• Colocar ponteiros para métodos virtuais no RIC?• Métodos vinculados dinamicamente a um objeto serão sempre os mesmos -> Apenas uma estrutura• Tabela de Métodos Virtuais (VMT)• Variável polimórfica referencia objeto correto
53
EXEMPLOEXEMPLO
class Pequena{ public int a,b,c; public void desenhar( ) {...}}
class Grande extends Pequena{ public int d,e; public void desenhar( ) {...} public void examinar( ) {...}}
54
EXEMPLOEXEMPLO
class Pequena{ public int a,b,c; public void desenhar( ) {...}}
class Grande extends Pequena{ public int d,e; public void desenhar( ) {...} public void examinar( ) {...}}
abc
VMT
55
EXEMPLOEXEMPLO
class Pequena{ public int a,b,c; public void desenhar( ) {...}}
class Grande extends Pequena{ public int d,e; public void desenhar( ) {...} public void examinar( ) {...}}
abc
VMT desenhar( )
VMTde
Pequena
56
EXEMPLOEXEMPLO
class Pequena{ public int a,b,c; public void desenhar( ) {...}}
class Grande extends Pequena{ public int d,e; public void desenhar( ) {...} public void examinar( ) {...}}
abc
abc
de
VMT desenhar( )
VMT
VMTde
Pequena
57
EXEMPLOEXEMPLO
class Pequena{ public int a,b,c; public void desenhar( ) {...}}
class Grande extends Pequena{ public int d,e; public void desenhar( ) {...} public void examinar( ) {...}}
abc
abc
de
VMT desenhar( )
desenhar( )VMT
examinar( )
VMTde
Pequena
VMTde
Grande
58
EXEMPLOEXEMPLO
class Pequena{ public int a,b,c; public void desenhar( ) {...}}
class Grande extends Pequena{ public int d,e; public void desenhar( ) {...} public void examinar( ) {...}}
abc
abc
de
VMT desenhar( )
desenhar( )VMT
examinar( )
VMTde
Pequena
VMTde
Grande
CHAMADA POLIMÓRFICACHAMADA POLIMÓRFICA
objeto.desenhar( );
59
EXEMPLOEXEMPLO
class Pequena{ public int a,b,c; public void desenhar( ) {...}}
class Grande extends Pequena{ public int d,e; public void desenhar( ) {...} public void examinar( ) {...}}
abc
abc
de
VMT desenhar( )
desenhar( )VMT
examinar( )
VMTde
Pequena
VMTde
Grande
CHAMADA POLIMÓRFICACHAMADA POLIMÓRFICA
objeto.desenhar( );
Instânciade
Pequena
60
EXEMPLOEXEMPLO
class Pequena{ public int a,b,c; public void desenhar( ) {...}}
class Grande extends Pequena{ public int d,e; public void desenhar( ) {...} public void examinar( ) {...}}
abc
abc
de
VMT desenhar( )
desenhar( )VMT
examinar( )
VMTde
Pequena
VMTde
Grande
CHAMADA POLIMÓRFICACHAMADA POLIMÓRFICA
objeto.desenhar( );
Instânciade
Grande