SóProvas


ID
704311
Banca
CESPE / CEBRASPE
Órgão
MPE-PI
Ano
2012
Provas
Disciplina
Engenharia de Software
Assuntos

A respeito do paradigma de programação orientado a objetos, julgue os itens que se seguem.

A simples análise do código-fonte do programa não garante que se determine qual método será efetivamente executado.

Alternativas
Comentários
  • Tem que haver uma análise mais completa...
  • Questão, no mínimo, confusa.

    Análise do código-fonte por parte de quem? Do compilador? Do usuário?

    Pelo que entendo de POO o acesso ao código-fonte permite saber qual método será efetivamente executado.

    Acho que no contexto do polimorfismo só seria possível decidir em tempo de execução mas a questão não fala sobre polimorfismo. Eu que deveria ter inferido que a questão se tratava de polimorfismo?
  • Esta questão realmente está muito confusa e incompleta.
  • creio que pensaram no polimorfismo ao elaborar essa questão. Mas mesmo assim ta muito sem noção.
  • A questão é muito tosca mesmo, o que seria "simples análise" . Mas o avaliador estava realmente pensando em polimorfismo no momento em que elaborou a questão. 
  • Existem 3 tipos de polimorfismo: estático, dinâmico e paramétrico (taxonomia de Robert Sebesta).

    O polimorfismo estático diz respeito à sobrecarga (overload); ocorre quando dois métodos numa mesma classe possuem o mesmo nome, porém assinaturas diferentes. O polimorfismo dinâmico está relacionado à sobreposição ou sobrescrita (overriden); acontece quando um método da subclasse estende um método da superclasse (portanto, possuem a mesma assinatura). Por fim, o polimorfismo paramétrico se restringe ao uso de templates (C++) e generics (Java).

    No polimorfismo estático, a escolha do método a ser executado ocorre em tempo de compilação. Já no polimorfismo dinâmico a escolha será feita em tempo de execução. Considerando o polimorfismo dinâmico, a simples análise do código-fonte por parte do compilador não possibilitará que seja determinado o método a ser executado. Logo, a questão está correta.

    Abraços.

    Editado: eu falei, falei, falei para explicar os métodos de polimorfismo. No entanto, acabei colocando a resposta incorreta no final. Está correto agora.
  • O colega acima falou, falou e no final respondeu errado! Seria Correta! 
  • Para responder a esta questão é necessário conhecer os recursos da POO. Ocorre que ela oferece o polimorfismo de inclusão, o qual permite declarar no código-fonte uma classe pertencente a uma hierarquia de herança e determinar em tempo de execução a instância correta do objeto e chamar seu respectivo método. Portanto, apenas analisando o código-fonte, não tem como saber qual método será efetivamente chamado em tempo de execução. Questão correta.


  • Fonte: https://groups.google.com/forum/#!topic/timasters/vfp4DEixj_k

    Augusto, acho que você não entendeu. 

    Primeiro, a questão nao disse que "não podia" ser feita essa análise, mas 
    apenas que "não é garantido". Segundo, pela própria natureza de dynamic 
    binding e polimorfismo dinâmico, há situações em que essa análise estática 
    realmente não garante nada, devido a parâmetros e vinculações que só podem 
    ser avaliados em tempo de execução. 

    Para não alongar muito a discussão sugiro esta leitura (eu poderia citar N 
    outras fontes, mas essa foi a primeira que apareceu no google e já serve ao 
    nosso propósito): 
    http://javarevisited.blogspot.com.br/2012/03/what-is-static-and-dynamic-binding-in.html

    Só para descatar um trecho do primeiro parágrafo: "Most of the references 
    is resolved during compile time but some references which depends upon 
    Object and polymorphism in Java is resolved during RUNTIME when actual 
    object is available." 

    Obviamente usei a linguagem Java como exemplo, mas esse conceito de 
    polimorfismo dinâmico e dynamic binding se aplica a praticamente qualquer 
    linguagem moderna orientada a objetos. 

    Espero ter contribuído para o debate. 

    abrs 

  • O rolo desta questão  reside no termo "simples análise" , no caso seria uma análise detalhada DO código. Uff questão  tosca!!!