ScholarGate
Asistente

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.

Encontrar tema con PaperMindPróximamenteFind papers & topics
Tools & resources
Descargar diapositivas
Learn & explore
VídeoPróximamente

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.

Methods for this concept

Related concepts