Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: BelCrow en 30 de Agosto 2014, 15:18
-
Entrega del ejercicio #41, favor verificar si cumple con el mandato....
SalonCasa:
//clase
public class SalonCasa {
private int numeroDeTelevisores;
private String tipoSalon;
//constructor
public SalonCasa () {
numeroDeTelevisores = 0;
tipoSalon = "Desconocido";
}
//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;}
}
CocinaCasa:
//clase
public class CocinaCasa {
private boolean esIndependiente;
private int numeroDeFuegos;
//constructor
public CocinaCasa () {
esIndependiente = false;
numeroDeFuegos = 0;
}
//setters
public void setEsIndependiente (boolean valorEsIndependiente) {
esIndependiente = valorEsIndependiente;
}
public void setNumeroDeFuegos (int valorNumeroDeFuegos) {
numeroDeFuegos = valorNumeroDeFuegos;
}
//gettes
public boolean getEsIndependente () {return esIndependiente;}
public int getNumeroDeFuegos () {return numeroDeFuegos;}
}
Casa:
//clase con otras clases
public class Casa {
private double superficie;
private String direccion;
private SalonCasa salonCasa;
private CocinaCasa cocina;
//constructor
public Casa () {
superficie = 0.0;
direccion = "";
salonCasa = new SalonCasa ();
cocina = new CocinaCasa ();
}
//setters de esta clase
public void setSuperficie (double valorSuperficie) {
superficie = valorSuperficie;
}
public void setDireccion (String valorDireccion) {
direccion = valorDireccion;
}
//setters de las otras clases
public void setNumeroDeTelevisores (int valorNumeroDeTelevisores) {salonCasa.setNumeroDeTelevisores(valorNumeroDeTelevisores);}
public void setTipoSalon (String valorTipoSalon) {salonCasa.setTipoSalon(valorTipoSalon);}
public void setEsIndependiente (boolean valorEsIndependiente) {cocina.setEsIndependiente(valorEsIndependiente);}
public void setNumeroDeFuegos (int valorNumeroDeFuegos) {cocina.setNumeroDeFuegos(valorNumeroDeFuegos);}
//getters de esta clase
public double getSuperficie () {return superficie;}
public String getDireccion () {return direccion;}
//getters de las otras clases
public SalonCasa getSalonCasa () {return salonCasa;}
public CocinaCasa getCocina () {return cocina;}
}
Todavía tengo mis lagunas sobre este tema, espero rellenar en el transcurso del curso!!.
-
Hola, sobre el código de las distintas clases te comento:
Clase CocinaCasa: todo bien.
Clase SalonCasa: todo bien.
Clase Casa:
Declaración de atributos: bien.
Constructor: bien.
Métodos setSuperficie y setDireccion: bien.
Métodos setNumeroDeTelevisores, setTipoSalon, setEsIndependiente, setNumeroDeFuegos: no es correcto que estos métodos figuren aquí. Cada clase es responsable de sus atributos, por tanto en la clase Casa no tienes que establecer getters ni setters de atributos como numeroDeTelevisores que pertenecen a otra clase.
Métodos getNumeroDeTelevisores y getTipoSalon: bien. Fíjate que estos métodos devuelven objetos.
Cosas que faltan:
Te faltan los métodos setters de los atributos de la clase salonCasa y cocina. Java es programación orientada a objetos y hay que acostumbrarse a trabajar con objetos (como tipo de retorno de un método, como parámetros, etc.). En este caso debes recibir los objetos como parámetros y asignárselos a los atributos (sobre esto podría hablarse de distintas variantes, pero de momento con hacerlo así es suficiente).
En resumen, bastantes cosas bien definidas, algunas cosas que te sobran y otras que te faltan.
Leer algunas referencias quizás te ayude:
https://www.aprenderaprogramar.com/foros/index.php?topic=964
https://www.aprenderaprogramar.com/foros/index.php?topic=97
Saludos
-
Gracias Mario, creo haber corregido los errores encontrados..... favor revisar..
(Solo coloque la clase que contiene errores...)
//clase con otras clases
public class Casa {
private double superficie;
private String direccion;
private SalonCasa salonCasa;
private CocinaCasa cocina;
//constructor
public Casa () {
superficie = 0.0;
direccion = "";
salonCasa = new SalonCasa ();
cocina = new CocinaCasa ();
}
//setters de esta clase
public void setSuperficie (double valorSuperficie) {
superficie = valorSuperficie;
}
public void setDireccion (String valorDireccion) {
direccion = valorDireccion;
}
//setters de las otras clases
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 de esta clase
public double getSuperficie () {return superficie;}
public String getDireccion () {return direccion;}
//getters de las otras clases
public SalonCasa getSalonCasa () {return salonCasa;}
public CocinaCasa getCocina () {return cocina;}
}
-
Puedes dar el ejercicio por bueno y seguir avanzando. Lo único que habría que comentar es que el método setSalonCasa y setCocina habría distintas formas de plantearlo
Forma 1 (trabajando con objetos):
Recibir un objeto e igualar el atributo al objeto recibido. Sería:
public void setSalonCasa (SalonCasa objetoSalon) {
salonCasa = objetoSalon;
}
Forma 2 (trabajando con objetos):
Recibir un objeto y crear un nuevo objeto cuyos atributos sean iguales a los del objeto recibido:
public void setSalonCasa (SalonCasa objetoSalon) {
salonCasa = new SalonCasa();
salonCasa.setNumeroDeTelevisores(objetoSalon.getNumeroDeTelevisores());
salonCasa.setTipoSalon(objetoSalon.getTipoSalon());
}
Forma 3 (recibiendo parámetros primitivos):
La forma que tú has definido. No es una forma que debamos considerar correcta si queremos trabajar realmente con orientación a objetos. Un método set para un atributo objeto debe recibir un objeto, no tipos primitivos a partir de los cuales establecer los atributos de un objeto. No es lo mismo. Si el método recibe tipos primitivos sería mejor llamarlo de otra manera y no set (p.ej. en lugar de setCocina lo llamaríamos resetearAtributosObjetoCocina (boolean valorEsIndependiente, int valorNumeroDeFuegos) ). Cuanto antes nos acostumbremos a trabajar con objetos, mejor.
Forma 4:
Incluiría otras formas de hacer las cosas.
Quédate con la idea de que lo más normal será trabajar con objetos, ya que estamos precisamente con programación orientada a objetos. Por tanto, salvo en casos especiales, consideraremos que la forma 2 antes indicada es la más correcta.
A medida que avances con el curso irás comprendiendo mejor las ventajas e inconvenientes de usar una u otra forma para un método set de este tipo.
Así que ánimo y a seguir
Saludos
-
Me gusta un poco mas la Forma 1 ya que se ve un poco mas simple..... pero seguiré avanzando y gracias por la ayuda.
-
Buenas tardes,
Gracias a BelCrow y Mario por vuestros aportes.
Sólo comentar, por si sirve de ayuda, que he probado los tres métodos que propone Mario y he detectado un error (eso creo) en la "Forma 2".
Donde dice:
salonCasa.setNumeroDeTelevisores (objetoSalon.getNumeroDeTelevisores);
parece que faltan los dos paréntesis al final:
salonCasa.setNumeroDeTelevisores (objetoSalon.getNumeroDeTelevisores());
Lo he probado así y funciona bien.
Un saludo.
-
Hola luba, tal como dices faltaban los paréntesis. He editado el post y ya lo he corregido. ¡Gracias por advertirlo!