Da igual que se trate de la pro­gra­ma­ción de una apli­ca­ción, un software de IoT o un juego de ordenador: antes de que los de­sa­rro­lla­do­res escriban las primeras líneas de código, deben tomar una decisión fu­n­da­me­n­tal: ¿qué lenguaje de pro­gra­ma­ción van a utilizar? Existen diversos lenguajes a su di­s­po­si­ción, pero, si se co­n­te­m­plan con pe­r­s­pe­c­ti­va, todos se basan en dos pa­ra­di­g­mas de pro­gra­ma­ción fu­n­da­me­n­ta­les: la pro­gra­ma­ción de­cla­ra­ti­va y la pro­gra­ma­ción im­pe­ra­ti­va.

¿Qué es la pro­gra­ma­ción de­cla­ra­ti­va?

No hay consenso sobre la de­fi­ni­ción de este paradigma, pero todas las ex­pli­ca­cio­nes coinciden en algo: lo que destaca de los lenguajes de pro­gra­ma­ción de­cla­ra­ti­va es que siempre se describe el resultado final deseado, en lugar de mostrar todos los pasos de trabajo. Para alcanzar el objetivo, en la pro­gra­ma­ción de­cla­ra­ti­va se determina au­to­má­ti­ca­me­n­te la vía de solución. Esto funciona siempre y cuando las es­pe­ci­fi­ca­cio­nes del estado final se definan cla­ra­me­n­te y exista un pro­ce­di­mie­n­to de ejecución adecuado. Si se dan las dos co­n­di­cio­nes, la pro­gra­ma­ción de­cla­ra­ti­va es muy eficiente.

Como la pro­gra­ma­ción de­cla­ra­ti­va no determina el “cómo”, sino que funciona a un nivel de ab­s­tra­c­ción muy alto, este paradigma deja margen para la op­ti­mi­za­ción. Si se ha de­sa­rro­lla­do un pro­ce­di­mie­n­to de ejecución mejor, el algoritmo integrado lo encuentra y lo aplica. En este sentido, el paradigma está muy preparado para el futuro porque, al escribir el código, no es necesario de­te­r­mi­nar el pro­ce­di­mie­n­to según el cual se alcanza el resultado.

Los lenguajes de pro­gra­ma­ción de­cla­ra­ti­va más conocidos son:

  • Prolog
  • Lisp
  • Haskell
  • Miranda
  • Erlang
  • SQL (en un sentido amplio)

Los distintos lenguajes de­cla­ra­ti­vos se pueden su­b­di­vi­dir, a su vez, en dos pa­ra­di­g­mas, el de la pro­gra­ma­ción funcional y el de la pro­gra­ma­ción lógica.

Sin embargo, es habitual que en la práctica los límites se difuminen y que, a la hora de so­lu­cio­nar problemas, se apliquen tanto elementos de la pro­gra­ma­ción im­pe­ra­ti­va, con sus subtipos de pro­gra­ma­ción pro­ce­di­me­n­tal, modular y es­tru­c­tu­ra­da, como de la pro­gra­ma­ción de­cla­ra­ti­va.

Pro­gra­ma­ción de­cla­ra­ti­va e im­pe­ra­ti­va

El paradigma de pro­gra­ma­ción im­pe­ra­ti­va (paradigma orientado a in­s­tru­c­cio­nes) es el más antiguo de los dos pa­ra­di­g­mas fu­n­da­me­n­ta­les. A di­fe­re­n­cia de en la pro­gra­ma­ción de­cla­ra­ti­va, en este caso, el de­sa­rro­lla­dor determina con precisión en el código fuente los pasos que debe dar el ordenador para alcanzar el resultado. Se prioriza, pues, el “cómo” de la vía de solución. Este enfoque se puede encontrar, por ejemplo, en Java, Pascal o en C. Por el contrario, en la pro­gra­ma­ción de­cla­ra­ti­va se describe di­re­c­ta­me­n­te el “qué” de la solución.

Tomemos como ejemplo la co­n­s­tru­c­ción de muebles: mientras que la pro­gra­ma­ción im­pe­ra­ti­va ofrece las in­s­tru­c­cio­nes de montaje, la pro­gra­ma­ción de­cla­ra­ti­va ofrece una imagen del mueble ya montado como muestra.

En lugar de dejar abierta la ejecución con funciones, en la pro­gra­ma­ción im­pe­ra­ti­va existen variables que se modifican durante el tiempo de ejecución. Esto hace que el código sea más largo, pero también más fácil de entender que la forma abreviada y abstracta del lenguaje de­cla­ra­ti­vo.

Ejemplo de pro­gra­ma­ción de­cla­ra­ti­va

Un punto fuerte de la pro­gra­ma­ción de­cla­ra­ti­va es su capacidad para describir problemas de forma más corta y precisa que el lenguaje im­pe­ra­ti­vo.

Si se tiene que crear una lista con nombres, con la pro­gra­ma­ción de­cla­ra­ti­va se puede describir en PHP con solo una línea de código, como vemos aquí abajo, mientras que el pro­ce­di­mie­n­to im­pe­ra­ti­vo necesita cinco líneas.

Pro­gra­ma­ción im­pe­ra­ti­va:

