Vous êtes sur la page 1sur 5

Laboratorio Nº 6.

Clases Abstractas
Prof. Robert Espinoza

1. La empresa XYZ requiere una aplicación informática para administrar los datos de su personal.
 Del personal se conoce: número de DNI, nombre, apellidos y año de ingreso.
 Existen dos categorías de personal: el personal con salario fijo y el personal a comisión.
o Los empleados con salario fijo tienen un sueldo básico y un porcentaje adicional en función del número de años
que llevan: menos de dos años salario base, de 2 a 3 años: 5% más; de 4 a 7 años: 10% más; de 8 a 15 años: 15%
más y más de 15 años: 20% más.
o Los empleados a comisión tienen un salario mínimo que será constante para todos los empleados de este tipo e
igual a 750.00 soles, un número de clientes captados y un monto por cada cliente captado. El salario se obtiene
multiplicando los clientes captados por el monto por cliente, si el salario por los clientes captados no llega al
salario mínimo, cobrará esta cantidad.
 Se contará con una clase padre Empleado de la cual no se podrán crear objetos y de la que heredan las clases
EAsalariado y EComision. En todas las clases debe haber un constructor con parámetros para todos los atributos y otro
vacío. En todos deben crearse los getters and setters correspondientes. Empleado contará con un método imprimir() y
un método obtenerSalario().
 Se creará una clase gestora y en el método main se creará un vector con los siguientes objetos:
o Javier Gómez, DNI: 569587A, desde 2008, salario fijo base = 1225 soles
o Eva Nieto, DNI: 695235B, desde 2010, 179 clientes captados a 8.10 soles cada uno.
o José Ruiz, DNI: 741258C, desde 2012, 81 clientes captados a 7.90 soles cada uno.
o María Núñez, DNI: 896325D, desde 2013, salario fijo base = 1155.00 soles.
o Los dos primeros se crearán utilizando el constructor con todos los parámetros y los dos últimos con el constructor
vacío y utilizando los setters adecuados.
 Desde el método main se llamará a estos otros dos métodos:
o sueldoMayor(): Dado un array de objetos Empleado muestra el nombre, apellido y salario del que más cobra.
o mostrarTodos(): Dado un array de objetos Empleado lo recorre imprimiendo los datos de todos ellos.

2. Escriba las siguientes clases y dibuje el diagrama de clases:

 Clase abstracta Empleado

public abstract class Empleado {


private String dni;
private String nombre;
private String apellidos;
protected int yearIngreso;

public Empleado () {
dni = "00000000";
nombre = "NN";
apellidos = "NA";
yearIngreso = 2000;
}

public Empleado (String dni, String nombre, String apellidos,


int yearIngreso) {
this.dni = dni;
this.nombre = nombre;
this.apellidos = apellidos;
this.yearIngreso = yearIngreso;
}

public void imprimir(){


System.out.println("DNI: " + getDni() + "\nNombre y Apellidos: " +
getNombre() + " " + getApellidos() +
"\nAño de ingreso: " + getYearIngreso());
}

abstract public double obtenerSalario();

public void setDni (String dni) {


this.dni = dni;
}

public String getDni () {


return dni;
}

public void setNombre (String nombre) {


this.nombre = nombre;
}

public String getNombre () {


return nombre;
}

public void setApellidos (String apellidos) {


this.apellidos = apellidos;
}

public String getApellidos () {


return apellidos;
}

public void setYearIngreso (int yearIngreso) {


this.yearIngreso = yearIngreso;
}

public int getYearIngreso () {


return yearIngreso;
}
}

 Clase EAsalariado

