Foros aprenderaprogramar.com
		Aprender a programar => Aprender a programar desde cero => Mensaje iniciado 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. 
 
 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. 
 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!
- 
				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:
     public voidBombero(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:
 
     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:
     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":
 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:
 //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.
- 
				Genial, muchas gracias por la explicación!