Pergunta

Eu olhei para outras definições e explicações e nenhum deles me satisfazer. Eu quero ver se alguém pode definir o polimorfismo em, no máximo, duas frases sem usar qualquer código ou exemplos. Eu não quero ouvir 'Então você tem uma pessoa / carro / abridor de lata ...' ou como a palavra é derivada (ninguém está impressionado que você sabe o poli e meios morph). Se você tem uma boa compreensão do que o polimorfismo é e ter um bom domínio de Inglês do que você deve ser capaz de responder a essa pergunta em um curto, embora denso, definição. Se sua definição define com precisão o polimorfismo, mas é tão densa que requer um par de overs de leitura, então isso é exatamente o que estou procurando.

Por que só duas frases? Porque uma definição é curto e inteligente. Uma explicação é longa e contém exemplos e código. Olhe aqui para explicações (a resposta sobre essas páginas não são satisfatórios para a minha pergunta):

Polimorfismo vs Overriding vs Sobrecarga
Tente descrever polimorfismo tão fácil como você pode

Por que estou fazendo esta pergunta? Porque me pediram a mesma pergunta e eu descobri que eu era incapaz de chegar a uma definição satisfatória (pelos meus padrões, que são bastante elevado). Eu quero ver se algum dos grandes mentes neste site pode fazê-lo.

Se você realmente não pode fazer a exigência de duas frases (que é um assunto difícil de definir), então é bom se você passar por cima. A idéia é ter uma definição que realmente define o que o polimorfismo é e não explica o que ele faz ou como usá-lo (obter a diferença?).

Foi útil?

Solução

O polimorfismo permite a expressão de algum tipo de contrato, com potencialmente muitos tipos implementar esse contrato (seja por meio de herança de classe ou não) de diferentes maneiras, cada um segundo a sua própria finalidade. Código usando que o contrato não deve (*) precisa se preocupar com que a implementação está envolvido, apenas que o contrato será obedecida.

(*) No caso ideal, de qualquer maneira -, obviamente, muitas vezes o código de chamada escolheu a implementação apropriada deliberadamente

Outras dicas

Fruit pode ser comido, como regra geral, mas diferentes tipos de frutas é comido em maneiras diferentes. Uma maçã, que é um fruto, pode ser comido (porque é uma fruta). Uma banana também pode ser comido (porque também é uma fruta), mas de uma forma diferente de uma maçã. Você descascá-lo em primeiro lugar.

Bem, pelo menos eu faço, mas eu sou estranho em algumas maneiras então o que eu sei.

Isto ilustra herança (fruto pode ser comido), polimorfismo (algo que come fruta pode comer todos os tipos de frutas), e encapsulamento (uma banana tem uma pele).

Falando sério, herança de objetos, polimorfismo, encapsulamento, as coisas virtuais, coisas abstratas, as coisas particulares, as coisas públicas, todos estes são conceitos rígidos. Se alguém absolutamente quer ter uma definição 2 frase deste tag, por favor, a questão como uma variante do código-golf, porque duas dessas frases terão de ser tão concisa que se você não sabe o que já é você não vai aprender o suficiente sobre -lo para saber o que você precisa aprender mais sobre.

O polimorfismo está declarando uma interface uniforme que não é tipo conscientes, deixando detalhes de implementação de tipos de betão que implementam a interface.

Na verdade, existem várias formas de polimorfismo e há alguma controvérsia sobre ele; você pode até ver professores CS que não podem defini-lo corretamente. Estou ciente de três tipos:

  • polimorfismo ad-hoc (parece com um pato e anda como um pato => é um pato). Pode ser visto em Haskell e Python por exemplo.

  • polimorfismo genérico (onde um tipo é uma instância de algum tipo genérico). Pode ser visto em C ++ por exemplo (vector de int e vetor de corda ambos têm um tamanho função membro).

  • polimorfismo subtipo (em que um tipo herda de outro tipo). Pode ser visto na maioria das linguagens de programação OO (ou seja Triângulo é uma forma).

Wikipedia: Polimorfismo é um recurso de linguagem de programação que permite valores de diferentes tipos de dados para serem manipulados usando uma interface uniforme. Bastante simples para mim.

