Entendemos como paradigma a la creación y explicación de modelos en el caso de programación tenemos técnicas que con el paso del tiempo han creado distintos tipos de programaciones singulares por su forma de desarrollar aplicaciones, programas, etc. En este articulo conoceremos aquellos paradigmas:
1. Programación Imperativa
La programación Imperativa, en
contraposición a la programación declarativa, es un paradigma de programación
que describe la programación en términos del estado del programa y sentencias
que cambian dicho estado. Los programas imperativos son un conjunto de
instrucciones que le indican al computador cómo realizar una tarea.
La implementación de hardware de la
mayoría de computadores es imperativa; prácticamente todo el hardware de los
computadores está diseñado para ejecutar código de máquina, que es nativo al
computador, escrito en una forma imperativa. Esto se debe a que el hardware de los
computadores implementa el paradigma de las Máquinas de Turing. Desde esta
perspectiva de bajo nivel, el estilo del programa está definido por los
contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de
máquina nativo del computador (por ejemplo el lenguaje ensamblador).
Los lenguajes imperativos de alto nivel
usan variables y sentencias más complejas, pero aún siguen el mismo paradigma.
Las recetas y las listas de revisión de procesos, a pesar de no ser programas
de computadora, son también conceptos familiares similares en estilo a la
programación imperativa; donde ada paso es una instrucción.
Son aquellos cuyos valores son atómicos
y están formados por elementos en un caso especial.
Dentro de esta se encuentra:
- La programación orientada a objetos:
Está basada en el imperativo, pero encapsula elementos denominados objetos que
incluyen tanto variables como funciones. Está representado por C++ o el Java,
pero el más representativo sería el Smalltalk que está completamente orientado
a objetos
- Programación dinámica: Está definida
como el proceso de romper problemas en partes pequeñas para analizarlos y
resolverlos de forma más óptima, busca resolver problemas en O(n) sin usar por
tanto métodos recursivos. Este paradigma está más basado en el modo de realizar
los algoritmos, por lo que se puede usar con cualquier lenguaje imperativo.
2. Programación Declarativa
La Programación Declarativa, en
contraposición a la programación imperativa es un paradigma de programación que
está basado en el desarrollo de programas especificando o
"declarando" un conjunto de condiciones, proposiciones, afirmaciones,
restricciones, ecuaciones o transformaciones que describen el problema y
detallan su solución. La solución es obtenida mediante mecanismos internos de
control, sin especificar exactamente cómo encontrarla (tan sólo se le indica a
la computadora qué es lo que se desea obtener o qué es lo que se está
buscando). No existen asignaciones destructivas, y las variables son utilizadas
con transparencia referencial.
Dentro de esta se encuentra:
- Programación funcional: Basada en la
definición los predicados y es de corte más matemático, está representado por
Scheme (una variante de Lisp) o Haskell.
- Programación lógica: Basado en la
definición de relaciones lógicas, está representado por Prolog.
- Programación con restricciones:
Similar a la lógica usando ecuaciones. Casi todos los lenguajes son variantes
del Prolog.
3. Programación Multiparadigma
Un lenguaje de programación Multiparadigma es el que soporta más de un paradigma de programación. Según lo
describe Bjarne Stroustrup, permiten crear “programas usando más de un estilo
de programación”.
El objetivo en el diseño de estos
lenguajes es permitir a los programadores utilizar el mejor paradigma para cada
trabajo, admitiendo que ninguno resuelve todos los problemas de la forma más
fácil y eficiente posible.
Por ejemplo, lenguajes de programación
como C++, Genie, Delphi, Visual Basic o PHP, combinan el paradigma imperativo
con la orientación a objetos. Incluso existen lenguajes multiparadigma que
permiten la mezcla de forma natural, como en el caso de Oz, que tiene
subconjuntos (particularidad de los lenguajes lógicos), y otras características
propias de lenguajes de programación funcional y de orientación a objetos. Otro
ejemplo son los lenguajes como Scheme (paradigma funcional) o Prolog (paradigma
lógico), que cuentan con estructuras repetitivas, propias del paradigma
imperativo.
4. Lenguaje especifico de Dominio
En desarrollo de software e ingeniería
de dominio, un lenguaje específico del dominio (en inglés Domain Specific Language,
DSL), es un lenguaje de programación o especificación dedicado a resolver un
problema en particular, representar un problema específico y proveer una
técnica para solucionar una situación particular. El concepto no es nuevo pero
se ha vuelto más popular debido al aumento del uso de modelaje específico del
dominio.1
Ejemplos de lenguajes específicos del
lenguaje incluyen, Logo para niños, Verilog y VHSIC, R y S para estadísticas,
Mata para programación matricial, Mathematica y Máxima para matemáticas,
fórmulas de hojas de cálculo y macros, SQL para consultas a bases de datos
relacionales, Yacc para crear parseadores, expresiones regulares para crear
análisis léxico, Generic Eclipse Modeling System para crear lenguajes con el
objetivo de diagramar, Csound un lenguaje para síntesis digital, y los
lenguajes de entrada de GraphViz y GrGen, paquetes de software usados para
graficar y reescribir gráficas.
Lo opuesto es:
- Un lenguaje de programación de
propósito general, como por ejemplo C o Java.
- Un lenguaje de modelaje de propósito
general como UML.
Crear un lenguaje específico del dominio (con software que lo soporte)
vale la pena cuando permite que un tipo particular de problemas o soluciones
puedan ser expresadas más claramente que con otros lenguajes existentes, y el
tipo de problema en cuestión reaparece lo suficiente. La programación orientada
a lenguajes considera la creación de lenguajes específicos para expresar
problemas una parte estándar para el proceso de solucionar el problema.