Paradigmas del Lenguaje
Los paradigmas de programación son los estilos fundamentales que organizan cómo se expresa la computación, desde la mutación de estado imperativa hasta los modelos funcionales, lógicos y declarativos.
Definition
Un paradigma de programación es un conjunto coherente de conceptos y principios de estructuración para organizar la computación dentro de un lenguaje, definiendo cuáles son las unidades básicas de un programa (sentencias, expresiones, objetos, relaciones) y cómo se componen.
Scope
Esta área cubre los principales paradigmas de los lenguajes de programación y los modelos computacionales que los sustentan: la programación imperativa y orientada a objetos construida sobre el estado mutable y el paso de mensajes; la programación funcional construida sobre la evaluación de expresiones y funciones de orden superior; la programación lógica y de restricciones construida sobre relaciones y búsqueda; y la metaprogramación, donde los programas manipulan programas. Aborda cómo los paradigmas dan forma al diseño del lenguaje, las compensaciones que encarnan y cómo los lenguajes modernos multiparadigma los combinan.
Sub-topics
Core questions
- ¿Qué distingue un paradigma de otro, y estas distinciones son nítidas o cuestiones de énfasis?
- ¿Cómo afectan los paradigmas la corrección, modularidad y razonamiento del programa?
- ¿Se pueden unificar los estilos imperativo y declarativo, y qué se gana o se pierde al mezclarlos?
- ¿Cómo influye el modelo computacional subyacente (máquina de von Neumann, cálculo lambda, resolución) en un paradigma?
Key theories
- La programación funcional como álgebra de programas
- Backus argumentó que la programación funcional, basada en combinadores, libera a los lenguajes del cuello de botella de von Neumann al proporcionar a los programas un álgebra de leyes ecuacionales para el razonamiento y la transformación.
- Algoritmo = Lógica + Control
- La separación de Kowalski de la especificación lógica de un problema de la estrategia de control utilizada para resolverlo fundamenta el paradigma declarativo/lógico y aclara lo que lo distingue del código procedimental.
- Marco de lenguaje kernel multiparadigma
- Van Roy y Haridi presentan los paradigmas como extensiones incrementales de un pequeño lenguaje kernel, mostrando cómo se pueden añadir o eliminar conceptos como el estado, la concurrencia y la pereza para recuperar cada paradigma.
Clinical relevance
La elección del paradigma tiene consecuencias prácticas para la ingeniería de software: los estilos funcionales y declarativos ayudan al razonamiento ecuacional, la capacidad de prueba y la paralelización, mientras que la descomposición orientada a objetos soporta la modularidad a gran escala. Los lenguajes modernos mezclan cada vez más paradigmas, por lo que comprender sus compensaciones informa la selección del lenguaje y el diseño idiomático.
History
La programación imperativa desciende de la arquitectura de von Neumann de programa almacenado y de lenguajes tempranos como Fortran y Algol. Lisp (1958) introdujo ideas funcionales arraigadas en el cálculo lambda. La década de 1970 vio la programación lógica (Prolog) y el surgimiento de la programación estructurada y luego orientada a objetos (Simula, Smalltalk). La conferencia del Premio Turing de Backus en 1977 cristalizó la crítica funcional al estilo imperativo, y las décadas posteriores produjeron lenguajes cada vez más multiparadigma.
Debates
- Imperativo versus declarativo como principio organizador principal
- Un debate de larga data sopesa la inmediatez y el control del rendimiento del código imperativo frente a las ventajas de razonamiento y composabilidad de los estilos declarativos y funcionales; la mayoría de los lenguajes modernos lo resuelven al soportar ambos.
Key figures
- John Backus
- Robert Kowalski
- Peter Van Roy
- Harold Abelson
- Gerald Jay Sussman
Related topics
Seminal works
- backus1978
- kowalski1979
- vanroy2004
- abelson1996
Frequently asked questions
- ¿Es la programación orientada a objetos un paradigma separado de la programación imperativa?
- La programación orientada a objetos se suele tratar como una disciplina de estructuración superpuesta al paradigma imperativo: organiza el estado mutable en objetos con comportamiento encapsulado, pero aún se basa en el cambio de estado y la secuenciación.
- ¿Son los paradigmas mutuamente excluyentes?
- No. Muchos lenguajes ampliamente utilizados son multiparadigma, combinando características funcionales, orientadas a objetos e imperativas para que los programadores puedan elegir el estilo más adecuado para cada tarea.