0 Comentarios

Resumen
El paradigma orientado a objetos fue tomando gran importancia en los lenguajes de programación con el correr de los años, siendo en la actualidad lenguajes de este tipo los elegidos principalmente por los programadores. Este constituye una forma de ver la realidad más cercana al pensamiento humano, permitiendo simplificar la manera de resolver los problemas que se nos presentan. Sin embargo, hay situaciones en las que aplicar otro tipo de paradigma sería más eficiente y simple, ante lo cual, se decidió incorporar a los mismos, mecanismos pertenecientes a otros paradigmas, aprovechando las ventajas que cada uno pudiera brindar. De esta manera surgieron los lenguajes de programación orientados a objetos multiparadigmas.
En este trabajo explicaremos cómo los lenguajes orientados a objetos fueron incorporando nuevos paradigmas, por qué era necesario tal cambio; y cómo esto trajo el surgimiento de la programación multiparadigma, y las consecuencias que ocasionó. Además de explicar cómo se construyen los sistemas multiparadigmas y cuáles son los paradigmas más usuales que son incorporados para trabajar de manera conjunta en un sólo lenguaje.

1. Introducción
Un paradigma implica una forma específica de resolver un problema, el mismo está provisto de metodologías, técnicas y herramientas. Sin embargo, ninguno de estos es capaz de resolver todas las situaciones de la manera más eficiente y sencilla. La noción de un lenguaje multiparadigma se basa en la integración de conceptos y construcciones de dos o más paradigmas, de tal manera que los programas pueden escribirse en una mezcla de estilos usando una vista apropiada en cada momento.
En este artículo nos centraremos en la programación Orientada a Objetos, la cual es muy adecuada para la aplicación e incorporación de otros paradigmas de programación. Es por ello que lenguajes orientados a objetos como C++, Java, ML, fueron implementando los demás paradigmas para convertirse en lenguajes multiparadigmas.

2. Desarrollo
El origen de los lenguajes orientados a objeto multiparadigmas
Diferentes paradigmas de programación fueron desarrollados a través de los años. Particularmente la orientación a objetos tuvo su origen por la década de los sesenta, con Simula, lenguaje de programación a partir del cual se desarrolló la teoría de dicho paradigma. A principios de los 90 fueron utilizados diversos de ellos, y fue en esta época cuando la programación orientada a objetos tuvo un gran protagonismo. Esto permitió contrarrestar muchos de los inconvenientes presentes en los lenguajes existentes hasta su aparición, por un lado estaba el problema de la baja reusabilidad del código, lo cual traía como consecuencia grandes programas, y por otro lado, ayudaba al mantenimiento de los mismos ya que ante la necesidad de modificar funciones bastaba con corregir una pequeña parte del código, lo que no ocurría con los otros paradigmas; a su vez, el código era bastante intuitivo para comprender y aplicar.
Los lenguajes basados exclusivamente en paradigmas orientados a objetos no contaban con herramientas que los programadores acostumbraban a utilizar, lo cual dificultó en su momento el trabajo de los mismos. En consecuencia, se decidió incorporar muchas de las características de la programación orientada a objetos a distintos lenguajes de gran uso en aquella época tales como Ada, Basic, Fortran y Pascal, entre otros. Sin embargo, debido a que no se crearon para dicho propósito, existieron problemas relacionados con la compatibilidad y mantenimiento del código.
El reto se encontraba, entonces, en lograr un lenguaje que emplee las características de la programación orientada a objetos, pero que disponga a su vez, de características propias de los paradigmas restantes.

¿Pueden los lenguajes de programación orientados a objetos apoyar eficazmente otros paradigmas de programación?
Hoy en día podemos afirmar que sí, al menos para algunos paradigmas. Por ejemplo se ha hecho un avance significativo para la programación funcional en C++. Adicionalmente, se hicieron muchos esfuerzos para soportar la integración de otros paradigmas como un front-end de otros lenguajes (el lenguaje Pizza, extensión de Java, es un conocido ejemplo).
El paradigma de programación orientado a objetos es de hecho muy adecuado para la implementación, incluso la extensión, de otros lenguajes de programación.

Paradigmas introducidos en lenguajes Orientados a Objetos
Son muchos los paradigmas que se pueden incluir en un lenguaje orientado a objetos. Por ejemplo CIAO es un moderno lenguaje de programación multiparadigma cuya característica principal es que cuenta con un kernel o núcleo, el cual posee un conjunto de características básicas y bien elegidas que pueden soportar eficientemente muchos estilos y paradigmas de programación.
De hecho, la extensibilidad del lenguaje kernel, permite a CIAO ser un sistema de programación totalmente multiparadigma incorporando las mejores características de ciertos paradigmas de programación.
Programación funcional: un conjunto de paquetes permite definir funciones, incluyendo órdenes de alto nivel, y evaluación perezosa. La misma sintaxis funcional puede ser usada tanto para funciones como para predicados.
Programación lógica: un conjunto de paquetes provee soporte completo para ISO-PROLOG.
Programación con restricciones: están soportados muchos solucionadores y clases de restricciones.
Programación orientada a objetos: es proporcionada por paquetes de objetos y clases. Estos paquetes proveen la capacidad de definición de clases, instanciación de clases, encapsulación y replicación de estado, herencia, interfaces.
Concurrencia, paralelismo y ejecución distribuida: otros paquetes brindan la capacidad de concurrencia, distribución y ejecución en paralela.

