Autor Tema: Java datos encapsulados dentro de objetos concepto no necesidad pasar CU00642B  (Leído 2310 veces)

micaelasol

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 33
    • Ver Perfil
Hola a todos!  Aquí comparto la resolución original del ejercicio CU00642B:


Clase Casa:

Código: [Seleccionar]
public class Casa {

    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocinaCasa;
   
    public Casa (){
        superficie = 0.0;
        direccion = "";
        salonCasa = new SalonCasa ();
        cocinaCasa = new CocinaCasa ();
    }
   
    public Casa (double superficieCasa, String direccionCasa, SalonCasa salonCasaCasa, CocinaCasa cocinaCasaCasa){
        superficie = superficieCasa;
        direccion = direccionCasa;
        salonCasa = new SalonCasa ();
        cocinaCasa = new CocinaCasa ();
    }
   
    public void setSuperficie (double valorSuperficie){
        superficie = valorSuperficie;
    }
   
    public void setDireccion (String valorDireccion){
        direccion = valorDireccion;
    }
   
    public void setSalonCasa (SalonCasa valorSalonCasa){
        salonCasa = valorSalonCasa;
    }
   
    public void setCocinaCasa (CocinaCasa valorCocinaCasa){
        cocinaCasa = valorCocinaCasa;
    }
   
    public double getSuperficie () {return superficie;}
   
    public String getDireccion () {return direccion;}
   
    public SalonCasa getSalonCasa () {return salonCasa;}
   
    public CocinaCasa getCocinaCasa () {return cocinaCasa;}
   
}

Además, quiero mencionar que después le agregué a mi código algunas modificaciones para que te aparezca en una pantalla toda la información, quisiera pedir si me lo podrían corregir:


Clase Casa:

Código: [Seleccionar]
public class Casa {
   
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocinaCasa;
    private int numeroDeTelevisores;
    private String tipoSalon;
    private boolean esIndependiente;
    private int numeroDeFuegos;
   
    public Casa (){
        superficie = 0.0;
        direccion = "";
        salonCasa = new SalonCasa ();
        cocinaCasa = new CocinaCasa ();
        numeroDeTelevisores = 0;
        tipoSalon = "";
        esIndependiente = false;
        numeroDeFuegos = 0;
    }
   
    public Casa (double superficieCasa, String direccionCasa, SalonCasa salonCasaCasa, CocinaCasa cocinaCasaCasa){
        superficie = superficieCasa;
        direccion = direccionCasa;
        salonCasa = new SalonCasa ();
        cocinaCasa = new CocinaCasa ();
    }
   
    public void setSuperficie (double valorSuperficie){
        superficie = valorSuperficie;
    }
   
    public void setDireccion (String valorDireccion){
        direccion = valorDireccion;
    }
   
    public void setSalonCasa (SalonCasa valorSalonCasa){
        salonCasa = valorSalonCasa;
    }
   
    public void setCocinaCasa (CocinaCasa valorCocinaCasa){
        cocinaCasa = valorCocinaCasa;
    }
   
    public void setNumeroDeTelevisores (int valorNumeroDeTelevisores){
        numeroDeTelevisores = valorNumeroDeTelevisores;
    }
   
    public void setTipoSalon (String valorTipoSalon){
        tipoSalon = valorTipoSalon;
    }
   
    public void setEsIndependiente (boolean valorEsIndependiente){
        esIndependiente = valorEsIndependiente;
    }
   
    public void setNumeroDefuegos (int valorNumeroDeFuegos){
        numeroDeFuegos = valorNumeroDeFuegos;
    }
   
    public void respuestasPreguntasCasa  () {
        System.out.println ("Los principales datos de esta casa son: superficie, " + superficie + " y direccioón, " + direccion + ". Además, podemos decir que el salón de la casa es " + tipoSalon + " y hay " + numeroDeTelevisores + " televisores. Por último, vamos a mencionar que la cocina tiene " + numeroDeFuegos + " fuegos en la hornalla y que es " + esIndependiente + " su independencia.");
    }
   
