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

Damian

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 47
    • Ver Perfil
Pasar objetos como parámetros a un método o constructor Java. Diferenciar objeto y tipo primitivo (CU00642B)

Ejercicio de esta clase CU00642B del tutorial elemental de programador Java

SALONCASA

Código: [Seleccionar]
/*Difinición del Tipo de Salón
 * Damian
 */
public class SalonCasa{
    private int numeroDeTelevisores;
    private String tipoSalon;
   
    //Contructor
    public SalonCasa(){
        numeroDeTelevisores= 0;
        tipoSalon= "Desconocido";
    }//Cierre del constructor
   
    public void setNumeroDeTelevisores(int valorNumeroDeTelevisores){
        numeroDeTelevisores= valorNumeroDeTelevisores;
    }
    public void setTipoSalon(String valorTipoSalon){
        tipoSalon= valorTipoSalon;
    }
   
    public int getNumeroDeTelevisores(){return numeroDeTelevisores;}
    public String getTipoSalon(){return tipoSalon;}
}//Cierre de los métodos

COCINACASA

Código: [Seleccionar]
/*Definición de la Cocina de una Casa
 * Damian
 */
public class CocinaCasa{
    private boolean esIndependiente;
    private int numeroDeFuegos;
   
    //Constructor
    public CocinaCasa(){
        esIndependiente= false;
        numeroDeFuegos= 0;
    }//CIerre del constructor
   
    public void setEsIndependiente(boolean valorEsIndependiente){
        esIndependiente= valorEsIndependiente;
    }
    public void setNumeroDeFuegos(int valorNumeroDeFuegos){
        numeroDeFuegos= valorNumeroDeFuegos;
    }
   
    public boolean getEsIndependiente(){return esIndependiente;}
   
    public int getNumeroDeFuegos(){return numeroDeFuegos;}
}//Cierre de los métodos

CASA

Código: [Seleccionar]
/*Definición de una Casa
 * Damian
 */
public class Casa{
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocina;

    //Constructor
    public Casa(){
        superficie= 0;
        direccion= "Desconocida";
        salonCasa= new SalonCasa();
        cocina= new CocinaCasa();
    }//Cierre del constructor

    //Constructor con parametros
    public Casa(double valorSuperficie, String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocinaCasa){
        superficie= valorSuperficie;
        direccion= valorDireccion;
        salonCasa= new SalonCasa(objetoSalonCasa.getNumeroDeTelevisores(), objetoSalonCasa.getTipoSalon() );
        cocina= new CocinaCasa(objetoCocinaCasa.getEsIndependiente(), objetoCocinaCasa.getNumeroDeFuegos() );
    }//Cierre del constructor

    //Stters principales   
    public void setSuperficie(double valorSuperficie){
        superficie= valorSuperficie;
    }

    public void setDireccion(String valorDireccion){
        direccion= valorDireccion;
    }

    //Otros setters
    public void setSalonCasa(SalonCasa objetoSalon){
        salonCasa= new SalonCasa(bjetoSalon.getNumeroDeTelevisores(), objetoSalon.getTipoSalon() );
    }

    public void setCocina(CocinaCasa objetoCocina){
        cocina= new CocinaCasa(objetoCocina.getEsIndependiente(), objetoCocina.getNumeroDeFuegos() );

    }

    //getters principales
    public double getSuperficie(){return superficie;}

    public String getDireccion(){return direccion;}

    //Otros getters
    public SalonCasa getSalonCasa(){return salonCasa;}

    public CocinaCasa getCocina(){return cocina;}
}//Cierre de los métodos

En la clase Casa, cada vez que compilo el código, me sale error, sobre todo en esta parte.
salonCasa= new SalonCasa(objetoSalonCasa.getNumeroDeTelevisores(), objetoSalonCasa.getTipoSalon() ); me sale marcado de color rojo, al parecer lo demás está bien, pero el error sólo sale en esta parte que indiqué, he corregido, cambiado y modificado el código, pero sigue igual, si hay algún error en el código o en los objetos, por favor hacerme saber, para así poder corregir..

Gracias por la colaboración.
« Última modificación: 02 de Abril 2017, 18:25 por Alex Rodríguez »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola Damian.

El error que obtienes es porque no hay un constructor en la clase SalonCasa que reciba dos parámetros. Y con la clase CocinaCasa te pasará lo mismo.

De todas formas, según tienes planteado el constructor con parámetros de la clase Casa, debería quedar de la siguiente forma, ya que le estás diciendo que lo que tiene que recibir son cuatro parámetros de tipo double, String, SalonCasa y CocinaCasa:

Código: [Seleccionar]
public Casa(double valorSuperficie, String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocinaCasa){
        superficie= valorSuperficie;
        direccion= valorDireccion;
        salonCasa= objetoSalonCasa;
        cocina= objetoCocinaCasa;
    }

