Autor Tema: Crear objetos en BlueJ pasando otros objetos parámetros e inspeccionar CU00642B  (Leído 2345 veces)

dlegolas

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Tengo algunas dudas en el ejercicio CU00642B, aunque yo haga creado los objetos SalonCasa y CocinaCasa luego, cuando los invoco desde el objeto Casa  (y lo inspecciono) el me trae los valores por defecto de los constructores de los objetos y nos los que cree, eso es correcto?

Clase SalonCasa

Código: [Seleccionar]
public class SalonCasa {
    private int numeroDeTelevisores;
    private String tipoSalon;
   
    public SalonCasa(){
        numeroDeTelevisores = 0;
        tipoSalon = "Desconocido";
    }
   
    public SalonCasa(int vNumTV, String vTipoSalon){
        numeroDeTelevisores = vNumTV;
        tipoSalon = vTipoSalon;
    }
   
    public void setNumTV (int vNumTV) {
        numeroDeTelevisores = vNumTV;
    }
   
    public void setTipoSalon(String vTipoSalon){
        tipoSalon = vTipoSalon;
    }
   
    public int getNumTv(){
        return numeroDeTelevisores;
    }
   
    public String getTipoSalon(){
        return tipoSalon;
    }
}



Clase CocinaCasa

Código: [Seleccionar]
public class CocinaCasa {
    private boolean esIndependiente;
    private int numeroDeFuegos;
   
    public CocinaCasa(){
        esIndependiente = false;
        numeroDeFuegos = 0;
    }
   
    public CocinaCasa(boolean vIndependiente, int vNumFuegos){
        esIndependiente = vIndependiente;
        numeroDeFuegos = vNumFuegos;
    }
   
    public void setEsIndependiente (boolean vEsIndependiente){
        esIndependiente = vEsIndependiente;
    }
   
    public void setNumeroDeFuegos (int vNumFuegos){
        numeroDeFuegos = vNumFuegos;
    }
   
    public boolean getEsIndependiente (){
        return esIndependiente;
    }
   
    public int getNumerodeFuengos (){
        return numeroDeFuegos;
    }
}


Clase Casa

Código: [Seleccionar]
public class Casa {
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocina;
           
    public Casa(){
        superficie = 440.35;
        direccion = "La casa 1";
        salonCasa = new SalonCasa();
        cocina = new CocinaCasa();
    }
   
    public Casa (double vSuperficie, String vDireccion, int vNumTV, String vTipoSalon, boolean vIndependiente, int vNumFuegos){
        superficie = vSuperficie;
        direccion = vDireccion;
        salonCasa = new SalonCasa(vNumTV, vTipoSalon);
        cocina = new CocinaCasa(vIndependiente, vNumFuegos);
    }
   
    public Casa (double vSuperficie, String vDireccion, SalonCasa objetoSalon, CocinaCasa objetoCocina) {
        superficie = vSuperficie;
        direccion = vDireccion;
        salonCasa = new SalonCasa();
        cocina = new CocinaCasa();
    }
   
}
« Última modificación: 28 de Octubre 2015, 09:49 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola, las clases CocinaCasa y SalonCasa las tienes bien definidas.

Sin embargo la clase Casa no está bien definida.

Este constructor no está bien diseñado:

Código: [Seleccionar]
public Casa (double vSuperficie, String vDireccion, int vNumTV, String vTipoSalon, boolean vIndependiente, int vNumFuegos)
El constructor de una clase únicamente debe manejar atributos de la clase, y no de otras clases indirectamente. Por tanto no es correcto incluir en este constructor vNumTV, vTipoSalon, vIndependiente, etc.

También faltan en la clase Casa los métodos get y set.


Este otro constructor:

Código: [Seleccionar]
    public Casa (double vSuperficie, String vDireccion, SalonCasa objetoSalon, CocinaCasa objetoCocina) {
        superficie = vSuperficie;
        direccion = vDireccion;
        salonCasa = new SalonCasa();
        cocina = new CocinaCasa();
    }

Es algo más razonable, porque aquí si recibes como parámetros atributos de la clase. Pero al escribir

        salonCasa = new SalonCasa();
        cocina = new CocinaCasa();

Lo que haces es crear nuevos objetos con los atributos de defecto, por eso cuando los analizas no te muestra los valores de los objetos parámetro sino los valores de defecto, porque new lo que hace es crear un objeto nuevo.

¿Para qué te están sirviendo aquí los parámetros SalonCasa objetoSalon, CocinaCasa objetoCocina

Para nada, porque no los utilizas. De hecho, podrías dejar el constructor así y tendrías los mismos resultados:

Código: [Seleccionar]
    public Casa (double vSuperficie, String vDireccion) {
        superficie = vSuperficie;
        direccion = vDireccion;
        salonCasa = new SalonCasa();
        cocina = new CocinaCasa();
    }

Recomendación: repasar entregas anteriores y consultar este hilo https://www.aprenderaprogramar.com/foros/index.php?topic=1220.0  y este otro, https://www.aprenderaprogramar.com/foros/index.php?topic=1238.0 ejecutando el código de estos hilos y tratando de entenderlo paso a paso

Si tienes dudas consulta

Saludos

 

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