    public double getSuperficie () {return superficie;}
   
    public String getDireccion () {return direccion;}
   
    public SalonCasa getSalonCasa () {return salonCasa;}
   
    public CocinaCasa getCocinaCasa () {return cocinaCasa;}
   
    public int getNumeroDeTelevisores () {return numeroDeTelevisores;}
   
    public String getTipoSalon () {return tipoSalon;}
   
    public boolean getEsIndependiente () {return esIndependiente;}
   
    public int getNumeroDeFuegos () {return numeroDeFuegos;}
   
}

Muchas gracias!!
« Última modificación: 17 de Abril 2022, 15:31 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Hola.
Respecto al código que has agregado....

Para que la clase Casa pueda mostrar toda la información, como el número de televisores, etc... no es necesario que añadas nuevos atributos, porque en realidad la clase Casa ya dispone de esa información, solo que está encapsulada en otros objetos.
Además, esos atributos "añadidos", aunque se llamen igual, son distintos de los atributos "originales" y no tendrán los mismos valores.

El número de televisores y el tipo de salón, se los podemos solicitar al objeto SalonCasa

Citar
public class Casa {
   
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocinaCasa;
    private int numeroDeTelevisores;
    private String tipoSalon;

    private boolean esIndependiente;
    private int numeroDeFuegos;

Y el número de fuegos que tiene la cocina y saber si esta es independiente, se lo podemos preguntar al objeto CocinaCasa

Citar
public class Casa {
   
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocinaCasa;
    private int numeroDeTelevisores;
    private String tipoSalon;
    private boolean esIndependiente;
    private int numeroDeFuegos;

Así que no se necesitan más atributos, es suficiente con estos:

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

¿Y cómo hacemos que la clase Casa tenga getters para mostrar esos datos "encapsulados" en SalonCasa y CocinaCasa?

Pues hacemos que los getters de Casa, invoquen a los getters de esos objetos.

Por ejemplo, para que Casa pueda informar del nº de televisores:

Código: [Seleccionar]
public int getNumeroDeTelevisores () {return salonCasa.getNumeroDeTelevisores();}
¿Ves? Un método no tiene por qué retornar siempre el valor de una variable. Puede retornar también el valor que nos retorne otro método.
Así que el getNumeroDeTelevisores() de Casa, retorna lo que resulte de llamar al getNumeroDeTelevisores() de SalonCasa, quien a su vez retorna el valor de su atributo numeroDeTelevisores.
Este último atributo es el válido, el auténtico, el que tiene el valor que nos interesa.

Si añades otro atributo a Casa, aunque tenga el mismo nombre, no tendrá nada que ver con el de SalonCasa y podrían tener valores distintos.

Esto mismo es aplicable a los setters.
Si quisiéramos que la clase Casa pudiera recibir y modificar el número de televisores, lo que haría será llamar al setter de SalonCasa y transferir el valor que ha recibido:
Código: [Seleccionar]
    public void setNumeroDeTelevisores (int valorNumeroDeTelevisores){
        salonCasa.setNumeroDeTelevisores(valorNumeroDeTelevisores);
    }

Espero haberme explicado bien.
Prueba a corregir los otros getters y setters de Casa para que interactúen con los correspondientes getter/setters de sus atributos SalonCasa y CocinaCasa
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

micaelasol

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 33
    • Ver Perfil
Buenas. Muchas gracias por responder y por las correcciones!
Lo he modificado y me ha quedado algo así:
Código: [Seleccionar]
public class Casa {
   
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocinaCasa;
   
    public Casa (){
        superficie = 0.0;
        direccion = "";
        salonCasa = new SalonCasa ();
        cocinaCasa = new CocinaCasa ();
    }
   
    public Casa (double superficieCasa, String direccionCasa, SalonCasa salonCasaCasa, CocinaCasa cocinaCasaCasa){
        superficie = superficieCasa;
        direccion = direccionCasa;
        salonCasa = new SalonCasa ();
        cocinaCasa = new CocinaCasa ();
    }
   
