Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: nengue en 08 de Diciembre 2020, 16:54

Título: Ejercicios Resueltos Java invocar métodos de superclases desde subClase CU00692B
Publicado por: nengue en 08 de Diciembre 2020, 16:54
Buenas, aquí seguimos, desde ya muhas gracias a los que anteriormente se tomaron el tiempo de verificar mis soluciones presentadas.

Continuando con el curso y la llamada de un método de una superclase desde una subclase ... aquí dejo el código. Como siempre, "no me dejen pasar una" para seguir mejorando.

Algunos comentarios como

//declaracion de atributos
//constructores
//metodos

los sigo realizando aun para acostumbrarme a mantener un orden y en breve los estaria dejando de usar .aunque su uso en codigos mas complejos ayuda a la comprension del mismo

Código de la clase Profesor:

Código: [Seleccionar]
package CU00692B;

/**
 * Clase Profesor , una superclase que tiene como atributos los siguientes campos
 * Nombre, edad y numero de años consolidados
 */
public class Profesor{
    //declaracion de atributos
    private String nombre;
    private int edad;
    private int añosConsolidados;

    //Constructos
    /**
     * Constructor de la clase Profesor sin parametrizar
     * todas sus variables se iniciaran por defecto en 0 y ""
     */
    public Profesor(){
        nombre="";
        edad=0;
        añosConsolidados=0;
    }

    /**
     * Constructor de la clase Profesor parametrizada
     * @param nombre Nombre del profesor
     * @param edad Edad del profesor
     * @param añosConsolidados Los años consolidados del profesor
     */
    public Profesor(String nombre,int edad, int añosConsolidados){
        this.nombre=nombre;
        this.edad=edad;
        this.añosConsolidados=añosConsolidados;
    }
    //metodos de la clase Profesor
    /**
     * setNombre Permite establecer o modificar el nombre del profesor
     */
    public void setNombre(String nombre){
        this.nombre=nombre;
    }

    /**
     * setEdad Permite establecer o modificar la edad del profesor
     */
    public void setEdad(int edad){
        this.edad=edad;
    }

    /**
     * setAñosConsolidados permite establecer o modificar los años consolidados
     */
    public void setAñosConsolidados(int añosConsolidados){
        this.añosConsolidados=añosConsolidados;
    }

    /**
     * getNombre Devuelve el nombre del profesor
     */
    public String getNombre(){
        return nombre;
    }

    /**
     * getEdad Devuelve la edad del profesor
     */
    public int getEdad(){
        return edad;
    }

    /**
     * getAñosConsolidados devuelve los años consolidados del profesor
     */
    public int getAñosConsolidados(){
        return añosConsolidados;
    }

    /**
     * obtenerSalarioBase Devuelve el valor del salario base  del profesor
     */
    public double obtenerSalarioBase(){
        double salarioBase=(725 + (añosConsolidados*33.25));
        return salarioBase;
    }
}


Código de la clase profesorEmerito

Código: [Seleccionar]
package CU00692B;

/**
 * Clase ProfesorEmerito,sub-tipo(sub-clase) de clase Profesor
 * hereda todos sus atributos y añade un atributo especifico
 */
public class ProfesorEmerito extends Profesor{
    //declaracion de atributos
    private int añosEmerito;
    //constructor
    /**
     * Constructor sin parametrizar , inicializa todos los valores por defecto en 0 y ""
     */
    public ProfesorEmerito(){
        super();
        añosEmerito=0;
    }

    /**
     * Constructor parametrizado de la clase ProfesorEmerito
     * @param nombre Nombre del Profesor
     * @param eda Edad del profesor
     * @param añosConsolidados Años consolidados del profesor
     * @param añosEmerito Años emeritos del profesor
     */
    public ProfesorEmerito(String nombre,int edad,int añosConsolidados,int añosEmerito){
        super(nombre,edad,añosConsolidados);
        this.añosEmerito=añosEmerito;
    }
    //metodos
    /**
     * setAñosEmerito Permite establecer o modificar los años Emeritos del profesor
     */
    public void setAñosEmerito(int añosEmerito){
        this.añosEmerito=añosEmerito;
    }

    /**
     * getAñosEmerito devuelve el valor de añosEmerito
     */
    public int getAñosEmerito(){
        return añosEmerito;
    }

    /**
     * obtenerSalarioBase Devuelve el salario base mas un plus por años emerito
     */
    public double obtenerSalarioBase(){
        double salarioBase=(super.obtenerSalarioBase() + (47.80*añosEmerito));
        return salarioBase;
    }

}


Como consulta añadida me gustaria que me indicaran si esta forma sería correcta tambien

Código: [Seleccionar]
  public double obtenerSalarioBase(){
        return (super.obtenerSalarioBase() + (47.80*añosEmerito));
}

Evitaría la declaracion de una variable local, pero entiendo que no en todos los casos
seria posible evitar la declaracion de la misma, ya sea por necesidad o por legilibilidad.
       
Título: Re: Ejercicios Resueltos Java invocar métodos de superclases desde subClase CU00692B
Publicado por: Alex Rodríguez en 24 de Enero 2021, 14:13
Hola, he revisado el ejercicio y lo veo muy bien resuelto.

Sobre lo que comentas de si usar return (super.obtenerSalarioBase() + (47.80*añosEmerito)); sería correcto, la respuesta es que sí, seguramente muchos programadores lo harían así por economía o para ir más rápido. Sin embargo a mí me gusta más como lo has hecho tú porque es más legible y más entendible.

Una recomendación que solemos hacer es evitar el uso de eñes en identificadores como nombres de métodos o de variables. En lugar de añosConsolidados usaríamos annosConsolidados. El motivo es que a la larga cuando se migran los programas o se ejecutan en otras plataformas usar caracteres con tildes o eñes puede acabar generando problemas y una forma de evitarlo es simplemente no usarlos ni aunque sean permitidos.

Saludos.