¿Por qué la programación multiparadigma?
La programación multiparadigma es la integración de muchos paradigmas de programación en un simple modelo. La misma facilita a los programadores utilizar la mejor herramienta para cada trabajo. Por ejemplo podemos tener códigos del paradigma funcional, con restricciones u orientado a objeto, dependiendo de cuál función está siendo evaluada, qué información es usada o qué manipulación de estado es necesaria.
Además, los lenguajes multiparadigmas son muy adecuados para la enseñanza de algoritmos ya que introducen sólo los conceptos nuevos para cada lenguaje y mantienen al mínimo los cambios de sintaxis cuando diferentes clases de algoritmos son considerados. El lenguaje Leda, el cual soporta múltiple paradigmas, entre ellos orientado a objetos, fue fuertemente motivado para propósitos educacionales.

Lenguajes de programación multiparadigmas
Actualmente, son diversos los lenguajes de programación que incluye otros paradigmas junto con el paradigma de programación orientado a objetos.

Fig. 1 Lenguajes de programación orientados a objetos multiparadigmas

Un estudio paradigmático de los patrones de diseño orientados a objetos
El entendimiento de los paradigmas de programación no ha sido totalmente establecido todavía, aunque muchos lenguajes de uso común ofrecen más de un paradigma.
Un patrón de diseño es básicamente una solución probada a un problema específico del desarrollo de software. Para poder entender mejor como los patrones de diseños orientados a objetos, en particular los presentados en el libro GoF [1], pueden ser abarcados desde más de un paradigma; podemos observar a los mismos desde otra perspectiva como la programación modular y la programación funcional. A partir de ello, se observa que los patrones de diseños orientados a objetos tienen sentido en un entorno más general que sólo en el paradigma orientado a objetos, por ello permiten fácilmente la aplicación de otros paradigmas. A su vez notamos que tienen patrones homólogos en la programación modular genérica, pero con diferentes propiedades, en particular con respecto al comportamiento estático/dinámico y la seguridad de tipos. Incluso algunos patrones de diseño orientados a objetos pueden ser implementados usando la programación funcional básica, justificando la idea de que la programación funcional puede también ser vista como una simplificación de la programación orientada a objetos.

[1] E. Gamma, R. Helm, R. Jonhnson, and J. Vlissides. Design Patterns. AddisonWesley, 1995

Construyendo un sistema multiparadigma
Existen al menos cuatro maneras de construir un lenguaje multiparadigma.
La primera es agregar un lenguaje a uno previamente existente, por ejemplo, combinando la sintaxis y semántica del otro lenguaje. Esto tiene como ventaja que los usuarios estarán familiarizados con al menos uno de los lenguajes del sistema; por ende pueden empezar a usar el sistema rápidamente. Sin embargo, la principal desventaja es la semántica compleja que posee debido a la interacción no intencional entre las construcciones de los componentes del lenguaje.
El segundo método es aumentar la capacidad de un sistema existente con una nueva construcción del lenguaje. Esto permite que una pieza existente de software en un lenguaje sea usado en el nuevo sistema.
La tercera técnica consiste en redefinir un lenguaje existente en el contexto de nuevos objetivos e ideas teóricas. Este método permite corregir cualquier aspecto no deseado del lenguaje original, añadir nuevos paradigmas y proporcionar un fundamento matemático fuerte al resultado.
La cuarta técnica consiste en empezar desde cero, aprender de los errores de otros, desarrollar una base formal consistente y construir un nuevo sistema. Las ventajas son la consistencia y elegancia, pero se dificulta atraer nuevos usuarios al sistema.

3. Conclusiones
De acuerdo a lo desarrollado en este trabajo, podemos destacar la importancia de la programación multiparadigma, no solo porque permite resolver un amplio abanico de problemas sino también en el sentido de que puede servir de apoyo para el aprendizaje de un paradigma en particular. Esto último se debe a que ayuda a adaptarnos más fácilmente a un nuevo paradigma al no perder las características conocidas de los anteriores.
Aprender y emplear un lenguaje multiparadigma es muy valioso ya que estarán a nuestro alcance, las herramientas más destacadas de cada tipo de paradigma, para usarlas de la mejor manera ante los diversos problemas que debemos tratar de solucionar, y principalmente lograrlo de la forma más eficiente posible.

Bibliografía
[1] Davis, Kei. Striegnitz, Jörg. Multiparadigm Programming in Object-Oriented Languages: Current Research. 2007. (pp. 13-26).
[2] Petra Hofstedt. Multiparadigm Constraint Programming Languages. Edición. 2011. Springer Berlin Heidelberg. Berlin. (pp. 53-54).
[3] Amaro, Silvia. Quiroga, Pablo. Reynoso, Luis. Vaucheret Claudio. Lopez Lidia. Dolz, Daniel. Granados, Andrea. Godoy, Ingrid. Sanchez, Viviana. Klemen, Maximiliano. Perez, Paola. Desarrollo Multiparadigma. (pp. 1-2).
[4] Hailpern, Brent, “Multiparadigm Languages”. IEEE Software. Vol. 3. 1986. (pp. 7).

Comentarios