SóProvas


ID
360145
Banca
CESPE / CEBRASPE
Órgão
SAD-PE
Ano
2010
Provas
Disciplina
Engenharia de Software
Assuntos

O paradigma de orientação a objetos é centrado em conceitos que envolve os seguintes princípios fundamentais: abstração, encapsulamento, herança e polimorfismo. Esse paradigma evoluiu desde a sua concepção original e tornou-se uma força pivotal no desenvolvimento da ciência, da tecnologia e de quaisquer outros domínios em que é aplicada, inclusive na área de desenvolvimento de software. A esse respeito, assinale a opção correta.

Alternativas
Comentários
  • 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