Autor Tema: Ejercicio (CU00641B) Clases que utilizan objetos java: getters y setters objetos  (Leído 9071 veces)

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
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:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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
« Última modificación: 22 de Marzo 2015, 21:57 por Alex Rodríguez »
"Luchar por tus sueños y cumplirlos... eso es vivir.."

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
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

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Hola!!

Mi clase quedo asi:

Código: [Seleccionar]
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:
"Luchar por tus sueños y cumplirlos... eso es vivir.."

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
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

Citar
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

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Muy buenas noches toni..

Curiosamente yo intente el método 2, el mismo que dices, no tengo idea si estará correcto o no...

Código: [Seleccionar]
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:



Solucione este inconveniente declarando una variable String data ... y lo coloque como parámetro.

Citar
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:

Citar
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:

Código: [Seleccionar]
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:



¿Como usaria el setSuperficie y el setCocina?

Me exige un objeto como parámetro en cada set...

Agradezco muchísimo su ayuda :)
"Luchar por tus sueños y cumplirlos... eso es vivir.."

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
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

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
El código completo, aquí:

Clase salonCasa

Código: [Seleccionar]
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:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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!
« Última modificación: 26 de Marzo 2015, 03:02 por Dan_SB »
"Luchar por tus sueños y cumplirlos... eso es vivir.."

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Dan

Creo que tienes que recapitular lo que se ha dicho en este hilo .
En un mensaje previo te motrábamos esta cita
Citar
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

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
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?
"Luchar por tus sueños y cumplirlos... eso es vivir.."

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
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:
Código: [Seleccionar]
    public void setSuperficie(double ingresoSuperficie){
        superficie = ingresoSuperficie;
    }
Pues utilizando la misma sintaxis el setter del atributo salonCasa de tipo SalonCasa será:
Código: [Seleccionar]
    public void setSalonCasa(SalonCasa ingresoSalonCasa) {
        salonCasa = ingresoSalonCasa;
    }
Esta es una primera forma de crear el setter para el atributo salonCasa, ahora veremos otra:
Código: [Seleccionar]
    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

 

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