Paradigma de programación declarativo

6 minute read

Published:

Este es un posteo sobre la programación declarativa dentro de los paradigmas de programación.

Paradigma de programación declarativo

Los paradigmas de programación son un conjunto perfectamente definido de conceptos, patrones, y métodos para estandarizar y construir algoritmos computacionales; es decir, proporcionan una metodología para resolver un problema desde las ciencias de la computación

Existen dos grandes clasificaciones: paradigma imperativo y paradigma declarativo.

El paradigma imperativo consiste en un método intuitivo y tiene como origen la estructura de pensamiento que desarrolló la computación en sus primeros años; en específico la arquitectura Von Newmann en la que, a grandes rasgos, cada instrucción en el código es ejecutada de forma procedural o secuencial para lograr la tarea programada previamente almacenada como código en la memoria junto a los datos en un lenguaje máquina. Dentro de esta clasificación se encuentran paradigmas más específicos como el paradigma estructural, paradigma modular, paradigma basado en objetos y, el más famoso, el paradigma orientado a objetos.

El paradigma declarativo es un conjunto de reglas o proposiciones definidas con base en un problema, en el que cada sentencia de entrada aplica estas proposiciones para obtener un resultado. Dentro del paradigma declarativo se encuentran 2 más: el funcional y el lógico y la forma de organizar las reglas y sus aplicaciones o relaciones permiten distinguir uno del otro.

El paradigma funcional describe un problema como un conjunto de funciones matemáticas (cada una con dominio y rango definidos) que interactúan y se combinan con operaciones como composiciones, condicionales y recursión [Allen B. Tucker, p. 361].

El programa desarrollado con este paradigma es una función compuesta por funciones simples, de manera que una función llama a otra. Matemáticamente, el rango de una función es el dominio de aquella que solicitó dicha información; entonces, existe un mapeo entre entradas y salidas de funciones [Watt David A. p 230].

Con base en estas ideas, el algoritmo no almacena información en la memoria para guardar el estado de una variable, porque únicamente mapea valores de entrada a salida. A esta característica se le conoce como “transparencia referencial”. A pesar de esta ausencia de estado, en el paradigma funcional la posibilidad de aplicar funciones de orden alto y conceptos de computación como la “función perezosa”, permiten desarrollar soluciones a problemas que empatan con la metodología de este paradigma [Allen B. Tucker, p. 361].

Además, en algunos casos es posible combinar con algunas ideas del paradigma imperativo para crear un lenguaje funcional híbrido, destacando los lenguajes funcionales puros, donde todo está programado únicamente con la metodología de paradigma funcional [Watt David A. p 253].

Los fundamentos del paradigma funcional se encuentran en el trabajo de Church en 1930 sobre el cálculo lambda, además de las necesidades de metodología en las investigaciones de inteligencia artificial, computación simbólica, sistema basado en reglas y procesamiento natural del lenguaje [Allen B. Tucker, p. 361].

Algunos ejemplos de lenguaje de programación funcionales son: • Haskell • Lisp • Scheme • Rust • Scala

Por otra parte, el paradigma lógico permite modelar un problema a partir de la declaración de la posible salida después de ejecutar el programa, en lugar de declarar explícitamente la ejecución. Es decir, se programan los objetivos en lugar del algoritmo detallado para lograr el mismo objetivo

Los lenguajes lógicos están basados en reglas, donde la interpretación de las declaraciones lógicas crea un conjunto de soluciones posibles al problema especificado. Cada una de las reglas tiene como base una lógica matemática [Allen B. Tucker, p. 413].

Los programas lógicos son un conjunto formulado para un problema específico. Se inicia con la definición de sintaxis, utilizando expresiones lógicas de primer orden. Posteriormente, se construyen funciones y argumentos o predicados de mayor orden tomando este dominio de expresiones lógicas como base. El trabajo de cómputo consiste en probar una afirmación con base en la lógica construida [Gabbrielli Maurizio, Simone Martin p. 374] [Watt David A. p 253].

Una de las características del paradigma es proveer una forma natural de la expresiones no deterministas, muy apropiado para ciertos tipos de problemas. Otra característica es la estrategia de búsqueda llamada “Backtracking” sobre el espacio de sentencias o en una base de datos.

El paradigma lógico ha sido utilizado en áreas como modelaje de sistemas expertos, bases de datos, procesamiento natural del lenguaje o demostración automática de teoremas, que utilizan lenguajes como Structured Query Language (SQL), Prolog [Allen B. Tucker, p. 413].

En resumen, el paradigma funcional está diseñado con funciones e implementa un mapeo entre espacios, mientras que el paradigma lógico está diseñado con relaciones de expresiones lógicas. La programación lógica es considerada de mayor nivel que el paradigma funcional donde se evalúan funciones y de mayor nivel que el paradigma imperativo que modifica los estados de variables durante la ejecución del programa con tareas secuenciales [Gabbrielli Maurizio, Simone Martin p. 333] [Watt David A. p 230].

Considerando los dos grandes paradigmas: declarativo e imperativo, ambos tienen ventajas sobre el otro porque todos los paradigmas han surgido a través de la búsqueda de cómo resolver problemas; está claro que, las ventajas de uno serán las desventajas de otro. Por ejemplo, las programaciones funcional o lógica son capaces de resolver problemas de alto nivel con una complejidad alta; sin embargo, no todos los problemas pueden adaptarse a este paradigma. En el caso de problemas más sencillos o quizás, más orientado a una realidad humana, el paradigma imperativo es el que mejor se adapta debido a la secuencia lógica que implementa.

Dentro de la implementación de cada paradigma se encuentran aspectos como el aprendizaje del lenguaje de programación que este utiliza; el imperativo es más sencillo porque es más cercano a la realidad, mientras que para el declarativo es necesario contar con fundamentos lógicos y matemáticos.

Por otra parte, el código en ambos paradigmas es desarrollado de forma diferente, además de su reproducibilidad, escalabilidad, mantenimiento y depuración. En este aspecto, el paradigma declarativo tiene ciertas ventajas sobre el paradigma imperativo.

Los paradigmas proporcionan una base para resolver problemas computacionales. Existen distintos tipos de paradigmas debido a la amplitud de las necesidades que deben ser resueltas; es por esta razón, que la elección del paradigma y el lenguaje dependerá del programador y del problema a resolver.

Referencias

1) Tucker Allen B and Robert E Noonan. 2007. Programming Languages :Principles and Paradigms. 2nd ed. New York: McGraw-Hill Higher Education. 2) Gabbrielli Maurizio. 2010. Programming Languages : Principles and Paradigms. 1st ed. London: Springer. 3) Watt David A. 1990. Programming Language Concepts and Paradigms. New York: Prentice Hall.