|
A finales de los años 60 se inició una pequeña revolución en el mundillo de la programación que daría paso a la programación estructurada.
En aquella época, se alzaron muchas voces en contra de la que hoy conocemos como "programación desestructurada". Por aquel entonces no creo que le hubieran puesto nombre. Por lo visto, cada uno programaba como buenamente podía, sin demasiado orden ni criterio, y principalmente, la programación estaba llena de saltos incondicionales (el infame goto) que hacían muy muy difícil sacar conclusiones acerca de los algoritmos, como por ejemplo, simplemente saber si funcionaban correctamente. Una de esas voces fue Edsger Dijkstra, que con su conocido artículo del 68 Go To Statement Considered Harmful (La sentencia Go To se considera dañina) arremetía contra los saltos incondicionales, pero no fue el único... también lo hicieron otros nombres como Robert W. Floyd o Harlan D. Mills
El principio de todo aquello, que culminó con la programación estructurada que nos ha llegado hasta hoy empezó con la publicación en 1966 del conocido como teorema de la estructura o de Böhm-Jacopini en honor de Corrado Böhm y Giuseppe Jacopini.
Básicamente, este teorema nos dice que:
Todo algoritmo propio puede ser expresado en términos de sólo tres tipos de estructura: secuencial, condicional y repetitiva.
Un algoritmo propio es aquel que nos dá unas ciertas garantías de calidad en su construcción. El teorema viene a decir que todo algoritmo bien construido se puede expresar siempre sólo con bloques secuenciales de instrucciones, condiciones y bucles, sin necesidad de recurrir a saltos incondicionales. Entendemos como algoritmo propio aquel que cumple estas condiciones: -Tiene un único punto de entrada y un único punto de salida. -Todas las sentencias son alcanzables, es decir, no contiene código muerto, que no se ejecutará nunca. -No hay bucles infinitos. Todos los bucles terminan en un número finito de pasos. -No hay ambigüedades: cada sentencia tiene una única interpretación. -Todos los posibles caminos llevan desde el punto de entrada al de salida. -El algoritmo acaba tras un número finito de pasos. -El algoritmo debe producir al menos una salida o un efecto. -Todas las sentencias del algoritmo deben poder realizarse de manera precisa en un tiempo finito. Si un algoritmo cumple esas condiciones, entonces puede expresarse utilizando sólo estros tres tipos de estructura: -Secuencial: Un bloque de sentencias que se ejecutan una tras otra. Ejemplo... el bloque {...} de C y Java, o el bloque begin...end de Pascal y Delphi. -Condicional: Un bloque de sentencias que se ejecutan sólo si se cumple una condición: el if-else y el switch. -Repetitiva. Un bloque que se ejecute varias veces en función de una condición: bucles, como while, do-while, repeat-until, for y foreach.
Al quedar demostrado que los saltos incondicionales (gotos y similares) no eran necesarios, la programación estructurada quedó implantada de facto en el sector. Para saber más: -El teorema de la estructura en wikipedia (en inglés) |