Autor Tema: Diferencia entre crear nuevo objeto con new o hacerlo igual a otro Java CU00642B  (Leído 2854 veces)

Javieerg

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 13
    • Ver Perfil
Este es mi ejercicio CU00642B si lo pueden revisar, me sentí confundido, gracias..

Código: [Seleccionar]
public class SalonCasa {

    private int numeroDeTelevisores;
    private String tipoSalon;
       
    public SalonCasa() {
   
        numeroDeTelevisores = 0;
        tipoSalon = "desconocido";
    }
   
    public SalonCasa(int valorNumeroDeTelevisores, String valorTipoSalon) {
   
        numeroDeTelevisores = valorNumeroDeTelevisores;
        tipoSalon = valorTipoSalon;
    }
   
    public void setNumeroDeTelevisores(int valorNumeroDeTelevisores) {
        numeroDeTelevisores = valorNumeroDeTelevisores;
    }
    public void setTipoSalon(String valorTipoSalon) {
        tipoSalon = valorTipoSalon;
    }
   
    public int getNumeroDeTelevisores() {return numeroDeTelevisores;}
    public String getTipoSalon() {return tipoSalon;}
}

Código: [Seleccionar]
public class CocinaCasa {

    private boolean esIndependiente;
    private int numeroDeFuegos;
   
    public CocinaCasa() {
   
        esIndependiente = false;
        numeroDeFuegos = 0;
    }
   
    public CocinaCasa(boolean valorEsIndependiente, int valorNumeroDeFuegos) {
   
        esIndependiente = valorEsIndependiente;
        numeroDeFuegos = valorNumeroDeFuegos;
    }
   
    public void setEsIndependiente(boolean valorEsIndependiente) {
        esIndependiente = valorEsIndependiente;
    }
    public void setNumeroDeFuegos(int valorNumeroDeFuegos) {
        numeroDeFuegos = valorNumeroDeFuegos;
    }
   
    public boolean getEsIndependiente() {return esIndependiente;}
    public int getNumeroDeFuegos() {return numeroDeFuegos;}
}

Código: [Seleccionar]
public class Casa {

    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocinaCasa;
   
    public Casa() {
   
        superficie = 100;
        direccion = "Ave Rio Lopez 1";
        salonCasa = new SalonCasa();
        cocinaCasa = new CocinaCasa();
    }
   
    public Casa(double valorSuperficie, String valorDireccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocinaCasa) {
   
        superficie = valorSuperficie;
        direccion = valorDireccion;
        salonCasa = new SalonCasa(objetoSalonCasa.getNumeroDeTelevisores(), objetoSalonCasa.getTipoSalon());
        cocinaCasa = new CocinaCasa(objetoCocinaCasa.getEsIndependiente(), objetoCocinaCasa.getNumeroDeFuegos());
    }
   
    public void setSuperficie(double valorSuperficie) {superficie = valorSuperficie;}
    public void setDireccion(String valorDireccion) {direccion = valorDireccion;}
    public void setSalon(SalonCasa objetoSalonCasa) {salonCasa = objetoSalonCasa;}
    public void setCocina(CocinaCasa objetoCocinaCasa) {cocinaCasa = objetoCocinaCasa;}
   
    public double getSuperficie() {return superficie;}
    public String getDireccion() {return direccion;}
    public SalonCasa getSalon() {return salonCasa;}
    public CocinaCasa getCocina() {return cocinaCasa;}
}
« Última modificación: 17 de Octubre 2015, 12:13 por Alex Rodríguez »

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Re:Pasar objetos como parámetros a un método o constructor Java. CU00642B
« Respuesta #1 en: 15 de Octubre 2015, 15:29 »
Hola Javieerg!

Estuve revisando tu ejercicio y lo veo muy bien !
Simpelmente hacerte algunas observaciones :

Respecto del Constructor con parámetros...
Sería más práctico inicializar los campos superficie y direccion a valores por defecto. De esta manera este constructor nos quedaría:

Código: [Seleccionar]
public Casa() {
   
        superficie = 0;
        direccion = "";
        salonCasa = new SalonCasa();
        cocinaCasa = new CocinaCasa();
    }

Respecto de los métodos setSalon...

Código: [Seleccionar]
public void setSalon(SalonCasa objetoSalonCasa) {salonCasa = objetoSalonCasa;}
Está perfecto como está codificado, hace lo que que debe hacer.
Sin embargo quisiera mostrarte una alternativa distinta de codificación de este método:

Código: [Seleccionar]
    public void setSalon(SalonCasa objetoSalonCasa) {
        salonCasa.setNumeroDeTelevisores(objetoSalonCasa.getNumeroDeTelevisores());
        salonCasa.setTipoSalon(objetoSalonCasa.getTipoSalon());
    }

Esta forma de codificar el método setSalon también realiza lo que se pide en el ejercicio.

Nos podríamos plantear la siguiente pregunta ¿ambas formas son equivalentes? ¿es indistinto codificar de una manera o de otra?... tomémonos un tiempo para pensarlo y analizarlo.

La respuesta es  que si bien ambas formas de codificación resuelven en nuestro caso particular el ejercicio que se plantea en la lección, hay diferencia entre una y otra forma.

Fíjate en lo siguiente: de la manera en que lo planteaste tu, lo que hacemos es asignarle al campo salon Casa, la referencia del objeto objetoSalonCasa. Por lo tanto si se realizara cualquiera modificación al objeto objetoSalonCasa, esas modificaciones se verían reflejadas cuando consultemos el objeto salonCasa (y viceversa) ¿ por qué? porque salonCasa apunta a objetoSalonCasa, eso es lo que realiza la asignación: una asignación de referencias.

Ahora bien, si analizamos la segunda forma de codificar, vemos que el método lo que hace es asignar a los campos del objeto salonCasa, los valores de los campos del objeto objetoSalonCasa. Pero ambos objetos siguen siendo independientes. Tanto salonCasa como objetoSalonCasa referencian lugares de memorias distintos.

Todo lo dicho es aplicable también al método método setCocina.

Analízalo, y cualquier consulta estamos aqui para reveerlo.

Javieerg

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 13
    • Ver Perfil
Gracias pedro, pero cual seria la forma correcta de hacerlo, es decir entiendo lo que  me dices mas no como corregirlo, gracias de nuevo

 

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