SoyLoPeor
 
#1 3 abr 07, 15:41
#1 3 abr 07, 15:41

Poliformismo - JAVA - Ejemplos

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.
  1
cabron
Veterano
cabron
Veterano
#2 3 abr 07, 16:00
#2 3 abr 07, 16:00
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.
 
IS4kO
 
IS4kO
 
#3 3 abr 07, 16:03
#3 3 abr 07, 16:03
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..
 
kas
 
kas
 
#4 3 abr 07, 16:28
#4 3 abr 07, 16:28
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 VB), 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.

 
SoyLoPeor
 
#5 3 abr 07, 16:40
#5 3 abr 07, 16:40
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.
 
Soltrac
MV Wizard
Soltrac
MV Wizard
#6 3 abr 07, 16:52
#6 3 abr 07, 16:52
#5 pq ese ejemplo es mítico y es el mismo q utilizó mi profesor cuando dimos polimorfimos en C++ xDDDD
 
Cyph3r
 
Cyph3r
 
#7 3 abr 07, 17:52
#7 3 abr 07, 17:52
A mi tb pero en java xDD
 
oFF-sIDE
 
#8 3 abr 07, 18:51
#8 3 abr 07, 18:51
#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
 
IS4kO
 
IS4kO
 
#9 3 abr 07, 19:48
#9 3 abr 07, 19:48
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..
 
Shaktale
 
#10 4 abr 07, 00:38
#10 4 abr 07, 00:38
http://javabasico.osmosislatina.com...polimorfismo.htm he encontrao una cosilla por aki k te parecera interesante
 
SoyLoPeor
 
#11 4 abr 07, 07:46
#11 4 abr 07, 07:46
#10 Muchas gracias, es bastante mas de lo que habia logrado encontrar yo.
 
kas
 
kas
 
#12 4 abr 07, 09:06
#12 4 abr 07, 09:06
Sinceramente creo que los mas dificil del polimorfismo es el nombre.
 
cabron
Veterano
cabron
Veterano
#13 4 abr 07, 10:26
#13 4 abr 07, 10:26
Es que yo también lo aprendí con el ejemplo de las formas, por eso lo he usado.

 
cracking
 
#14 7 abr 07, 22:11
#14 7 abr 07, 22:11
polimorfismo.



1. m. Cualidad de lo que tiene o puede tener distintas formas.

2. 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.

3. 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.

4. 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
 
Tig
 
Tig
 
#15 9 abr 07, 13:10
#15 9 abr 07, 13:10
Que manera de haceros la picha un lio :S

Ya no hacen falta más ejemplos, ¿no?
 
kas
 
kas
 
#16 10 abr 07, 10:37
#16 10 abr 07, 10:37
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.
 
elkaoD
Moderador
elkaoD
Moderador
#17 10 abr 07, 13:30
#17 10 abr 07, 13:30
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
 
cabron
Veterano
cabron
Veterano
#18 10 abr 07, 13:48
#18 10 abr 07, 13:48
#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.
 
elkaoD
Moderador
elkaoD
Moderador
#19 10 abr 07, 14:41
#19 10 abr 07, 14:41
#18 , ok, algo nuevo que aprendo. Yo (Y todos los que lo hemos usado que conozco, la mayoría de listas de ingeniería inversa) siempre lo he llamado polimorfismo, pero si dices que se llama así, pues será.
 
kas
 
kas
 
#20 10 abr 07, 16:00
#20 10 abr 07, 16:00
#17 Eso en .NET se puede hacer con Reflection y es bastante divertido.
Favoritos
0


Regístrate y participa

La única comunidad de internet donde se habla de todo antes de que exista.

Regístrate ahora! Sólo son 10 segundos!
x