Paradigmas de programación I: Clasificación principal

Publicado el 09 febrero 2014 por José José Molino Ortega @BlogLinceus

Muchos de los que hemos indagado de manera autodidacta en temas de programación, nos hemos encontrado con algunos conceptos que pueden ser difíciles de asimilar, es el caso por ejemplo del concepto de la programación orientada a objetos (POO).
Es por eso por lo que hemos decidido que sería interesante, desglosar teóricamente, los conceptos primariós acerca de los paradigmas de programación, entre los cuáles, se encuentra ésta filosofía que a más de uno, hasta su asimilación le cuesta implementar durante el desarrollo de software.
Antes de nada, conviene aclarar, a qué nos estamos refiriendo exactamente cuando hablamos de un paradigma en el campo de la programación, y para quitar hierro al asunto cabe destacar que éstos tan solo se han establecido a base de lo que en comunidad desarrolladora, se cree que es la mejor clasificación y definición de los mismos hasta la fecha y que, ante todo, se centra en resolver uno o varios problemas en éste sector de la informática.


A pesar de la enorme cantidad de paradigmas conocidos, el mas ampliamente usado hoy en día es definitivamente el de programación orientada a objetos, a pesar de ello, en ésta entrada hablaremos de varios y muy conocidos paradigmas de programación.

Cabe destacar el hecho de que algunos lenguajes de programación, soportan por su naturaleza y diseño lógico, varios paradigmas, por ejemplo C++ el cual admite POO y programación puramente estructurada, por supuesto, es el programador quien decide a qué paradigma o metodología ceñirse, como lo es de decidir que lenguaje de programación utilizar.

Relación de algunos lenguajes de programación con paradigmas soportados:

Python y Ruby:
Imperativo, orientado a objetos, reflexivo y funcional
C++:
Imperativo, orientado a objetos, funcional y genérico
C#:
Imperativo, orientado a objetos, funcional (lambda), reflexivo y genéricoScala:
Imperativo, orientado a objetos, funcional, genérico y concurrenteJavaScript:

Imperativo, orientado a objetos (prototipos) y funcional
Java:
Imperativo, orientado a objetos, reflexivo y genérico

Erlang:
Funcional, concurrente y distribuido
Perl:
Imperativo, orientado a objetos y funcional
PHP:
Imperativo, orientado a objetos, funcional y reflexivo

Paradigmas:


Programación Imperativa:

Éste paradigma se centra en la definición de sentencias capaces de cambiar el estado de un programa, siendo además, en muchísimos aspectos la programación más acorde con el funcionamiento de la propia CPU, por su simple funcionamiento.

El paradigma plantea las posibles soluciones de un problema mediante la especificación d euna serie de acciones ordenadas de manera secuencial a trabes de uno o más procedimientos, dichos procedimientos son llamados subrutinas o funciones.
En ésta categoría coexisten:
Programación estructurada
Programación modular
Programación orientada a objetos.

Programación Declarativa:

En inversa a la programación imperativa existe la declarativa, en la que se opera de manera puramente lógica para resolver un problema sin especificar flujo de control alguno, por lo que se prescinde de definir algoritmos para la solución del problema, sustituyéndolos por una declaración directa de la solución en lugar de datar el proceso para llegar hasta ella.

En otras palabras, en éste paradigma, prescindimos del procedimiento para llegar a la solución, en su lugar las expresiones son sustituidas por valores de forma dinámica y la semántica del código permanece inamovible durante el proceso.

Éste paradigma engloba:

Programación funcional
Programación lógica
Programación restringida

Hasta aquí la primera clase sobre paradigmas, esperamos volver pronto con más acerca de cada uno de los paradigmas contenidos en éstas dos principales ramas.