Programación imperativa: resumen del paradigma de programación más antiguo

Se trate del desarrollo de una aplicación, de la programación de máquinas o del desarrollo de un software de empresa, antes de escribir la primera línea de código, el desarrollador debe decidir qué lenguaje de programación usar. La selección de los posibles lenguajes de programación es muy amplia. Sin embargo, cada uno de ellos se puede clasificar en uno de los dos paradigmas de programación: la programación imperativa y la programación declarativa. Los dos enfoques tienen sus ventajas y sus inconvenientes.

¿Por qué se caracteriza el lenguaje de programación imperativa? ¿Qué puntos débiles deben tener en cuenta los desarrolladores? En este artículo, responderemos a las dudas más importantes sobre el paradigma imperativo.

¿Qué es la programación imperativa?

La programación imperativa (del latín imperare = ordenar) es el paradigma de programación más antiguo. De acuerdo con este paradigma, un programa consiste en una secuencia claramente definida de instrucciones para un ordenador.

El código fuente de los lenguajes imperativos encadena instrucciones una detrás de otra que determinan lo que debe hacer el ordenador en cada momento para alcanzar un resultado deseado. Los valores utilizados en las variables se modifican durante la ejecución del programa. Para gestionar las instrucciones, se integran estructuras de control como bucles o estructuras anidadas en el código.

Los lenguajes de programación imperativa son muy concretos y trabajan cerca del sistema. De esta forma, el código es, por un lado, fácilmente comprensible, pero, por el otro, requiere muchas líneas de texto fuente para describir lo que en los lenguajes de la programación declarativa se consigue con solo una parte de las instrucciones.

Los lenguajes de programación imperativa más conocidos son:

  • Fortran
  • Java
  • Pascal
  • ALGOL
  • C
  • C#
  • C++
  • Ensambladores
  • BASIC
  • COBOL
  • Python
  • Ruby

Los distintos lenguajes de programación imperativa pueden clasificarse a su vez en tres estilos distintos de programación subordinados: el estructurado, el procedimental y el modular.

El estilo estructurado de programación amplía el principio imperativo central con las estructuras concretas de control: secuencias, selección e iteración. Esto se hace para mitigar o evitar por completo las instrucciones de salto que añaden una complejidad innecesaria al código imperativo.

El enfoque procedimental divide las tareas de las que se debe ocupar un programa en tareas parciales más pequeñas que se describen en el código por separado. De esta forma, se crean principios básicos de programación que también se pueden reutilizar en otros programas.

Un paso más allá, en el modelo de programación modular, cada uno de los componentes de programa se diseñan, desarrollan y prueban con total independencia los unos de los otros. No es hasta el final del proceso cuando los módulos se combinan para conformar el software real.

Programación imperativa y declarativa

Los lenguajes de programación imperativa se distinguen de los lenguajes declarativos en un aspecto básico: la programación imperativa se centra en el “cómo”, y la declarativa, en el “qué”.

¿Qué queremos decir con esto? Los lenguajes de programación imperativa son como unas instrucciones paso a paso (cómo) redactadas para el ordenador. Describen de forma explícita qué pasos deben llevarse a cabo y en qué secuencia para alcanzar finalmente la solución deseada. En la programación declarativa, en cambio, se describe directamente el resultado final deseado (el qué). Pongamos un ejemplo culinario para entenderlo mejor: los lenguajes imperativos proporcionan la receta, mientras que los declarativos, fotos del plato preparado.

En los lenguajes declarativos, el código fuente permanece muy abstracto en relación al procedimiento concreto. Para llegar a la solución, se utiliza un algoritmo que encuentra y utiliza automáticamente los métodos adecuados. Este procedimiento tiene numerosas ventajas: de esta forma, los programas no solo se pueden escribir considerablemente más rápido, sino que las aplicaciones se pueden optimizar también de forma muy sencilla, ya que, si en el futuro se desarrolla un nuevo método, el algoritmo puede acceder fácilmente al método nuevo gracias a la aplicación abstracta del código fuente.

Ejemplo de programación imperativa

Los lenguajes de programación imperativa se distinguen por su carácter instructivo y para ello normalmente requieren considerablemente más líneas de código para expresar lo que en el estilo declarativo se puede describir con menos instrucciones. En el siguiente ejemplo, se debe proporcionar una lista con nombres:

Programación imperativa (PHP):

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

Programación declarativa (PHP)

$nombres = array_values($listaParticipantes);

Ventajas e inconvenientes de los lenguajes de programación imperativa

Hoy en día se utilizan muchos lenguajes de programación que se basan en el paradigma de programación imperativa.

Por un lado, esto se debe a que este enfoque es la forma originaria de la programación. Por otro lado, el paradigma imperativo, a pesar de los modelos alternativos, todavía cuenta con ventajas prácticas.

Estos lenguajes son comparativamente más fáciles de aprender, ya que el código se lee como unas instrucciones paso a paso. Por esta razón, normalmente los programadores empiezan su formación con el aprendizaje de un lenguaje imperativo.

La buena legibilidad es un factor decisivo en el día a día laboral . Al fin y al cabo, el mantenimiento y la optimización de las aplicaciones no tienen por qué depender exclusivamente de una persona, sino que los puede llevar a cabo cualquier empleado, sin necesidad de que este haya escrito el código desde cero.

Desventaja de la programación procedimental: si se deben solucionar problemas más complejos, el código se extiende en poco tiempo. Si bien sigue siendo fácil de leer, se reduce la claridad.

Dado que, a diferencia de como ocurre en el estilo declarativo, la ejecución aquí no está claramente separada de la programación, se pueden producir efectos colaterales o errores no deseados si se hacen cambios a posteriori. Asimismo, también es más difícil implementar extensiones, a diferencia de como ocurre en el paradigma declarativo, en el que se pueden añadir de forma diferenciada mediante métodos.

Ventajas Desventajas
Fácilmente legible. El código se convierte rápidamente en demasiado amplio y difícil de abarcar.
Fácil de aprender en lo relativo a comportamientos. Mayor riesgo durante la edición.
Un modelo fácilmente comprensible para los principiantes (vía de solución). El mantenimiento bloquea el desarrollo de la aplicación, ya que la programación funciona estrechamente con el sistema.
Se pueden tener en cuenta características de casos especiales de la aplicación. La optimización y la ampliación son más difíciles.

En la práctica, hoy en día se utilizan principalmente formas mixtas de paradigmas, ya que los estilos de programación imperativa y declarativa conllevan ventajas y desventajas. No obstante, el estilo de programación declarativa, complementado con métodos imperativos, se utiliza cada vez más.