Discusión:Polimorfismo (informática)

Contenido de la página no disponible en otros idiomas.
De Wikipedia, la enciclopedia libre
Esta página le interesa al Wikiproyecto Informática.

La definición de polimorfismo en este artículo es correcta. No se puede decir lo mismo sobre la expresión "polimorfismo dinámico": el polimorfismo es siempre dinámico, no lo hay "estático". --JavierCantero 16:58 10 oct, 2004 (CEST)

Acotación: El polimorfismo en ML es estático, pero de naturaleza diferente al de los lenguajes orientados a objetos. Es como un cambio de perspectiva: En lugar de tener diferentes operaciones especializadas para cada clase u objeto, en ML se definen las operaciones y se aplican uniformamente a valores cualesquiera, cuando estos cumplen un mínimo de condiciones estáticas (verificadas con el tipo).


En la discursion sobre programacion orientada a objetos he puesto algunas consideraciones, que quizas podrian ser tenidas encuanta. Gracias de antemano. APG

Traducción[editar]

En cuanto al tipo estático y/o dinámico, haciendo la traducción desde la versión en inglés me encontré que se los denomina paramétrico y ad hoc. Respeté eso en la traducción; pero mantuve la clasificación que ya existía según creí conveniente. Ante cualquier cosa, no duden en comunicarse conmigo. --Matias (mensajes por aquí) 16:41 21 feb, 2005 (CET)

== OJO LA DEFINICIÓN DE ESTÁTICO Y DINÁMICO ESTÁN CAMBIADAS

La definición de estático y dinámico están al reves

== Ahora sí está bien lo de ESTATICO Y DINÁMICO

== Yo estaba buscando la definicion, y sin un ejemplo no me he enterado muy bien :)

En C++ se puede tener un apuntador a una clase virtual y efectuar "ligadura dinamica" el. Es decir, al invocar un metodo de las clases hijas, el apuntador automaticamente referenciara a la clase hija apropiada.

Que paso compañero, que bueno que compartas informacion, pero no insultes ni denigres a los compañeros.

bueno fuera de su discucion por que mejor no nos dan un ejemplo claro de polimorfismo de los dos tipos. gracias
ademas de discutir podrain tambien dar un ejemplo de polimorfismo con un programa sencillo por lo menos

Mover el contenido[editar]

Damas y caballeros, este contenido estaría mejor puesto en http://es.wikipedia.org/wiki/Tipos_de_Polimorfismo Puesto que existe una página en inglés http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming que trata correctamente el tema del polimorfismo en varios lenguajes de POO. Por favor, tengan presente que he creado la página para cuando se decida apoyar mi moción pueda yo dedicarme a colocar la traducción del artículo en inglés. Gracias por vuestro apoyo.--Otermin 12:30 26 sep 2007 (CEST)

ERROR GRAVE DEL CONCEPTO DE POLIMORFISMO[editar]

La definición de polimorfismo está totalmente mal. Polimorfismo y sobrecarga de métodos son dos cosas totalmente distintas, pero sí relacionadas. Ambas son características de la potencia de la programación orientada a objetos. Por favor, que el autor de este artículo se ilustre adecuadamente y corrija lo antes posible. Gracias. --Slion2000 (discusión) 13:54 29 jul 2008 (UTC)[responder]

Definición incorrecta[editar]

El artículo está describiendo la sobrecarga, que no es lo mismo que polimorfismo.

--213.201.24.129 (discusión) 11:10 15 may 2008 (UTC) yep[responder]

Como dicen es un error este artículo. Están definiendo la sobrecarga, no el polimorfismo.

El polimorfismo es la capacidad de que un objeto pueda contener diferentes tipos. Esto se suele dar en los lenguajes orientados a objetos (por las subclases).

Class Animal; class Perro es subclase de Animal;

Perro p; // Es del tipo Perro, pero también del tipo Animal.

Animal a = p; // Es correcto

No es así. El poliformismo no tiene nada que ver con que los tipos de la variable y el objeto que almacena pertenezcan a una misma jerarquía. Lee el artículo, ahí se aclara el punto varias veces y hasta en negrita. Se explica el ejemplo de Smalltalk, etc. Polimorfismo y sobrecarga son cosas bien distintas pero que se relacionan. Por ejemplo existe el polimorfismo ad hoc. --Charrua85 (discusión) 20:21 8 abr 2012 (UTC)[responder]

