Autor Tema: Java ¿es necesario tener un método set por cada atributo de una clase? CU00654B  (Leído 4751 veces)

Javier1996

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
Hola

Aquí mi ejercicio CU00654B. Tengo una pregunta, en uno de los ejemplo del curso vi que usaron un método set para establecer todos los valores de los atributos "De golpe", me pareció mas cómodo que usar un método para cada uno y lo implemente en este ejercicio.

¿Esta bien que lo haga así o debería usar un método set para cada uno?

Saludos!! y gracias de antemano por su tiempo :3.


Citar
EJERCICIO

Define una clase Profesor considerando los siguientes atributos de clase: nombre (String), apellidos (String), edad (int), casado (boolean), especialista (boolean). Define un constructor que reciba los parámetros necesarios para la inicialización y otro constructor que no reciba parámetros. El nombre de los parámetros debe ser el mismo que el de los atributos y usar this para asignar los parámetros recibidos a los campos del objeto. Crea los métodos para poder establecer y obtener los valores de los atributos, con sobrecarga de nombres y uso de this en los métodos setters (los que sirven para establecer el valor de los atributos). Compila el código para comprobar que no presenta errores, crea un objeto usando el constructor con sobrecarga. Comprueba que se inicializa correctamente consultando el valor de sus atributos después de haber creado el objeto. Usa los métodos setters y comprueba que funcionen correctamente.

Código: [Seleccionar]
/** La palabra clave this en java.
 * Contenido null por defecto de un objeto.
 * Ejercicio resuelto (CU00654B) */

public class Profesor {
    private String nombre;
    private String apellidos;
    private int edad;
    private boolean casado;
    private boolean especialista;
   
    //Constructor 1 Sin parametros
   
    public Profesor (){
        this.nombre = "";
        this.apellidos = "";
        this.edad = 0;
        this.casado = false;
        this.especialista = false;
    }//Cierre del Constructor 1
   
    //Constructor 2 Con parametros
   
    public Profesor (String nombre, String apellidos, int edad, boolean casado, boolean especialista) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.edad = edad;
        this.casado = casado;
        this.especialista = especialista;
    }//Cierre del constructor 2
   
    /** Setter de la clase profesor */
    //Método para establecer los valores de los atributos a los objetos de esta clase
    public void setEstablecer (String nombre, String apellidos, int edad, boolean casado, boolean especialista){
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.edad = edad;
        this.casado = casado;
        this.especialista = especialista;
    }//Cierre del metodo

    /** Getters de la clase profesor */
    //Método para obtener el nombre del objeto profesor
    public String getNombre (){return this.nombre;}//Cierre del Método
   
    //Método para obtener los apellidos del objeto profesor
    public String getApellidos (){return this.apellidos;}//Cierre del Método
   
    //Método para obtener la edad del objeto profesor
    public int getEdad (){return this.edad;}//Cierre del Método
   
    //Método para obtener si es casado del objeto profesor
    public boolean getCasado (){return this.casado;}//Cierre del Método
   
    //Método para obtener si es especialista del objeto profesor
    public boolean getEspecialista (){return this.casado;}//Cierre del Método
   
}//Cierre de la clase
   
« Última modificación: 24 de Agosto 2015, 10:20 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola Javier!

La pregunta que haces: tú como programador puedes decidir tener los métodos que consideres adecuados siempre que sean coherentes. Por ejemplo un método no debe servir para establecer y recuperar un atributo al mismo tiempo porque sería mezclar dos cosas. Un método debe tener una responsabilidad clara y definida, tener un nombre explicativo y claro, etc.

Por otro lado, tener set y get individuales para cada atributo es una práctica habitual que deberías seguir al menos por el momento. Digamos que es un "convenio entre programadores". No es obligatorio, pero es lo más habitual, por lo que durante el aprendizaje es mejor seguir el convenio.

¿Qué ocurriría si quieres establecer la edad para un objeto de tipo Persona? El código de tu ejercicio está bien pero tal y como tienes el código no dispondrías de un método que te permita establecer la edad, por tanto para dar el ejercicio por bueno sería necesario que tuvieras un método set por cada atributo (aunque no sea obligatorio por las normas del lenguaje, sería la forma de cumplir el convenio entre programadores)

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

Javier1996

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
Hola Cesar
Muchas gracias por tu explicación.
Aquí subo el código con la corrección en los setters.
Saludos!!

Código: [Seleccionar]
/** La palabra clave this en java.
 * Contenido null por defecto de un objeto.
 * Ejercicio resuelto (CU00654B) */

public class Profesor {
    private String nombre;
    private String apellidos;
    private int edad;
    private boolean casado;
    private boolean especialista;
   
    //Constructor 1 Sin parametros
   
    public Profesor (){
        this.nombre = "";
        this.apellidos = "";
        this.edad = 0;
        this.casado = false;
        this.especialista = false;
    }//Cierre del Constructor 1
   
    //Constructor 2 Con parametros
   
    public Profesor (String nombre, String apellidos, int edad, boolean casado, boolean especialista) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.edad = edad;
        this.casado = casado;
        this.especialista = especialista;
    }//Cierre del constructor 2
   
    /** Setter de la clase profesor */
    //Método para establecer el nombre al objeto profesor
    public void setNombre (String nombre){
        this.nombre = nombre;
    }//Cierre del Método
   
    //Método para establecer el apellido del objeto profesor
    public void setApellidos (String apellidos){
        this.apellidos = apellidos;
    }//Cierre del Método
   
    //Método para establecer la edad del objeto profesor
    public void setEdad (int edad){
        this.edad = edad;
    }//Cierre del Método
   
    //Método para establecer si es casado del objeto profesor
    public void setCasado (boolean casado){
        this.casado = casado;
    }//Cierre del Método
   
    //Método para establecer si es especialista del objeto profesor
    public void setEspecialista (boolean especialista){
        this.especialista = especialista;
    }//Cierre del metodo

    /** Getters de la clase profesor */
    //Método para obtener el nombre del objeto profesor
    public String getNombre (){return this.nombre;}//Cierre del metodo
   
    //Método para obtener los apellidos del objeto profesor
    public String getApellidos (){return this.apellidos;}//Cierre del metodo
   
    //Método para obtener la edad del objeto profesor
    public int getEdad (){return this.edad;}//Cierre del Método
   
    //Método para obtener si es casado del objeto profesor
    public boolean getCasado (){return this.casado;}//Cierre del metodo
   
    //Método para obtener si es especialista del objeto profesor
    public boolean getEspecialista (){return this.casado;}//Cierre del Método
   
}//Cierre de la clase
   

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Ahora todo bien. ¡A continuar!

Saludos
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".