Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: toni_apr 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.
/**
* 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
/**
* 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
/**
* 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
-
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...
-
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:
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.