A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Aula 8 Orientação à Objetos

Apresentações semelhantes


Apresentação em tema: "Aula 8 Orientação à Objetos"— Transcrição da apresentação:

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( );


Carregar ppt "Aula 8 Orientação à Objetos"

Apresentações semelhantes


Anúncios Google