Eu realmente entendo, por que você está fazendo esta pergunta. Eu entendo polimorfismo, mas eu estava em uma entrevista de emprego e foi convidado a dar uma definição curta e clara do polimorfismo. Porque eu não poderia dar uma definição clara e curta comecei a pensar sobre isso e aqui está a minha definição:

A capacidade de objetos de um tipo de ter uma ea mesma interface, mas diferente implementação desta interface.

Definição :

O polimorfismo é uma palavra R $ 10 para uma ideia de $ 1 - que quando eu pedir algo a ser feito, eu não me importo como ele é obtido, desde que o resultado final é apropriado. Enquanto o serviço é fornecido corretamente, eu não se importam sobre o aplicação .

Discussão

Embora seja comumente usado no desenvolvimento de software, especialmente em sistemas desenvolvidos seguindo os princípios orientados a objetos, polimorfismo é fundamentalmente um princípio mundo real e deve ser definido em termos reais, não os tecnológicos.

Exemplos

Quando eu quero fazer um telefonema, eu pegar um telefone, discar um número e falar para a festa na outra extremidade. Eu não me importo sobre quem fez o telefone, o que a tecnologia que ele usa, se ele está com fio, sem fio, móvel ou VOIP, ou se é pela garantia.

Quando eu quero imprimir um documento, eu imprimi-lo. Eu não me importo sobre a linguagem de implementação, marca de impressão, estilo de conexão, escolha de consumíveis ou a qualidade do papel.

Várias implementações da mesma interface.

Exemplo:. Muitos modelos de telefone implementar a interface teclado numérico

O polimorfismo é uma estratégia orientada a objetos utilizados na concepção modelos de objetos, para ajudar a simplificar o código. Nele é o polimorfismo do núcleo é a capacidade de definir dois objetos simillar ainda diferentes, e em seguida, tratar os dois objetos como se eles são os mesmos.

Ok que é difícil ....

Eu apenas pensei que eu ia acrescentar a minha própria interpretação do que o polimorfismo é: Muito genericamente, o polimorfismo é o ato de fornecer um única interface para entidades de tipos diferentes .

Isso é bastante genérica, mas essa é a única maneira que eu posso pensar para envolver todos os três tipos de polimorfismos que eu sei sobre: ?? ad hoc , paramétrico e subtipo . Eu vou em mais detalhes abaixo, e têm tipos de polimorfismo classificadas por nome, em ordem alfabética. O que você está interessado em é, provavelmente, subtipo polimorfismo , que é o último.

Ad hoc polimorfismo

polimorfismo ad hoc é o ato de fornecer várias implementações do mesmo método para diferentes tipos de parâmetros. Em OOP , é geralmente conhecido como sobrecarga de método . Por exemplo:

public String format(int a) {
    return String.format("%2d", a);
}

public String format(Date a) {
    return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(a);
}

Ambos os métodos format compartilhar um única interface , mas eles trabalham em entidades do diferentes tipos .

Parametric polimorfismo

Parametric polimorfismo é o ato de fazer um trabalho de classe (ou método) sobre um tipo que é em si um parâmetro da classe (ou método). É muitas vezes referido como genéricos .

Por exemplo, List[T] de Java espera um T parâmetro em tempo de instanciação, e este parâmetro define o tipo do objeto resultante.

Nota para os puristas que eu estou propositadamente ignorando tipos matérias como eu sinto que eles tinha acabado de turvar as águas neste contexto.

List[String] e List[Date] compartilham um única interface , mas o trabalho em (e são) diferentes tipos .

O subtipo polimorfismo

O subtipo polimorfismo é provavelmente o que você inicialmente significou na sua pergunta:. É o ato de fornecer uma única interface para várias implementações do mesmo tipo

Para usar o exemplo habitual: Animal fornece um contrato que todas as implementações devem respeitar. Dog é um Animal, e como tal apoia todas as operações que Animal declara. De acordo com a substituição de Liskov , isso permite que você use uma instância de Dog onde uma instância de Animal é esperado (mas não o contrário).

Se Cat e Dog são ambos subclasses de Animal, em seguida, eles compartilham um única interface , mas na verdade são diferentes tipos .

