53
Suporte ` aPrograma¸c˜ ao Orientada a Objetos Suporte ` aPrograma¸c˜ ao Orientada a Objetos Cap´ ıtulo 12 - Livro do Sebesta Helio Henrique L. C. Monte-Alto Disciplina: Paradigma de Programa¸c˜ ao Imperativa e Orientada a Objetos 2012

Suporte à Programação Orientada a Objetos

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Suporte a Programacao Orientada a ObjetosCapıtulo 12 - Livro do Sebesta

Helio Henrique L. C. Monte-AltoDisciplina: Paradigma de Programacao Imperativa e Orientada

a Objetos

2012

Page 2: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Topicos

1 Introducao

2 Questoes de projetoExclusividade de objetosSubclasses sao subtipos?Checagem de tipo e polimorfismoHeranca unica e multiplaAlocacao e desalocacao de objetos

3 Implementacao de Contrucoes Orientadas a Objeto

Page 3: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Introducao

Introducao

Uma linguagem OO deve prover suporte a tres caracterısticas:

Tipos abstratos de dadosHerancaVinculacao dinamica de chamadas de metodos

Primeira linguagem com suporte a OO: SIMULA 67

Linguagem base para uma linguagem puramente orientada aobjetos: Smalltalk

Page 4: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Questoes de projeto

Exclusividade de objetos

Subclasses sao subtipos?

Checagem de tipo e Polimorfismo

Heranca unica e multipla

Alocacao e desalocacao de objetos

Vinculacao dinamica e estatica

Classes aninhadas

Inicializacao de objetos

Page 5: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Exclusividade de objetos

Exclusividade de objetos

Vantagem

Elegancia e uniformidade da linguagem e seu uso.

Desvantagem

Operacoes simples sao feitas por meio do processo de troca demensagens

Mais lento do que no modelo imperativo

Alternativa

Manter o modelo imperativo e adicionar o modelo OO

Pode deixar a linguagem confusa =⇒ Objetos e literaismisturados

Necessidade de wrapper classes

Page 6: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Exclusividade de objetos

Exclusividade de objetos

Vantagem

Elegancia e uniformidade da linguagem e seu uso.

Desvantagem

Operacoes simples sao feitas por meio do processo de troca demensagens

Mais lento do que no modelo imperativo

Alternativa

Manter o modelo imperativo e adicionar o modelo OO

Pode deixar a linguagem confusa =⇒ Objetos e literaismisturados

Necessidade de wrapper classes

Page 7: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Exclusividade de objetos

Exclusividade de objetos

Vantagem

Elegancia e uniformidade da linguagem e seu uso.

Desvantagem

Operacoes simples sao feitas por meio do processo de troca demensagens

Mais lento do que no modelo imperativo

Alternativa

Manter o modelo imperativo e adicionar o modelo OO

Pode deixar a linguagem confusa =⇒ Objetos e literaismisturados

Necessidade de wrapper classes

Page 8: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Exclusividade de objetos

Exclusividade de objetos - Exemplos

Smalltalk e Ruby

Tudo e objeto.

As variaveis nao tem tipo (typeless): todas sao referencias aobjetos.

C++

Mantem todas as construcoes e tipos do C

Retrocompatibilidade com C ⇒ Linguagem multiparadigma

Page 9: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Exclusividade de objetos

Exclusividade de objetos - Exemplos

Smalltalk e Ruby

Tudo e objeto.

As variaveis nao tem tipo (typeless): todas sao referencias aobjetos.

C++

Mantem todas as construcoes e tipos do C

Retrocompatibilidade com C ⇒ Linguagem multiparadigma

Page 10: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Exclusividade de objetos

Exclusividade de objetos - Exemplos

Java

Mantem tipos escalares primitivos (int, boolean, char, etc)

Motivo: eficiencia

Problema: muitas classes, como ArrayList, podem conterapenas objetos

Necessario o uso de wrappers

Page 11: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos?

A relacao entre uma classe filha e uma classe mae sempre eequivalente a relacao ”E-UM”?

Objetos da classe filha devem possuir a interface da classe mae

