Buenas, estoy buscando una web donde expliquen a fondo el poliformismo.
Las que he encontrado tienes ejemplos muy pobres o tocan el tema muy de pasada.
Un saludo.
Buenas, estoy buscando una web donde expliquen a fondo el poliformismo.
Las que he encontrado tienes ejemplos muy pobres o tocan el tema muy de pasada.
Un saludo.
El polimorfismo es algo genérico, es mejor que entiendas el concepto en sí, más que ver código java.
Imagina una clase con el método CalcularPerimetro:
clase forma
{
CalcularPerimetro();
}
Ahora derivamos dos clases de la clase forma, una es rectangulo, y otra pentagono.
Clase rectangulo :: forma
{
CalcularPerimetro();
}
Clase pentagono :: forma
{
CalcularPerimetro()
}
Rectangulo y pentagono son formas, pero cada una calcula su perimetro de forma diferente, por eso cada una tiene su función perimetro.
Ahora imagina que tienes una variable de tipo forma:
forma objeto;
Pues bien, el polimorfismo dice que puedes hacer esto:
objeto = devolverForma();
objeto.CalcularPerimetro();
devolverForma() puede devolver un objeto rectangulo, o un objeto pentagono, no sabes cual de las dos cosas va a devolver, y te da igual, tu simplemente llamas a CalcularPerimetro, y según si es un pentagono o un rectangulo, se usara la función correcta (la del pentagono o la del rectangulo).
Eso es el polimorfismo.
Muy a groso modo... yo creo que con el siguiente ejmplo se entiende rapidamente y no se te olvida nunca más...
Imagínate que tenemos una clase coche, esta es polimorfica, pq a través de ella, podemos obtener si el coche tiene e o no faros delanteros... si el coche es rojo, si vuela, si tiene matricula española, etc...
Es decir, que una clase es polimorfica, cuando puede devolver varios (poli) resultados dependiendo de su uso..
Edit: y cuando digo de su uso me refiero al uso que necesitemos desde los objetos que la instancien..
No estoy de acuerdo del todo con esa definicion, Isako.
Creo que el ejemplo de antes era bastante mas claro. Con tu ejemplo quedaria una cosa asi.
Tienes la clase coche. Bien. Esta clase tiene algunas funciones publicas, como son:
Potencia();
NumeroDePlazas();
Ahora, esta es una SuperClase, es decir, es la mas general. Esto quiere decir, que tu puedes definir el Seat Leon.
El Seat Leon es un coche verdad? Pero puede diferir en potencia y nº de plazas del (inalcanzable) Porsche CarreraGT. Pero no desplazes tu atencion, éste ultimo TAMBIEN tiene un una potencia y un numero de plazas.
El truco esta en poder usar ambos INDISTINTAMENTE, sin necesidad de IFs ni SWITCHs (select case's en V, ni nada. Como? Muy facil:
Definamos las clases:
Class Coche
{
....NPlazas();
....Potencia();
}
Class SeatLeon :: Coche
{
....NPlazas()
....{
........return 5;
....}
....Potencia()
....{
........return 150;
....}
}
Class PorscheCarreraGT :: Coche
{
....NPlazas()
....{
........return 2;
....}
....Potencia()
....{
........return 650;
....}
}
Ahora, como usarlas?
Ejemplo de uso:
Coche myCoche = new SeatLeon();
printf(mycoche.NPlazas() + " asientos - " + mycoche.Potencia() + "cv");
myCoche = new PorscheCarreraGT ();
printf(mycoche.NPlazas() + " asientos - " + mycoche.Potencia() + "cv");
El resultado seria este:
5 asientos - 150cv
2 asientos - 650cv
Sin embargo tu no has tenido que definir una variable de cada tipo.
Espero que haya quedad claro.
A ver, quizas no me he sabido explicar.
Se que es el poliformismo, pero necesito ejemplos complejos de su utilizacion aplicada en varias clases.
Evidentemente no espero que nadie se pegue aqui el curro de hacer codigo de varias clases aplicandolo, asi que lo que pido son ejemplos en webs que profundicen en el tema.
#2 Es curioso, pero cuando di hace tiempo poliformismo y herencia el profesor utilizo ese mismo ejemplo, el de las figuras y su area x)
Espero que ahora se me haya entendido.
#5 pq ese ejemplo es mítico y es el mismo q utilizó mi profesor cuando dimos polimorfimos en C++ xDDDD
#2 lo ha definido a la perfección.
Una clase tiene distintas clases q la extienden.
Podemos tener una clase Figura, y 2 subclases: Rectangulo y Circulo. Pero cada una tiene sus propios métodos, porque no es lo mismo calcular el perimetro de un Rectangulo (base x altura) q el de un circulo (2 x MATH.pi x radio).
Cuando crees una figura lo podrás hacer de las siguientes formas:
Figura f = new Figura();
Figura f = new Circulo();
Figura f = new Rectangulo();
O puedes crear directamente las formas especificas:
Rectangulo r = new Rectangulo();
Circulo c = new Circulo();
Viene a ser lo q ha dicho #2, q lo ha dejado muy claro
No estoy de acuerdo con #3
Creo que todos estamos diciendo lo mismo, pero bueno, por si no se entendió mi ejemplo... cambiemos clase coche por clase Vehiculo... en un pseudocodigo salchichero:
clase Vehiculo
{
property color();
property peso();
property numRuedas();
property matricula();
funcion verKilometraje();
}
Clase Moto : Vehiculo
{
verKilometraje();
.
.
}
Clase Tanke : Vehiculo
{
verKilometraje();
.
.
}
.
.
miMoto as new moto;
miMoto.numRuedas=2;
.....
Creo que así se ve más claro..
http://javabasico.osmosislatina.com/curso/polimorfismo.htm he encontrao una cosilla por aki k te parecera interesante
polimorfismo.
m. Cualidad de lo que tiene o puede tener distintas formas.
m. Biol. Propiedad de las especies de seres vivos cuyos individuos pueden presentar diferentes formas o aspectos, bien por diferenciarse en castas, como las termitas, bien por tratarse de distintas etapas del ciclo vital, como la oruga y la mariposa.
m. Bioquím. Propiedad de los ácidos nucleicos y las proteínas que pueden presentarse bajo varias formas moleculares. Es un fenómeno importante en la genética y en la patología molecular.
m. Quím. Propiedad de los elementos y sus compuestos, que pueden cambiar de forma sin variar su naturaleza.
Real Academia Española © Todos los derechos reservados
Es que no hay mas ejemplos... es algo tan sencillo como usar una sola variable para almacenar diferentes objetos, que se relacionan entre si gracias a la herencia o a la implementacion de una interfaz comun.
Lo que mola es el polimorfismo en ASM, programas que se modifican a sí mismos en memoria en ejecución. Divertidísimo, sobre todo de debuggear xD
#17:
Modificar un programa en tiempo de ejecución para que cambie su comportamiento, se llama "Procedural generation", no tiene que ver con el polimorfismo.
Lo de "polimorfismo en asm" no tiene sentido, ya que cuando haces polimorfismo en cuaqluier lenguaje, al final acaba siendo compilado/interpretado a código máquina, y aunque nunca he implementado un compilador de ningún lenguaje que permita polimorfismo y no sé exáctamente que solución se usa, si tengo una ligera noción de que se hace con tablas que mantienen las direcciones de llamada a los métodos de cada clase, no tiene nada que ver con que el programa se modifique a sí mismo en tiempo de ejecución.