f

Un ejemplo mas claro...[editar]

Señores espero contribuir con este ejemplo:

Imaginen un juego de ajedrez con los objetos Rey, Reina, Alfil, Caballo, Torre y Peón, cada uno heredando del objeto Pieza. El método movimiento podría, usando polimorfismo, hacer el movimiento correspondiente de acuerdo a la clase objeto que se llama. Esto permite que en el programa se pueda llamar a Pieza.movimiento sin preocuparse de la implementación que tenga cada objeto en particular. Polimorfismo es la capacidad de llamar un método de objeto sin tener que conocer su tipo intrínseco, por lo tanto, el comportamiento de este método podrá variar dependiendo de cómo lo implemente el objeto que se esté usando. Permite no tomar en cuenta detalles de las clases especializadas de una familia de objetos.

Sin ofender, hay que quitar el contenido del artículo. Saludos. --190.16.205.90 (discusión) 03:21 3 jun 2008 (UTC)Leo Tronk[responder]

"Polimorfismo es la capacidad de llamar un método de objeto sin tener que conocer su tipo intrínseco, por lo tanto, el comportamiento de este método podrá variar dependiendo de cómo lo implemente el objeto que se esté usando." Así es, completamente de acuerdo.--Charrua85 (discusión) 20:25 8 abr 2012 (UTC)[responder]

Unos comentarios mas[editar]

La definición de polimorfismo que se aporta en este articulo es del todo confusa y a todas luces parece que no se domina lo que se pretende abarcar. Sin embargo la clasificacion si aporta una explicacion mas acertada aunque no entra a especificar claramente el polimorfismo dinamico.

El ejemplo de polimorfismo expuesto deberia ser eliminado y cambiado por un polimorfismo basado en la HERENCIA que es de donde parte y no basado en interfaces. Dudo, incluso, si deberia llarmase polimorfismo al empleo de interfaces de comportamiento de objetos.

Por ultimo, no tiene ningun sentido el apartado de ventajas del polimorfismo frente a la sobrecarga y el ejemplo no resulta acertado. Se trata de dos aspectos programaticos diferentes que se complementan.

J. Robledo (discusión) 08:07 24 jun 2008 (UTC)[responder]

Este artículo da información errónea.[editar]

Me sorprende ver este artículo en la Wikipedia y encima tan mal explicado, sin contar que está de forma errónea.

En ningún momento se ha de confundir la sobrecarga de operadores con el polimorfismo, aunque puedan parecer cosas parecidas NO son lo mismo. Sin embargo he mirado el historial y veo que aunque hay gente que lo arregla (al menos quitando esa información errónea), después aparece otro y lo deshace.

La sobrecarga es poder poner el mismo nombre a una función y se determina cual se usa por comprobación de tipos. El polimorfismo es la capacidad de una variable de pertenecer a varios tipos al mismo tiempo. Así por ejemplo en un programa de una empresa se podría tener simplemente: Persona.calcular_sueldo();

Y ya vale para todos los tipos que puede alvegar persona, como podrían ser Gerente, recepcioista, sra_limpieza...

Que no tiene nada que ver con la sobrecarga de operadores, que se podría llegar a confundir ya que puedes pensar: "si, pero yo puedo crearuna función sueldo(Gerente), sueldo(Recepcionista)... y eso es sobrecarga", si, pero resulta que no estamos haciendo eso, estamos trabajando todo el rato sobre el tipo "Persona", ej: un vector de Persona con todos los trabajadores. ¿Cuanto dinero vamos a tener que gastar en sueldos? int gasto = 0; for (int i = 0; i < vector.size(); ++i) gasto += vector[i].calcular_sueldo();

Polimorfismo: La mejor manera de entenderlo[editar]

Sólo hay que ver como funcionan en Java las clases que implementan la interfaz Collection. Esto es Polimorfismo.

Collection array = new ArrayList();
Collection hash = new HashMap();

array.add("X");
hash.add("X");

Los dos tienen acceso al método común que viene definido en la interfaz "add". Cada uno lo hace después como convenga a su implementación.—194.140.65.241 (discusión) 15:40 16 sep 2008 (UTC)[responder]