Um objeto da classe filha sempre pode ser substituıdo por umobjeto da classe mae sem causar um erro de tipo

Page 12: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos?

A relacao entre uma classe filha e uma classe mae sempre eequivalente a relacao ”E-UM”?

Objetos da classe filha devem possuir a interface da classe mae

Um objeto da classe filha sempre pode ser substituıdo por umobjeto da classe mae sem causar um erro de tipo

Page 13: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos?

A relacao entre uma classe filha e uma classe mae sempre eequivalente a relacao ”E-UM”?

Objetos da classe filha devem possuir a interface da classe mae

Um objeto da classe filha sempre pode ser substituıdo por umobjeto da classe mae sem causar um erro de tipo

Page 14: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos?

Relacao dos modos como uma subclasse pode diferir de suasuperclasse:

Mudanca Deixa de ser sub-tipo?

Metodos publicos adicionais NAO

Menos metodos (ocultacao demetodos publicos da superclasse)

SIM

Tipos dos parametros de metodospublicos diferentes

SIM

Tipo do retorno de metodos publicosdiferentes

SIM

Corpo (implementacao) de metodosdiferentes

NAO

Page 15: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos? - Exemplos

Smalltalk

Subclasses herdam todos os membros da superclasse, e naopodem ocultar membros da superclasse

Logo, toda subclasse e subtipo

C++

Dois modos de derivacao: public e private

Derivacao privada esconde membros publicos da superclasse

Logo, nem toda subclasse e subtipo

Page 16: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos? - Exemplos

Smalltalk

Subclasses herdam todos os membros da superclasse, e naopodem ocultar membros da superclasse

Logo, toda subclasse e subtipo

C++

Dois modos de derivacao: public e private

Derivacao privada esconde membros publicos da superclasse

Logo, nem toda subclasse e subtipo

Page 17: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos? - Exemplos

Smalltalk

Subclasses herdam todos os membros da superclasse, e naopodem ocultar membros da superclasse

Logo, toda subclasse e subtipo

C++

Dois modos de derivacao: public e private

Derivacao privada esconde membros publicos da superclasse

Logo, nem toda subclasse e subtipo

Page 18: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos? - Exemplos

Smalltalk

Subclasses herdam todos os membros da superclasse, e naopodem ocultar membros da superclasse

Logo, toda subclasse e subtipo

C++

Dois modos de derivacao: public e private

Derivacao privada esconde membros publicos da superclasse

Logo, nem toda subclasse e subtipo

Page 19: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos? - Exemplos

Java

Nao e possıvel ocultar membros da superclasse

Metodos com mesmo nome mas tipos dos parametros e tipode retorno diferentes ⇒ metodos sobrecarregados

Logo, toda subclasse e subtipo

Ruby

E possıvel mudar controles de acesso de membros dasuperclasse

Logo e possıvel ocultar membros da superclasse, e portantosubclasses nem sempre sao subtipos

Page 20: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos? - Exemplos

Java

Nao e possıvel ocultar membros da superclasse

Metodos com mesmo nome mas tipos dos parametros e tipode retorno diferentes ⇒ metodos sobrecarregados

Logo, toda subclasse e subtipo

Ruby

E possıvel mudar controles de acesso de membros dasuperclasse

Logo e possıvel ocultar membros da superclasse, e portantosubclasses nem sempre sao subtipos

Page 21: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos? - Exemplos

Java

Nao e possıvel ocultar membros da superclasse

Metodos com mesmo nome mas tipos dos parametros e tipode retorno diferentes ⇒ metodos sobrecarregados

Logo, toda subclasse e subtipo

Ruby

E possıvel mudar controles de acesso de membros dasuperclasse

Logo e possıvel ocultar membros da superclasse, e portantosubclasses nem sempre sao subtipos

Page 22: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos? - Exemplos

Java

Nao e possıvel ocultar membros da superclasse

Metodos com mesmo nome mas tipos dos parametros e tipode retorno diferentes ⇒ metodos sobrecarregados

Logo, toda subclasse e subtipo

Ruby

E possıvel mudar controles de acesso de membros dasuperclasse

Logo e possıvel ocultar membros da superclasse, e portantosubclasses nem sempre sao subtipos

