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




Para comprender el patrón Dependency Injection considere la figura 1 la cual es un diagrama de clases, la clase Foo depende de una instancia de la clase Bar, para realizar algún tipo de procesamiento, tradicionalmente en la clase Foo se tendría la sentencia Bar bar=new Bar(); para crear el objeto bar, usando Dependency Injection una instancia de Bar (o bien una subclase) es proporcionada a la clase Foo en tiempo de ejecución por algún proceso externo, es decir la clase Foo no llama a crear el objeto bar si no que el proceso externo le proporciona el objeto bar a la clase Foo, es por eso que Rod Johnson define a Dependency Injection con la frase: “No me llames, yo te llamo”.