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
-
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:
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:
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:
-
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