En este sitio web utilizamos cookies para mejorar tu experiencia de navegación y entender mejor tua preferencias. Eso nos ayuda a entenderte mejor y a centrarnos en aquellos tópicos que son de tu interés. Por favor, acepta nuestro uso de cookies.
Nadie puede negar méritos a Java. Este lenguaje de programación nació y se ha mantenido honrosamente durante la friolera de más de 20 años como el abanderado de las arquitecturas robustas. Sus propios creadores lo mantuvieron sin complejos. El código en Java es más verboso pero más legible y mantenible. Y es verdad, trabajar con Java siempre fue una garantía de éxito en tanto que, a poco que no fueras demasiado torpe, las soluciones de Java funcionaban. Paradójicamente, Java y su asesino nacieron y fueron creciendo a la vez y su historia se encuentra entrelazada como las vidas de Holmes y Moriarti. Internet y la Web llegaron a los hogares del usuario a la vez que Java daba sus primeros pasos. Java fue avanzando con paso marcial, mientras que la Web se transformaba de una mera valla publicitaria haciauna verdadera plataforma de ejecución donde nacerían todas las redes sociales que hoy gobiernan nuestrasvidas. Y así, casi sin darnos cuenta, la carrera de negocios en Internet se fue acelerando. Era importantetener un negocio en Internet. Era importante correr más que tu competencia. Y sobretodo, si tenías que morir, era importante que murieras pronto. En este nuevo marco de producto mínimo viable la agilidad en el desarrollo de productos emergentes y corta duración se convirtió en la gran bala de plata y aquí es donde Java termino perdiendo terreno en esta anunciada derrota.
Los procesos de construcción de soluciones de software pasan habitualmente por la creación de arquitecturas sólidas. Este tipo de diseños son aquellas que cumplen con los principios fundacionales del paradigma de la orientación a objetos, de sus siglas en inglés SOLID. Sin embargo, en ocasiones resulta conveniente aplicar otro tipo de estrategia para la creación de software. Esto es especialmente cierto en aquellos casos en los que se pretenda dar con soluciones que resulten flexibles y plásticamente adaptables a distintos contextos de uso. El uso de determinadas técnicas y modelos de diseño arquitectónico tal es como el uso de traits, mixins, roles, aspectos o subjects, propios del paradigma de la orientación a componentes, es de aplicaciónen estos casos. Muchos lenguajes, de hecho, invitan a llevar a cabo un proceso de ideación de soluciones basado en estas técnicas dando lugar a soluciones más flexibles y dinámicamente cambiantes a tenor de las condiciones ambientales. A lo largo de esta charla se hace un recorridoexhaustivo de este paradigma arquitectónico revisando los principios, técnicas y modelos sobrela base del stack tecnológico de la plataforma web.
Frecuentemente se argumenta que la reutilización es uno de los valores más importantes de las soluciones de software. En efecto, cuando desarrollamos arquitecturas, uno de nuestros objetivos fundamentales es conseguir que los activos construidos puedan ser reutilizados en diferentes contextos arquitectónicos de uso. Entre otras cosas, esto contribuye al ahorro de costes en los procesos de desarrollo y a la homogeneidad transversal de las soluciones. Todo paradigma y en particular la orientación a objetos caracterizada por los principios SOLID ha promovido modelos de construcción orientados a la reutilización. Se argumenta que la construcción de objetos es el camino mediante el cual estos activos pueden ser de aplicación en diferentes contextos arquitectónicos siempre que se diseñen con el nivel adecuado de abstracción y desacoplamiento. Sin embargo, cuando nos adentramos en nuevos paradigmas de programación como aquellos propios de la orientación a componentes encontramos que frecuentemente construir menos asiste más en los procesos de reutilizar más. Bajo esta hipótesis parece más interesante de cara la reutilización crear contribuciones parcialesque puedan extender el comportamiento o estructura de los componentes para que adopten nuevas capacidades de forma dinámica y convertir a estos rasgos de contribución puntual en los activos esenciales de la reutilización.
Frecuentemente, cuando pensamos en la programación funcional, en especial desde lenguajes que resultan foráneos a este paradigma, caemos en el error de pensar en que programar de acuerdo a estos principios, consiste básicamente en utilizar algunas primitivas centradas en operaciones sobre listas con transformadores de orden superior. Sin embargo, la programación funcional cae lejos de estas ideas y va mucho más allá de eso. Cuando ideamos soluciones orientadas a funciones, debemos ser capaces de crear una única función que arroje una solución general sobre el espacio de problemas al que pertenece nuestro problema y acompañarla de un nutrido conjunto de funciones y predicados que permitan poner en contexto el uso de dicha función. Pensar en esta dirección resulta extraño al comienzo y, en ocasiones, altamente complejo pero trae consigo importantes ventajas, en especial para aquellos tipos de problemas centrados en una algoritmia en la que las operaciones de transformación son el elemento paramétrico quese configura para operar sobre la base de un conjunto de datos que se consideran punto fijo de la operación. En un paradigma donde el concepto de instrucción, sentencia y orden de ejecución carece de sentido, crear una función global a través de estrategias de composición funcional es la gran habilidad que todo desarrollador debe adquirir por medio del uso y aplicación de diversas técnicas.