View
697
Download
1
Category
Preview:
DESCRIPTION
Citation preview
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Suporte a Programacao Orientada a Objetos
Questoes de projeto
Heranca unica e multipla
Heranca unica e multipla
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 (::)
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 (::)
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
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.
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.
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.
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
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
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
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
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
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
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
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?
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?
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
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
Suporte a Programacao Orientada a Objetos
Implementacao de Contrucoes Orientadas a Objeto
Implementacao de Contrucoes Orientadas a Objeto
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.
Recommended