Page 23: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Subclasses sao subtipos?

Subclasses sao subtipos? - Exemplos

Java

Nao e possıvel ocultar membros da superclasse

Metodos com mesmo nome mas tipos dos parametros e tipode retorno diferentes ⇒ metodos sobrecarregados

Logo, toda subclasse e subtipo

Ruby

E possıvel mudar controles de acesso de membros dasuperclasse

Logo e possıvel ocultar membros da superclasse, e portantosubclasses nem sempre sao subtipos

Page 24: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Checagem de tipo e polimorfismo

Checagem de tipo e polimorfismo

Polimorfismo

Variavel polimorfica: pode referenciar objetos da classe maee das classes descendentes

Polimorfismo requer vinculacao dinamica de metodos

Vinculacao dinamica ⇒ Custo adicional em tempo deexecucao

Checagem dinamica de tipo

A classe real do objeto apontado pela variavel nao pode serdeterminada em tempo de compilacao

Problemas:

Custo da checagem em tempo de execucaoAtrasos na deteccao de erros

Page 25: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Checagem de tipo e polimorfismo

Checagem de tipo e polimorfismo

Polimorfismo

Variavel polimorfica: pode referenciar objetos da classe maee das classes descendentes

Polimorfismo requer vinculacao dinamica de metodos

Vinculacao dinamica ⇒ Custo adicional em tempo deexecucao

Checagem dinamica de tipo

A classe real do objeto apontado pela variavel nao pode serdeterminada em tempo de compilacao

Problemas:

Custo da checagem em tempo de execucaoAtrasos na deteccao de erros

Page 26: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Checagem de tipo e polimorfismo

Checagem de tipo e polimorfismo

Polimorfismo

Variavel polimorfica: pode referenciar objetos da classe maee das classes descendentes

Polimorfismo requer vinculacao dinamica de metodos

Vinculacao dinamica ⇒ Custo adicional em tempo deexecucao

Checagem dinamica de tipo

A classe real do objeto apontado pela variavel nao pode serdeterminada em tempo de compilacao

Problemas:

Custo da checagem em tempo de execucaoAtrasos na deteccao de erros

Page 27: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Checagem de tipo e polimorfismo

Checagem de tipo e polimorfismo

Polimorfismo

Variavel polimorfica: pode referenciar objetos da classe maee das classes descendentes

Polimorfismo requer vinculacao dinamica de metodos

Vinculacao dinamica ⇒ Custo adicional em tempo deexecucao

Checagem dinamica de tipo

A classe real do objeto apontado pela variavel nao pode serdeterminada em tempo de compilacao

Problemas:

Custo da checagem em tempo de execucaoAtrasos na deteccao de erros

Page 28: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Checagem de tipo e polimorfismo

Checagem de tipo e polimorfismo - Exemplos

Smalltalk e Ruby

Somente vinculacao dinamica de metodos

Unica checagem de tipo: garantir que uma mensagemencontra o metodo correspondente

C++

Permite vinculacao dinamica e estatica

Metodos definidos com virtual ⇒ vinculacao dinamica

Java

Permite vinculacao dinamica e estatica

Metodos definidos com final, static ou private ⇒vinculacao estatica

Page 29: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Checagem de tipo e polimorfismo

Checagem de tipo e polimorfismo - Exemplos

Smalltalk e Ruby

Somente vinculacao dinamica de metodos

Unica checagem de tipo: garantir que uma mensagemencontra o metodo correspondente

C++

Permite vinculacao dinamica e estatica

Metodos definidos com virtual ⇒ vinculacao dinamica

Java

Permite vinculacao dinamica e estatica

Metodos definidos com final, static ou private ⇒vinculacao estatica

Page 30: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Checagem de tipo e polimorfismo

Checagem de tipo e polimorfismo - Exemplos

Smalltalk e Ruby

Somente vinculacao dinamica de metodos

Unica checagem de tipo: garantir que uma mensagemencontra o metodo correspondente

C++

Permite vinculacao dinamica e estatica

Metodos definidos com virtual ⇒ vinculacao dinamica

Java

