PDA

Ver la Versión Completa : ayuda con polimorfismo en java


carmen_iriarte
13-07-2010, 20:49:13
buenas tardes, lo que pasa es que tengo un programa en java sobre el polimorifsmo, pero no logro entenderlo el compilada y todo, lo que pasa es que tengo que explicarlo tanto en php como en java, en php si lo entiendo, pero en java nop, no entiendo dond se ejecuta el polimorfismo en java en este programa?bueno es qtampoco tengo mucha experiencia con java, sera qm pueden ayudar a explicarmelo? les paso el codigo qtengo en java....

package TALLER;
//clase que hereda de la clase padre (empleado)
public class Asalariado_1 extends Empleado_1 {
public float salario; //Salario anual
public float preparoPago() {
System.out.println("Calculando el pago del salario para " + nombre);
return (salario/52);
}
}
--------------------------------------------------
package TALLER;
// clase que hereda de la clase padre (empleado)
public class Porhoras_1 extends Empleado_1 {
public float tarifaHora; //tarifa de pago
public float horasTrabajadas; //horas trabajadas semanalmente
public float preparoPago() {
System.out.println("Calculando el pago por horas para " + nombre);
float pago = 0.0F;
if(horasTrabajadas <= 40)
{
pago = tarifaHora * horasTrabajadas;
}
else //Necesita calcular el sobretiempo
{
pago = (tarifaHora * 40) + (tarifaHora * (horasTrabajadas - 40) * 1.5F);
}
return pago;
}
}
----------------------------------------------
package TALLER;
//clase que hereda de la clase padre (empleado)
public class PorComision extends Empleado_1{
public float porcentaje; // porcentaje de comision sobre ventas totales
public float ventasTotales; //total de ventas realizadas

public float preparoPago() {
System.out.println("Calculando el pago por comision para " + nombre);
float pago = ventasTotales * porcentaje;
return pago;
}
}
---------------------------------------------
package TALLER;
// Esta es la clase de la cual van a heredar las demas
public class Empleado_1 {
public String nombre;
public String direccion;
public int cedula;

public void envioCheque() {
System.out.println("Enviar cheque a " + nombre + " " + direccion);
}
}
---------------------------------------------
package TALLER;
// demostracion de la herencia en la POO
public class Demo {
public static void main(String [] args) {

System.out.println("Instanciando un empleado tipo Asalariado");
Asalariado_1 s = new Asalariado_1();
s.nombre = "Pedro Perez";
s.direccion = "Caracas";
s.cedula = 7654321;
s.salario = 100000.00F;

System.out.println("Instanciando un empleado tipo porHoras");
Porhoras_1 h = new Porhoras_1();
h.nombre = "Luis Ordaz";
h.direccion = "Guatire";
h.cedula = 1111111;
h.tarifaHora = 10.00F;
h.horasTrabajadas = 50;

System.out.println("Instanciando un empleado tipo porComision");
PorComision c = new PorComision();
c.nombre = "Juan Herrera";
c.direccion = "Guarenas";
c.cedula = 6555172;
c.ventasTotales = 250000f;
c.porcentaje = 0.15f;

System.out.println("Pagando a empleados");
System.out.println(s.nombre + " " + s.preparoPago());
System.out.println(h.nombre + " " + h.preparoPago());
System.out.println(c.nombre + " " + c.preparoPago());

System.out.println("Enviando cheques");
s.envioCheque();
h.envioCheque();
c.envioCheque();
}
}

Ñuño Martínez
14-07-2010, 19:03:22
Tu problema está en que no entiendes el concepto de "Polimorfismo", aunque apostaría mi sueldo a que la culpa no es tuya sino de tu profesor. Hay que tener en cuenta que la Programación Orientada a Objetos no es una característica exclusiva de ciertos lenguajes, sino que trata sobre cómo enfrentarse a un problema para transformarlo en un programa de computadora. De hecho es posible programar "orientado a objetos" en lenguages que no poseen clases ni herencia, como C, Pascal, FORTH e incluso en ensamblador. Esto es un error muy generalizado, hasta el punto que no somo pocos los programadores que no lo tenemos asumido. De hecho, muchísimos programadores se limintan a "usar objetos" y no a "programar orientado a objetos". ;)

El "Polimorfismo", por tanto, es un concepto general. Si sabes lo que es, serás capaz de "explicarlo" en (casi) cualquier lenguaje.

rgstuamigo
17-07-2010, 16:13:46
Siguiendo tu código he notado que es muy dificil entender el polimorfismo ya que el código en si no lo hace notar.;)
Para que lo puedas entender mejor, me he tomado la molestia de modificar algunas pequeñas cositas de tu código en tu clase "Demo":
package TALLER;
// demostracion de la herencia en la POO
public class Demo {
public static void main(String [] args) {

System.out.println("Instanciando un empleado tipo Asalariado");
Empleado_1 s,h,c;// declaro tres objetos de clase Empleado_1 ;)
s= new Asalariado_1();// <-Hago que mi objeto "s" se comporte como Asalariado_1
s.nombre = "Pedro Perez";
s.direccion = "Caracas";
s.cedula = 7654321;

s.salario = 100000.00F;

System.out.println("Instanciando un empleado tipo porHoras");

h= new Porhoras_1();// <-Hago que mi objeto "h" se comporte como Porhoras_1 ;)
h.nombre = "Luis Ordaz";
h.direccion = "Guatire";
h.cedula = 1111111;
h.tarifaHora = 10.00F;
h.horasTrabajadas = 50;

System.out.println("Instanciando un empleado tipo porComision");
c = new PorComision();// <-Hago que mi objeto "h" se comporte como PorComision ;)
c.nombre = "Juan Herrera";
c.direccion = "Guarenas";
c.cedula = 6555172;
c.ventasTotales = 250000f;
c.porcentaje = 0.15f;

System.out.println("Pagando a empleados");
System.out.println(s.nombre + " " + s.preparoPago());
System.out.println(h.nombre + " " + h.preparoPago());
System.out.println(c.nombre + " " + c.preparoPago());

System.out.println("Enviando cheques");
s.envioCheque();
h.envioCheque();
c.envioCheque();
}
}

Explicacion(segun tu código): Cualquier objeto declarado de clase padre "Empleado_1" puede comportarse como "Asalariado_1" ó como "Porhoras_1" ó cómo "PorComision" ó como cualquier otra clase derivada o que tenga como ancestra a "Empleado_1". Ésto es Polimorfismo(Varias formas), es decir un objeto "Empleado_1" puede ser o tomar varias formas.;).
Espero haberte podido guiar en algo.;)
Un saludo Polimórfico..:D:)