import java.util.Calendar;
public class EAsalariado extends Empleado {
private double salarioBase;

public EAsalariado () {
super();
salarioBase = 0.0;
}

public EAsalariado (String dni, String nombre, String apellidos,


int yearIngreso, double salarioBase) {
super(dni, nombre, apellidos, yearIngreso);
this.salarioBase = salarioBase;
}

public double obtenerSalario (){


Calendar now = Calendar.getInstance();
int actualYear = now.get(Calendar.YEAR);
int anios = actualYear - getYearIngreso();
if (anios<0){
System.out.println("Error: número de años negativo");
}
if (anios < 2) return salarioBase;
else if (anios >= 2 && anios<=3) return salarioBase*0.05 + salarioBase;
else if (anios >= 4 && anios<=7) return salarioBase*0.10 + salarioBase;
else if (anios >= 8 && anios<=15)return salarioBase*0.15 + salarioBase;
else return salarioBase * 0.20 + salarioBase;
}

public void imprimir(){


super.imprimir();
System.out.printf("Salario: %.2f\n", obtenerSalario());
System.out.println();
}

public void setSalarioBase (double salarioBase) {


this.salarioBase = salarioBase;
}

public double getSalarioBase(){


return salarioBase;
}
}

 Clase abstracta EComision

public class EComision extends Empleado {


private int clientesCaptados;
private double montoPorCliente;
public static final double salarioMinimo = 750;

public EComision () {
super();
clientesCaptados = 0;
montoPorCliente = 0;
}

public EComision (String dni, String nombre, String apellidos, int yearIngreso,
int clientesCaptados, double montoPorCliente) {
super(dni, nombre, apellidos, yearIngreso);
this.clientesCaptados = clientesCaptados;
this.montoPorCliente = montoPorCliente;
}

public double obtenerSalario (){


if (montoPorCliente*clientesCaptados > salarioMinimo)
return montoPorCliente*clientesCaptados;
else
return salarioMinimo;
}

@Override
public void imprimir (){
super.imprimir();
System.out.printf("Salario: %.2f\n", obtenerSalario());
System.out.println();
}

public void setClientesCaptados (int clientesCaptados) {


this.clientesCaptados = clientesCaptados;
}
public int getClientesCaptados () {
return clientesCaptados;
}

public void setMontoPorCliente(double montoPorCliente){


this.montoPorCliente = montoPorCliente;
}

public double getMontoPorCliente(){


return montoPorCliente;
}
}

 Clase abstracta PruebaClasesAbstractas

class PruebaClasesAbstractas{
public static void main(String[] args){
Empleado empleados[] = new Empleado[4];
EAsalariado asal1 = new EAsalariado("569587A", "Javier",
"Gomez", 2015, 1225);
empleados[0] = asal1;

EComision ecom1 = new EComision("695235B", "Eva", "Nieto",


2010, 179, 8.10);
empleados[1] = ecom1;

EComision ecom2 = new EComision();


ecom2.setDni("741258C");
ecom2.setNombre("José");
ecom2.setApellidos("Ruiz");
ecom2.setYearIngreso(2012);
ecom2.setClientesCaptados(81);
ecom2.setMontoPorCliente(7.90);
empleados[2] = ecom2;

EAsalariado asal2 = new EAsalariado();


asal2.setDni("896325D");
asal2.setNombre("Maria");
asal2.setApellidos("Nuñez");
asal2.setYearIngreso(2013);
asal2.setSalarioBase(1155);
empleados[3] = asal2;
sueldoMayor(empleados);
mostrarTodos(empleados);
}

public static void sueldoMayor(Empleado empleados[]){


int empMayor = 0; double salarioMayor = 0;
for (int i = 0; i < empleados.length; i++){
try{
if (empleados[i].obtenerSalario() > salarioMayor){
empMayor = i;
salarioMayor = empleados[i].obtenerSalario();
}
}catch(NumbersOfYearsNegativeException e){
System.out.print(empleados[i].getNombre() + " " +
empleados[i].getApellidos() + ": ");
System.out.println(e.getMessage());
}
}
System.out.printf("\nEl empleado con mayor salario es "
+ empleados[empMayor].getNombre()
+ " "+empleados[empMayor].getApellidos()
+ " con salario %.2f\n", salarioMayor);
System.out.println();
}

public static void mostrarTodos(Empleado empleados[]){


System.out.println("___Todos los empleados:____\n");
for (int i = 0; i < empleados.length; i++){
empleados[i].imprimir();
}
}
}