Después de haber migrado de C# en Unity, comencé a aprender Python y ya llevo algo mas de un año picando código, no todos los días, pero al menos lo suficiente para hacerme a una idea del enfoque que maneja. Resulta ser que Python al igual que JavaScript son lenguajes multiparadigma, eso quiere decir que no tienen unas reglas estrictas y una única forma de hacer las cosas como puede ser el lenguaje C, C++ o Java, donde Java está pensado al 100% en ser orientado a objetos, mientras que C++ está pensado en ser orientado a clases y C está orientado a la programación funcional.
Usar un lenguaje multiparadigma es un dolor de cabeza si vienes de un lenguaje orientado a objetos, pues básicamente desechan por la taza del inodoro todo lo que has aprendido, sin embargo esto a su vez es una ventaja y un reto al mismo tiempo, pues comienzas a aprender otros paradigmas y a saber que es lo esencial de los lenguajes a la hora de realizar algún proyecto.
Voy a hacer un resumen de lo que significan estos paradigmas y como estos son una clara muestra de la evolución de los lenguajes modernos.
¿Cuáles son los múltiples paradigmas?
Empecemos por explicar lo que significa paradigma. Paradigma no viene a ser otra cosa que un modelo o ejemplo, algo a lo que comparar, esta puede ser una metáfora o una fábula para comparar una situación, pero a lo largo del tiempo y con la destrucción del español y de los distintos idiomas, la palabra se usa para explicar corrientes de pensamiento u opiniones. En ciencias se usan para explicar pensamientos de grupo, en arquitectura para comparar maquetas y planos. En filosofía se usa para comparación de términos epistemológicos, pero la definición que a nosotros nos interesa es la que proviene de la cibernética, que se refiere al uso y tratamiento de los datos.
Teniendo en cuenta lo anterior, el primer paradigma que se dio fue el de la programación imperativa o procedimental, esto quiere decir que las instrucciones van en orden y en secuencia de principio a fin, aquí solo existen órdenes y nada mas, es el caso de los lenguajes antiguos como Assembler.
Luego surgió el paradigma de la programación estructurada, que hace uso de estructuras como el uso de sentencias IF, ELSE, ELSE IF, SWITCH, y bucles FOR y WHILE, evitando al máximo la palabra reservada GOTO que hacia saltos de línea y la culpable de los códigos espagueti que hace tan difícil leer y depurar un programa. Este es el caso de los lenguajes COBOL, BASIC y FORTRAN
Luego viene el paradigma funcional, también se le conoce como modular o de procedimientos (definido como procesos individuales), donde se incluían porciones de código llamado funciones, estos podían ser invocados en medio de las instrucciones del programa principal, donde el apuntador lee línea por línea y luego salta hacia las líneas dentro de las funciones, para luego salir de la función y retomar el camino que llevaba, este es el caso del lenguaje C.
C++ nace como el inicio del paradigma orientado a objetos al ampliar a C con el uso de clases, pero con el tiempo Java empezó a completar el paradigma al incluirle clases virtuales, interfaces, encapsulamientos de variables, alcance y accesibilidad de las variables, etc. La idea principal de este paradigma es fragmentar aun mas el código en objetos, donde cada objeto tiene funciones propias, pueden ser accedidas mediante funciones y variables públicas, pero aislando el resto de ser manipulado, esto hace que cada objeto en sí mismo sea un pequeño programa con unas pocas responsabilidades que cumplir.
Hay algunos lenguajes que usan el paradigma de programación por capas como es el caso de HTML y JavaScript, donde los objetos se separan en modelos o capas, en la cual hay una capa de vista a los usuarios, otra capa donde se manipulan los datos y otra capa donde se almacenan los datos y se consultan, no es mas que el patrón Modelo Vista Controlador.
Paradigma reflexivo, es raro de explicar, pero en síntesis es la capacidad del código de evaluar partes de sí mismo dentro del compilado o la interpretación, un ejemplo es cuando queremos saber de qué tipo es una variable usando la función GetType() en C# o type() en Python, o cuando queremos saber la dirección en memoria de una variable o función al usar la función id(), es usar el código para obtener información del mismo código.
Paradigma de la programación declarativa, no la he usado y no sé dé que se trata, pero investigando, trata de en lugar que el programa funcione mediante instrucciones, esta funcione mediante órdenes de lo que deseo buscar o hacer, este paradigma es una combinación de la programación lógica y funcional, los primeros lenguajes en implementarlo fueron Prolog y Lisp
Paradigma lógico, se basa en la definición de relaciones lógicas y está representado por el lenguaje Prolog, no dice mas la Wikipedia, prácticamente no entendí.
Programación orientada a eventos, se basa en la ejecución de instrucciones basada en el resultado de eventos, generados por el propio programa o por el usuario. Simplemente es una instrucción que se ejecuta cuando el resultado de una acción o evento del sistema se ejecuta y el resultado de este desencadena otro evento y el resultado del siguiente en el siguiente evento y así sucesivamente.
Programación reactiva, es programación basada en mensajería básicamente, eventos que hablan y otros que escuchan y reaccionan según el mensaje, un ejemplo de esto son funciones asíncronas de envío de información y recepción de datos, donde el programa no queda estático esperando una respuesta.
Por último, la programación concurrente, que similar a la programación reactiva, en lugar de escuchar resultados en operaciones asíncronas ejecutadas en el mismo hilo del procesador, este hace uso de todos los núcleos he hilos del procesador, para al final recibir el resultado final en un hilo y exponerlo al usuario.
Un extra son los lenguajes de propósito específico, como puede ser el caso de SQL, que es un lenguaje solo y únicamente para el tratamiento de bases de datos, pero me atrevería a meter en este saco a todos los lenguajes de marcado como HTML, XML, YAML, Markdown, reStructuredText, LaTex, porque aunque no sirva para crear programas, tienen el propósito de crear documentación.
¿Qué es entonces un lenguaje multiparadigma?
Un lenguaje multiparadigma no es mas que un lenguaje que combina varios de los paradigmas mencionados arriba, no los junta todos, solo algunos cuantos, por ejemplo todos los lenguajes orientados a objetos que son la mayoría, pueden ser lenguajes funcionales, estructurados e imperativos y quizás extenderse a algún paradigma concurrente o de eventos mediante librerías.
En el caso de Python, es un lenguaje de propósito general que puede ser orientado a objetos, es imperativo, funcional y reflexivo, lo mismo aplica para PHP y Lisp, solo usa palabras reservadas de otros lenguajes, lo que permite al programador abordar distintos problemas usando distintos enfoques sin estar limitado a un solo paradigma.
Conclusión.
Casi todos los lenguajes modernos de hoy en día son multiparadigma, con un enfoque en uno y otro, casi todos se pueden extender a otros paradigmas mediante el uso de librerías, pero el rey a día de hoy es la programación orientada a objetos.
Este blog no terminó como esperaba, realmente tenía pensado mostrar el enfoque orientado a objetos dentro de Python, pero al final resulté hablando de todos los paradigmas. Igual en un futuro cercano pienso hacer el cuadro que clasifica los lenguajes en una tabla como comparativa.
Ahora si nos vemos en el próximo blog y esta vez con la orientación de objetos en Python. Bye.
Comments