Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Xerelo en 11 de Marzo 2015, 15:30

Título: POO+sentencia+algoritmo ¿cómo saber si se hace buen diseño orientado a objetos?
Publicado por: Xerelo en 11 de Marzo 2015, 15:30
Bueno, antes que nada, gracias por la ayuda que me ofrece este sitio, estoy agradecido.

Ahora vamos al lío:

Ejercicio:

El problema planteado consiste en hallar la edad en años a partir de la fecha de nacimiento y la fecha actual.


Aquí mi código:

Subclase Fecha_Años:

Código: [Seleccionar]
package poo;

public class Fecha_Años {

int dia_Nacimiento;
int mes_Nacimiento;
int año_Nacimiento;

int dia_Actual;
int mes_Actual;
int año_Actual;

public Fecha_Años(int dia_Nacimiento,int mes_Nacimiento,int año_Nacimiento,int dia_Actual,int mes_Actual,int año_Actual){
this.dia_Nacimiento = dia_Nacimiento;
this.mes_Nacimiento = mes_Nacimiento;
this.año_Nacimiento = año_Nacimiento;

this.dia_Actual = dia_Actual;
this.mes_Actual = mes_Actual;
this.año_Actual = año_Actual;


}

public int Calcular_Años(){

int Edad_Años = 0;

if(dia_Actual < dia_Nacimiento && mes_Actual <= mes_Nacimiento){
Edad_Años = (año_Actual - año_Nacimiento)-1;
}
if(dia_Actual < dia_Nacimiento && mes_Actual > mes_Nacimiento){
Edad_Años = (año_Actual - año_Nacimiento);
}
if(dia_Actual >= dia_Nacimiento && mes_Actual >= mes_Nacimiento ){
Edad_Años = (año_Actual - año_Nacimiento);
}
if(dia_Actual >= dia_Nacimiento && mes_Actual < mes_Nacimiento ){
Edad_Años = (año_Actual - año_Nacimiento)-1;
}
   


return Edad_Años;
}



}

Clase padre Configurar_FechaAño:

Código: [Seleccionar]
package poo;

public class Configurar_FechaAño {

public static void main(String[] args) {
// TODO Auto-generated method stub

Fecha_Años ConfigurarFecha = new Fecha_Años(2,3,1995,2,3,2015);

System.out.println("La edad en años es: "+ConfigurarFecha.Calcular_Años());
}

}

Aquí va la pregunta:

¿Como ves el algoritmo que uso? es decir, están bien definido los nombres de las clases? uso bien el constructor? ¿tu lo harías de otra forma? ¿Si no uso getter y setters esta mal la clase? etc etc...

En definitiva si esta bien o mal y lo que este mal decirmelo

Gracias a todos los que contesten:corazon:
Título: Re:POO+sentencia+algoritmo ¿cómo saber si se hace buen diseño orientado a objetos?
Publicado por: Alex Rodríguez en 13 de Marzo 2015, 08:31
Hola respecto a los nombres de las clases si ves otros hilos del foro se insiste en que los nombres de las clases deben describir lo que son o lo que hacen las clases.

El nombre Fecha_Años no describe lo que es o lo que hace esta clase. Esta clase debería llamarse CalculadoraEdad o CalculadorAños o algo así.

La clase Configurar_FechaAño tampoco tiene un nombre adecuado. Esta clase sirve para hacer una prueba, entonces debería llamarse TestCalculoEdades o algo similar.

Usar getters y setters no es obligatorio, pero es lo habitual. Para un pequeño programa como este donde tienes 50 líneas de código a lo mejor no te hacen falta, pero si haces programas grandes sí te van a hacer falta, por tanto mejor acostumbrarse a ponerlos.

En la clase Fecha_Años hay algo que no parece tener mucha lógica:

   if(dia_Actual < dia_Nacimiento && mes_Actual <= mes_Nacimiento){
      Edad_Años = (año_Actual - año_Nacimiento)-1;
   }

Aquí hace un cálculo para el caso de que la fecha actual sea anterior a la fecha de nacimiento. Por ejemplo la fecha actual es 11-03-2060 y la fecha de nacimiento es 14-02-2065, es decir, que la persona no ha nacido, sino que va a nacer en el futuro. ¿Cuál es la edad? Pues debería devolverse 0 (indicaría que no ha nacido), ó -1 (para indicar que existe un error).

Para mejorar en el diseño de algoritmos y el diseño orientado a objetos te recomiendo seguir e ir realizando todos los ejercicios del curso http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

Saludos