Autor Tema: Ejercicio CU00641B clases con campos objetos java  (Leído 5484 veces)

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Ejercicio CU00641B clases con campos objetos java
« en: 18 de Junio 2014, 15:31 »
Hola. A mi me funciona la compilación y ejecución. Pido que me marquéis deficiencias y mejoras.
Van 3 clases Casa, Salon y Cocina
Gracias.

Código: [Seleccionar]
/**
 * Detalles de la clase.
 *
 * @author (Toni)
 * @version (0)
 */
public class Casa {

    // Atributos de la clase Casa
    private double superficie;
    private String direccion;
    private Salon salonCasa; //Declaracion de objeto tipo Salon
    private Cocina cocinaCasa; // idem tipo Casa

    /**
     * Constructor para objetos de la clase Casa
     */
    public Casa() {
        // Inicializa atributos
        superficie = 0.0d;
        direccion = "DesConocida";
        salonCasa = new Salon(); //Inicializa con nuevo salon
        cocinaCasa = new Cocina(); // Inicializa con nueva cocina
    } // Fin del constructor Casa

    // Siguen los setters para los atributos de la clase Casa
    public void setSuperficie ( double valorSuperficie ) {
        superficie = valorSuperficie;
    }

    public void setDireccion ( String valorDireccion ) {
        direccion = valorDireccion;
    }
   
    public void setSalon ( int numeroTV, String valorTipoSalon ) {
        salonCasa.setNumeroDeTelevisores ( numeroTV );
        salonCasa.setTipoSalon ( valorTipoSalon );
    }
   
    public void setCocina ( boolean valorEsIndependiente, int valorNumeroDeFuegos ) {
        cocinaCasa.setEsIndependiente ( valorEsIndependiente );
        cocinaCasa.setNumeroDeFuegos ( valorNumeroDeFuegos );
    }

    // Ahora los getters para los atributos de la clase Casa
    public double getSuperficie () {
        return superficie;
    }

    public String getDireccion () {
        return direccion;
    }

    public String getSalon () {
        return "Salón tipo " + salonCasa.getTipoSalon() + ", con " +
        salonCasa.getNumeroDeTelevisores() + " televisor/es.";
    }

    public String getCocina () {
        String negacion = "";
        if ( cocinaCasa.getEsIndependiente() == false ) { negacion = "no "; }
        return "En cuanto a la cocina, " + negacion + "es independiente, y tiene " +
        cocinaCasa.getNumeroDeFuegos() + " fuego/s.";
    }
    // Y seguidamente, procedimientos y funciones varios.
    public void dimeloTodoTodoTodo () {
        String mensaje = "Casa con una superficie de " + superficie + " unidades.\n";
        mensaje = mensaje + "Localizada en: " + direccion + ".\n";
        mensaje = mensaje + "Donde destacamos lo siguiente:\n";
        mensaje = mensaje + getSalon () + "\n";
        mensaje = mensaje + getCocina ();
        mensaje = mensaje + "\n\n\tFin del comunicado.";
        System.out.println ( mensaje ) ;
    }
} // Fin de la clase Casa

Código: [Seleccionar]
/**
 * Detalles de la clase.
 *
 * @author (Toni)
 * @version (0)
 */
public class Salon {

    // Atributos de la clase Salon
    private int numeroDeTelevisores;
    private String tipoSalon;

    /**
     * Constructor para objetos de la clase Salon
     */
    public Salon() {
        // Inicializa atributos
        numeroDeTelevisores = 0;
        tipoSalon = "DesConocido";
    } // Fin del constructor Salon
   
    // Siguen los setters para los atributos de la clase Salon
    public void setNumeroDeTelevisores ( int valorNumeroDeTelevisores ) {
        numeroDeTelevisores = valorNumeroDeTelevisores;
    }
   
    public void setTipoSalon ( String valorTipoSalon ) {
        tipoSalon = valorTipoSalon;
    }
   
    // Ahora los getters para los atributos de la clase Salon
    public int getNumeroDeTelevisores () {
        return numeroDeTelevisores;
    }
    public String getTipoSalon () {
        return tipoSalon;
    }
    // Y seguidamente, procedimientos y funciones varios.

} // Fin de la clase Salon

Código: [Seleccionar]
/**
 * Detalles de la clase.
 *
 * @author (Toni)
 * @version (0)
 */
public class Cocina {

