OOP en sí no ha cambiado mucho desde su inicio. Se han explorado algunos ángulos nuevos, pero los principios básicos siguen siendo los mismos. En todo caso, el conocimiento colectivo reunido a lo largo de los años hace que la vida del programador sea más fácil que difícil. Los patrones de diseño no son un obstáculo; Proporcionan una caja de herramientas de soluciones a problemas estándar, destilada de años y años de experiencia.
Entonces, ¿por qué percibes la POO hoy como más compleja que cuando comenzaste a usarla?
Una razón puede ser que el código al que está expuesto se vuelve más complejo, no porque OOP se haya vuelto más complejo, sino porque ha avanzado en la escala de aprendizaje y puede leer bases de códigos más grandes y complejas.
Otra razón puede ser que, si bien el paradigma de la complejidad no ha cambiado, el tamaño y la complejidad de un proyecto de software promedio pueden muy bien haber cambiado. Con la potencia de procesamiento disponible en los teléfonos celulares de nivel de cliente que hubiera sido el sueño húmedo de un desarrollador en un servidor hace menos de dos décadas, el público en general básicamente esperaba una GUI animada ingeniosa incluso para la aplicación desechable más barata, y las PC de escritorio de nivel de entrada son más potentes que una "supercomputadora" de 1980, es natural que la barra se haya elevado desde los primeros días de Smalltalk y C ++.
Y luego está el hecho de que en las aplicaciones modernas, la concurrencia y el paralelismo son la norma en lugar de la excepción, y las aplicaciones con frecuencia necesitan comunicarse entre diferentes máquinas, generando y analizando todo un zoológico de protocolos. Si bien OOP es excelente como paradigma organizacional, tiene sus limitaciones, al igual que cualquier otro paradigma: por ejemplo, no proporciona mucha abstracción para la concurrencia (la mayoría de las implementaciones son más o menos una idea de último momento o se externalizan a bibliotecas por completo) , y no es el mejor enfoque posible para construir analizadores y transformar datos. La programación moderna con frecuencia se encuentra con las limitaciones del paradigma OOP, y los patrones de diseño solo pueden llevarlo hasta cierto punto. (Personalmente, Considero el hecho de que necesitamos patrones de diseño como una señal de esto: si el paradigma proporcionara esta solución de forma inmediata, sería más expresivo para estos problemas y las soluciones estándar serían obvias. No existe un patrón de diseño para describir la herencia del método, porque es una característica central de OOP; pero hay un patrón de fábrica, porque OOP no proporciona una forma natural obvia de construir objetos de forma polimórfica y transparente).
Debido a esto, los lenguajes OOP más modernos incorporan características de otros paradigmas, lo que los hace más expresivos y más potentes, pero también más complejos. C # es el mejor ejemplo de esto: tiene raíces obvias de OOP, pero características como delegados, eventos, inferencia de tipos, tipos de datos variantes, atributos, funciones anónimas, expresiones lambda, genéricos, etc., se originan a partir de otros paradigmas, especialmente la programación funcional. .