SóProvas


ID
260218
Banca
FCC
Órgão
TRT - 4ª REGIÃO (RS)
Ano
2011
Provas
Disciplina
Engenharia de Software
Assuntos

Na taxonomia utilizada para as formas de polimorfismo são, respectivamente, dois tipos categorizados como universal e dois como Ad Hoc:

Alternativas
Comentários
  • – Polimorfismo ad hoc
    ? Não existe um modo único e sistemático de determinar o tipo de 
    resultado de uma função em termos dos tipos dos seus 
    argumentos de entrada.
    ? É uma forma limitada de polimorfismo.
    ? Possui duas formas: coerção e sobrecarga.

    – Polimorfismo universal
    ? Trabalha potencialmente num conjunto infinito de tipos de modo 
    disciplinado.
    ? Possui duas formas: paramétrico e inclusão.

    – Coerção
    ? Meio para contornar a rigidez dos tipos monomórficos.
    ? Existe um mapeamento interno entre tipos.
    ? Exemplo: 
    – Se o operador soma é definido como tendo 2 parâmetros reais e um 
    inteiro e um real são passados como parâmetros, o inteiro é
    “coargido” para um real.

    – Sobrecarga
    ? Permite que um nome de função seja utilizado mais do que 
    uma vez com diferentes tipos de parâmetros.
    ? Exemplo:
    – Uma função soma pode ser sobrecarregada para operar com dois 
    parâmetros inteiros e dois reais.

    – Paramétrico
    ? Uma única função é codificada e ela trabalhará
    uniformemente num intervalo de tipos.
    ? Funções paramétricas também são chamadas de funções 
    genéricas.
    ? Exemplo:
     
    – Inclusão
    ? É encontrada somente em linguagens orientadas a objetos e 
    está relacionada com a noção de subtipo.
    ? Exemplo:
    – Hierarquia de classes.
  • Resumindo o que o colega de cima disse.
    Letra A.
  • Polimorfismo ad hoc

    Não existe um modo único e sistemático de determinar o tipo de
    resultado de uma função em termos dos tipos dos seus
    argumentos de entrada.
    É uma forma limitada de polimorfismo.
    Possui duas formas: coerção e sobrecarga.


    Polimorfismo universal

    Trabalha potencialmente num conjunto infinito de tipos de modo
    disciplinado.
    Possui duas formas: paramétrico e inclusão.


    http://www.google.com.br/url?sa=t&source=web&cd=1&ved=0CBgQFjAA&url=http%3A%2F%2Fwww.tiagodemelo.info%2Faulas%2Fcefet%2F2008%2Flinguagem-poo%2Faula-topicos-linguagem-programacao.pdf&ei=skG_TejvDqbs0gHJ5LXwBQ&usg=AFQjCNGYML_mNWsKY99ZntNOOqcJZFldQw
  • Polimorfismo ---------> Universal (Dinâmico) -------> Parametrico e Inclusão ------> tempo de execução
    ---------> Ad Hoc (Estático) -----------> Sobrecarga e Coerção -----> tempo de compilação
  • Complementando a resposta do colega Paulo, o polimorfismo de coerção também é chamado de polimorfismo de sobreposição.

  • Polimorfismo*: é a propriedade de se utilizar um mesmo nome ou forma para fazer coisas diferentes.
    Seus tipos são: 
    *A)* *Universal*: pode ser aplicado em diversos casos, trabalhando potencialmente num conjunto infinito de tipos de modo 
    disciplinado. Pode ser de dois tipos: 

       *a1)*  *Paramétrico:* Precisa especificar o tipo. Por exemplo, uma List sozinha não representa nada, ela precisa ser declarada com um tipo, como List. Funções paramétricas também são chamadas de funções genéricas. Em Java ou C# é chamada *Generics*. 
             Exemplo: 

                  class Lista { 
                         public void add(E elemento) { // } 
                         public E get(int index) { // } 
                  } 
                  ... 

                  Lista listaString = new Lista(); 
                  Lista listaInteira = new Lista(); 


      * a2)*  *Inclusão*: É o polimorfismo básico, quando uma classe Pai aponta para um objeto da classe Filho. 
              Exemplo: 

                  class Animal{ } 
                  class Mamifero extends Animal {} 
                  class Ave extends Animal {} 
                  ... 
                  Animal a1 = new Mamifero(); 
                  Animal a2 = new Ave(); 


    *B) Ad-Hoc: *É  uma forma limitada de polimorfismo. Ele é implementado quando queremos definir algo especifico. Diferentemente do universal, ele não pode ser usado em todo lugar. Pode ser de dois tipos: 
       *b1)*  *Coerção:* é  meio para contornar a rigidez dos tipos monomórficos. Existe um mapeamento interno entre os tipos. 
             Exemplo: 

                  Se o operador soma é definido como tendo 2 parâmetros reais e 
    um inteiro e um real são passados como parâmetros, o inteiro é “coargido” 
    para um real. 

      * b2)*  *Sobrecarga*: possibilita termos mais de um método com o mesmo 
    identificador, mas eles devem ter parâmetros diferentes. 
              Exemplo: 

                  void somar(int x, int y){ ... } 
                  void somar(float x, float y){ ... } 



    Fonte: Fórum - Respondido pelo "Thiago Trigo"