    public void setSuperficie (double valorSuperficie){
        superficie = valorSuperficie;
    }
   
    public void setDireccion (String valorDireccion){
        direccion = valorDireccion;
    }
   
    public void setSalonCasa (SalonCasa valorSalonCasa){
        salonCasa = valorSalonCasa;
    }
   
    public void setCocinaCasa (CocinaCasa valorCocinaCasa){
        cocinaCasa = valorCocinaCasa;
    }
   
    public void setNumeroDeTelevisores (int valorNumeroDeTelevisores){
        salonCasa.setNumeroDeTelevisores(valorNumeroDeTelevisores);
    }
   
    public void setTipoSalon (String valorTipoSalon){
        salonCasa.setTipoSalon (valorTipoSalon);
    }
   
    public void setNumeroDeFuegos (int valorNumeroDeFuegos){
        cocinaCasa.setNumeroDeFuegos (valorNumeroDeFuegos);
    }
   
    public void setEsIndependiente (boolean valorEsIndependiente){
        cocinaCasa.setEsIndependiente (valorEsIndependiente);
    }
   
    public void respuestasPreguntasCasa  () {
        System.out.println ("Los principales datos de esta casa son: superficie, " + superficie + " y direccioón, " + direccion + ". Además, podemos decir que el salón de la casa es " + tipoSalon + " y hay " + numeroDeTelevisores + " televisores. Por último, vamos a mencionar que la cocina tiene " + numeroDeFuegos + " fuegos en la hornalla y que es " + esIndependiente + " su independencia.");
    }
   
    public double getSuperficie () {return superficie;}
   
    public String getDireccion () {return direccion;}
   
    public SalonCasa getSalonCasa () {return salonCasa;}
   
    public CocinaCasa getCocinaCasa () {return cocinaCasa;}
   
    public int getNumeroDeTelevisores () {return salonCasa.getNumeroDeTelevisores();}
   
    public String getTipoSalon () {return salonCasa.getTipoSalon();}
   
    public int getNumeroDeFuegos () {return cocinaCasa.getNumeroDeFuegos();}
   
    public boolean getEsIndependiente () {return cocinaCasa.getEsIndependiente();}
   
}

Pero me remarca un error que es por ello que yo he declarado de nuevo las variables al principio: me dice que igual las variables de las otras dos clases (salonCasa y cocinaCasa) no están declaradas, aquí:
Código: [Seleccionar]
        System.out.println ("Los principales datos de esta casa son: superficie, " + superficie + " y direccioón, " + direccion + ". Además, podemos decir que el salón de la casa es " + [color=red]tipoSalon[/color] + " y hay " + [color=red]numeroDeTelevisores[/color] + " televisores. Por último, vamos a mencionar que la cocina tiene " + [color=red]numeroDeFuegos[/color] + " fuegos en la hornalla y que es " + [color=red]esIndependiente[/color]+ " su independencia.");

No se si es porque yo sigo desarrollándolo mal.

Muchas gracias nuevamente!

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Claro, porque esos datos como dije están encapsulados en otros objetos.
La clase Casa no puede acceder directamente a ellos, pero sí puede pedírselos a los objetos(salonCasa y cocinaCasa) que los encapsulan.

Prueba así:
Citar
        System.out.println ("Los principales datos de esta casa son: superficie, " + superficie + " y direccioón, " + direccion + ". Además, podemos decir que el salón de la casa es " + salonCasa.getTipoSalon() + " y hay " + salonCasa.getNumeroDeTelevisores() + " televisores. Por último, vamos a mencionar que la cocina tiene " + cocinaCasa.getNumeroDeFuegos() + " fuegos en la hornalla y que es " + cocinaCasa.getEsIndependiente()+ " su independencia.");
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

micaelasol

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 33
    • Ver Perfil
Ahí quedó perfecto, muchísimas graciass!!!!

 

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