Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: micaelasol en 12 de Enero 2022, 02:31
-
Hola a todos! Aquí comparto la resolución original del ejercicio CU00642B:
Clase Casa:
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:
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!!
-
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
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
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:
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:
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:
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
-
Buenas. Muchas gracias por responder y por las correcciones!
Lo he modificado y me ha quedado algo así:
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í:
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!
-
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í:
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.");
-
Ahí quedó perfecto, muchísimas graciass!!!!