Autor Tema: [CU00642B] Pasar objetos como parámetros a un método o constructor Java.  (Leído 3215 veces)

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
Buenas tardes, aquí dejo mi ejercicio para cualquier observación.

Clase CocinaCasa

Código: [Seleccionar]
public class CocinaCasa{
   
    //Atributos de clase
    private boolean esIndependiente;
    private int numeroDeFuegos;
   
    //Constructor inicializado a 0 y false
    public CocinaCasa(){
        esIndependiente=false;
        numeroDeFuegos=0; }
       
    //Constructor que solicita los parametros de clase
    public CocinaCasa(boolean valorEsIndependiente, int valorNumeroDeFuegos){
        esIndependiente=valorEsIndependiente;
        numeroDeFuegos=valorNumeroDeFuegos; }
   
    //Setters
    public void setEsIndependiente(boolean valorEsIndependiente){
        esIndependiente=valorEsIndependiente; }
    public void setNumeroDeFuegos(int valorNumeroDeFuegos){
        numeroDeFuegos=valorNumeroDeFuegos; }
     
    //Getters
    public boolean getEsIndependiente(){ return esIndependiente; }
    public int getNumeroDeFuegos(){ return numeroDeFuegos; }

}
 

Clase SalonCasa
Código: [Seleccionar]

public class SalonCasa{
   
    //Atributos clase
    private int numeroDeTelevisores;
    private String tipoSalon;
   
    //Constructor inicializado a 0 y desconocido
    public SalonCasa(){
        numeroDeTelevisores=0;
        tipoSalon="desconocido"; }
       
    //Constructor necesario para inicializar Casa con parametros
    public SalonCasa(int valorNumeroDeTelevisores, String valorTipoSalon){
        numeroDeTelevisores=valorNumeroDeTelevisores;
        tipoSalon=valorTipoSalon; }
       
    //Setters
    public void setNumeroDeTelevisores(int valorNumeroDeTelevisores){
        numeroDeTelevisores=valorNumeroDeTelevisores; }
    public void setTipoSalon(String valorTipoSalon){
        tipoSalon=valorTipoSalon; }
   
    //Getters
    public int getNumeroDeTelevisores(){ return numeroDeTelevisores; }
    public String getTipoSalon(){ return tipoSalon; }
}

Clase Casa
Código: [Seleccionar]

public class Casa{
   
    //Atributos de clase
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocina;
   
    //Constructor valores por defecto
   
    public Casa(){
        superficie=0;
        direccion="";
        salonCasa= new SalonCasa();
        cocina= new CocinaCasa(); }
   
    //Constructor que recibe parametros superficie direccion salonCasa y cocina
   
    public Casa(double valorSuperficie, String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocina){
        superficie= valorSuperficie;
        direccion= valorDireccion;
        salonCasa= new SalonCasa(objetoSalonCasa.getNumeroDeTelevisores(), objetoSalonCasa.getTipoSalon() );
        cocina= new CocinaCasa(objetoCocina.getEsIndependiente(),objetoCocina.getNumeroDeFuegos() );
    }
 
   
    //Setters
   
    public void setSuperficie(double valorSuperficie){
        superficie=valorSuperficie; }
    public void setDireccion(String valorDireccion){
        direccion=valorDireccion; }
    public void setSalonCasa(SalonCasa valorSalonCasa){
        salonCasa=valorSalonCasa; }
    public void setCocina(CocinaCasa valorCocina){
        cocina=valorCocina; }
       
    //Getters
   
    public double getSuperficie(){ return superficie; }
    public String getDireccion(){ return direccion; }
    public SalonCasa getSalonCasa(){ return salonCasa; }
    public CocinaCasa getCocina(){ return cocina; }
   
}
 

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
Vale revisando los ejercicios de otros compañeros he visto que en el constructor de la clase Casa yo creo un new SalonCasa y un new CocinaCasa

Código: [Seleccionar]
   //Constructor que recibe parametros superficie direccion salonCasa y cocina
   
    public Casa(double valorSuperficie, String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocina){
        superficie= valorSuperficie;
        direccion= valorDireccion;
        salonCasa= new SalonCasa(objetoSalonCasa.getNumeroDeTelevisores(), objetoSalonCasa.getTipoSalon() );
        cocina= new CocinaCasa(objetoCocina.getEsIndependiente(),objetoCocina.getNumeroDeFuegos() );
    }

Y se podria solucionar mejor, simplemente asignando objetos ya creados, que es exactamente lo que pedía el ejercicio.

Código: [Seleccionar]
//Constructor que recibe parametros superficie direccion salonCasa y cocina
   
    public Casa(double valorSuperficie, String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocina){
        superficie= valorSuperficie;
        direccion= valorDireccion;
        salonCasa= objetoSalonCasa;
        cocina= objetoCocina;
    }

Lo he corregido y lo entiendo, ya con el otro contructor de inicialización es suficiente, después solo es necesario usar los setters y pasas el objeto salonCasa o CocinaCasa.

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Hola, el cambio que has hecho no es bueno. Quizás es un poco difícil de explicar, pero con la primera forma el objeto salonCasa de la clase es un nuevo objeto (independiente, lo cual es mejor, ya que no depende de si se hace alguna modificación al objeto que llega por parámetro).

De la segunda forma, hay un solo objeto SalonCasa, el objeto que llegó por parámetro. Pero con esto puede haber problemas, porque si modificamos ese objeto, que puede estar "en otro lugar", también estaremos afectando al objeto que tenemos en la clase.

Recomendación: en estos casos mantener siempre los objetos independientes.

Por el mismo motivo este no es un buen código:

public void setSalonCasa(SalonCasa valorSalonCasa){
        salonCasa=valorSalonCasa; }

Revisa este hilo donde se explica la forma correcta de solucionarlo - > www.aprenderaprogramar.com/foros/index.php?topic=1238

Saludos

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
Entonces entiendo que es mejor hacer un new Salon como tenía ya al principio de mi ejercicio, que pasarle parametros de una instancia ya creada de Salon o Cocina?

EDITO, He creado nuevos Salones y Cocinas, y efectivamente al pasarlo a Casa con new, se pasan los paramentros y adquiere nombre diferente (se crea una nueva instancia de Salon o Cocina).
Si me dices que es mejor así, para asegurarme que no se modifica la información a la que apunta, seguiré haciendolo con new, gracias por la explicación.
« Última modificación: 18 de Marzo 2015, 22:37 por Lorenzo31 »

 

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".