Autor Tema: Ejercicio CU00641B# curso java métodos que reciben objetos y paso a atributos  (Leído 12004 veces)

BelCrow

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 46
  • Técnico en Redes (CCNA-IT).
    • Ver Perfil
Entrega del ejercicio #41, favor verificar si cumple con el mandato....

SalonCasa:
Código: [Seleccionar]
//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:
Código: [Seleccionar]
//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:
Código: [Seleccionar]
//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!!.
« Última modificación: 29 de Marzo 2015, 17:45 por Ogramar »
public lenguajePoderoso () {
          java = "poder";
       }

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:practica CU00641B
« Respuesta #1 en: 30 de Agosto 2014, 18:02 »
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

BelCrow

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 46
  • Técnico en Redes (CCNA-IT).
    • Ver Perfil
Re:practica CU00641B curso java
« Respuesta #2 en: 31 de Agosto 2014, 16:26 »
Gracias Mario, creo haber corregido los errores encontrados..... favor revisar..
(Solo coloque la clase que contiene errores...)

Código: [Seleccionar]
//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;}
}   
public lenguajePoderoso () {
          java = "poder";
       }

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:practica CU00641B curso java
« Respuesta #3 en: 31 de Agosto 2014, 18:37 »
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
« Última modificación: 17 de Enero 2024, 18:54 por Mario R. Rancel »

BelCrow

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 46
  • Técnico en Redes (CCNA-IT).
    • Ver Perfil
Re:practica CU00641B curso java
« Respuesta #4 en: 31 de Agosto 2014, 19:06 »
Me gusta un poco mas la Forma 1 ya que se ve un poco mas simple..... pero seguiré avanzando y gracias por la ayuda.
public lenguajePoderoso () {
          java = "poder";
       }

luba

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
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.

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Hola luba, tal como dices faltaban los paréntesis. He editado el post y ya lo he corregido. ¡Gracias por advertirlo!

 

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