oop - tag - Polimorfismo: definir en solo dos oraciones
sistemas de recomendacion pdf (30)
Miré otras definiciones y explicaciones y ninguna de ellas me satisface. Quiero ver si alguien puede definir el polimorfismo en un máximo de dos oraciones sin usar ningún código o ejemplos. No quiero escuchar ''Así que 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 tiene una buena comprensión de qué es el polimorfismo y tiene un buen dominio del inglés, entonces debería 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, entonces 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ódigos. Busque explicaciones (la respuesta en esas páginas no es satisfactoria para mi pregunta):
Polimorfismo vs Sobrecarga vs Sobrecarga
Intenta describir el polimorfismo tan fácil como puedas
¿Por qué estoy haciendo esta pregunta? Porque me hicieron la misma pregunta y descubrí que no podía encontrar una definición satisfactoria (según mi criterio, que es bastante alta). Quiero ver si alguna de las grandes mentes en este sitio puede hacerlo.
Si realmente no puede cumplir el requisito de dos oraciones (es un tema difícil de definir), entonces está bien si pasa. La idea es tener una definición que realmente defina qué polimorfismo es y no explica qué hace o cómo usarlo (¿obtener la diferencia?).
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 mediante extends o implements) es anulación de método y también polimorfismo porque de esta manera estamos logrando muchas formas de la misma firma de método.
Dar un nombre único a un conjunto de operaciones análogas en diferentes tipos. Cuando se hace bien, la analogía es obvia, por ejemplo, "sumando" números aritméticamente y "sumando" cadenas por concatenación (que suma sus longitudes).
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, ¿qué significa en la práctica? Significa en realidad nada. Puedes codificar simplemente sin polimorfismo. ¿Entonces por qué? Porque, si no tenemos el polimorfismo, tuvimos que memorizar todas las definiciones de las funciones de las subclases. El polimorfismo nos salva de esto en la práctica.
Puede definir una lista de la siguiente manera:
List list = new List();
pero si busca IList
, puede beneficiarse de la interfaz como:
IList list = new List();
y use la referencia IList
libremente. Suponiendo que IList
también se implementa en otra clase, puede usar métodos de esa clase desconocida a través de la referencia IList
nuevamente sin tratar de recordar ese nombre de clase. Maravilloso, ¿verdad?
Ahora, viene información más valiosa:
Java es por defecto polimórfico, mientras que .NET y C ++ no lo son, en MS, tiene que declarar la función base virtual
(y en la palabra clave override
.NET).
Además, hay 2 reglas integrales en el polimorfismo. Una es la herencia (a través de la interfaz impl. O mediante la extensión de la clase) y la otra está anulando. Sin anulación, 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".
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.
El polimorfismo es la capacidad de un objeto para aparecer y comportarse de manera diferente para la misma invocación. ex: cada animal aparece y suena de manera diferente (cuando lo tocas :))
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 ''Pila'' y ''Desbordamiento'' y obtener ''''.
El polimorfismo es la capacidad de utilizar diferentes clases que implementan una interfaz común (o extienden una clase base común) de una manera común, sin necesidad de implementar ahora específicamente, y utilizando solo los métodos disponibles en la interfaz común.
Es decir: en Java, como ArrayList y LinkedList implementan List, si declara una variable como List, siempre puede realizar las operaciones permitidas en List, independientemente de si la variable se instancia como ArrayList o LinkedList.
El polimorfismo es una abstracción de codificación de software donde varias entidades subyacentes diferentes (generalmente datos, pero nit siempre) comparten una interfaz común que les permite verse y actuar de manera idéntica en el 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.
Pablo.
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.
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 conocer o preocuparse por sus otros tipos.
El polimorfismo es una estrategia orientada a objetos que se usa 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 aunque diferentes, y luego tratar los dos objetos como si fueran iguales.
Ok eso es difícil ...
El polimorfismo está declarando una interfaz uniforme que no tiene en cuenta el tipo de letra, dejando los detalles de implementación en tipos concretos que implementan la interfaz.
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 la herencia de clase o no) de diferentes maneras, cada uno de acuerdo con su propio propósito. El código que usa ese contrato no debe (*) preocuparse por la implementación involucrada, solo que el contrato será obedecido.
(*) En el caso ideal, de todos modos, obviamente, ¡con bastante frecuencia el código de llamada ha elegido la implementación apropiada muy deliberadamente!
El polimorfismo se produce cuando diferentes objetos responden al mismo método de una manera diferente. Por ejemplo, un automóvil se mueve en la carretera mientras una persona camina en la carretera. Esos son dos objetos que responden al mismo camino de una manera diferente.
En realidad, hay múltiples formas de polimorfismo y hay bastante controversia sobre eso; incluso puede ver profesores de CS que no pueden definirlo correctamente. Conozco 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). Se puede ver en la mayoría de los lenguajes de programación OO (es decir, el triángulo es una forma).
Esta es la definición que siempre he seguido:
Dos objetos son polimórficos (con respecto a un protocolo particular) entre ellos, si ambos responden a los mismos mensajes con la misma semántica.
El polimorfismo se trata de mensajes, se trata de ser capaz de 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.
La fruta se puede comer, como regla general, pero los diferentes tipos de frutas se comen de diferentes maneras. 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 una manera diferente a una manzana. Lo pelas primero.
Bueno, al menos yo sí, pero soy raro de alguna manera, entonces qué sé.
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 una 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 frases para esto, por favor marque la pregunta como una variante de golf de código, porque dos de esas oraciones tendrán que ser tan escuetas que a menos que sepa lo que es, no aprenderá lo suficiente sobre para saber de lo que necesita aprender más.
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).
Las formas múltiples de un solo objeto se llaman Polimorfismo.
Múltiples implementaciones de la misma interfaz.
Ejemplo: muchos modelos de teléfono implementan la interfaz del teclado numérico.
Para una firma de método dada, se implementan diferentes métodos para diferentes clases relacionadas jerárquicamente.
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:
1. Compile-time (static) polymorphism or (ad hoc) polymorphism.
Eso es simplemente sobrecarga de métodos y sobrecarga del operador
2. Run time or (dynamic) polymorphism.
El primer término se hereda de la terminología de Java y C ++.
Pero en la terminología .NET solo el segundo ( me refiero al polimorfismo de tiempo de ejecución ) se supone realmente como polimorfismo y simplemente se llama polimorfismo .
Y hasta donde sé, hay tres métodos para implementar el polimorfismo ( tiempo de ejecución ).
1. Parametric polymorphism or simply the use of generics (templates in C++).
2. Inheritance-based polymorphism or subtyping.
3. Interface-based polymorphism.
Un ejemplo simple de polimorfismo basado en interfaz:
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();
}
}
Salida:
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:
Realmente entiendo por qué estás haciendo esta pregunta. Entiendo el polimorfismo, pero estaba en una entrevista de trabajo y me pidieron que diera una definición breve y clara del polimorfismo. Como no podía dar una definición clara y breve, comencé a pensar en ello y aquí está mi definición:
La capacidad de los objetos de un tipo para tener una y la misma interfaz, pero la implementación diferente de esta interfaz.
Solo pensé en agregar mi propia interpretación de qué 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 en que puedo pensar para envolver los tres tipos de polimorfismos que conozco: ad hoc , paramétrico y subtipo . Iré con más detalles a continuación, y he ordenado los tipos de polimorfismo por nombre, alfabéticamente. El que le interesa es probablemente el subtipo de polimorfismo , 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étodo . Por ejemplo:
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 métodos de format
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éricos .
Por ejemplo, la List[T]
de Java List[T]
espera un parámetro T
en el tiempo de instanciación, y este parámetro define el tipo del objeto resultante.
Tenga en cuenta para los puristas que estoy ignorando a propósito los tipos crudos ya que siento que simplemente enturbiarían las aguas en este contexto.
List[String]
y List[Date]
comparten una sola interfaz , pero trabajan en (y son) diferentes tipos .
Polimorfismo de subtipo
El polimorfismo de subtipo es probablemente lo que inicialmente quiso decir en su pregunta: es el acto de proporcionar una interfaz única para múltiples implementaciones del mismo tipo.
Para usar el ejemplo habitual: Animal
proporciona un contrato que todas las implementaciones deben respetar. Dog
es un Animal
y, como tal, es compatible con todas las operaciones que Animal
declara. De acuerdo con el principio de sustitución de Liskov , esto le permite usar una instancia de Dog
donde se espera una instancia de Animal
(pero no al revés).
Si Cat
y Dog
son ambas subclases de Animal
, entonces comparten una interfaz única, pero de hecho son de tipos diferentes .
Me voy en una tangente aquí, pero el polimorfismo de subtipo es (creo) el único que permite anular : el acto de redefinir el comportamiento de un método definido por una clase padre. Esto a menudo se confunde con la sobrecarga que, como vimos antes, es un tipo de polimorfismo y de hecho no necesita subclases (en realidad no necesita clases).
Supongo que a veces los objetos son dinámicamente llamados. No está seguro de si el objeto sería un triángulo, un cuadrado, etc. en una forma clásica poli. ejemplo.
Entonces, para dejar atrás todas esas cosas, simplemente llamamos a la función de clase derivada y suponemos que se llamará a la de la clase dinámica.
No le importaría si es un cuadrado, triángulo o rectángulo. Solo te importa el área. Por lo tanto, se llamará al método getArea dependiendo del objeto dinámico pasado.
Wikipedia: El polimorfismo es una característica del lenguaje de programación que permite manejar los valores de diferentes tipos de datos utilizando una interfaz uniforme. Bastante sencillo para mí.
polimorfismo == clases múltiples + firmas del mismo método + comportamiento específico de clase.
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 y cuando el resultado final sea el adecuado. Siempre que el servicio se proporcione 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, tomo un teléfono, marque un número y hablo con la fiesta en el otro extremo. No me importa quién fabricó el teléfono, qué tecnología usa, si está cableado, inalámbrico, móvil o VOIP, o si está bajo 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 los consumibles o la calidad del papel.
El polimorfismo es la 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 oración, lo que sea para ... ;-P.
(Los tipos de compatibilidad de C ++ se enumeran y contrastan en mi respuesta: Polimorfismo en c ++ )
Polimorfismo
Diferentes objetos pueden responder al mismo mensaje de diferentes maneras, permiten que los objetos interactúen entre ellos sin saber su tipo exacto.
Vía: http://www.agiledata.org/essays/objectOrientation101.html