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:
- 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.
- 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.
- Stepanov, Alexander. “STLport: una entrevista con A. Stepanov”. Consultado el 21 de abril de 2010.
- Rich Hickey, conferencia magistral de JVM Languages Summit 2009, ¿Ya llegamos? Noviembre de 2009. (editado)
tomado de:
- ¿Es mejor convertirse en un desarrollador de t24 o un proyecto en un dominio de soporte para el crecimiento profesional?
- ¿Qué esperarías de un documento de mejores prácticas al desarrollar widgets de formulario de Symfony 1.4?
- Estoy estudiando ingeniería civil, ¿cuál es el software más exigente que debo aprender?
- ¿Aprendes a codificar cuando tomas ingeniería de software?
- ¿Qué es lo mejor para comenzar su carrera en una empresa de software sin un desarrollo de software de grado de ingeniería, desarrollo web, pruebas o redes?
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:
- La modularidad y el diseño por contrato se implementan mejor mediante sistemas de módulos (ML estándar)
- La encapsulación está mejor servida por el alcance léxico (http://en.wikipedia.org/wiki/Sco…)
- Los datos se modelan mejor por tipos de datos algebraicos (tipo de datos algebraicos)
- La verificación de tipo se realiza mejor estructuralmente (sistema de tipo estructural)
- 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:
- https://leanpub.com/javascriptal…
- https://leanpub.com/javascript-s…