En algunos lenguajes de programación, el orden es importante porque no puede utilizar las cosas hasta después de que se hayan declarado. Pero salvo eso, para la mayoría de los idiomas no le importa al compilador. Entonces, te queda importando para los humanos.
Mi cita favorita de Martin Fowler es: Any fool can write code that a computer can understand. Good programmers write code that humans can understand.Entonces, diría que el orden de su clase dependerá de lo que facilite la comprensión de los humanos.
Personalmente prefiero el tratamiento gradual que Bob Martin da en su Clean Codelibro. Variables miembro en la parte superior de la clase, luego constructores, luego todos los demás métodos. Y usted ordena que los métodos se relacionen estrechamente con la forma en que se usan dentro de la clase (en lugar de poner arbitrariamente todo público, luego privado y luego protegido). Él lo llama minimizar la "distancia vertical" o algo así (no tengo el libro sobre mí en este momento).
Editar:
La idea básica de la "distancia vertical" es que desea evitar que la gente salte todo su código fuente solo para entenderlo. Si las cosas están relacionadas, deberían estar más juntas. Las cosas no relacionadas pueden estar más separadas.
El Capítulo 5 de Clean Code (gran libro, por cierto) entra en muchos detalles sobre cómo el Sr. Martin sugiere ordenar el código. Sugiere que leer el código debería funcionar como leer un artículo de periódico: los detalles de alto nivel son lo primero (en la parte superior) y obtienes más detalles a medida que lees. Él dice: "Si una función llama a otra, deben estar cerca verticalmente, y la persona que llama debe estar por encima de la persona que llama, si es posible". Además, los conceptos relacionados deben estar muy juntos.
Así que aquí hay un ejemplo artificial que es malo en muchos sentidos (diseño pobre de OO; nunca se usa doublepor dinero) pero ilustra la idea:
public class Employee {
...
public String getEmployeeId() { return employeeId; }
public String getFirstName() { return firstName; }
public String getLastName() { return lastName; }
public double calculatePaycheck() {
double pay = getSalary() / PAY_PERIODS_PER_YEAR;
if (isEligibleForBonus()) {
pay += calculateBonus();
}
return pay;
}
private double getSalary() { ... }
private boolean isEligibleForBonus() {
return (isFullTimeEmployee() && didCompleteBonusObjectives());
}
public boolean isFullTimeEmployee() { ... }
private boolean didCompleteBonusObjectives() { ... }
private double calculateBonus() { ... }
}
Los métodos están ordenados para que estén cerca de los que los llaman, trabajando desde la parte superior. Si hubiéramos puesto todos los privatemétodos debajo de publiclos, entonces tendrías que hacer más saltos para seguir el flujo del programa.
getFirstNamey getLastNameestán relacionados conceptualmente (y getEmployeeIdprobablemente también lo estén), por lo que están muy juntos. Podríamos moverlos todos hacia abajo, pero no nos gustaría ver getFirstNameen la parte superior e getLastNameinferior.
Esperemos que esto te de la idea básica. Si está interesado en este tipo de cosas, le recomiendo leer Clean Code.