1 aula 8 orientação à objetos universidade do vale do rio dos sinos barbosa...

Post on 17-Apr-2015

113 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related