¿Qué es un paradigma de Programación?

Paradigma debe ser concebido como un conjunto de métodos, reglas y generalizaciones utilizadas conjuntamente por aquellos entrenados para realizar el trabajo científico de investigación… Los paradigmas de programación nos indican las diversas formas que, a lo largo de la evolución de los lenguajes, han sido aceptadas como estilos para programar y para resolver los problemas por medio de una computadora. [1]

Clasificación por paradigmas de programación

Existen diversas clasificaciones de paradigmas. Una de las clasificaciones es la siguiente [2]:

Paradigmas
Clasificación de Paradigmas de Programación

Paradigma Imperativo

Describe la programación como una secuencia instrucciones o comandos que cambian el estado de un programa.

Paradigma Estructurado

La programación se divide en bloques (procedimientos y funciones) que pueden o no comunicarse entre sí. Además la programación se controla con secuencia, selección e iteración. Permite reutilizar código programado y otorga una mejor compresión de la programación.

Paradigma Orientado a Objetos

Está basado en la idea de encapsular estado y operaciones en objetos. En general, la programación se resuelve comunicando dichos objetos a través de mensajes (programación orientada a mensajes). Se puede incluir -aunque no formalmente- dentro de este paradigma, el paradigma basado en objetos, que además posee herencia y subtipos entre objetos. Ej.:
Simula, Smalltalk, C++, Java, C# .NET
Su principal ventaja es la reutilización de códigos y su facilidad para pensar soluciones a determinados problemas.

Paradigma Declarativo

No se basa en el cómo se hace algo (cómo se logra un objetivo paso a paso), sino que describe (declara) cómo es algo. En otras palabras, se enfoca en describir las propiedades de la solución buscada, dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solución. La solución es hallada mediante mecanismos internos de inferencia de información a partir de la descripción del problema en sí [3].

Paradigma Funcional

Este paradigma concibe a la computación como la evaluación de funciones matemáticas y evita declarar y cambiar datos. En otras palabras, hace hincapié en la aplicación de las funciones y composición entre ellas, más que en los cambios de estados y la ejecución secuencial de comandos (como lo hace el paradigma procedimental). Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones. Ej.: Haskell, Lisp, Scala.

El uso de este paradigma se da principalmente en las telecomunicaciones, donde la tolerancia de fallos es un factor importante. Por ejemplo Whatsapp, utiliza Erlang como su lenguaje para el backend, debido a su escalabilidad.

Paradigma Lógico

Se basa en la definición de reglas lógicas para luego, a través de un motor de inferencias lógicas, responder preguntas planteadas al sistema y así resolver los problemas. Ej.: prolog.

Otros paradigmas

Otros paradigmas y subparadigmas son: paradigma orientado al sujeto, paradigma reflectante, programación basada en reglas, paradigma basado en restricciones, programación basada en prototipos, paradigma orientado a aspectos, etc.

Tipos de Paradigmas
Tipos de Paradigmas de Programación

Ejemplos

Podemos determinar algunos aspectos específicos de cada paradigma con un algoritmo para determinar el Máximo Común Divisor:

fortran777
Fortran 777: Imperativo, procedural, no estructurado
pascal
Pascal: Imperativo, procedural, estructurado

Lenguajes funcionales y lógicos

schemehaskell

prologReferencias

[1] http://www.iqcelaya.itc.mx/~vicente/Programacion/Paradigmas.pdf

[2] http://labsys.frc.utn.edu.ar/ppr-2009/Unidad%20I%20-%20POO%20Avanzada/Apunte/Unidad%20I%20-%20POO%20Avanzada.pdf

[3] http://www.genbetadev.com/paradigmas-de-programacion/diferencias-entre-paradigmas-de-programacion