$listaparticipantes = [1 => 'Peter', 2 => 'Hans', 3 => 'Sarah'];
$nombres = [];
foreach ($listaparticipantes as $id => $apellido) {
    $nombres[] = $apellido;
}

Pro­gra­ma­ción de­cla­ra­ti­va:

$nombres = array_values($listaparticipantes);

Ventajas e in­co­n­ve­nie­n­tes de los lenguajes de pro­gra­ma­ción de­cla­ra­ti­va

El estilo de pro­gra­ma­ción de­cla­ra­ti­va se utiliza hoy en día en una multitud de casos y, en ocasiones, en estilo puro. Sin embargo, el enfoque no es apropiado para todos los usos.

El código de­cla­ra­ti­vo destaca por su alto nivel de ab­s­tra­c­ción. Esto permite a los de­sa­rro­lla­do­res re­pre­se­n­tar programas complejos de forma co­m­pri­mi­da. Sin embargo, cuanto más extensa sea la ejecución, mayor será el riesgo de que el código se vuelva tan en­re­ve­sa­do que solo sea legible para el de­sa­rro­lla­dor que lo escribió. Para las empresas que quieren aplicar el ma­n­te­ni­mie­n­to y de­sa­rro­llo de las apli­ca­cio­nes con in­de­pe­n­de­n­cia de la persona que las de­sa­rro­lló, esta situación puede suponer un peligro. En estos casos, los de­sa­rro­lla­do­res externos deberán es­fo­r­zar­se por leer el código de­cla­ra­ti­vo hasta que hayan entendido la es­tru­c­tu­ra y hayan resuelto los problemas.

No obstante, el nivel de ab­s­tra­c­ción de la pro­gra­ma­ción de­cla­ra­ti­va también ofrece ventajas. Siempre que la ejecución se encuentre cla­ra­me­n­te separada del sistema mediante un algoritmo, el ma­n­te­ni­mie­n­to se podrá realizar con in­de­pe­n­de­n­cia del de­sa­rro­llo de la apli­ca­ción. Las averías en el fu­n­cio­na­mie­n­to diario se reducen al mínimo. Al mismo tiempo, la op­ti­mi­za­ción resulta más fácil, ya que el algoritmo utilizado es su­fi­cie­n­te­me­n­te abierto como para acceder a nuevos métodos. La de­s­ve­n­ta­ja del uso del algoritmo es que, de­pe­n­die­n­do de de­te­r­mi­na­das ca­ra­c­te­rí­s­ti­cas de los casos concretos de apli­ca­ción, una solución típica de este tipo a menudo resulta in­su­fi­cie­n­te.

Aunque de por sí no puede co­n­si­de­rar­se una de­s­ve­n­ta­ja, el modelo de la pro­gra­ma­ción de­cla­ra­ti­va sí que presenta un desafío. Pensar en estados de solución es contrario al pe­n­sa­mie­n­to natural del ser humano. Las personas pensamos en procesos que llevan a un objetivo, en lugar de partir de un objetivo e ir hacia atrás. En este sentido, se requiere de los de­sa­rro­lla­do­res un cambio de pe­r­s­pe­c­ti­va y una fa­mi­lia­ri­za­ción que puede ra­le­n­ti­zar, en un primer momento, las so­lu­cio­nes de los problemas. Sin embargo, una vez que se haya entrenado esta nueva forma de pensar, el enfoque de­cla­ra­ti­vo puede de­sa­rro­llar sus puntos fuertes.

Además, partir del de­sa­rro­llo de la de­s­cri­p­ción del problema tiene la ventaja de que los equipos pueden es­que­ma­ti­zar realmente rápido los modelos de so­lu­cio­nes. Por último, la pro­gra­ma­ción concreta de la ejecución puede rea­li­zar­se en un paso posterior. Para ello, el estilo de­cla­ra­ti­vo de pro­to­t­y­pi­ng en el de­sa­rro­llo ágil de software es muy propicio.

Ventajas De­s­ve­n­ta­jas
Código más corto y eficiente. En parte, difícil de co­m­pre­n­der para personas ajenas.
Rea­li­za­ble con métodos no conocidos en el momento de la pro­gra­ma­ción. Basado en una forma de pensar no habitual en las personas (estado de solución).
Op­ti­mi­za­ción sencilla, ya que la ejecución se gestiona mediante un algoritmo. Las ca­ra­c­te­rí­s­ti­cas de casos de apli­ca­ción in­di­vi­dua­les se pueden co­n­si­de­rar en la pro­gra­ma­ción, pero úni­ca­me­n­te de forma compleja.
Es posible el ma­n­te­ni­mie­n­to in­de­pe­n­die­n­te del de­sa­rro­llo de la apli­ca­ción.

En la práctica, hoy en día se utilizan pri­n­ci­pa­l­me­n­te formas mixtas de pa­ra­di­g­mas y los lenguajes de pro­gra­ma­ción de­cla­ra­ti­va se co­m­ple­me­n­tan con métodos im­pe­ra­ti­vos. Sin embargo, estas fórmulas son más propensas a contener errores y pueden pe­r­ju­di­car la le­gi­bi­li­dad del código.

Ir al menú principal