Eu estou indo em um pouco de uma tangente aqui, mas polimorfismo de subtipo é (eu acho) o único que permite primordial : o ato de redefinir o comportamento de um método definido por um classe pai. Isso é muitas vezes confundido com o sobrecarga , que, como vimos antes, é um tipo de polimorfismo e não faz, de facto necessidade de subclasses (nem precisa aulas, realmente).

O polimorfismo é uma abstração de codificação de software onde várias entidades subjacentes diferentes (geralmente dados, mas nit sempre) todos compartilham uma interface comum que lhes permite olhar e agir idênticos em tempo de execução. Nós usamos isso como uma técnica de desenvolvimento para impor um comportamento consistente ao longo de um vasto leque de casos semelhantes, mas não idênticas com uma implementação mínima absoluta, reduzindo assim a expectativa para bugs e inconsistências.

Paul.

polimorfismo == várias classes + mesmas assinaturas de método + comportamento específico de classe.

Parece que as melhores definições são fornecidas aqui, então deixe-me acrescentar minha dois centavos por favor, só por outros observadores. Espero que poderia ajudar mais.

Existem dois tipos de polimorfismo:

1. Compile-time (static) polymorphism or (ad hoc) polymorphism.

Isso é simplesmente a sobrecarga de método e operador de sobrecarga

2.  Run time or (dynamic) polymorphism.

O primeiro termo é herdado da terminologia da Java e C ++.

Mas no .NET terminologia apenas o segunda ( eu quero dizer polimorfismo em tempo de Executar ) é realmente suposta como polimorfismo e simplesmente chamado polimorfismo .

E, tanto quanto eu sei que existem três métodos para a implementação ( tempo de execução ) polimorfismo .

 1. Parametric polymorphism or simply the use of generics (templates in C++).

 2. Inheritance-based polymorphism or subtyping.

 3. Interface-based polymorphism.

Um exemplo simples do polimorfismo baseado em interface:

interface Imobile
{
    void Move();
}

class Person :Imobile
{
    public void Move() { Console.WriteLine("I am a person and am moving in my way."); }
}

class Bird :Imobile
{
    public void Move() { Console.WriteLine("I am a bird and am moving in my way."); }
}

class Car :Imobile
{
    public void Move() { Console.WriteLine("I am a car and am moving in my way."); }
}


class Program
{

    static void Main(string[] args)
    {
        // Preparing a list of objects
        List<Imobile> mobileList = new List<Imobile>();

        mobileList.Add(new Person());
        mobileList.Add(new Bird());
        mobileList.Add(new Car());

        foreach (Imobile mobile in mobileList)
        {
            mobile.Move();
        }

        // Keep the console open
        Console.WriteLine("Press any key to exit the program:");
        Console.ReadKey();
    }
}

Output:

 I am a person and am moving in my way.
 I am a bird and am moving in my way.
 I am a car and am moving in my way.
 Press any key to exit the program:

Formas múltiplas de um único objeto é chamado polimorfismo.

O polimorfismo é a capacidade de um objeto para aparecer e se comportam de forma diferente para a mesma invocação. ex: cada animal aparecer e soarem de forma diferente (quando ele bateu :))

O polimorfismo é uma característica de idiomas que permite que um objeto a ser tratado como uma instância de seu supertipo de programação.

Dar um único nome para um conjunto de operações análogas em diferentes tipos. Quando feito assim, o analogia é por exemplo óbvio "Adição" números aritmeticamente e "adição" cordas por concatenação (que resume os seus comprimentos).

Polimorfismo

Diferentes objetos podem responder à mesma mensagem de maneiras diferentes, permitir que objetos para interagir uns com os outros sem saber o seu tipo exato.

Via: http://www.agiledata.org/essays/objectOrientation101.html

Esta é a definição que eu sempre seguiu:

Dois objetos são polimórficos (em relação a um protocolo particular) entre eles, se ambos respondem às mesmas mensagens com a mesma semântica.

O polimorfismo é sobre as mensagens, é sobre ser capaz de responder o mesmo conjunto de mensagens com a mesma semântica.