    // Atributos de la clase Cocina
    private boolean esIndependiente;
    private int numeroDeFuegos;

    /**
     * Constructor para objetos de la clase Cocina
     */
    public Cocina() {
        // Inicializa atributos
        esIndependiente = false;
        numeroDeFuegos = 0;
    } // Fin del constructor Cocina
   
    // Siguen los setters para los atributos de la clase Cocina
    public void setEsIndependiente ( boolean valorEsIndependiente ) {
        esIndependiente = valorEsIndependiente;
    }
   
    public void setNumeroDeFuegos ( int valorNumeroDeFuegos ) {
        numeroDeFuegos = valorNumeroDeFuegos;
    }
   
    // Ahora los getters para los atributos de la clase Cocina
    public boolean getEsIndependiente () {
        return esIndependiente;
    }
   
    public int getNumeroDeFuegos () {
        return numeroDeFuegos;
    }
    // Y seguidamente, procedimientos y funciones varios.

} // Fin de la clase Cocina
« Última modificación: 02 de Septiembre 2014, 18:13 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Ejercicio CU00641B para revisar
« Respuesta #1 en: 18 de Junio 2014, 17:48 »
El código es en general correcto pero algunas cosas merecen ser comentadas:

NO CORRECTO

    public String getSalon () {
        return "Salón tipo " + salonCasa.getTipoSalon() + ", con " +
        salonCasa.getNumeroDeTelevisores() + " televisor/es.";
    }

Se haría como:

    public Salon getSalon () {
        return salonCasa;
    }

Un método get devuelve un atributo. En este caso si el atributo es un objeto, debemos devolver un objeto. Aunque al principio cuesta, hay que habituarse a trabajar con objetos  ::)

Lo mismo podemos decir de getCocina ()


CORRECTO PERO NO IDÓNEO

En lugar de (modo 1):

    public void setSalon ( int numeroTV, String valorTipoSalon ) {
        salonCasa.setNumeroDeTelevisores ( numeroTV );
        salonCasa.setTipoSalon ( valorTipoSalon );
    }

Podríamos pensar en (modo 2):

    public void setSalon ( Salon valorSalon ) {
        salonCasa = new Salon();
        salonCasa.setNumeroDeTelevisores(valorSalon.getNumeroDeTelevisores());
        salonCasa.setTipoSalon(valorSalon.getTipoSalon());
    }

Ambas formas son posibles, y quizás debieras volver a revisar esto un poco más adelante (es decir, no le des ahora muchas vueltas porque más adelante lo verás más claro). La idea del modo 2 es copiar el objeto que se recibe para no inmiscuirnos en tareas que son propias de la clase Salon.

Con el modo 1 la clase Casa se estaría haciendo responsable de inicializar un objeto Salon, al crearlo con new y establecer sus atributos con setSalon. La responsabilidad de inicializar un Salon es (preferentemente) de la clase Salon y una clase no debe inmiscuirse en las tareas propias de otra clase (al menos en la medida de lo posible).

Como te digo no le des muchas vueltas, retén la idea para más adelante...


toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Ejercicio CU00641B para revisar
« Respuesta #2 en: 19 de Junio 2014, 07:20 »
Hola Alex. Gracias por tu exposición.
Y gracias por tus ánimos.

Entiendo que un -get- ha de devolver un atributo. Si el atributo es un objeto, pues eso, que devuelva un objeto. Hay que cambiar el chip.

En cuanto al código:
Citar
CORRECTO PERO NO IDÓNEO

En lugar de (modo 1):

    public void setSalon ( int numeroTV, String valorTipoSalon ) {
        salonCasa.setNumeroDeTelevisores ( numeroTV );
        salonCasa.setTipoSalon ( valorTipoSalon );
    }

Podríamos pensar en (modo 2):

    public void setSalon ( Salon valorSalon ) {
        salonCasa = new Salon();
        salonCasa.setNumeroDeTelevisores(valorSalon.getNumeroDeTelevisores());
        salonCasa.setTipoSalon(valorSalon.getTipoSalon());
    }

Ha habido momentos en que mi coco ha visto la lógica del argumento, y al momento siguiente la ha perdido.
He visto, tomando el ejemplo del código escrito, indentaciones dentro de otras indentaciones hasta perder el hilo.

En fin. Voy a hacer caso de lo que dices. Espero verlo más claro en adelante.

Saludos y gracias.

 

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