Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Dan_SB en 20 de Marzo 2015, 21:58
-
Saludos!
Aquí traigo otro ejercicio mas! uso de clases que utilizan objetos de otras clases. Aquí el enunciado:
Define tres clases: Casa, SalonCasa y CocinaCasa. La clase SalonCasa debe tener como atributos numeroDeTelevisores (int) y tipoSalon (String) y disponer de un constructor que los inicialice a 0 y “desconocido”. La clase CocinaCasa debe tener como atributos esIndependiente (boolean) y numeroDeFuegos (int) y un constructor que los inicialice a false y 0. La clase Casa tendrá los siguientes atributos de clase: superficie (double), direccion (String), salonCasa (tipo SalonCasa) y cocina (tipo CocinaCasa). Define un constructor para la clase Casa que establezca a unos valores de defecto los atributos simples y que cree nuevos objetos si se trata de atributos objeto.
Aquí la clase SalonCasa:
package Home;
public class SalonCasa {
private int numeroDeTelevisores;
private String tipoSalon;
public SalonCasa(){
numeroDeTelevisores = 0;
tipoSalon = "desconocido";
}
public void setNumeroDeTelevisores(int ingresoNumeroDeTelevisores){
numeroDeTelevisores = ingresoNumeroDeTelevisores;
}
public void setTipoSalon(String ingresoTipoSalon){
tipoSalon = ingresoTipoSalon;
}
public int getNumeroDeTelevisores(){
return numeroDeTelevisores;
}
public String getTipoSalon(String ingresoTipoSalon){
return tipoSalon;
}
}
La clase CocinaCasa:
package Home;
public class CocinaCasa {
private boolean esIndependiente;
private int numeroDeFuegos;
public CocinaCasa(){
esIndependiente = false;
numeroDeFuegos = 0;
}
public void setEsIndependiente(boolean ingresoIndependiente){
esIndependiente = ingresoIndependiente;
}
public void setNumeroDeFuegos(int ingresoNumeroDeFuego){
numeroDeFuegos = ingresoNumeroDeFuego;
}
public boolean getEsIndependiente(){
return esIndependiente;
}
public int getNumeroDeFuegos(){
return numeroDeFuegos;
}
}
Y por ultimo... la clase Casa:
package Home;
public class Casa {
private double superficie;
private String direccion;
private SalonCasa salonCasa;
private CocinaCasa cocina;
public Casa(){
superficie = 0;
direccion = "Desconocido";
salonCasa = new SalonCasa();
cocina = new CocinaCasa();
}
public void setSuperficie(double ingresoSuperficie){
superficie = ingresoSuperficie;
}
public void setDireccion(String ingresoDireccion){
direccion = ingresoDireccion;
}
public double getSuperficie(){
return superficie;
}
public String getDireccion(){
return direccion;
}
}
Los setters y getters, los coloque por el tema de consulta y configuracion de atributos. Ademas en la entrega del ejercicio del capitulo pasado, habia leido que cualquiera clase que use atributos, se le debe colocar sus getter y setters.
Muchas Gracias nuevamente
-
Hola Dan, tu clase CocinaCasa está correcta. Tu clase SalonCasa está correcta. A tu clase Casa le faltan los métodos getters y setters para los atributos salonCasa y cocina. Estos getters y setters tienen una complejidad añadida: que trabajamos con objetos. Puedes ver una explicación con más detalle en https://www.aprenderaprogramar.com/foros/index.php?topic=1220, te recomiendo su lectura.
Saludos
-
Hola!!
Mi clase quedo asi:
package Home;
public class Casa {
private double superficie;
private String direccion;
private SalonCasa salonCasa;
private CocinaCasa cocina;
public Casa(){
superficie = 0;
direccion = "Desconocido";
salonCasa = new SalonCasa();
cocina = new CocinaCasa();
}
public void setSuperficie(double ingresoSuperficie){
superficie = ingresoSuperficie;
}
public void setDireccion(String ingresoDireccion){
direccion = ingresoDireccion;
}
public void setSalonCasa(String tipo, int numTv){
salonCasa.setNumeroDeTelevisores(numTv);
salonCasa.setTipoSalon(tipo);
}
public void setCocina(boolean esIndep, int numFuegos){
cocina.setEsIndependiente(esIndep);
cocina.setNumeroDeFuegos(numFuegos);
}
public double getSuperficie(){
return superficie;
}
public String getDireccion(){
return direccion;
}
public SalonCasa getSalonCasa(){
return salonCasa;
}
public CocinaCasa getCocina(){
return cocina;
}
}
La carga es un éxito... pero al momento de imprimir... digamos.. "incógnito". Lo quize imprimir con un sistem out como normalmente uso para imprimir, pero al momento que quiero saber que tienen los objetos me suelta esto:
Home.SalonCasa@15db9742
Home.CocinaCasa@6d06d69c
No se que ocurre, cuando pido el getSalonCasa y getCocinaCasa me suelta esto S:
-
Hola Dan
La corrección de tu clase Casa está bien.
Aunque los métodos set de los atributos salonCasa y cocina en lugar de recibir objetos, reciben una cadena de texto y un número
Tu solución es válida, pero como te comentaba Alex, hemos de trabajar con objetos. Java manipula objetos.
En el enlace que te indicaba Alex está esta forma de codificar el método set
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);
}
Respecto a la respuesta de System.out.println de los métodos get de objetos como Cocina o SalonCasa, es la misma que te dará si pides el contenido de los objetos mismos, pues getSalonCada() devuelve un objeto de tipo SalonCasa.
Cuando pides el valor de un primitivo, para Java es una cosa muy sencilla pues la dirección de esa variable contiene el dato que quieres saber.
En cambio la dirección de un objeto da a un paquete que hay que descifrar y en lugar del objeto te muestra su dirección, ese galimatías con un @ en medio.
Más adelante veremos como codificar para que Java nos muestre eso que tú esperabas ver.
Saludos
-
Muy buenas noches toni..
Curiosamente yo intente el método 2, el mismo que dices, no tengo idea si estará correcto o no...
public void setSalonCasa(SalonCasa objetoSalon){
objetoSalon = new SalonCasa();
String data = "";
salonCasa.setNumeroDeTelevisores(objetoSalon.getNumeroDeTelevisores());
salonCasa.setTipoSalon(objetoSalon.getTipoSalon(data));
}
public void setCocina(CocinaCasa Cocinas){
Cocinas = new CocinaCasa();
cocina.setEsIndependiente(Cocinas.getEsIndependiente());
cocina.setNumeroDeFuegos(Cocinas.getNumeroDeFuegos());
}
Escrito el codigo ese que menciono alex tal como esta, me suelta un error... cuando escribo dentro del parentesis del setTipoSalon "objetoSalon.getTipoSalon()" me suelta este mensaje:
(http://i.imgur.com/rxLV2WK.png)
Solucione este inconveniente declarando una variable String data ... y lo coloque como parámetro.
public void setSalonCasa (SalonCasa objetoSalon) {
salonCasa = new SalonCasa();
salonCasa.setNumeroDeTelevisores(objetoSalon.getNumeroDeTelevisores);
salonCasa.setTipoSalon(objetoSalon.getTipoSalon);
}
No se porque se ejecuta esto en esta linea, pensé que salonCasa ya se habia ejecutado aquí al crearle el constructor a la clase Casa:
public Casa(){
superficie = 0;
direccion = "Desconocido";
salonCasa = new SalonCasa();
cocina = new CocinaCasa();
}
Supuse yo que se quería crear el objeto del parámetro "objetoSalon", así que hice el cambio.
El segundo método (setCocina) no dio problemas... quise ejecutar una prueba. Este era mi main anterior con los setters y getters que entregue:
public class Main {
public static void main(String[]args){
Casa casita;
casita = new Casa();
casita.setDireccion("Colon");
casita.setSuperficie(100.000);
casita.setSalonCasa("mansion",4);
casita.setCocina(true, 4);
System.out.println(casita.getDireccion());
System.out.println(casita.getSuperficie());
System.out.println(casita.getSalonCasa());
System.out.println(casita.getCocina());
}
}
Todo bien, normal, se me hacia muy fácil cargarle datos. Pero ahora viene la pregunta:
(http://i.imgur.com/kllUxyq.png)
¿Como usaria el setSuperficie y el setCocina?
Me exige un objeto como parámetro en cada set...
Agradezco muchísimo su ayuda :)
-
Hola Dan
Envía por favor el código actualizado de tu ejercicio.
Aunque muestras ahora imágenes de los errores, nos falta el código que lo produce para intentar solventarlo.
Saludos
-
El código completo, aquí:
Clase salonCasa
package Home;
public class SalonCasa {
private int numeroDeTelevisores;
private String tipoSalon;
public SalonCasa(){
numeroDeTelevisores = 0;
tipoSalon = "desconocido";
}
public void setNumeroDeTelevisores(int ingresoNumeroDeTelevisores){
numeroDeTelevisores = ingresoNumeroDeTelevisores;
}
public void setTipoSalon(String ingresoTipoSalon){
tipoSalon = ingresoTipoSalon;
}
public int getNumeroDeTelevisores(){
return numeroDeTelevisores;
}
public String getTipoSalon(String ingresoTipoSalon){
return tipoSalon;
}
}
Clase CocinaCasa:
package Home;
public class CocinaCasa {
private boolean esIndependiente;
private int numeroDeFuegos;
public CocinaCasa(){
esIndependiente = false;
numeroDeFuegos = 0;
}
public void setEsIndependiente(boolean ingresoIndependiente){
esIndependiente = ingresoIndependiente;
}
public void setNumeroDeFuegos(int ingresoNumeroDeFuego){
numeroDeFuegos = ingresoNumeroDeFuego;
}
public boolean getEsIndependiente(){
return esIndependiente;
}
public int getNumeroDeFuegos(){
return numeroDeFuegos;
}
}
Clase Casa:
package Home;
public class Casa {
private double superficie;
private String direccion;
private SalonCasa salonCasa;
private CocinaCasa cocina;
public Casa(){
superficie = 0;
direccion = "Desconocido";
salonCasa = new SalonCasa();
cocina = new CocinaCasa();
}
public void setSuperficie(double ingresoSuperficie){
superficie = ingresoSuperficie;
}
public void setDireccion(String ingresoDireccion){
direccion = ingresoDireccion;
}
public void setSalonCasa(SalonCasa objetoSalon){
objetoSalon = new SalonCasa();
String data = "";
salonCasa.setNumeroDeTelevisores(objetoSalon.getNumeroDeTelevisores());
salonCasa.setTipoSalon(objetoSalon.getTipoSalon(data));
}
public void setCocina(CocinaCasa Cocinas){
Cocinas = new CocinaCasa();
cocina.setEsIndependiente(Cocinas.getEsIndependiente());
cocina.setNumeroDeFuegos(Cocinas.getNumeroDeFuegos());
}
public double getSuperficie(){
return superficie;
}
public String getDireccion(){
return direccion;
}
public SalonCasa getSalonCasa(){
return salonCasa;
}
public CocinaCasa getCocina(){
return cocina;
}
}
Clase main:
package Home;
public class Main {
public static void main(String[]args){
Casa casita;
SalonCasa salonsito;
casita = new Casa();
casita.setDireccion("Colon");
casita.setSuperficie(100.000);
casita.setSalonCasa();
casita.setCocina();
System.out.println(casita.getDireccion());
System.out.println(casita.getSuperficie());
System.out.println(casita.getSalonCasa());
System.out.println(casita.getCocina());
}
}
Muchas gracias por su atención!
-
Hola Dan
Creo que tienes que recapitular lo que se ha dicho en este hilo .
En un mensaje previo te motrábamos esta cita
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);
}
que tú aplicas mal en tu clase Casa.
Dan, si es posible, me gustaría que te plantearas explicarle a un colega imaginario que es lo que hace tu método setSalonCasa(SalonCasa objetoSalon) y que es lo que hace el mismo método de la cita anterior.
Después quiero que te digas a ti mismo que hace este método set en la clase Main que no recibe parámetros
casita.setSalonCasa();
Cuando tengas respuestas a estas preguntas, volvemos a contactar.
Y si tienes dudas, plantéalas aquí y lo solucionamos. No codifiques por codificar sin entender lo que haces.
Saludos
-
Quizás no me explique bien u,u
Mi consulta es, ¿Como escribiría los parámetros?:
Si antes escribía casita.setSalonCasa("mansion",4);
casita.setCocina(true, 4);
¿Como lo haría ahora que recibe como parámetro un objeto?
-
Hola Dan
Si tu objeto de tipo Casa y nombre casita tiene 4 atributos, a saber:
un double, un String, un SalonCasa y un CocinaCasa
El setter del atributo superficie de tipo double será este:
public void setSuperficie(double ingresoSuperficie){
superficie = ingresoSuperficie;
}
Pues utilizando la misma sintaxis el setter del atributo salonCasa de tipo SalonCasa será:
public void setSalonCasa(SalonCasa ingresoSalonCasa) {
salonCasa = ingresoSalonCasa;
}
Esta es una primera forma de crear el setter para el atributo salonCasa, ahora veremos otra:
public void setSalonCasa(SalonCasa ingresoSalonCasa) {
salonCasa = new SalonCasa(); // esta instrucción te asegura que tienes un nuevo objeto de tipo SalonCasa cuyos atributos rellenarás seguidamente con los datos que obtienes de ingresoSalonCasa.
salonCasa.setNumeroDeTelevisores(ingresoSalonCasa.getNumeroDeTelevisores());
salonCasa.setTipoSalon(ingresoSalonCasa.getTipoSalon());
}
Luego con el atributo cocina de tipo CocinaCasa habremos de hacer lo mismo para crear su setter.
Saludos