Tenga en cuenta que las necesidades de Harper para enseñar una clase introductoria de currículo de CS son muy diferentes de las necesidades de un proyecto de la vida real . Su trabajo es enseñar conceptos fundamentales (por ejemplo, modularidad, paralelismo, inducción) a estudiantes de primer año. Como tal, es muy importante que el lenguaje (y paradigma) elegido pueda expresar estos conceptos con la menor ceremonia (sintáctica y conceptual) posible. La familiaridad, el soporte de herramientas, las bibliotecas disponibles, el rendimiento de ejecución, etc. son completamente irrelevantes en este contexto. Así que tenga esto en cuenta al considerar lo siguiente ...
La opinión de que OO es antimodular resulta de la gran cantidad de dependencias de otras clases, incluso los objetos de clases bien diseñadas tienden a terminar. Que esto es un problema, incluso a los ojos de los defensores de OO, se hace evidente cuando se observa la proliferación de marcos , artículos, libros y publicaciones de blog de Dependency Injection en los últimos años (también es interesante el aumento de simulacros y trozos).
Otra pista es la importancia de los Patrones de diseño y la complejidad de implementarlos, en comparación con otros paradigmas de programación, por ejemplo, Fábricas, Constructor, Adaptador, Puente, Decorador, Fachada, Comando, Iterador, Mediador, Observador, Estrategia y Método de plantilla y tal vez los compuestos están relacionados de alguna manera con la mejora de la modularidad del código OO.
La herencia también es problemática (por ejemplo , un problema de clase base frágil ) y el polimorfismo (subtipo) seduce a uno para que derrame la implementación de un algoritmo entre varias clases, donde los cambios pueden afectar toda la cadena de herencia (¡arriba y abajo!).
El cargo de ser antiparalelo está relacionado con el énfasis del estado en comparación con el cómputo (también conocido como mutabilidad vs. inmutabilidad). El primero hace que sea más complicado expresar dependencias de subcomputaciones (¡lo cual es la toma de paralelismo de Harper!), Ya que generalmente no se puede inferir desde la ubicación donde se administra el estado (también conocido como el archivo, donde se declara la variable de instancia) qué actores externos lo cambiará en qué punto del tiempo.
El énfasis en la inmutabilidad y la computación hace que la expresión de dependencias de subcomputaciones sea mucho más fácil, ya que no hay administración de estado, solo funciones / computaciones que se combinan en el lugar donde desea expresar las dependencias de subcomputaciones.