Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: micaelasol en 18 de Julio 2022, 21:54

Título: Java diferencia entre constructores y métodos con o sin parámetros recibidos obj
Publicado por: micaelasol en 18 de Julio 2022, 21:54
Hola. Aquí está el ejercicio CU00639B del tutorial de programación pdf en Java de aprenderaprogramar como yo lo pude resolver.

Citar
Define una clase Bombero 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 los métodos para poder establecer y obtener los valores de los atributos.

Código: [Seleccionar]
public class Bombero
{
    private String nombre, apellido;
    private int edad;
    private boolean casado, especialista;
   
    public void Bombero(String valorNombre, String valorApellido, int valorEdad, boolean valorCasado, boolean valorEspecialista){
        nombre=valorNombre;
        apellido=valorApellido;
        edad=valorEdad;
        casado=valorCasado;
        especialista=valorEspecialista;
    }
   
    public void setNombreApellido(String valorNombre, String valorApellido){
        nombre=valorNombre;
        apellido=valorApellido;}
       
    public void setEdad(int valorEdad){edad=valorEdad;}
   
    public void setCasadoEspecialista(boolean valorCasado, boolean valorEspecialista){
        casado=valorCasado;
        especialista=valorEspecialista;}
       
    public String getNombre(){return nombre;}
   
    public String getApellido(){return apellido;}
   
    public int getEdad(){return edad;}
   
    public boolean getCasado(){return casado;}
   
    public boolean getEspecialista(){return especialista;}
   
}

Ahora tengo una duda, si yo creo un constructor que reciba parámetros y todos mis atributos lo reciben, es necesario escribir los métodos setters?
Muchas gracias!
Título: Re: Cómo crear constructores con o sin parámetros. Inicializar objetos Java.
Publicado por: Kabuto en 19 de Julio 2022, 18:02
Los constructores se parecen a los métodos, pero no lo son.
La principal diferencia es que NO tienen retorno, así que los constructores no hay que indicar void ni nada:
Citar
    public void Bombero(String valorNombre, String valorApellido, int valorEdad, boolean valorCasado, boolean valorEspecialista){
        nombre=valorNombre;
        apellido=valorApellido;
        edad=valorEdad;
        casado=valorCasado;
        especialista=valorEspecialista;
    }

Simplemente se indica que son public, y nada más:

Citar
    public Bombero(String valorNombre, String valorApellido, int valorEdad, boolean valorCasado, boolean valorEspecialista){
        nombre=valorNombre;
        apellido=valorApellido;
        edad=valorEdad;
        casado=valorCasado;
        especialista=valorEspecialista;
    }

Otra cosa, los atributos casado y especialista son cosas distintas, no guardan relación entre ellos, por tanto cada uno debería tener su propio setter, y no uno compartido:
Citar
    public void setCasadoEspecialista(boolean valorCasado, boolean valorEspecialista){
        casado=valorCasado;
        especialista=valorEspecialista;}



Y sobre tu duda:
Los constructores con parámetros y los setters cubren necesidades distintas.

Un constructor con parámetros sirve para poder crear en una sola línea un objeto con valores aplicados en todos sus atributos.
Aquí un ejemplo de un bombero "soltero":
Código: [Seleccionar]
Bombero bombero1 = new Bombero("Paquito", "Mangueras", 25, false, true);
Ya tenemos un bombero construido, pero es posible que luego más tarde queramos cambiar los valores de esos atributos, porque nos hemos equivocado, o porque Paquito se ha casado y ya no es soltero, o por lo que sea...
Entonces que hacemos, ¿llamar a su constructor para crear un nuevo objeto con los nuevos valores de atributos?

Eso no es práctico, además en un programa real donde unos objetos están relacionados con otros, crear un nuevo objeto de cero supone perder esas relaciones e incluso otra información.

Así que lo mejor es usar los setters:
Citar
//Paquito abandona la soltería
bombero1.setCasado(true);
//Ahora además, hay que tratarle como a un señor
bombero1.setNombre("Don Francisco");

Así que como hemos dicho, el constructor con parámetros lo usaremos para la creación inicial del objeto.
Si luego queremos hacer modificaciones de sus atributos, vamos a necesitar los setters.

Un saludo.
Título: Re: Cómo crear constructores con o sin parámetros. Inicializar objetos Java.
Publicado por: micaelasol en 20 de Julio 2022, 20:52
Genial, muchas gracias por la explicación!