Programación Estructurada

En este aoartado, nos adentraremos en los principios fundamentales de la programación y, al mismo tiempo, iremos aprendiendo sintaxis de los dos principales lenguajes de la plataforma .NET.

MEJORAR EL CÓDIGO

En la primera entrega, vimos que un programa es la implementación de un algoritmo determinado, es decir, una secuencia de pasos o instrucciones, mediante un lenguaje de programación. Cuando escribimos un programa, es normal que necesitemos alterar la secuencia de instrucciones siguiendo determinadas pautas. Si recordamos el algoritmo que analizamos en el capítulo anterior, podemos ver que en cada vuelta, la instrucción por ejecutar depende de si A es mayor que B, o B es mayor que A. En los primeros lenguajes de programación (como el BASIC original), la única forma que existía de variar las instrucciones por ejecutar según una condición era mediante un salto a otra parte del programa (generalmente, a otra posición de memoria u otro número de línea). Es decir, debíamos evaluar la condición y, dependiendo de si ésta era verdadera o falsa podíamos seguir en la línea de abajo o hacer que la próxima instrucción por ejecutar fuera diferente, ubicada en otra parte del programa.

Por ejemplo, para resolver el algoritmo de Euclides usando saltos, deberíamos escribir algo así (con pseudocódigo):

Si A <= 0 Ir a línea 7
Si A > 0 Ir a línea 5
B := B – A
Ir a línea 1
A := A – B
Ir a línea 1
Devolver A

Esta implementación tiene dos grandes problemas. El primero es que su escritura se vuelve un poco dificultosa, porque hay que conocer los números de línea. Por ejemplo, al escribir la línea 1, ya hay que saber que vamos a saltar a la línea 7. Si bien esto podría solucionarse usando números de línea que vayan, por ejemplo, de 10 en 10 y hacer los saltos a números más bien lejanos, a medida que necesitemos modificar el algoritmo y escribir más líneas de código (incluso entre dos líneas ya existentes), los números disponibles se irían acercando más y más, y podría llegar el momento en que necesitáramos renumerar las líneas para tener más espacio. El segundo problema reside en la poca claridad del código. Para alguien que lo lee por primera vez, puede resultar extremadamente difícil entender.

Dados los constantes saltos hacia atrás y hacia adelante a través de las instrucciones del programa, este tipo de código inevitablemente enredado se conoce como código spaghetti, y la instrucción más famosa para hacer saltos de línea es GOTO (del inglés go to, ir a).

HACIA LA PROGRAMACIÓN ESTRUCTURADA

Con el paso del tiempo, los programadores vieron que el código spaghetti resultaba muy difícil de mantener, ya sea para agregar una nueva característica al programa o para corregir un error. Así, en la década del 60, un científico de los Países Bajos, Edsger Dijkstra, formuló un teorema en el que demostró que cualquier programa informático puede escribirse usando sólo tres tipos de instrucciones básicas: la secuencia, la evaluación de condiciones y la repetición o bucle de instrucciones, y sin utilizar instrucciones GOTO. Este teorema, conocido como el Teorema de Dijkstra, sentó las bases de lo que hoy conocemos como programación estructurada y de una gran familia de lenguajes de programación basados en este concepto.

Al escribir un programa utilizando las tres estructuras propuestas por Dijkstra,  se obtienen programas mucho más claros, fáciles de entender y de mantener ya que, en todo momento, la lógica está a la vista, y resulta fácil encontrar cuál es la siguiente instrucción por ejecutar.


En esta figura, vemos las tres estructuras de control propuestas por Dijkstra en el algoritmo de Euclides.