1. Ingeniería enAnimación Digital
yEfectosVisuales
Asignatura:ProgramaciónOrientadaaObjetos
Profesor:ISC.LizbethHernándezOlán
Unidad4 polimorfismo Fecha: 31/05/17
Practica1 PruebaPolimorfismo Página1de7
No.Control 16081905 NombredelAlumno OropezaGonzálezLizbetJaneth
1.EnunciadodelProblema.
2.CódigoFuente
/* Practica 1
No.Control 16081905 Oropeza González Lizbet Janeth
*/
public class PruebaPolimorfismo
{
public static void main( String args[] )
{
// asigna la referencia a la superclase a una variable de la superclase
EmpleadoPorComision3 empleadoPorComision = new EmpleadoPorComision3(
"Sue", "Jones", "222-22-2222", 10000, .06 );
// asigna la referencia a la subclase a una variable de la subclase
EmpleadoBaseMasComision4 empleadoBaseMasComision = new EmpleadoBaseMasComision4(
"Bob", "Lewis", "333-33-3333", 5000, .04, 300 );
// invoca a toString en un objeto de la superclase, usando una variable de lasuperclase
System.out.printf( "%s %s:nn%snn",
"Llamada a toString de EmpleadoPorComision3 con referencia de superclase ",
"a un objeto de la superclase", empleadoPorComision.toString() );
// invoca a toString en un objeto de la subclase, usando una variable de la subclase
System.out.printf( "%s %s:nn%snn",
"Llamada a toString de EmpleadoBaseMasComision4 con referencia",
"de subclase a un objeto de la subclase", empleadoBaseMasComision.toString() );
// invoca a toString en un objeto de la subclase, usando una variable de lasuperclase
EmpleadoPorComision3 empleadoPorComision2 =
empleadoBaseMasComision;
System.out.printf( "%s %s:nn%sn",
"Llamada a toString de EmpleadoBaseMasComision4 con referencia de superclase",
"a un objeto de la subclase", empleadoPorComision2.toString() );
} // fin de main
}
public abstract class Empleado
{
private String primerNombre;
private String apellidoPaterno;
private String numeroSeguroSocial;
// constructor con tres argumentos
public Empleado( String nombre, String apellido, String nss )
{
primerNombre = nombre;
apellidoPaterno = apellido;
numeroSeguroSocial = nss;
} // fin del constructor de Empleado con tres argumentos
2. // establece el primer nombre
public void establecerPrimerNombre( String nombre )
{
primerNombre = nombre;
} // fin del método establecerPrimerNombre
// devuelve el primer nombre
public String obtenerPrimerNombre()
{
return primerNombre;
} // fin del método obtenerPrimerNombre
// establece el apellido paterno
public void establecerApellidoPaterno( String apellido )
{
apellidoPaterno = apellido;
} // fin del método establecerApellidoPaterno
// devuelve el apellido paterno
public String obtenerApellidoPaterno()
{
return apellidoPaterno;
} // fin del método obtenerApellidoPaterno
// establece el número de seguro social
public void establecerNumeroSeguroSocial( String nss )
{
numeroSeguroSocial = nss; // debe validar
} // fin del método establecerNumeroSeguroSocial
// devuelve el número de seguro social
public String obtenerNumeroSeguroSocial()
{
return numeroSeguroSocial;
} // fin del método obtenerNumeroSeguroSocial
// devuelve representación String de un objeto Empleado
public String toString()
{
return String.format( "%s %snnumero de seguro social: %s",
obtenerPrimerNombre(), obtenerApellidoPaterno(), obtenerNumeroSeguroSocial() );
} // fin del método toString
// método abstracto sobrescrito por las subclases
public abstract double ingresos(); // aquí no hay implementación
}
public class EmpleadoAsalariado extends Empleado
{
private double salarioSemanal;
// constructor de cuatro argumentos
public EmpleadoAsalariado( String nombre, String apellido, String nss,
double salario )
{
super( nombre, apellido, nss ); // los pasa al constructor de Empleado
establecerSalarioSemanal( salario ); // valida y almacena el salario
} // fin del constructor de EmpleadoAsalariado con cuatro argumentos
public void establecerSalarioSemanal( double salario )
{
salarioSemanal = salario < 0.0 ? 0.0 : salario;
3. } // fin del método establecerSalarioSemanal
// devuelve el salario
public double obtenerSalarioSemanal()
{
return salarioSemanal;
} // fin del método obtenerSalarioSemanal
// calcula los ingresos; sobrescribe el método abstracto ingresos en Empleado
public double ingresos()
{
return obtenerSalarioSemanal();
} // fin del método ingresos
// devuelve representación String de un objeto EmpleadoAsalariado
public String toString()
{
return String.format( "empleado asalariado: %sn%s: $%,.2f",
super.toString(), "salario semanal", obtenerSalarioSemanal() );
} // fin del método toString
}
public class EmpleadoPorHoras extends Empleado
{
private double sueldo; // sueldo por hora
private double horas; // horas trabajadas por semana
// constructor con cinco argumentos
public EmpleadoPorHoras( String nombre, String apellido, String nss,
double sueldoPorHoras, double horasTrabajadas )
{
super( nombre, apellido, nss );
establecerSueldo( sueldoPorHoras ); // valida y almacena el sueldo por horas
establecerHoras( horasTrabajadas ); // valida y almacena las horas trabajadas
} // fin del constructor de EmpleadoPorHoras con cinco argumentos
// establece el sueldo
public void establecerSueldo( double sueldoPorHoras )
{
sueldo = ( sueldoPorHoras < 0.0 ) ? 0.0 : sueldoPorHoras;
} // fin del método establecerSueldo
// devuelve el sueldo
public double obtenerSueldo()
{
return sueldo;
} // fin del método obtenerSueldo
// establece las horas trabajadas
public void establecerHoras( double horasTrabajadas )
{
horas = ( ( horasTrabajadas >= 0.0 ) && ( horasTrabajadas <= 168.0 ) ) ?
horasTrabajadas : 0.0;
} // fin del método establecerHoras
// devuelve las horas trabajadas
public double obtenerHoras()
{
return horas;
} // fin del método obtenerHoras
// calcula los ingresos; sobrescribe el método abstracto ingresos en Empleado
public double ingresos()
4. {
if ( obtenerHoras() <= 40 ) // no hay tiempo extra
return obtenerSueldo() * obtenerHoras();
else
return 40 * obtenerSueldo() + ( obtenerHoras() - 40 ) * obtenerSueldo() * 1.5;
} // fin del método ingresos
// devuelve representación String de un objeto EmpleadoPorHoras
public String toString()
{
return String.format( "empleado por horas: %sn%s: $%,.2f; %s: %,.2f",
super.toString(), "sueldo por hora", obtenerSueldo(),
"horas trabajadas", obtenerHoras() );
} // fin del método toString
}
public class EmpleadoPorComision extends Empleado
{
private double ventasBrutas; // ventas totales por semana
private double tarifaComision; // porcentaje de comisión
// constructor con cinco argumentos
public EmpleadoPorComision( String nombre, String apellido, String nss,
double ventas, double tarifa )
{
super( nombre, apellido, nss );
establecerVentasBrutas( ventas );
establecerTarifaComision( tarifa );
} // fin del constructor de EmpleadoPorComision con cinco argumentos
// establece la tarifa de comisión
public void establecerTarifaComision( double tarifa )
{
tarifaComision = ( tarifa > 0.0 && tarifa < 1.0 ) ? tarifa : 0.0;
} // fin del método establecerTarifaComision
// devuelve la tarifa de comisión
public double obtenerTarifaComision()
{
return tarifaComision;
} // fin del método obtenerTarifaComision
// establece el monto de ventas brutas
public void establecerVentasBrutas( double ventas )
{
ventasBrutas = ( ventas < 0.0 ) ? 0.0 : ventas;
} // fin del método establecerVentasBrutas
// devuelve el monto de ventas brutas
public double obtenerVentasBrutas()
{
return ventasBrutas;
} // fin del método obtenerVentasBrutas
// calcula los ingresos; sobrescribe el método abstracto ingresos en Empleado
public double ingresos()
{
return obtenerTarifaComision() * obtenerVentasBrutas();
} // fin del método ingresos
// devuelve representación String de un objeto EmpleadoPorComision
public String toString()
{
5. return String.format( "%s: %sn%s: $%,.2f; %s: %.2f",
"empleado por comision", super.toString(),
"ventas brutas", obtenerVentasBrutas(),
"tarifa de comision", obtenerTarifaComision() );
} // fin del método toString
}
public class EmpleadoBaseMasComision extends EmpleadoPorComision
{
private double salarioBase; // salario base por semana
// constructor con seis argumentos
public EmpleadoBaseMasComision( String nombre, String apellido,
String nss, double ventas, double tarifa, double salario )
{
super( nombre, apellido, nss, ventas, tarifa );
establecerSalarioBase( salario ); // valida y almacena el salario base
} // fin del constructor de EmpleadoBaseMasComision con seis argumentos
// establece el salario base
public void establecerSalarioBase( double salario )
{
salarioBase = ( salario < 0.0 ) ? 0.0 : salario; // positivo
}
// devuelve el salario base
public double obtenerSalarioBase()
{
return salarioBase;
} // fin del método obtenerSalarioBase
// calcula los ingresos; sobrescribe el método ingresos en EmpleadoPorComision
public double ingresos()
{
return obtenerSalarioBase() + super.ingresos();
} // fin del método ingresos
// devuelve representación String de un objeto EmpleadoBaseMasComision
public String toString()
{
return String.format( "%s %s; %s: $%,.2f",
"con salario base", super.toString(),
"salario base", obtenerSalarioBase() );
} // fin del método toString
}
public class PruebaSistemaNomina
{
public static void main( String args[] )
{
// crea objetos de las subclases
EmpleadoAsalariado empleadoAsalariado =
new EmpleadoAsalariado( "John", "Smith", "111-11-1111", 800.00 );
EmpleadoPorHoras empleadoPorHoras =
new EmpleadoPorHoras( "Karen", "Price", "222-22-2222", 16.75, 40 );
EmpleadoPorComision empleadoPorComision =
new EmpleadoPorComision(
"Sue", "Jones", "333-33-3333", 10000, .06 );
EmpleadoBaseMasComision empleadoBaseMasComision =
new EmpleadoBaseMasComision(
"Bob", "Lewis", "444-44-4444", 5000, .04, 300 );
System.out.println( "Empleados procesados por separado:n" );
6. System.out.printf( "%sn%s: $%,.2fnn",
empleadoAsalariado, "ingresos", empleadoAsalariado.ingresos() );
System.out.printf( "%sn%s: $%,.2fnn",
empleadoPorHoras, "ingresos", empleadoPorHoras.ingresos() );
System.out.printf( "%sn%s: $%,.2fnn",
empleadoPorComision, "ingresos", empleadoPorComision.ingresos() );
System.out.printf( "%sn%s: $%,.2fnn",
empleadoBaseMasComision,
"ingresos", empleadoBaseMasComision.ingresos() );
// crea un arreglo Empleado de cuatro elementos
Empleado empleados[] = new Empleado[ 4 ];
// inicializa el arreglo con objetos Empleado
empleados[ 0 ] = empleadoAsalariado;
empleados[ 1 ] = empleadoPorHoras;
empleados[ 2 ] = empleadoPorComision;
empleados[ 3 ] = empleadoBaseMasComision;
System.out.println( "Empleados procesados en forma polimorfica:n" );
// procesa en forma genérica a cada elemento en el arreglo de empleados
for ( Empleado empleadoActual : empleados )
{
System.out.println( empleadoActual ); // invoca a toString
// determina si el elemento es un EmpleadoBaseMasComision
if ( empleadoActual instanceof EmpleadoBaseMasComision )
{
// conversión descendente de la referencia de Empleado
// a una referencia de EmpleadoBaseMasComision
EmpleadoBaseMasComision empleado =
( EmpleadoBaseMasComision ) empleadoActual;
double salarioBaseAnterior = empleado.obtenerSalarioBase();
empleado.establecerSalarioBase( 1.10 * salarioBaseAnterior );
System.out.printf(
"el nuevo salario base con 10%% de aumento es : $%,.2fn",
empleado.obtenerSalarioBase() );
} // fin de if
System.out.printf(
"ingresos $%,.2fnn", empleadoActual.ingresos() );
} // fin de for
// obtiene el nombre del tipo de cada objeto en el arreglo de empleados
for ( int j = 0; j < empleados.length; j++ )
System.out.printf( "El empleado %d es un %sn", j,
empleados[ j ].getClass().getName() );
} // fin de main
}