Es decir los objetos objetoSalonCasa y objetoCocinaCasa estarán creados con anterioridad, no tienes que crearlos en este constructor.

En los setter de la clase Casa te pasa algo parecido, para establecer el valor del atributo salonCasa precisas que llegue un objeto tipo SalonCasa, con lo que el método quedaría de la siguiente forma:

Código: [Seleccionar]
public void setSalonCasa(SalonCasa objetoSalon){
        salonCasa= objetoSalon;
    }

Con el método setCocinaCasa te pasa lo mismo.


Saludos.  ;D

Damian

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 47
    • Ver Perfil
Hola Pedro.

Gracias nuevamente por tu gran ayuda, ahora corrijo los códigos para poder enviarlo nuevamente..

Saludos amigo.

Damian

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 47
    • Ver Perfil
Pasar objetos como parámetros a un método o constructor Java. Diferenciar objeto y tipo primitivo (CU00642B).

CORRECIÓN

En la Clase SalonCasa y en la Clase CocinaCasa, había que poner un constructor con parámetros, y así que lo hice y al momento de compilar cada clase, todo salió bien, en cuanto a la Clase Casa, deje los mismos códigos, lo único que me faltaba era poner un constructor con parámetros en las clases SalonCasa y CocinaCasa.

SALONCASA

Código: [Seleccionar]
/*Difinición del Tipo de Salón
 * Damian
 */
public class SalonCasa{
    private int numeroDeTelevisores;
    private String tipoSalon;
   
    //Contructor
    public SalonCasa(){
        numeroDeTelevisores= 0;
        tipoSalon= "Desconocido";
    }//Cierre del constructor
   
    //Constructor con parámetros
    public SalonCasa(int valorNumeroDeTelevisores, String valorTipoSalon){
        numeroDeTelevisores= valorNumeroDeTelevisores;
        tipoSalon= valorTipoSalon;
    }
   
    public void setNumeroDeTelevisores(int valorNumeroDeTelevisores){
        numeroDeTelevisores= valorNumeroDeTelevisores;
    }
    public void setTipoSalon(String valorTipoSalon){
        tipoSalon= valorTipoSalon;
    }
   
    public int getNumeroDeTelevisores(){return numeroDeTelevisores;}
    public String getTipoSalon(){return tipoSalon;}
}//Cierre de los métodos

COCINACASA

Código: [Seleccionar]
/*Definición de la Cocina de una Casa
 * Damian
 */
public class CocinaCasa{
    private boolean esIndependiente;
    private int numeroDeFuegos;
   
    //Constructor
    public CocinaCasa(){
        esIndependiente= false;
        numeroDeFuegos= 0;
    }//CIerre del constructor
   
    //Constructor con parámetros
    public CocinaCasa(boolean valorEsIndependiente, int valorNumeroDeFuegos){
        esIndependiente= valorEsIndependiente;
        numeroDeFuegos= valorNumeroDeFuegos;
    }
   
    public void setEsIndependiente(boolean valorEsIndependiente){
        esIndependiente= valorEsIndependiente;
    }
    public void setNumeroDeFuegos(int valorNumeroDeFuegos){
        numeroDeFuegos= valorNumeroDeFuegos;
    }
   
    public boolean getEsIndependiente(){return esIndependiente;}
   
    public int getNumeroDeFuegos(){return numeroDeFuegos;}
}//Cierre de los métodos

CASA

Código: [Seleccionar]
/*Definición de una Casa
 * Damian
 */
public class Casa{
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocina;

    //Constructor
    public Casa(){
        superficie= 0;
        direccion= "Desconocida";
        salonCasa= new SalonCasa();
        cocina= new CocinaCasa();
    }//Cierre del constructor

    //Constructor con parámetros
    public Casa(double valorSuperficie, String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocinaCasa){
        superficie= valorSuperficie;
        direccion= valorDireccion;
        salonCasa= new SalonCasa(objetoSalonCasa.getNumeroDeTelevisores(), objetoSalonCasa.getTipoSalon());
        cocina= new CocinaCasa(objetoCocinaCasa.getEsIndependiente(), objetoCocinaCasa.getNumeroDeFuegos());
    }//Cierre del constructor

    //Setters principales   
    public void setSuperficie(double valorSuperficie){
        superficie= valorSuperficie;
    }

    public void setDireccion(String valorDireccion){
        direccion= valorDireccion;
    }

    //Otros setters
    public void setSalonCasa(SalonCasa objetoSalon){
        salonCasa= new SalonCasa(objetoSalon.getNumeroDeTelevisores(), objetoSalon.getTipoSalon());
    }

    public void setCocina(CocinaCasa objetoCocina){
        cocina= new CocinaCasa(objetoCocina.getEsIndependiente(), objetoCocina.getNumeroDeFuegos());

    }

