<Capitulo 2>
– Crea métodos estáticos en lugar del constructor.
V: Te aseguras el singleton, no creas objetos, puedes devolver cualquier objeto.
D: una clase sin métodos públicos o privados no puede ser una subclase, no son
distinguibles de otros métodos estáticos.
– La clase singleton con el atributo como static final y el constructor privado. Un método getInstance()
que devuelva el atributo, siempre el mismo, no un objeto nuevo.
– Si quieres una clase abstrapta que no se pueda instanciar, pon un constructor privado.
– Evitar la creación de objetos duplicados.
String s = new String(«silly»); // DON’T DO THIS!
String s = «No longer silly»; // YES
– Evita métodos finally que terminen cualquier cosa.
<Capitulo 3>
– Sobrescribe siempre el método toString()
<Capitulo 4>
– (12) Minimiza el acceso a las clases y a sus métodos (public, private, protected)
– (13) Favorece las clases inmutables, aquellas cuyos casos no pueden ser modificados:
– no generes métodos que modifiquen el objeto.
– asegurate de que no halla métodos que puedan ser sobrescritos, por subclases.
– has todos los campos final, private
– (14) Favorece la composición sobre la herencia
– (15) Diseña y documenta la herencia o no la permitas.
– (16) Mejor las Interfaces que las clases Abstractas.
– (17) Usa las Interfaces solo para definir tipos.
– (18) Favorece lo estático sobre lo no estático.
<Capitulo 6: Métodos>
– (23) Comprueba que los parámetros son validos.
– (25) elige los nombres de los métodos con cuidado. En los parámetros, interfaces sobre clases
– (28) Escribe la documentación de lo que estas haciendo.
<Capitulo 7: Programación en general>
– (29) Minimiza el ámbito de las variables locales.
– Declararlas como si fuese la primera vez que las usas,
– Cerca de la declaración de una variable tiene que estar su inicialización.
– (30) Conoce y usa las librerías.
– (32) Evita String donde otros tipos son más apropiados. (enum, stringbuffer…)
– (33) Cuidado con el rendimiento de la concatenación de cadenas, usa StringBuffer.
– (34) Refiere a los objetos por sus interfaces: List subscribers = new ArrayList();
List subscribers = new Vector();
– (35) Mejor interfaces que reflexión. Reflexión: acceso programado a clases que se están ejecutando
– (38) Utiliza la convención de nombres establecida.
<Capitulo 8: Excepciones>
– (39) Usa las excepciones para condiciones especiales.
– (40) Usa el control de excepciones para condiciones recuperables y las excepciones run-time para
errores de programación.
– (41) Evita el uso innecesario del control de excepciones.
– (42) Favorece el uso de excepciones estandard.
– (43) Lanza las excepciones apropiadas para la abstracción.
– (44) Documenta las excepciones lanzadas en cada método
– (45) Incluye capturas de fallo de la información en los mensajes detallados.
– (46) El fallo en la invocación de un método debe dejar el objeto en el mismo estado en el que se
encontraba antes de la llamada.
– (47) No ignores las excepciones. No dejes una excepción sin tratar
<Capitulo 9: Hilos>
– (48) Sincroniza el acceso para compartir los datos modificables.
– (49) Evita la excesiva sincronización.
– (50) Nunca invoques un wait fuera de un bucle
– (51) No dependas del programador de tareas.
– (52) Documenta los hilos de seguridad
– (53) Evita la agrupación de hilos
<Capitulo 10: Serialización>
– (55) Considera personalizar la serialización, no aceptes la que viene por defecto.