Autor Tema: Entrega CU00641B modificar atributos de otras clases desde una clase ¿posible?  (Leído 4476 veces)

vgrisales

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 16
    • Ver Perfil
Hola a todos los de aprender a programar. depues de una larga semana de trabajo retomo mis practicas con java adjunto la entrega CU00641B. pero tengo un duda en este ejercicio se supone o lo que entendi es que desde mi clase Casa que es la principal puedo modificar atributos de las otras clases(SalonCasa - CocinaCasa) e igual mente puedo leer el valor de los atributos de las otras clases, dependiendo de los metodos que tambien se establescan en cada una de ellas ,

Bueno aqui viene mi duda tengo 3 objectos creados Casa, CocinaCasa, SalonCasa entonces deseo modificar los valores de los atributos de la clase CocinaCasa a traves de el setter establecido  en la clase Casa :

public void setNumeroDeFuegos(int valorNumeroDeFuegos){cocinaCasa.setNumeroDeFuegos(valorNumeroDeFuegos);}

entonces al consulta valor modificado desde el objecto casa :

public int getNumeroDeFuegos(){
    int numeroDeFuegos = cocinaCasa.getNumeroDeFuegos();
    return numeroDeFuegos;
}

me aparece el valor modificado, pero al tratar de consultarlo tambien desde el objecto CocinaCasa supongo que debe de aparecer el valor que modifique desde el objeto Casa, pero lo que me aparece es el valor por defecto que asigne en la clase CocinaCasa. es decir solo me modifica el valor del atributo en la clase Casa y no en la clase CocinaCasa. y viseversa.

agradezco mucho la ayuda prestada. y agradezco a todos los de aprender a programas por este curso tan completo

clase CocinaCasa:
Código: [Seleccionar]
public class CocinaCasa{

    private boolean esIndependiente;
    private int numeroDeFuegos;

    public CocinaCasa (){

        esIndependiente = false;
        numeroDeFuegos = 0;

    }

    public void setEsIndependiente (boolean valorEsIndependiente) {esIndependiente = valorEsIndependiente; }

    public void setNumeroDeFuegos(int valorNumeroDeFuegos){numeroDeFuegos  = valorNumeroDeFuegos;}

    public boolean getEsIndependiente(){return esIndependiente;}

    public int getNumeroDeFuegos(){return numeroDeFuegos;}

}

Clase SalonCasa:
Código: [Seleccionar]
public class SalonCasa  {

    private int numeroDeTelevisores;
    private String tipoSalon;

    public SalonCasa(){

        numeroDeTelevisores = 0;
        tipoSalon = "";

    }

    public void setNumeroDeTelevisores(int valorNumeroDeTelevisores){numeroDeTelevisores = valorNumeroDeTelevisores;}

    public void setTipoSalon (String valorTipoSalon){tipoSalon = valorTipoSalon;}

    public int getNumeroDeTelevisores(){return numeroDeTelevisores;}

    public String getTipoSalon (){return tipoSalon;}
}

clase Casa:
Código: [Seleccionar]
public class Casa {

    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocinaCasa;
   
public Casa (){
   
    superficie = 0;
    direccion = "Desconocida";
   
    salonCasa = new  SalonCasa();
    cocinaCasa = new CocinaCasa();
   
}

//Setter's Casa
public void setSuperficie (double valorSuperficie){superficie = valorSuperficie;}
public void setDireccion (String valorDireccion){direccion = valorDireccion;}

//Setter's para Salon cocina

public void setNumeroDeTelevisores (int valorNumeroDeTelevisores) {salonCasa.setNumeroDeTelevisores(valorNumeroDeTelevisores);}
public void setTipoSalon(String valorTipoSalon){salonCasa.setTipoSalon(valorTipoSalon);}

//setter's para cocina casa

public void setEsIndependiente (boolean valorEsIndependiente){cocinaCasa.setEsIndependiente(valorEsIndependiente);}
public void setNumeroDeFuegos(int valorNumeroDeFuegos){cocinaCasa.setNumeroDeFuegos(valorNumeroDeFuegos);}

//Getter's Casa
public double getSuperficie(){return superficie;}
public String getDireccion (){return direccion;}

//Getter's  Salon casa
public int getNumeroDeTelevisores (){
    int numeroDeTelevisores = salonCasa.getNumeroDeTelevisores();
    return numeroDeTelevisores;
}
public String getTipoSalon(){
    String tipoSalon = salonCasa.getTipoSalon();
    return tipoSalon;
}

//Getter's cocinaCasa
public boolean getEsIndependiente(){
    boolean esIndependiente = cocinaCasa.getEsIndependiente();
    return esIndependiente;
}
public int getNumeroDeFuegos(){
    int numeroDeFuegos = cocinaCasa.getNumeroDeFuegos();
    return numeroDeFuegos;
}

}
« Última modificación: 16 de Febrero 2015, 17:17 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Entrega CU00641B
« Respuesta #1 en: 14 de Febrero 2015, 18:11 »
Hola Víctor

Tu observación es correcta.
No se correponden los valores que modificas desde el objeto de tipo Casa (instancia de Casa) con lo que tiene el objeto de tipo SalonCasa (instancia de SalonCasa) porque ésta no es la manera de relacionar las tres clases.


Repasamos tu código.
Las clases SalonCasa y CocinaCasa están perfectas (no tenían ninguna dificultad)
Y en la clase Casa:
El constructor está bien.
También estan bien los métodos:
    setSuperficie (double valorSuperficie)
    setDireccion (String valorDireccion)
    getSuperficie()
    getDireccion ()