    //getters principales
    public double getSuperficie(){return superficie;}

    public String getDireccion(){return direccion;}

    //Otros getters
    public SalonCasa getSalonCasa(){return salonCasa;}

    public CocinaCasa getCocina(){return cocina;}
}//Cierre de los métodos

Espero que todo esté bien..

Saludos.


pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola Damian.

Que no te de ningún error no significa que estés actuando de forma correcta.
Está bien que crees los constructores con parámetros de las clases SalonCasa y CocinaCasa, pero el constructor con parámetros de la clase Casa no está bien diseñado, si requieres como parámetro un objeto SalonCasa, ¿para que crear otro objeto SalonCasa si ya  tienes uno?

Otro tema sería que los parámetros en vez de ser un objeto SalonCasa o CocinaCasa fuesen el valor de sus atributos, y entonces sí deberías de crear el objeto, habiendo creado ya los constructores con parámetros de las clases SalonCasa y CocinaCasa, dejo un ejemplo del constructor:

Código: [Seleccionar]
public Casa(double valorSuperficie, String valorDireccion, boolean esIndependiente,
int numeroDeFuegos, int numeroDeTelevisores, String tipoSalon){
superficie = valorSuperficie;
direccion = valorDireccion;
cocina = new CocinaCasa(esIndependiente, numeroDeFuegos);
salonCasa = new SalonCasa(numeroDeTelevisores, tipoSalon);
}

Saludos. ;D

Damian

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 47
    • Ver Perfil
Hola amigo Pedro.

Gracias por tu observación, sabes? Me guíe por el ejemplo de este nivel e incluso en algunos foros que vi sobre este nivel y por esa razón, puse los parámetros de las otras clases, en el constructor con parámetros de la clase Casa , pero lo que me das a entender, es que debería utilizar el constructor que has puesto como ejemplo, para que así salga todo bien?

Pero como ya están creados los constructores con parámetros en las clases SalonCasa y CocinaCasa, simplemente tendría que modificar los códigos en el constructor con parámetros de la clase Casa nuevamente, para que esté bien todo.

Gracias nuevamente Pedro por tu ayuda.

Saludos : )

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Buenas Damian.

Para que funcione el código, funcionaría también con el constructor que tu pusiste, lo único que quise intentar, era hacerte ver un mejor diseño donde no reptitieses pasos, como crear un nuevo objeto con el mismo contenido que que el objetos que se recibía por parámetro.

Podrías usar los tres constructores propuestos en la misma clase, te dejo la clase Casa como yo la dejaría, y usando las últimas clases SalonCasa y CocinaCasa que pusiste.

Código: [Seleccionar]
public class Casa{
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocina;

    //Constructor
    public Casa(){
        superficie= 0;
        direccion= "Desconocida";
        salonCasa= new SalonCasa();
        cocina= new CocinaCasa();
    }

    //Constructor con parámetros
    public Casa(double valorSuperficie, String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocinaCasa){
        superficie= valorSuperficie;
        direccion= valorDireccion;
        salonCasa= objetoSalonCasa;
        cocina= objetoCocinaCasa;
    }
   
  //Constructor con parámetros
public Casa(double valorSuperficie, String valorDireccion, boolean esIndependiente,
int numeroDeFuegos, int numeroDeTelevisores, String tipoSalon){
superficie = valorSuperficie;
direccion = valorDireccion;
cocina = new CocinaCasa(esIndependiente, numeroDeFuegos);
salonCasa = new SalonCasa(numeroDeTelevisores, tipoSalon);
}
   
    public void setSuperficie(double valorSuperficie){
        superficie= valorSuperficie;
    }

    public void setDireccion(String valorDireccion){
        direccion= valorDireccion;
    }
   
    public void setSalonCasa(int valorNumeroDeTelevisores, String valorTipoSalon){
        salonCasa.setNumeroDeTelevisores(valorNumeroDeTelevisores);
        salonCasa.setTipoSalon(valorTipoSalon);
    }

    public void setCocina(boolean valorEsIndependiente, int valorNumeroDeFuegos){
        cocina.setEsIndependiente(valorEsIndependiente);
        cocina.setNumeroDeFuegos(valorNumeroDeFuegos);

    }

    //getters
    public double getSuperficie(){return superficie;}

    public String getDireccion(){return direccion;}

    public SalonCasa getSalonCasa(){return salonCasa;}

    public CocinaCasa getCocina(){return cocina;}
}



Saludos. ;D

Damian

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 47
    • Ver Perfil
Buenas tardes Pedro.

Muchas gracias por tu ayuda nuevamente, el ejemplo que haz puesto tu, se ve mucho más sencillo, que el que puse yo.

Poco a poco he de ir mejorando..

Gracias.  :D

 

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