Se o objeto de dois pode responder a esvaziar? mas a semântica da mensagem é diferente, então .. eles não são polimórficos.

O polimorfismo a nível mais baixo é a capacidade de invocar métodos que são definidos pelas implementadores de uma interface a partir do exemplo de interface.

O polimorfismo é uma característica de programação que permite que um objeto tem muitos tipos ( 'formas') e permite que você tratá-lo como qualquer um desses tipos, dependendo do que você precisa fazer sem saber ou cuidar sobre seus outros tipos.

O polimorfismo é a funcionalidade linguagem permitindo que o código algorítmico de alto nível para operar inalterada em vários tipos de dados. E a outra frase, que quer que fosse para ... ;-P.

(Os tipos de suportes C ++ listados e contrastados na minha resposta: Polimorfismo em C ++ )

O polimorfismo conceito tornou-se um fenômeno recentemente. Aqui está a deriva real. define tempo de execução que Submethod deve ser invocada por uma referência de uma classe super. Agora, o que significa na prática? Isso significa realmente nada. Você pode codificar simplesmente sem polimorfismo. Então por que? Porque, se não temos o polimorfismo, tivemos de memorizar todas as definições de funções subclasse. Polimorfismo nos salva isso na prática.

Você pode definir uma lista da seguinte forma:

List list = new List();

mas se você buscar por IList, você pode se beneficiar da interface como:

IList list = new List();

e usar a referência IList livremente. Assumindo IList também é implementado em outra classe, você pode usar métodos dessa classe desconhecida via de referência novamente IList sem tentar lembre-se que o nome da classe. Maravilhoso, não é?

Agora, mais informações valiosas está chegando:
Java é por polimórfica padrão, enquanto .NET e C ++ não são, em MS, você tem que declarar a função de base virtual (e em .NET override palavra-chave).

Além disso, existem 2 regras integrais em polimorfismo. Uma é a herança (através da interface de impl. Ou através de classe estendendo) e o outro está a substituir. Sem substituir, o polimorfismo não existe. Note-se que a sobrecarga de método (que sempre em uma única classe) também é um tipo de polimorfismo "minimalista".

Para uma determinada assinatura do método, diferentes implementações de métodos são executados para diferentes, hierarquicamente relacionados, classes.

O polimorfismo é a capacidade de utilização de diferentes classes que implementam a interface comum (ou estender uma classe base comum) de uma maneira comum, sem a necessidade de agora a aplicação específica, e utilizando apenas os métodos disponíveis na interface comum.

Ou seja: Em Java, como ArrayList e LinkedList tanto implementar List, se você declarar uma variável como List, você sempre pode realizar as operações permitidas na lista, não importa qual se variável foi instanciado como um ArrayList ou LinkedList.

Entidades do mesmo tipo (isto é, implementado mesma interface ou derivada de mesma classe), se comportam de maneiras diferentes (menores de mesmo nome do método).

Eu acho implementação de métodos da mesma assinatura em diferentes classes (que têm algum tipo de relação de herança ou usando estende ou implementa) é método de substituição e também o polimorfismo, pois desta forma estamos a conseguir muitas formas da mesma assinatura do método.

Eu acho que às vezes objetos são chamados de forma dinâmica. Você não tem certeza se o objeto seria um triângulo, quadrado etc em forma de poli clássico. exemplo.

Assim, para deixar todas essas coisas para trás, nós apenas chamar a função de classe derivada e assumir a da classe dinâmica será chamado.

Você não se importaria se o seu quadrado, triângulo ou retângulo. Você só se preocupam com a área. Daí o método getArea será chamado, dependendo do objeto dinâmico passou.

O polimorfismo é a capacidade de uma função para adaptar automaticamente a aceitar dados de entrada de diferentes tipos de dados. Você pode 'Adicionar' dois duplos '1.1' e '2.2' e receber '3.3' ou 'Adicionar' duas cordas "Pilha" e "estouro" e obter "StackOverflow".

O polimorfismo é quando diferentes objetos responder ao mesmo método de uma maneira diferente. Por exemplo, um carro se move sobre a estrada quando uma pessoa anda na estrada. Esses são dois objetos que respondem à mesma estrada de uma maneira diferente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top