Permite vinculacao dinamica e estatica

Metodos definidos com final, static ou private ⇒vinculacao estatica

Page 31: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Heranca unica e multipla

Heranca unica e multipla

Heranca multipla: uma classe pode herdar de mais de umaclasse?

Problemas

Complexidade

Se duas superclasses definem o mesmo metodo, qual deles deve serchamado?Heranca compartilhada (diamante)Torna o projeto do programa mais complexo: muitas dependenciasno codigo ⇒ manutencao mais difıcil

Eficiencia

Requer uma operacao a mais a cada chamada de metodoCusto adicional nao muito alto

Page 32: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Heranca unica e multipla

Heranca unica e multipla

Heranca multipla: uma classe pode herdar de mais de umaclasse?

Problemas

Complexidade

Se duas superclasses definem o mesmo metodo, qual deles deve serchamado?Heranca compartilhada (diamante)Torna o projeto do programa mais complexo: muitas dependenciasno codigo ⇒ manutencao mais difıcil

Eficiencia

Requer uma operacao a mais a cada chamada de metodoCusto adicional nao muito alto

Page 33: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Heranca unica e multipla

Heranca unica e multipla

Heranca multipla: uma classe pode herdar de mais de umaclasse?

Problemas

Complexidade

Se duas superclasses definem o mesmo metodo, qual deles deve serchamado?Heranca compartilhada (diamante)Torna o projeto do programa mais complexo: muitas dependenciasno codigo ⇒ manutencao mais difıcil

Eficiencia

Requer uma operacao a mais a cada chamada de metodoCusto adicional nao muito alto

Page 34: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Heranca unica e multipla

Heranca unica e multipla

Page 35: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Heranca unica e multipla

Heranca unica e multipla - Exemplos

Smalltalk

Somente heranca unica

C++

Permite heranca multipla

Desambiguacao de membros com mesmo nome ⇒ Operadorde resolucao de escopo (::)

Page 36: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Heranca unica e multipla

Heranca unica e multipla - Exemplos

Smalltalk

Somente heranca unica

C++

Permite heranca multipla

Desambiguacao de membros com mesmo nome ⇒ Operadorde resolucao de escopo (::)

Page 37: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Heranca unica e multipla

Heranca unica e multipla - Exemplos

Java

Somente heranca unica

InterfacesPodem ser usadas para simular heranca multiplaProveem um tipo de polimorfismo (interfaces podem sertratadas como tipos)A classe deve implementar todos os metodos da interface ⇒Evita os problemas de multipla heranca

Ruby

Somente heranca unica

Modulos

Permite que uma classe herde todas as funcoes de um modulo

Page 38: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Alocacao e desalocacao de objetos

A alocacao deve ser apenas dinamica na heap (new), ou devepermitir dinamica na pilha?

Apenas dinamica na heap

Metodo uniforme de criacao e acesso por meio de ponteirosou variaveis de referencia

Simplifica operacoes de atribuicao

Permite desreferenciamento implıcito

Com alocacao na pilha

Dificulta atribuicao de subtipos

O espaco alocado na pilha para um tipo pode ser insuficientepara um subtipo.

Page 39: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Alocacao e desalocacao de objetos

A alocacao deve ser apenas dinamica na heap (new), ou devepermitir dinamica na pilha?

Apenas dinamica na heap

Metodo uniforme de criacao e acesso por meio de ponteirosou variaveis de referencia

Simplifica operacoes de atribuicao

Permite desreferenciamento implıcito

Com alocacao na pilha

Dificulta atribuicao de subtipos

O espaco alocado na pilha para um tipo pode ser insuficientepara um subtipo.

Page 40: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Alocacao e desalocacao de objetos

A alocacao deve ser apenas dinamica na heap (new), ou devepermitir dinamica na pilha?

Apenas dinamica na heap

Metodo uniforme de criacao e acesso por meio de ponteirosou variaveis de referencia

Simplifica operacoes de atribuicao

Permite desreferenciamento implıcito

Com alocacao na pilha

Dificulta atribuicao de subtipos

O espaco alocado na pilha para um tipo pode ser insuficientepara um subtipo.