Los otros métodos, no corresponden a esta clase, son métodos de las clases SalonCasa y CocinaCasa.
En su lugar debemos crear los métodos set y get de los atributos salonCasa y cocinaCasa


Para el atributo salonCasa el método get será:
    public SalonCasa setSalonCasa() { return salonCasa; }
donde:
 'public' indica el alcance del método
'SalonCasa' es el tipo de devolverá el método que no será un int ni un String, sino un objeto de tipo SalonCasa
'setSalonCasa' es el nombre del método.
y 'return salonCasa' es la instrucción de devuelve el valor del atributo salonCasa de esta clase (Casa)

Y el método set para el atributo salonCasa será:
    public void setSalonCasa (SalonCasa valorSalonCasa) {
        salonCasa = valorSalonCasa;
    }
Otra versión del método set para este atributo de tipo SalonCasa, es:
    public void setSalonCasa (SalonCasa valorSalonCasa) {
        salonCasa = new SalonCasa();
        salonCasa.setNumeroDeTelevisores(valorSalonCasa.getNumeroDeTelevisores());
        salonCasa.setTipoSalon(valorSalonCasa.getTipoSalon());
    }

Visto lo anterior, para que tu clase Casa esté bien construida falta crear los métodos set y get para el atributo cocinaCasa, que dejo en tus manos.

Finalmente, cuando tengas esta clase completa, hacer lo que comentabas al principio de tu mensaje.
Creas un objeto de tipo SalonCasa y otro de tipo CocinaCasa. Cambiar sus atributos con sus métodos set para que no tengan los valores por defecto.
Luego creas un objeto de tipo Casa y modificas el atributo salonCasa con su método set.
En la ventana que te muestra BlueJ has de escribir el nombre que tiene el objeto de tipo SalonCasa que creaste antes y cuyos atributos modificaste, (también puedes hacer clic con el ratón en el objeto de tipo SalonCasa de color rojo que tienes en la ventana y BlueJ lo escribirá por ti)

Verás que cuando inspecciones el objeto de tipo Casa, en la ventana mostrada, el atributo de tipo SalonCasa está representado por una flecha, si inspeccionas ese objeto (flecha) verás que se corresponde con el objeto creado y modificado por ti.

Si no me he saltado ningún paso, todo debe corresponderse.

En este momento estamos trabajando además de con primitivos de tipo int o boolean con atributos de tipos creados por nosotros (SalonCasa y CocinaCasa).

Y nuestro aprendizaje con Java continúa.
Saludos

vgrisales

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 16
    • Ver Perfil
Re:Entrega CU00641B
« Respuesta #2 en: 16 de Febrero 2015, 02:57 »
Hola Toni_apr hice lo que me dijiste y revisando algunos ejercicios ya hechos antes  creo que es de esta forma pero al hecer lo que te dije anteriormente:

al consultar solo me aparecen los valores por defecto y al modificar desde el objeto Casa

ejemplo void setSalonCasa(SalonCasa valorSalonCasa) me aparece esto" Error:incompatible types- found (tipo de dato) but expected Saloncasa" no se  que que estoy haciendo mal

anterior mente cuando lo hacia en netbeans yo consultaba o modificaba desde la clase main  los valores de los atributos a traves de los metodos de una clase de esta forma

public static void main (String [ ] arg){

salonCasa = new SalonCasa();
salonCasa.setNumeroDeTelevisores("introducir  valor de los televisores"); // modifica el valor del atributo a traves del metodo

salonCasa.getNumeroDeTelevisores();//consultaba el valor del metodo

}
que es muy similar a lo que tu me mostraste peor para un metodo en el mensaje

public void setSalonCasa (SalonCasa valorSalonCasa){
salonCasa = new SalonCasa ();
salonCasa.setNumeroDeTelevisores(valorSalonCasa.getNumeroDeTelevisores()); //no entiendo porque va el metodo getNumeroDeTelevisores() dentro de los parentesis;
}

agradeceria mucho la ayuda con este problema no se si me estoy complicando mucho gracias por la atencion prestada.

aqui adjunto el codigo Casa. SalonCasa y CocinaCasa son los mismos
 
Código: [Seleccionar]
public class Casa {

    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocinaCasa;
   
public Casa (){
   
    superficie = 0;
    direccion = "Desconocida";
   
    salonCasa = new  SalonCasa();
    cocinaCasa = new CocinaCasa();
   
}

public double getSuperficie(){return superficie;}
public String getDireccion(){return direccion;}

public void setSuperficie(double valorSuperficie){ superficie = valorSuperficie;}
public void setDireccion(String valorDireccion){direccion = valorDireccion;}

public SalonCasa getSalonCasa(){return salonCasa;}

public CocinaCasa getCocinaCasa(){return cocinaCasa;}

public void setSalonCasa(SalonCasa valorSalonCasa){salonCasa = valorSalonCasa;}

public void setCocinaCasa(CocinaCasa valorCocinaCasa){cocinaCasa = valorCocinaCasa;}



}

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Entrega CU00641B
« Respuesta #3 en: 16 de Febrero 2015, 09:04 »
Hola vgrisales, te agradecemos que cuando crees un tema en los foros le pongas un título descriptivo de la forma en que se explica aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Gracias por tu colaboración. 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".