Polimorfismo...[editar]

Hay algo que siempre deben memorizar: el tipo de la varible que referencia la objeto determina que metodos pueden ser usados (llamados), pero el tipo del objeto (aquel que se empleo en la llamada a new) es el que establece cual de esos metodos. Es decir, si tenemos

  • UNO <-----(herencia) DOS
  • girar() girar()
  • mover() saltar()
  • correr() correr()
  • correr(int x)

y hacemos

  • UNO objeto = new DOS();

y hacemos las llamadas

  • objeto.girar() // se usa girar() en DOS por DOS la redefine
  • objeto.mover() // se usa mover() en UNO porque DOS no la redefine
  • objeto.correr() // se usa correr() en DOS porque DOS la redefine
  • objeto.correr(valor) // se usa correr(int x) en UNO porque en DOS no esta redefinida

..[editar]

Definición[editar]

La definición sigue estando mal. Para empezar, el polimorfismo se aplica a objetos, no hace falta mencionar las clases (ni hace falta siquiera que un lenguaje soporte clases para que soporte polimorfismo). La clasificación que figura en el artículo es... incomprensible, ni siquiera capto qué pretende decir. El ejemplo en C++ habla de una clase "superior" (?) llamada Empleado, que no existe [más]. El ejemplo en VB, más que "sencillo", es bastante rebuscado... Las afirmaciones de la ultima sección son, uh, incorrectas en el caso general.

En realidad no era mi idea escribir toda esta crítica, pero ya que está, lo dejo como una ayuda memoria para las correcciones. Es otro ejemplo del problema de inventarse las cosas de memoria, sin recurrir a fuentes fiables que permitan verificar lo que se afirma... ggenellina ¿comentarios? 07:12 31 ago 2010 (UTC)[responder]

Media pila[editar]

Estamos hablando de programación orientado a objetos (POO) y no estamos hablando de Java? El que hoy en día en casi todos lados se usa?

Tenían que poner ejemplos de c++ y vb.net, pero no java? Además el concepto de polimorfismo dinámico y estático no se entienden sus diferencias, no hay ejemplos.

Saludos y espero que arreglen esto, ponganse las pilas aquellos que la tengan bién clara en explicar estos términos. --DOOM13 (discusión) 00:07 12 dic 2011 (UTC)[responder]

Artículo modificado[editar]

He modificado el comienzo del artículo en el que se intenta explicar el polimorfismo entendido desde la perspectiva de la programación orientada a objetos. Solicito ayuda para verificar que no haya caído en algún error y para mejorar la redacción si fuera necesario.

Después de las modificaciones que introduje el artículo necesita un mejor ordenamiento.

--fbarg (discusión) 02:11 3 mar 2012 (UTC)[responder]

Mmm, no veo porqué haya que hablar de "grupo de objetos". Puede ser uno solo. En todo caso, en lugar de sacar las cosas de la galera, habría que poner lo que dicen los libros al respecto, porque este artículo no tiene ni una sola referencia. --GabrielG ¿mensajes? 11:15 2 mar 2013 (UTC)[responder]

unsigned float no existe en c ni en c++[editar]

en existe el unsigned float en c ni en c++

unsigned es siempre en enteros y no en coma flotante — El comentario anterior sin firmar es obra de 93.176.129.17 (disc.contribsbloq). 14:10 19 jun 2019 (UTC)[responder]

Confusión entre el concepto de polimorfismo y sobrescritura[editar]

Creo que en varias partes de este artículo se confunde el concepto de polimorfismo con el de sobrescritura (overriding), contraponiéndolo a la sobrecarga. La sobrecarga es una de las diversas formas de polimorfismo presentes en la mayoría (si no todos) de lenguajes orientados a objetos, como lo es también la sobrescritura (que es, por cierto, un tipo particular de sobrecarga de métodos con enlace dinámico basada en ámbitos relacionados por herencia).

Es posible que la confusión resida en el hecho de que en la programación funcional el término polimorfismo tiene otro significado.

Como referencia, véase

- Timothy Budd, "An Introduction to Object Oriented Programming", 3ª edición, Cap. 14 y ss.