-
a) Na implementação de linguagens de programação orientada a objetos (POO), o polimorfismo é, usualmente, possível por meio do emprego da técnica de ligação estática ligação tardia ou ligação dinâmica, de modo que a escolha da implementação específica que tratará determinado envio de mensagem será efetuada em tempo de compilação.
Polimorfismo é a capacidade de substituit objetos com interfaces coincidentes por um outro objeto em tempo de execução, isso é conhecido como ligação tardia ou ligação dinâmica.
Horstmann e Cornell (2001, p.153) afirmam que a chave para fazer o polimorfismo funcionar é a ligação tardia.
Referência: http:// http://waltercunha.com/blog/index.php/2010/03/12/polimorfismo-sobreposicao-e-sobrecarga-marcio-victorino/
c) Na POO, o encapsulamento aplica-se, fundamentalmente, aos campos ou variáveis de estado de determinado objeto, sendo de pouca utilidade a sua aplicação a métodos.
Encapsulamento - consiste na sepração dos aspectos internos e externos do objeto. É utilizado amplamente para impedir o acesso direto ao estado do objeto, disponibilizando externamente apenas os métodos que alteram esses estados. É utilizado para esconder detalhes de implemetação pouco importantes.
e) Nas linguagens orientadas a objeto da atualidade, é comum o uso de herança simples múltipla, que permite a determinada classe herdar diretamente das implementações de uma ou mais classes, possibilitando mais expressividade semântica e facilitando a manipulação do sistema de tipos nessas linguagens.
-
Alguém poderia explicar porque a letra D está correta? Por que eu deveria evitar o uso excessivo da herança?
-
Marcelo, basicamente o uso de herança aumenta o acoplamento. Lembre-se que quando implementamos herança estabelecendo uma relação de IS A (é um) entre os objetos, ou seja, B herda de A, então B é um A.
-
Acredito que a letra a) esteja incorreta porque a "escolha da implementação específica que tratará determinado envio de mensagem" já implica em polimorfismo dinâmico (tempo de execução). A questão foi coerente quando fez a ligação entre "técnica de ligação estática" e "tempo de compilação."
-
Marcelo, alguns padrões comportamentais da GOF focam nessa questão de não utilizara herança para tudo. Dando uma revisada nos padrões de projeto GOF você vai perceber isso. É uma questão de nível avançado, pois exige uma grande reflexão.
Abraço
-
Letra B) A abstração tem relação com simplificação, é um conceito para conseguir uma boa modularização, é um REFINAMENTO GRADUAL, por isso partimos de uma visão bottom-up. Encapsulamento é um exemplo de abstração.
Letra D) Na implementação de objetos, a composição de objetos substitui a herança de classe. A herança de classe é definida estaticamente em tempo de compilação, enquanto a composição de objetos é definida dinamicamente em tempo de execução pela obtenção de referências a outros objetos por meio de determinado objeto. O uso da composição não viola o encapsulamento.
- A reutilização por meio de heranças é frequentemente tratada como reutilização de caixa branca , na medida em que as classes ancestrais “expõem” para uma subclasse detalhes de sua implementação, o que viola o princípio da encapsulação. Qualquer alteração na classe-mãe forçará uma mudança na subclasse.
- A reutilização por meio de composição é tratada como reutilização de caixa preta , na medida em que os detalhes internos dos objetos não são visíveis uns aos outros. Quando os objetos são acessados exclusivamente por suas interfaces não há a violação da encapsulação e existem menos dependências entre objetos. A composição de objetos como princípio de reutilização ajuda a manter pequenas as estruturas de classes, com menor probabilidade de crescerem até se tornarem “monstros intratáveis”. Nas estruturas de caixas pretas, a adaptação de um programa ao problema se dá pela especialização das classes de sua periferia pela criação de subclasses, tudo sem mudar sua estrutura interna. DELEGAÇÃO é uma maneira de tornar a composição tão poderosa para fins de reutilização quanto a herança. Na delegação dois objetos são envolvidos no tratamento de uma solicitação: um objeto receptor delega operações para o seu delegado; isto é análogo à postergação de solicitação enviadas as subclasses para suas classes mãe. Porém com a herança, uma operação herdada pode sempre se referir ao objeto receptor através da variável membro this, por exemplo em C++. Para obter o mesmo efeito com o uso de delegação, o receptor passa a si mesmo para o delegado para permitir à operação delegada referenciar o receptor. Fonte: http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/pat/herancavscomposicao.htm
-
d) Uma das formas comuns de se evitar o uso excessivo de herança como mecanismo de refinamento de POO é o emprego de delegação, que evita a criação de número excessivo de subclasses em modelos orientados a objetos.
R: Uma das ideias da Programação Orientada a Objetos é diminuir a quantidade de código escrito, reutilizando o código de outras classes.
Esta reutilização pode ocorrer por 2 tipos de relacionamentos:
1) O relacionamento do tipo “É um” também conhecido como herança.
2) O relacionamento do tipo “Tem Um”, onde um objeto contém em seus atributos outros objetos chamado delegação.
Leia mais em: Delegação - Programação Orientada a Objetos Pós-Moderna - Parte 3 http://www.devmedia.com.br/delegacao-programacao-orientada-a-objetos-pos-moderna-parte-3/21340#ixzz3NZmjvu77
-
A D estava mais certa, mas dificil avaliar objetivamento o "usualmente, possível" e o "comum o uso de herança múltipla".
C++ ainda é uma linguagem comum atualmente, então como dizer que herança múltipla é incomum?
Quanto a ligação estática ela é possível no .NET inclusive no J#.
Ainda quanto a D, fiquei com medo do examinador ter simplesmente trocado o uso excessivo da herança por uso excessivo de interfaces, afinal delegações são comumente usadas pra evitar se criar inúmeras interfaces muitas com único metodo.
-
d-
EM Herança comum, o relacionamento é do tipo "é 1", enquanto que em associação é "tem 1", o qual usa delegação em vez de extends