Page 41: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Alocacao de objetos - Exemplos

Smalltalk, Java e Ruby

Alocacao na heap apenas

Desreferenciamento implıcito

C++

Permite alocacao na pilha

Desrefenciamento explıcito

Page 42: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Alocacao de objetos - Exemplos

Smalltalk, Java e Ruby

Alocacao na heap apenas

Desreferenciamento implıcito

C++

Permite alocacao na pilha

Desrefenciamento explıcito

Page 43: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Desalocacao de objetos

Desalocacao explıcita

O programador deve se preocupar com a desalocacao(delete)

Pode criar ponteiros / referencias pendurados

Desalocacao implıcita

Requer algum mecanismo para desalocar automaticamente

Page 44: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Desalocacao de objetos

Desalocacao explıcita

O programador deve se preocupar com a desalocacao(delete)

Pode criar ponteiros / referencias pendurados

Desalocacao implıcita

Requer algum mecanismo para desalocar automaticamente

Page 45: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Desalocacao de objetos - Exemplos

Smalltalk, Java e Ruby

Desalocacao implıcita

Coletor de lixo (garbage collector)

Java

Metodo finalize(): permite destravar acesso a outrosrecursos alem da memoria quando coletor de lixo desaloca amemoria (Ex: arquivos em disco)

C++

Desalocacao explıcita

Permite definicao de destruidor

Comando delete

Page 46: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Desalocacao de objetos - Exemplos

Smalltalk, Java e Ruby

Desalocacao implıcita

Coletor de lixo (garbage collector)

Java

Metodo finalize(): permite destravar acesso a outrosrecursos alem da memoria quando coletor de lixo desaloca amemoria (Ex: arquivos em disco)

C++

Desalocacao explıcita

Permite definicao de destruidor

Comando delete

Page 47: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Desalocacao de objetos - Exemplos

Smalltalk, Java e Ruby

Desalocacao implıcita

Coletor de lixo (garbage collector)

Java

Metodo finalize(): permite destravar acesso a outrosrecursos alem da memoria quando coletor de lixo desaloca amemoria (Ex: arquivos em disco)

C++

Desalocacao explıcita

Permite definicao de destruidor

Comando delete

Page 48: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Classes aninhadas

Motivacao

Ocultacao de informacao

Classe visıvel apenas dentro de outra classe

Questoes

Quais membros da classe externa sao visıveis a classeaninhada?

Quais membros da classe aninhada sao visıveis a classeexterna?

Page 49: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Classes aninhadas

Motivacao

Ocultacao de informacao

Classe visıvel apenas dentro de outra classe

Questoes

Quais membros da classe externa sao visıveis a classeaninhada?

Quais membros da classe aninhada sao visıveis a classeexterna?

Page 50: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Questoes de projeto

Alocacao e desalocacao de objetos

Classes aninhadas - Exemplos

Java

Inner classes: classes aninhadas nao-estaticas

Classes aninhadas estaticas

Classes anonimas

Classes aninhadas locais (dentro de um metodo)

Tem acesso aos membros da classe externa e as variaveis locaisdeclaradas com final

Membros da classe aninhada visıveis apenas dentro do metodo

Page 51: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Implementacao de Contrucoes Orientadas a Objeto

Implementacao de Contrucoes Orientadas a Objeto

Estrutura dos dados

Class instance record (CIR): similar aos registros (structs emC, record em Pascal, etc.)

Construıda em tempo de compilacao

Subclasses: e a CIR da superclasse com as entradas para osnovos atributos anexadas ao final

Page 52: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Implementacao de Contrucoes Orientadas a Objeto

Implementacao de Contrucoes Orientadas a Objeto

Page 53: Suporte à Programação Orientada a Objetos

Suporte a Programacao Orientada a Objetos

Implementacao de Contrucoes Orientadas a Objeto

Tarefas

1 Considere as linguagens apresentadas como exemplo(Smalltalk, Java, C++ e Ruby). Enumere os pros e contrasde cada linguagem. Tome em consideracao a forma como asquestoes de projeto sao implementadas. Considere tambemquestoes como desempenho, legibilidade e confiabilidade.