Ando últimamente un poco preocupado sobre un tema.
Según puedo comprobar en la realidad, el 90% de los programadores no sabe realmente de orientación a objetos. Sí, el 90 % de ellos a lo mejor han usado alguna vez, por ejemplo, un patrón observador: un ActionListener de java lo es y sólo por hacer un botón que haga algo, ya el 90% de los programadores lo han usado. Implementar uno en tu diseño/programa también. El patrón observador es sencillo y bastantes programadores lo han implementado alguna vez en sus proyectos, incluso muchas veces.
Pero ¿qué pasa con el resto de patrones? ¿Quien conoce el patrón estado, o el patrón comando, o cualquier otro de esos que hay por ahí menos conocidos? ¿Y cuántos lo han implementado alguna vez para algo? ¿y cuántos de esos poco lo han hecho correctamente?. Ya estamos llegando al otro 10 % de programadores, los que realmente entienden la programación orientada a objetos, los que realmente entienden la utilidad de esos patrones y los que realmente son capaces de usarlos y sacarles partido en proyectos reales, los que después de pasarse ocho horas programando en el trabajo, llegan a casa, encienden el ordenador y se ponen a programar lo que les gusta.
Pero ahí está el problema. Para ese 10% de programadores el código que han hecho es entendible, fácilmente modificable y adaptable y una pequeña maravilla de la técnica. ¿Y qué pasa cuando tiene que mantener ese código un programador del otro 90%, que suele ser el 90% de las veces?. Pues que se encuentran un código que no entienden, en el que no saben qué buscar ni donde, en el que no tienen ni idea de qué tocar y en el que toquen lo que toquen, fastidian algo.
Y esa es mi preocupación. ¿Hasta qué punto es entonces bueno usar la orientación a objetos?. La situación real es que cuando necesitas modificar/adaptar un sofware ya hecho con intención de reutilizarlo en otro proyecto, depurar algún bug, añadirle algo de funcionalidad, etc, el programador original ya está en otras cosas y sólo tienes un 10% de posibilidades de que la persona a la que pongas a hacerlo pueda hacerlo.
Al final, el código hecho por ese 90% de programadores que hace un uso básico de la orientación a objetos es realmente el código que resulta mantenible, el código que cualquier programador puede entender y cualquier programador puede tocar con cierta seguridad, aunque no sea todo lo elegante ni correcto que debiera ser.
Dicho de otra forma, muchos son capaces de tocar un texto en prosa para que diga otra cosa. Muy pocos son capaces de entender una poesía genial, modificarla para que diga otra cosa, y siga siendo genial.
En fin, cada vez soy más partidario de hacer código más "lineal", usando la orientación a objetos lo más simple posible y en los sitios que realmente se le saque un partido real. Si estás en un proyecto en el que todos los programadores son programadores de "élite", en el que todos ellos realmente viven la orientación a objetos y todos ellos de coeficiente intelectual alto, adelante, usa todos los patrones que quieras. Si estás en un proyecto normal con programadores normales (el 90% de las veces y el 90% de los programadores), piénsatelo dos veces antes de poner un patrón estado.