He mirado otras definiciones y explicaciones y ninguna de ellas me satisface. Quiero ver si alguien puede definir el polimorfismo en como máximo dos oraciones sin usar ningún código o ejemplo. No quiero escuchar 'Entonces tienes una persona / automóvil / abrelatas ...' o cómo se deriva la palabra (a nadie le impresiona que sepas lo que significa poli y morph). Si tienes una buena comprensión de lo que es el polimorfismo y tienes un buen dominio del inglés, entonces deberías poder responder a esta pregunta en una definición breve, aunque densa. Si su definición define con precisión el polimorfismo pero es tan densa que requiere un par de lecturas, eso es exactamente lo que estoy buscando.
¿Por qué solo dos oraciones? Porque una definición es corta e inteligente. Una explicación es larga y contiene ejemplos y código. Busque aquí las explicaciones (la respuesta en esas páginas no es satisfactoria para mi pregunta):
Polimorfismo vs anulación vs sobrecarga
Trate de describir el polimorfismo lo más fácil que pueda
¿Por qué hago esta pregunta? Porque me hicieron la misma pregunta y descubrí que no pude encontrar una definición satisfactoria (según mis estándares, que son bastante altos). Quiero ver si alguna de las grandes mentes de este sitio puede hacerlo.
Si realmente no puede cumplir con el requisito de dos oraciones (es un tema difícil de definir), entonces está bien si lo pasa. La idea es tener una definición que realmente defina qué es el polimorfismo y no explique qué hace o cómo usarlo (¿entiendes la diferencia?).
fuente
Respuestas:
El polimorfismo permite la expresión de algún tipo de contrato, con potencialmente muchos tipos implementando ese contrato (ya sea a través de herencia de clase o no) de diferentes formas, cada una de acuerdo con su propio propósito. El código que utiliza ese contrato no debería (*) tener que preocuparse por la implementación involucrada, solo que el contrato se cumplirá.
(*) En el caso ideal, de todos modos, ¡obviamente, con bastante frecuencia, el código de llamada ha elegido la implementación adecuada muy deliberadamente!
fuente
La fruta se puede comer, por regla general, pero los diferentes tipos de fruta se consumen de diferentes formas. Una manzana, que es una fruta, se puede comer (porque es una fruta). También se puede comer un plátano (porque también es una fruta), pero de forma diferente a una manzana. Primero lo pelas.
Bueno, al menos lo hago, pero soy raro en algunos modales, así que, ¿qué sé yo?
Esto ilustra la herencia (la fruta se puede comer), el polimorfismo (algo que come fruta puede comer todo tipo de fruta) y la encapsulación (un plátano tiene piel).
En serio, la herencia de objetos, el polimorfismo, la encapsulación, las cosas virtuales, las cosas abstractas, las cosas privadas, las cosas públicas, todos estos son conceptos difíciles. Si alguien quiere tener una definición de 2 oraciones de esto, por favor marque la pregunta como una variante de código de golf, porque dos de esas oraciones tendrán que ser tan concisas que, a menos que sepa lo que es, no aprenderá lo suficiente. para saber sobre qué necesita aprender más.
fuente
El polimorfismo es declarar una interfaz uniforme que no reconoce los tipos, dejando los detalles de implementación a tipos concretos que implementan la interfaz.
fuente
Wikipedia: el polimorfismo es una característica del lenguaje de programación que permite manejar valores de diferentes tipos de datos utilizando una interfaz uniforme. Bastante sencillo para mí.
fuente
En realidad, existen múltiples formas de polimorfismo y existe bastante controversia al respecto; incluso puede ver profesores de informática que no pueden definirlo correctamente. Soy consciente de tres tipos:
polimorfismo ad-hoc (parece un pato y camina como un pato => es un pato). Se puede ver en Haskell y Python, por ejemplo.
polimorfismo genérico (donde un tipo es una instancia de algún tipo genérico). Se puede ver en C ++, por ejemplo (el vector de int y el vector de cadena tienen un tamaño de función miembro).
polimorfismo de subtipo (donde un tipo hereda de otro tipo). Puede verse en la mayoría de los lenguajes de programación OO (es decir, Triangle is a Shape).
fuente
Realmente entiendo por qué haces esta pregunta. Entiendo el polimorfismo, pero estaba en una entrevista de trabajo y me pidieron que diera una definición breve y clara de polimorfismo. Como no podía dar una definición clara y corta, comencé a pensar en ello y aquí está mi definición:
La capacidad de los objetos de un tipo de tener la misma interfaz, pero una implementación diferente de esta interfaz.
fuente
Definición :
El polimorfismo es una palabra de $ 10 para una idea de $ 1: cuando pido que se haga algo, no me importa cómo se logre, siempre que el resultado final sea apropiado. Mientras el servicio se brinde correctamente, no me importa la implementación .
Discusión
Si bien se usa comúnmente en el desarrollo de software, especialmente en sistemas desarrollados siguiendo principios orientados a objetos, el polimorfismo es fundamentalmente un principio del mundo real y debe definirse en términos del mundo real, no tecnológicos.
Ejemplos
Cuando quiero hacer una llamada telefónica, levanto un teléfono, marco un número y hablo con la persona que está al otro lado. No me importa quién hizo el teléfono, qué tecnología utiliza, si es cableado, inalámbrico, móvil o VOIP, o si está en garantía.
Cuando quiero imprimir un documento, lo imprimo. No me importa el lenguaje de implementación, la marca de la impresora, el estilo de conexión, la elección de consumibles o la calidad del papel.
fuente
Encapsulation
para míVarias implementaciones de la misma interfaz.
Ejemplo: muchos modelos de teléfono implementan la interfaz de teclado numérico.
fuente
El polimorfismo es una estrategia orientada a objetos que se utiliza al diseñar modelos de objetos para ayudar a simplificar el código. En su núcleo, el polimorfismo es la capacidad de definir dos objetos similares pero diferentes, y luego tratar los dos objetos como si fueran iguales.
Ok, eso es difícil ...
fuente
Solo pensé en agregar mi propia interpretación de lo que es el polimorfismo: muy genéricamente, el polimorfismo es el acto de proporcionar una única interfaz a entidades de diferentes tipos .
Eso es bastante genérico, pero esa es la única forma que se me ocurre de envolver los tres tipos de polimorfismos que conozco: ad hoc , paramétrico y subtipo . Entraré en más detalles a continuación y ordenaré los tipos de polimorfismo por nombre, alfabéticamente. Lo más probable es que el que le interesa sea el polimorfismo de subtipo , que es el último.
Polimorfismo ad hoc
El polimorfismo ad hoc es el acto de proporcionar múltiples implementaciones del mismo método para diferentes tipos de parámetros. En OOP , generalmente se conoce como sobrecarga de métodos . Por ejemplo:
Ambos
format
métodos comparten una única interfaz , pero funcionan en entidades de diferentes tipos .Polimorfismo paramétrico
El polimorfismo paramétrico es el acto de hacer que una clase (o método) funcione en un tipo que es en sí mismo un parámetro de la clase (o método). A menudo se lo conoce como genérico .
Por ejemplo, Java
List[T]
espera un parámetroT
en el momento de la instanciación, y este parámetro define el tipo de objeto resultante.Tenga en cuenta para los puristas que estoy ignorando intencionalmente los tipos crudos, ya que siento que simplemente enturbiarían las aguas en este contexto.
List[String]
yList[Date]
comparten una única interfaz , pero funcionan (y son) de diferentes tipos .Polimorfismo de subtipo
El polimorfismo de subtipo es probablemente lo que quiso decir inicialmente en su pregunta: es el acto de proporcionar una única interfaz a múltiples implementaciones del mismo tipo.
Para usar el ejemplo habitual:
Animal
proporciona un contrato que todas las implementaciones deben respetar.Dog
es unAnimal
, y como tal admite todas las operaciones queAnimal
declara. De acuerdo con el principio de sustitución de Liskov , esto le permite usar una instancia deDog
dondeAnimal
se espera una instancia de (pero no al revés).Si
Cat
yDog
son ambas subclases deAnimal
, entonces comparten una única interfaz, pero de hecho son tipos diferentes .Me estoy yendo un poco por la tangente aquí, pero el polimorfismo de subtipo es (creo) el único que permite la anulación : el acto de redefinir el comportamiento de un método definido por una clase principal. Esto a menudo se confunde con la sobrecarga que, como vimos antes, es un tipo de polimorfismo y, de hecho, no necesita subclases (ni clases, en realidad).
fuente
Parece que las mejores definiciones se proporcionan aquí, así que permítanme agregar mis dos centavos , por favor, solo para otros observadores. Espero que pueda ayudar más.
Hay dos tipos de polimorfismo:
Eso es simplemente sobrecarga de método y sobrecarga de operador
El primer término se hereda de la terminología de Java y C ++.
Pero en la terminología de .NET , solo el segundo ( me refiero al polimorfismo en tiempo de ejecución ) se supone realmente como polimorfismo y simplemente se le llama polimorfismo .
Y hasta donde yo sé, hay tres métodos para implementar el polimorfismo ( tiempo de ejecución ) .
Un ejemplo simple de polimorfismo basado en interfaz:
Salida:
fuente
El polimorfismo es una abstracción de codificación de software donde varias entidades subyacentes diferentes (generalmente datos, pero siempre nit) comparten una interfaz común que les permite verse y actuar de manera idéntica en tiempo de ejecución. Usamos esto como una técnica de desarrollo para imponer un comportamiento consistente en una amplia gama de instancias similares, pero no idénticas, con una implementación mínima absoluta, reduciendo así la expectativa de errores e inconsistencias.
Paul.
fuente
polimorfismo == clases múltiples + firmas del mismo método + comportamiento específico de la clase.
fuente
Las múltiples formas de un solo objeto se denominan polimorfismo.
fuente
Polimorfismo
Diferentes objetos pueden responder al mismo mensaje de diferentes maneras, permitiendo que los objetos interactúen entre sí sin saber su tipo exacto.
Vía: http://www.agiledata.org/essays/objectOrientation101.html
fuente
El polimorfismo es la capacidad de un objeto de aparecer y comportarse de manera diferente para la misma invocación. Ej: cada animal aparece y suena de manera diferente (cuando lo golpeas :))
fuente
El polimorfismo es una característica de los lenguajes de programación que permite que un objeto sea tratado como una instancia de su supertipo.
fuente
Dar un solo nombre a un conjunto de operaciones análogas sobre diferentes tipos. Cuando se hace bien, la analogía es obvia, por ejemplo, "sumar" números aritméticamente y "sumar" cadenas por concatenación (que suma sus longitudes).
fuente
Esta es la definición que siempre he seguido:
Dos objetos son polimórficos (con respecto a un protocolo en particular) entre ellos, si ambos responden a los mismos mensajes con la misma semántica.
El polimorfismo se trata de mensajes, se trata de poder responder el mismo conjunto de mensajes con la misma semántica.
¿Si dos objetos PUEDEN responder a vacío? pero la semántica del mensaje es diferente, entonces ... no son polimórficos.
fuente
El polimorfismo en el nivel inferior es la capacidad de invocar métodos definidos por los implementadores de una interfaz desde la instancia de la interfaz.
fuente
El polimorfismo es una característica de programación que permite que un objeto tenga muchos tipos ('formas') y le permite tratarlo como cualquiera de esos tipos dependiendo de lo que necesite hacer sin saber o preocuparse por sus otros tipos.
fuente
El polimorfismo es una funcionalidad del lenguaje que permite que el código algorítmico de alto nivel opere sin cambios en múltiples tipos de datos. Y la otra frase, para lo que fuera ... ;-P.
(Los tipos compatibles con C ++ se enumeran y contrastan en mi respuesta: polimorfismo en c ++ )
fuente
El concepto de polimorfismo se convirtió en un fenómeno últimamente. Aquí está la deriva real. Runtime define qué submétodo debe ser invocado por una referencia de una superclase. Ahora bien, ¿qué significa en la práctica? En realidad, no significa nada. Puede codificar simplemente sin polimorfismo. ¿Entonces por qué? Porque, si no tenemos el polimorfismo, tuvimos que memorizar todas las definiciones de funciones de subclase. El polimorfismo nos salva de esto en la práctica.
Puede definir una lista de la siguiente manera:
pero si busca
IList
, puede beneficiarse de la interfaz como:y use la
IList
referencia libremente. SuponiendoIList
que también se implementa en otra clase, puede usar métodos de esa clase desconocida a través de laIList
referencia nuevamente sin intentar recordar ese nombre de clase. Maravilloso, ¿no?Ahora, viene más información valiosa:
Java es polimórfico por defecto, mientras que .NET y C ++ no lo son, en MS, debe declarar la función base
virtual
(y en laoverride
palabra clave .NET ).Además, hay 2 reglas integrales en polimorfismo. Una es la herencia (a través de la interfaz implícita o mediante la extensión de clases) y la otra es invalidante. Sin anular, el polimorfismo no existe. Tenga en cuenta que la sobrecarga de métodos (que siempre en una sola clase) es también un tipo de polimorfismo "minimalista".
fuente
Para una firma de método dada, se ejecutan diferentes implementaciones de métodos para clases diferentes, relacionadas jerárquicamente.
fuente
El polimorfismo es la capacidad de usar diferentes clases que implementan una interfaz común (o extienden una clase base común) de una manera común, sin necesidad de ahora la implementación específica, y usando solo los métodos disponibles en la interfaz común.
Es decir: en Java, como ArrayList y LinkedList implementan List, si declaras una variable como List, siempre puedes realizar las operaciones permitidas en List, sin importar si tu variable fue instanciada como ArrayList o LinkedList.
fuente
Las entidades del mismo tipo (es decir, implementadas con la misma interfaz o derivadas de la misma clase) se comportan de diferentes maneras (bajo el mismo nombre de método).
fuente
Creo que la implementación de métodos de la misma firma en diferentes clases (que tienen algún tipo de relación de herencia ya sea usando extendidos o implementados) es un método anulado y también polimorfismo porque de esta manera estamos logrando muchas formas de la misma firma de método.
fuente
Supongo que a veces los objetos se llaman dinámicamente. No está seguro de si el objeto sería un triángulo, cuadrado, etc. en un poli de forma clásica. ejemplo.
Entonces, para dejar todas esas cosas atrás, simplemente llamamos a la función de la clase derivada y asumimos que se llamará a la de la clase dinámica.
No te importaría si es un cuadrado, un triángulo o un rectángulo. Solo te preocupas por la zona. Por lo tanto, se llamará al método getArea dependiendo del objeto dinámico pasado.
fuente
El polimorfismo es la capacidad de una función de adaptarse automáticamente para aceptar datos de entrada de diferentes tipos de datos. Puede 'Agregar' dos dobles '1.1' y '2.2' y obtener '3.3' o 'Agregar' dos cadenas "Stack" y "Overflow" y obtener "StackOverflow".
fuente
El polimorfismo es cuando diferentes objetos responden al mismo método de manera diferente. Por ejemplo, un automóvil se mueve en la carretera mientras una persona camina por la carretera. Son dos objetos que responden al mismo camino de diferente manera.
fuente