Eu olhei para outras definições e explicações e nenhuma delas me satisfaz. Quero ver se alguém pode definir polimorfismo em no máximo duas frases sem usar nenhum código ou exemplo. Eu não quero ouvir 'Então você tem uma pessoa / carro / abridor de latas ...' ou como a palavra é derivada (ninguém está impressionado que você saiba o que significa poli e metamorfose). Se você tem uma boa compreensão do que é polimorfismo e tem um bom domínio do inglês, então você deve ser capaz de responder a esta pergunta em uma definição curta, embora densa. Se sua definição define polimorfismo com precisão, mas é tão densa que exige algumas leituras, então é exatamente o que estou procurando.
Por que apenas duas frases? Porque uma definição é curta e inteligente. Uma explicação é longa e contém exemplos e códigos. Procure aqui as explicações (as respostas nessas páginas não são satisfatórias para a minha pergunta):
Polimorfismo vs. Substituição vs. Sobrecarga
Tente descrever o polimorfismo o mais fácil que puder
Por que estou fazendo essa pergunta? Porque me fizeram a mesma pergunta e descobri que não era capaz de chegar a uma definição satisfatória (pelos meus padrões, que são bastante elevados). Eu quero ver se alguma das grandes mentes neste site pode fazer isso.
Se você realmente não pode fazer o requisito de duas frases (é um assunto difícil de definir), então está tudo bem se você continuar. A ideia é ter uma definição que realmente defina o que é polimorfismo e não explique o que ele faz ou como usá-lo (entendeu a diferença?).
fonte
Respostas:
O polimorfismo permite a expressão de algum tipo de contrato, com potencialmente muitos tipos implementando esse contrato (seja por herança de classe ou não) de maneiras diferentes, cada um de acordo com seu próprio propósito. O código que usa esse contrato não deve (*) se preocupar com a implementação envolvida, apenas que o contrato será obedecido.
(*) No caso ideal, de qualquer maneira - obviamente, com bastante frequência, o código de chamada escolheu a implementação apropriada deliberadamente!
fonte
Frutas podem ser comidas, como regra geral, mas diferentes tipos de frutas são consumidos de maneiras diferentes. Uma maçã, que é uma fruta, pode ser comida (porque é uma fruta). Uma banana também pode ser comida (porque também é uma fruta), mas de maneira diferente de uma maçã. Você o descasca primeiro.
Bem, pelo menos eu faço, mas sou estranho em alguns modos, então o que eu sei.
Isso ilustra herança (frutas podem ser comidas), polimorfismo (algo que come frutas pode comer todos os tipos de frutas) e encapsulamento (uma banana tem casca).
Falando sério, herança de objetos, polimorfismo, encapsulamento, coisas virtuais, coisas abstratas, coisas privadas, coisas públicas, todos esses são conceitos difíceis. Se alguém deseja absolutamente ter uma definição de 2 frases para isso, marque a pergunta como uma variante do código de golfe, porque duas dessas frases terão que ser tão concisas que, a menos que você saiba o que é, não aprenderá o suficiente sobre para saber o que você precisa saber mais.
fonte
Polimorfismo é declarar uma interface uniforme que não reconhece o tipo, deixando os detalhes de implementação para tipos concretos que implementam a interface.
fonte
Wikipedia: Polimorfismo é um recurso de linguagem de programação que permite que valores de diferentes tipos de dados sejam tratados usando uma interface uniforme. Muito simples para mim.
fonte
Na verdade, existem várias formas de polimorfismo e há bastante controvérsia sobre isso; você pode até ver professores de ciência da computação que não conseguem defini-lo adequadamente. Estou ciente de três tipos:
polimorfismo ad-hoc (parece 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 (vetor de int e vetor de string têm um tamanho de função de membro).
polimorfismo de subtipo (onde um tipo herda de outro tipo). Pode ser visto na maioria das linguagens de programação OO (ou seja, Triangle é uma forma).
fonte
Eu realmente entendo porque você está fazendo esta pergunta. Eu entendo polimorfismo, mas estava em uma entrevista de emprego e fui convidado a dar uma definição curta e clara de polimorfismo. Porque eu não conseguia 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 terem uma e a mesma interface, mas diferentes implementações dessa interface.
fonte
Definição :
Polimorfismo é uma palavra de $ 10 para uma ideia de $ 1 - que quando eu peço que algo seja feito, não me importo como isso seja alcançado, desde que o resultado final seja apropriado. Contanto que o serviço seja fornecido corretamente, não me importo com a implementação .
Discussão
Embora seja comumente usado no desenvolvimento de software, especialmente em sistemas desenvolvidos seguindo princípios orientados a objetos, o polimorfismo é fundamentalmente um princípio do mundo real e deve ser definido em termos do mundo real, não tecnológicos.
Exemplos
Quando eu quero fazer uma ligação, pego o telefone, disco um número e falo com a pessoa do outro lado da linha. Eu não me importo com quem fez o telefone, qual tecnologia ele usa, se é com fio, sem fio, móvel ou VOIP, ou se está na garantia.
Quando quero imprimir um documento, eu o imprimo. Não me importo com a linguagem de implementação, marca da impressora, estilo de conexão, escolha de consumível ou qualidade do papel.
fonte
Encapsulation
para mimVárias implementações da mesma interface.
Exemplo: Muitos modelos de telefone implementam a interface do teclado numérico.
fonte
O polimorfismo é uma estratégia orientada a objetos usada ao projetar modelos de objetos, para ajudar a simplificar o código. Em seu polimorfismo central está a capacidade de definir dois objetos semelhantes, porém diferentes, e então tratar os dois objetos como se fossem iguais.
Ok, isso é difícil ....
fonte
Eu apenas pensei em adicionar minha própria interpretação do que é polimorfismo: muito genericamente, polimorfismo é o ato de fornecer uma única interface para entidades de diferentes tipos .
Isso é bastante genérico, mas é a única maneira que consigo pensar de envolver todos os três tipos de polimorfismos que conheço: ad hoc , paramétrico e subtipo . Entrarei em mais detalhes abaixo e classificarei os tipos de polimorfismo por nome, em ordem alfabética. Aquele em que você está interessado é provavelmente o polimorfismo de subtipo , que é o último.
Polimorfismo ad hoc
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:
Ambos os
format
métodos compartilham uma única interface , mas funcionam em entidades de tipos diferentes .Polimorfismo paramétrico
Polimorfismo paramétrico é o ato de fazer uma classe (ou método) funcionar em um tipo que é ele mesmo um parâmetro da classe (ou método). Muitas vezes é referido como genérico .
Por exemplo, o Java
List[T]
espera um parâmetroT
no momento da instanciação e esse parâmetro define o tipo do objeto resultante.Observe para os puristas que estou ignorando propositalmente os tipos crus, pois sinto que eles apenas turvariam as águas neste contexto.
List[String]
eList[Date]
compartilham uma única interface , mas funcionam (e são) tipos diferentes .Polimorfismo de subtipo
Polimorfismo de subtipo é provavelmente o que você quis dizer inicialmente em 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
é umAnimal
e, como tal, suporta todas as operações queAnimal
declara. De acordo com o princípio de substituição de Liskov , isso permite que você use uma instância deDog
onde uma instância deAnimal
é esperada (mas não o contrário).Se
Cat
eDog
forem subclasses deAnimal
, então eles compartilham uma única interface, mas na verdade são tipos diferentes .Estou saindo um pouco tangente aqui, mas o polimorfismo de subtipo é (eu acho) o único que permite sobrescrever : o ato de redefinir o comportamento de um método definido por uma classe pai. Muitas vezes, isso é confundido com sobrecarga que, como vimos antes, é um tipo de polimorfismo e não precisa de subclasse (nem de classes, na verdade).
fonte
Parece que as melhores definições são fornecidas aqui, então deixe-me adicionar meus dois centavos , por favor, apenas para outros observadores. Espero que possa ajudar mais.
Existem dois tipos de polimorfismo:
Isso é simplesmente sobrecarga de método e sobrecarga de operador
O primeiro termo é herdado da terminologia Java e C ++.
Mas na terminologia .NET, apenas o segundo ( refiro-me ao polimorfismo em tempo de execução ) é realmente considerado polimorfismo e simplesmente chamado de polimorfismo .
E, pelo que eu sei, existem três métodos para implementar o polimorfismo ( tempo de execução ) .
Um exemplo simples de polimorfismo baseado em interface:
Resultado:
fonte
Polimorfismo é uma abstração de codificação de software em que várias entidades subjacentes diferentes (geralmente dados, mas nit sempre) compartilham uma interface comum que permite que pareçam e atuem de forma idêntica em tempo de execução. Usamos isso como uma técnica de desenvolvimento para impor um comportamento consistente em uma ampla gama de instâncias semelhantes, mas não idênticas, com uma implementação mínima absoluta, reduzindo assim a expectativa de bugs e inconsistências.
Paulo.
fonte
polimorfismo == classes múltiplas + assinaturas do mesmo método + comportamento específico da classe.
fonte
Várias formas de um único objeto são chamadas de polimorfismo.
fonte
Polimorfismo
Objetos diferentes podem responder à mesma mensagem de maneiras diferentes, permitindo que os objetos interajam uns com os outros sem saber seu tipo exato.
Via: http://www.agiledata.org/essays/objectOrientation101.html
fonte
Polimorfismo é a capacidade de um objeto de aparecer e se comportar de maneira diferente para a mesma invocação. ex: cada animal parece e soa de forma diferente (quando você bate nele :))
fonte
O polimorfismo é uma característica das linguagens de programação que permite que um objeto seja tratado como uma instância de seu supertipo.
fonte
Dar um único nome a um conjunto de operações análogas em diferentes tipos. Quando bem feita, a analogia é óbvia, por exemplo, "adicionar" números aritmeticamente e "adicionar" strings por concatenação (que soma seus comprimentos).
fonte
Esta é a definição que sempre segui:
Dois objetos são polimórficos (com relação a um determinado protocolo) entre eles, se ambos respondem às mesmas mensagens com a mesma semântica.
Polimorfismo é sobre mensagens, é sobre ser capaz de responder ao mesmo conjunto de mensagens com a mesma semântica.
Se dois objetos PODEM responder ao vazio? mas a semântica da mensagem é diferente, então .. eles não são polimórficos.
fonte
O polimorfismo no nível inferior é a capacidade de invocar métodos que são definidos pelos implementadores de uma interface da instância da interface.
fonte
O polimorfismo é um recurso de programação que permite que um objeto tenha muitos tipos ('formas') e permite tratá-lo como qualquer um desses tipos, dependendo do que você precisa fazer, sem saber ou se preocupar com os outros tipos.
fonte
Polimorfismo é a funcionalidade da linguagem que permite que um código algorítmico de alto nível opere inalterado em vários tipos de dados. E a outra frase, seja lá o que for ... ;-P.
(Os tipos suportados por C ++ são listados e contrastados em minha resposta: Polimorfismo em c ++ )
fonte
O conceito de polimorfismo se tornou um fenômeno recentemente. Aqui está a tendência real. O tempo de execução define qual submethod deve ser invocado por uma referência de uma superclasse. Agora, o que significa na prática? Na verdade, não significa nada. Você pode codificar simplesmente sem polimorfismo. Então por que? Porque, se não tivermos o polimorfismo, teríamos que memorizar todas as definições das funções da subclasse. O polimorfismo nos salva disso na prática.
Você pode definir uma lista da seguinte maneira:
mas se você verificar
IList
, poderá se beneficiar da interface como:e use a
IList
referência livremente. Supondo queIList
também esteja implementado em outra classe, você pode usar métodos dessa classe desconhecida por meio deIList
referência novamente sem tentar lembrar o nome da classe. Maravilhoso, não é?Agora, informações mais valiosas estão chegando:
Java é por padrão polimórfico, enquanto .NET e C ++ não são, no MS, você deve declarar a função base
virtual
(e naoverride
palavra-chave .NET ).Além disso, existem 2 regras integrais no polimorfismo. Um é a herança (via implementação de interface ou via extensão de classe) e o outro é sobreposição. Sem substituir, o polimorfismo não existe. Observe que a sobrecarga de método (que sempre ocorre em uma única classe) também é um tipo de polimorfismo "minimalista".
fonte
Para uma determinada assinatura de método, diferentes implementações de método são executadas para diferentes classes hierarquicamente relacionadas.
fonte
Polimorfismo é a capacidade de usar diferentes classes que implementam uma interface comum (ou estendem uma classe base comum) de uma forma comum, sem a necessidade de agora a implementação específica, e usando apenas os métodos disponíveis na interface comum.
Ou seja: Em Java, como ArrayList e LinkedList implementam List, se você declarar uma variável como List, você sempre pode executar as operações permitidas em List, não importando se sua variável foi instanciada como ArrayList ou LinkedList.
fonte
Entidades do mesmo tipo (ou seja, implementadas na mesma interface ou derivadas da mesma classe), se comportam de maneiras diferentes (sob o mesmo nome de método).
fonte
Eu acho que a implementação de métodos da mesma assinatura em classes diferentes (tendo algum tipo de relação de herança usando extends ou implementa) é uma substituição de método e também polimorfismo, porque dessa forma estamos alcançando muitas formas da mesma assinatura de método.
fonte
Acho que às vezes os objetos são chamados dinamicamente. Você não tem certeza se o objeto seria um triângulo, quadrado etc. em um polígono clássico. exemplo.
Portanto, para deixar todas essas coisas para trás, apenas chamamos a função da classe derivada e assumimos que aquela da classe dinâmica será chamada.
Você não se importaria se fosse um quadrado, triângulo ou retângulo. Você só se preocupa com a área. Portanto, o método getArea será chamado dependendo do objeto dinâmico passado.
fonte
Polimorfismo é a capacidade de uma função se adaptar automaticamente para aceitar dados de entrada de diferentes tipos de dados. Você pode 'Adicionar' dois duplos '1.1' e '2.2' e obter '3,3' ou 'Adicionar' duas strings "Pilha" e "Estouro" e obter "PilhaOverflow".
fonte
Polimorfismo é quando objetos diferentes respondem ao mesmo método de maneira diferente. Por exemplo, um carro se move na estrada enquanto uma pessoa anda na estrada. Esses são dois objetos que respondem à mesma estrada de uma maneira diferente.
fonte