Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Aula 8 Orientação à Objetos
Universidade do Vale do Rio dos Sinos Aula 8 Orientação à Objetos < Página da Disciplina > <Endereço do Professor >
2
Sumário 1 – Introdução
3
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
4
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto
5
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk
6
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk 5 – C++
7
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk 5 – C++ 6 – Java
8
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk 5 – C++ 6 – Java 7 – Ada 95
9
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk 5 – C++ 6 – Java 7 – Ada 95 8 – Eiffel
10
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk 5 – C++ 6 – Java 7 – Ada 95 8 – Eiffel 9 – Implementação de Construções O. O.
11
Sumário 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
12
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
- Tipos Abstratos de Dados - Herança - Vinculação Dinâmica (polimorfismo)
13
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto
14
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto
15
Questões de Projeto - Exclusividade de objetos
Tudo são objetos ou não?
16
Questões de Projeto - Exclusividade de objetos
Tudo são objetos ou não? - Subclasse como subtipos Qual a compatibilidade entre classe-pai e subclase?
17
Questões de Projeto - 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?
18
Questões de Projeto - 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?
19
Questões de Projeto - 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?
20
Questões de Projeto - 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?
21
Código Dados Estáticos Heap Pilha
22
Código Dados Estáticos Heap Pilha Objetos Estáticos
23
Código Objetos Dados Estáticos Estáticos Objetos Heap Heap Dinâmicos
Pilha Objetos Estáticos Objetos Heap Dinâmicos
24
Código Objetos Dados Estáticos Estáticos Objetos Heap Heap Dinâmicos
Pilha Objetos Estáticos Objetos Heap Dinâmicos Objetos Stack Dinâmicos
25
Questões de Projeto - 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?
26
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – 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
27
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – 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ões 21 + 2 soma / cont (total – 3) * divisor
29
Exemplo – Iteração cont <- 1. soma <- 0. [cont <= 20]
whileTrue: [soma <- soma + cont. cont <- cont + 1]
30
Exemplo – Seleção total = 0 ifTrue: [media <- 0]
ifFalse: [media <- soma // total]
31
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk 5 – 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)
32
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk 5 – 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
33
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk 5 – C++ 6 – Java 7 – 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
34
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk 5 – C++ 6 – Java 7 – Ada 95 8 – 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
35
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk 5 – C++ 6 – Java 7 – Ada 95 8 – Eiffel 9 – Implementação de Construções O. O.
36
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk 5 – C++ 6 – Java 7 – Ada 95 8 – Eiffel 9 – 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)
37
Sumário 1 – Introdução 2 – Programação Orientada a Objeto
3 – Questões de Projeto 4 – Smalltalk 5 – C++ 6 – Java 7 – Ada 95 8 – Eiffel 9 – 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)
38
REGISTRO DE INSTÂNCIA DE CLASSE (RIC)
C++: Classe definidas como extensões de STRUCTs
39
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)
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)
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)
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)
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 EXEMPLO class Pequena { public int a,b,c; } class Grande extends Pequena public int d,e;
44
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 EXEMPLO a b c RIC de Pequena class Pequena { public int a,b,c; } class Grande extends Pequena public int d,e;
45
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 EXEMPLO a b c RIC de Pequena class Pequena { public int a,b,c; } class Grande extends Pequena public int d,e;
46
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 EXEMPLO a b c RIC de Pequena class Pequena { public int a,b,c; } class Grande extends Pequena public int d,e; a RIC de Grande b c d e
47
VINCULAÇÕES DINÂMICAS (POLIMORFISMO)
Métodos vinculados de forma estática não precisam tratamento especial
48
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)
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)
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)
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)
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
EXEMPLO class Pequena { public int a,b,c;
public void desenhar( ) {...} } class Grande extends Pequena public int d,e; public void examinar( ) {...}
54
EXEMPLO class Pequena a { public int a,b,c; b
public void desenhar( ) {...} } class Grande extends Pequena public int d,e; public void examinar( ) {...} a b c VMT
55
EXEMPLO class Pequena a { public int a,b,c; b
public void desenhar( ) {...} } class Grande extends Pequena public int d,e; public void examinar( ) {...} a b c desenhar( ) VMT VMT de Pequena
56
EXEMPLO class Pequena a { public int a,b,c; b
public void desenhar( ) {...} } class Grande extends Pequena public int d,e; public void examinar( ) {...} a b c desenhar( ) VMT VMT de Pequena a b c VMT d e
57
EXEMPLO class Pequena a { public int a,b,c; b
public void desenhar( ) {...} } class Grande extends Pequena public int d,e; public void examinar( ) {...} a b c desenhar( ) VMT VMT de Pequena a b c desenhar( ) VMT d examinar( ) e VMT de Grande
58
EXEMPLO CHAMADA POLIMÓRFICA objeto.desenhar( ); class Pequena a {
public int a,b,c; public void desenhar( ) {...} } class Grande extends Pequena public int d,e; public void examinar( ) {...} a b c desenhar( ) VMT VMT de Pequena a b c desenhar( ) VMT d examinar( ) e VMT de Grande CHAMADA POLIMÓRFICA objeto.desenhar( );
59
EXEMPLO CHAMADA POLIMÓRFICA objeto.desenhar( ); class Pequena a {
public int a,b,c; public void desenhar( ) {...} } class Grande extends Pequena public int d,e; public void examinar( ) {...} a b c desenhar( ) VMT VMT de Pequena a b c desenhar( ) VMT Instância de Pequena d examinar( ) e VMT de Grande CHAMADA POLIMÓRFICA objeto.desenhar( );
60
EXEMPLO CHAMADA POLIMÓRFICA objeto.desenhar( ); class Pequena {
public int a,b,c; public void desenhar( ) {...} } class Grande extends Pequena public int d,e; public void examinar( ) {...} a b c desenhar( ) VMT VMT de Pequena a b c desenhar( ) VMT d Instância de Grande examinar( ) e VMT de Grande CHAMADA POLIMÓRFICA objeto.desenhar( );
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.