Java - AYUDAA por favor, HERENCIA Y POLIMORFISMO :(

 
Vista:
Imágen de perfil de Juliana

AYUDAA por favor, HERENCIA Y POLIMORFISMO :(

Publicado por Juliana (7 intervenciones) el 23/10/2022 00:18:17
Por favor, quisiera saber como realizar este ejercicio, es de un taller y no se por que no puedo resolverlo, ando en blanco, quisiera que pudieran ayudarme con esto y algunos consejos de como volver a aprender java, aprender a programar porque ando muy perdida en esto y me frusta. ,muchas gracias.

Se requiere realizar un sistema de información en el cual se debe escribir un
algoritmo que utilice el polimorfismo, se debe crear una clase Empleado, la cual permita heredar a
las clases Profesor, Estudiante y Administrativo.
Las clases tendrán 3 métodos salario, información y funciones, las cuales deberán implementar
el polimorfismo y la herencia
Deberá implementarse una clase principal que permita instanciar los objetos de las clases creadas
Condiciones:
El profesor:
Salario:( horas trabajadas* valor de la hora) + adicionales
Restricciones: si salario es >1500000 debe descontarse el 3% del valor a pagar
Si salario <= 1000000 debe adicionarse el 5%
Para cada profesor se debe imprimir:
Nombre, apellido, título académico, el salario, el % de descuento aplicado, el valor de descuento
aplicado y las funciones que realiza
El estudiante:
Salario:( horas trabajadas* valor de la hora)
Restricciones: El salario no debe superar los 500000, en caso de ser mayor se debe reducir el valor
de la hora registrada, ajustada al salario que se debe pagar
Para cada estudiante se debe imprimir:
Nombre, apellido, el salario, el valor de la hora y las funciones que realiza
El administrativo:
Salario: tiene un salario fijo, es decir no esta condicionado al número de horas
Para cada estudiante se debe imprimir:

Nombre, el salario y las funciones que realiza
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Juliana

AYUDAA por favor, HERENCIA Y POLIMORFISMO :(

Publicado por Juliana (7 intervenciones) el 26/10/2022 05:46:37
Parece que nadie ayuda.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AYUDAA por favor, HERENCIA Y POLIMORFISMO :(

Publicado por Kabuto (1381 intervenciones) el 26/10/2022 15:03:02
Hola.
Lo primero es escribir la clase Empleado, que será la clase madre de la que van a heredar las demás.

Esta clase debería tener los atributos y métodos que sean comunes a todas las clases.

Por ejemplo, todos van a tener un nombre, un apellido, un salario o unas funciones. Así que estos serían atributos de Empleado, ya que todos los empleados van a tener esos atributos.

En cambio, el atributo "titulo académico" no es común a todos los empleados. Solos los profesores lo tienen, así que este atributo sería exclusivo para la clase Profesor

Luego, todos van a tener un método para calcular el salario, sin embargo, para cada uno el salario se va a calcular de distinta forma.
Esto significa que la clase madre debe tener este método (ya que es común) pero las clases hijas tendrán que "sobre escribirlo" para que cada una lo adapte a sus propias condiciones.

Así que este método podemos declararlo como "abstracto", es decir, no tendrá código porque serán las clases hijas quienes definan el código que necesita cada una.
Lo mismo podríamos hacer con un método llamado mostrar() por ejemplo, que se encargue de mostrar en pantalla los datos que pide el enunciado según cada clase.

La clase Empleado, también puede declararse como abstracta. No es obligatorio, pero es una forma de impedir que esta clase pueda ser instanciada.
No vamos a querer que al escribir un programa se puedan usar objetos que solo sean Empleado.
Lo que vamos a querer que se trabaje con Profesor, Administrativo y Alumno. Todos los objetos en nuestro programa han de ser de una de esas tres clases, no pueden ser simplemente Empleado. Así que si la declaramos como abstracta, evitaremos esto.

Esta podría ser de momento la clase Empleado, digo de momento, porque nunca se sabe si luego querremos cambiar algo.
Sus atributos interesa que sean PROTECTED para que sus hijas, y solo ellas, puedan acceder a ellos.

Fíjate que el constructor no pide un valor para el salario. Esto es porque este atributo se va a calcular de distintas maneras según la clase hija.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public abstract class Empleado {
 
	protected String nombre;
	protected String apellido;
	protected double salario;
	protected String funciones;
 
	//Constructor no solicita salario, porque clases hijas calculan de distintas formas
	public Empleado(String nombre, String apellido, String funciones) {
		this.nombre = nombre;
		this.apellido = apellido;
		this.funciones = funciones;
	}
 
	public String getNombre() {
		return nombre;
	}
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
	public String getApellido() {
		return apellido;
	}
 
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
 
	public double getSalario() {
		return salario;
	}
 
	public void setSalario(double salario) {
		this.salario = salario;
	}
 
	public String getFunciones() {
		return funciones;
	}
 
	public void setFunciones(String funciones) {
		this.funciones = funciones;
	}
 
		//Cada clase hija han de sobreescribir estos métodos
	public abstract double calcularSalario();
 
	public abstract void mostrar();
 
}


Vamos a ver ahora la clase Profesor.
Esta clase hereda de Empleado, así que dispondrá de sus atributos y métodos. De hecho, estará OBLIGADA a sobre escribir los dos métodos abstractos que también va a heredar.

Esta clase va a tener unos atributos propios. Podrían ser: titulo academico(String), horas trabajadas(int) y valor de la hora(double)

Así que su constructor, ha de recibir los parámetros necesarios, no solo para estos atributos, si no también para los que hereda de su clase madre.
En el constructor haremos el cálculo del salario según las reglas que se aplican a los profesores.

En los datos a mostrar, nos piden que mostremos el porcentaje adicional según las restricciones del salario, que puede ser -3% o 5%, y el valor que supone dicho porcentaje.
Estos datos los podemos conseguir en el momento de calcular el salario y dejarlos guardados como atributos, para luego poder mostrarlos en pantalla. No son datos que deba manipular el usuario, así que para estos dos atributos no proporcionaremos métodos "setters" ni "getters".

La clase Profesor podría quedar así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
public class Profesor extends Empleado {
 
	private String tituloAcademico;
	private int horasTrabajadas;
	private double valorHora;
	//Atributos que los usuarios no deben manipular
	private String porcentaje;
	private double adicional;
 
	public Profesor(String nombre, String apellido, String funciones,
			String tituloAcademico, int horasTrabajadas, double valorHora) {
		super(nombre, apellido, funciones);
		this.tituloAcademico = tituloAcademico;
		this.horasTrabajadas = horasTrabajadas;
		this.valorHora = valorHora;
		//Autocalculo del salario
		calcularSalario();
		//siguientes atributos cobran valor solo si se cumplen ciertas restricciones al calcular salario
		porcentaje = "";
		adicional = 0;
	}
 
	public String getTituloAcademico() {
		return tituloAcademico;
	}
 
	public void setTituloAcademico(String tituloAcademico) {
		this.tituloAcademico = tituloAcademico;
	}
 
	public int getHorasTrabajadas() {
		return horasTrabajadas;
	}
 
	public void setHorasTrabajadas(int horasTrabajadas) {
		this.horasTrabajadas = horasTrabajadas;
	}
 
	public double getValorHora() {
		return valorHora;
	}
 
	public void setValorHora(double valorHora) {
		this.valorHora = valorHora;
	}
 
	//Métodos heredados que se han de sobreescribir
 
	@Override
	public double calcularSalario() {
		/*
		 * Salario:( horas trabajadas* valor de la hora) + adicionales
		 * Restricciones: si salario es >1500000 debe descontarse el 3% del valor a pagar
		 * Si salario <= 1000000 debe adicionarse el 5%
		 */
 
		salario = horasTrabajadas * valorHora;
		if (salario > 1500000) { //Restamos 3%
			porcentaje = "-3%";
			adicional = (salario * 3 / 100) * -1;
		}
		else if(salario <= 1000000) { //Incrementamos 5%
			porcentaje = "5%";
			adicional = salario * 5 / 100;
		}
		salario += adicional;
 
		return salario;
	}
 
	@Override
	public void mostrar() {
		System.out.println("Nombre Profesor:" + nombre + " " + apellido);
		System.out.println("Titulo: " + tituloAcademico);
		System.out.printf("Salario: %.2f\n", calcularSalario());
		System.out.printf("Adicional: %s -- Valor: %.2f\n", porcentaje, adicional);
		System.out.println("Funciones:\n" + funciones);
 
	}
 
}


Bien, vamos a probar.

En una clase de Prueba instanciamos un Profesor y mostramos sus datos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Prueba {
 
	public static void main(String[] args) {
 
 
		System.out.println("Probando un Profesor...");
 
		Profesor profe = new Profesor("Felipe", "Moreno", "Profesor de Biologia\nGestion del Laboratorio",
				"Titulo de Bioquimica", 450, 100);
 
		profe.mostrar();
	}
 
}

El resultado en pantalla, parece indicar que funciona:
1
2
3
4
5
6
7
8
Probando un Profesor...
Nombre Profesor:Felipe Moreno
Titulo: Titulo de Bioquimica
Salario: 47250,00
Adicional: 5% -- Valor: 2250,00
Funciones:
Profesor de Biologia
Gestion del Laboratorio


Bien, pues siguiendo esta lógica, intenta tú completar las otras dos clases: Alumno y Administrativo

Haz lo que puedas, no importa si te atascas y no lo completas. Comparte lo que consigas y te ayudamos a seguir.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juliana

AYUDAA por favor, HERENCIA Y POLIMORFISMO :(

Publicado por Juliana (7 intervenciones) el 27/10/2022 04:39:45
Hola, muhcas gracias voy a leer tu comentario y me pondré a realizarlo ya que es un trabajo que debo presentar mañana y me frustra tener bases débiles en programación, no se como empezar a aprender y poder tener esa aptitud , la capacidad de solucionar problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AYUDAA por favor, HERENCIA Y POLIMORFISMO :(

Publicado por Kabuto (1381 intervenciones) el 27/10/2022 12:27:43
Inténtalo y nos cuentas.

Fíjate bien en las características de cada clase.
Por ejemplo, para el Administrativo nos dicen que su salario no depende de nada, es simplemente un salario fijo que se le asigna y punto.
Esto significa que para esta clase, su salario si convendría recibirlo por constructor.

Y su método para calcular salario, no tiene que hacer nada, simplemente retornar el valor de su atributo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar