¿Por qué muchas personas suponen que la POO está en declive?

Hay muchas razones por las cuales los lenguajes y prácticas / paradigmas que no son OOP están en aumento, contribuyendo a la disminución relativa de OOP.

En primer lugar, hay algunas cosas sobre la POO que a muchas personas no les gustan, lo que las hace interesadas en aprender y usar otros enfoques. A continuación hay algunas referencias del artículo wiki de OOP:

  1. Cardelli, Luca (1996). “Malas propiedades de ingeniería de lenguajes orientados a objetos”. ACM Comput. Surv. (ACM) 28 (4es): 150. doi: 10.1145 / 242224.242415. ISSN 0360-0300. Consultado el 21 de abril de 2010.
  2. Armstrong, Joe. En codificadores en el trabajo: reflexiones sobre el arte de la programación. Peter Seibel, ed. Codersatwork.com, consultado el 13 de noviembre de 2009.
  3. Stepanov, Alexander. “STLport: una entrevista con A. Stepanov”. Consultado el 21 de abril de 2010.
  4. Rich Hickey, conferencia magistral de JVM Languages ​​Summit 2009, ¿Ya llegamos? Noviembre de 2009. (editado)

tomado de:

Programación orientada a objetos

También vea esta publicación y discusión sobre hackernews:

La programación orientada a objetos es un desastre costoso que debe terminar

Uno de los comentarios allí vinculaba algunos otros buenos artículos de Wikipedia que también brindan una discusión relevante sobre alternativas cada vez más populares a OOP:

  1. La modularidad y el diseño por contrato se implementan mejor mediante sistemas de módulos (ML estándar)
  2. La encapsulación está mejor servida por el alcance léxico (http://en.wikipedia.org/wiki/Sco…)
  3. Los datos se modelan mejor por tipos de datos algebraicos (tipo de datos algebraicos)
  4. La verificación de tipo se realiza mejor estructuralmente (sistema de tipo estructural)
  5. El polimorfismo se maneja mejor con funciones de primera clase (función de primera clase) y paramétrica (polimorfismo paramétrico)

Personalmente, a veces pienso que OOP es un poco como un auto antiguo. Claro, tiene un motor y aletas más grandes y mucho cromo, etc. Es divertido conducir y se ve bonito. Es bueno para algunas aplicaciones, todas bromeando a un lado. La verdadera pregunta no es si es útil o no, sino ¿para cuántos proyectos?

Cuando termino de construir una aplicación OOP, es como una estructura grande y elaborada. Cambiar la forma en que los objetos están conectados y organizados puede ser difícil, y las elecciones de diseño del pasado tienden a “congelarse” o bloquearse en su lugar para todos los tiempos futuros. ¿Es esta la mejor opción para cada aplicación? Probablemente no.

Si desea conducir 500-5000 millas a la semana en un automóvil que puede arreglar usted mismo sin pedir piezas especiales, probablemente sea mejor ir con un Honda o algo más fácilmente adaptable que un vehículo antiguo con aletas.

Finalmente, el mejor ejemplo es el crecimiento de JavaScript como lenguaje (¿oficialmente llamado EcmaScript ahora?). Aunque JavaScript / EcmaScript (JS / ES) no es un lenguaje de programación funcional puro, es mucho más “funcional” que “OOP” en su diseño. JS / ES fue el primer lenguaje convencional que promovió el uso de conceptos de programación funcional como funciones de orden superior, currículum y mónadas.

El reciente crecimiento de la comunidad de código abierto JS / ES no solo ha sido impresionante en su extensión, sino también inesperado desde el punto de vista de muchos programadores establecidos. Esto se evidencia en parte por el abrumador número de repositorios activos en Github usando JavaScript / EcmaScript:

Los principales idiomas de Github de 2014 (hasta ahora)

Debido a que JS / ES trata tanto las funciones como los objetos como estructuras / hashes, nos anima a difuminar la línea que los divide en nuestras mentes. Esta es una división que imponen muchos otros lenguajes: “hay funciones y hay objetos / variables, y son diferentes”.

Esta elección de diseño aparentemente menor (y a menudo confusa) permite mucha flexibilidad y potencia. En parte, este detalle aparentemente pequeño ha permitido a JS / ES lograr su crecimiento meteórico entre 2005-2015.

Esto explica parcialmente el aumento de JS / ES y la correspondiente disminución relativa de OOP. OOP se había convertido en una forma “estándar” o “fija” de hacer las cosas por un tiempo, y probablemente siempre habrá un momento y lugar para OOP. Pero como programadores debemos evitar quedarnos atascados en una forma de pensar / hacer las cosas, porque diferentes aplicaciones pueden requerir diferentes enfoques.

Más allá del debate OOP-vs-non-OOP, uno de nuestros principales objetivos como ingenieros debería ser la personalización de nuestros diseños al elegir hábilmente los paradigmas de programación más apropiados para cada tipo distinto de aplicación, con el fin de maximizar el “bang for the buck” que proporciona nuestro software.

Aunque esto es algo en lo que la mayoría de los ingenieros pueden estar de acuerdo, todavía tenemos un largo camino por recorrer hasta llegar a algún tipo de consenso sobre la mejor manera de enseñar y perfeccionar estas habilidades. Esto no solo es un desafío para nosotros como programadores de hoy, sino también una gran oportunidad para la próxima generación de educadores para crear mejores pautas y mejores prácticas que el sistema pedagógico actual centrado en la POO.

Aquí hay un par de buenos libros que elaboran estas ideas y técnicas con más detalle. Son de lectura gratuita en línea:

  1. https://leanpub.com/javascriptal…
  2. https://leanpub.com/javascript-s…

La forma en que interpreto la reacción es que la ola de lenguajes OOP dio un impulso a la productividad del programador, pero por razones que son ortogonales e incluso opuestas a la propia OOP.

Por ejemplo, podría decirse que Java fue el lenguaje que trajo la POO a la corriente principal, pero lo que es más importante, trajo la recolección de basura y las máquinas virtuales a la corriente principal de la programación de aplicaciones comerciales, que posiblemente sean conceptos nativos de la programación funcional.

Y luego llegaron los lenguajes de secuencias de comandos interpretados, que, aunque eran OOP en la superficie, tenían cosas agradables de LISPy como estructuras de datos dinámicos incorporadas agradables y simples con literales fáciles de usar, así como escritura paramétrica en forma de escritura de pato. Aún más cosas LISPy que vinieron junto con OOP.

Creo que despertó el apetito de algunas personas. Verá, las características realmente originales de OOP nos ayudaron a desarrollar un sentido para la organización y la arquitectura del código, pero también impusieron una gran cantidad de repeticiones molestas y una complejidad innecesaria (por ejemplo, herencia donde las interfaces abstractas hubieran sido preferibles, clases anónimas donde los cierres son más directos), mientras que las funciones de FP fueron realmente geniales. Creo que muchas personas actualmente piensan que al dejar OOP y adoptar FP, podríamos obtener el resto de las cosas buenas.

Porque la frase en sí misma fue exagerada en un grado extrodinario. Entonces, como es común con las cosas exageradas, muchas otras cosas tomaron esa frase como un nombre. Entonces la gente se confundió y dejó de llamar lo que no son OOP.

Sí, creo que OOP (la frase) está en declive porque las personas se están volviendo más educadas sobre el tema.

Es como, inteligencia artificial, ahora que lo pienso. No hay muchas personas en estos días que digan que le hacen IA a nadie más que a los laicos. Dirían que hacen aprendizaje automático o procesamiento del lenguaje natural o algo más. Estos son campos que el término AI exagerado y realmente nebuloso solía describir, pero luego AI (el término) experimentó una fuerte disminución mientras estos campos muy concretos continuaron floreciendo.

OOP requiere OOAD y una metodología adecuada de gestión de proyectos OO, también requiere muchas habilidades en cada función de SDLC.

Cuando miramos los proyectos en la industria, desafortunadamente vemos muchas carencias en esos requisitos. Como resultado, solo hacen OOP, no OOAD, sin PM adecuado, sin un conjunto de habilidades adecuado. Entonces, chivo expiatorio es POO

Porque se habla más de lo que se merece.

¿La transmisión automática está en declive? No, muchas personas lo usan todos los días.
¿Lo discutimos todo el tiempo? No, solo sabemos cómo usarlo y hemos confirmado que funciona.