Programación Programación estructurada por paradigmas

Esta serie de artículos presentará a su vez los tres paradigmas principales de programación, que son programación estructurada, programación orientada a objetos y programación funcional. Este artículo se centra en la programación estructurada.

programación no estructurada

La programación no estructurada es el patrón de programación más antiguo de la historia capaz de crear algoritmos completos de Turing. Los lenguajes de programación no estructurados incluyen lenguajes tanto de alto como de bajo nivel. Algunos lenguajes comúnmente identificados como no estructurados incluyen JOSS, FOCAL, TELCOMP, lenguaje ensamblador, procesamiento por lotes MS-DOS y las primeras versiones de BASIC, Fortran, COBOL y MUMPS.

El aspecto más criticado de la programación no estructurada es que produce código que es difícil de leer (llamado en broma código espagueti). A veces se considera deficiente para crear proyectos grandes. Sin embargo, debido a que brinda a los programadores mucha libertad, se ha elogiado por ser como Mozart componiendo música.

Característica 1: número de línea e IR A

Un programa que utiliza un lenguaje no estructurado a menudo contiene una secuencia de comandos o declaraciones, cada una de las cuales ocupa normalmente una línea. Cada línea está numerada o etiquetada para que se pueda ejecutar cualquier línea del programa.

En lenguajes de programación no estructurados como BASIC, los números de línea también se utilizan para indicar el destino de las instrucciones de bifurcación. Por ejemplo:

10 IF X = 42 GOTO 40 '最前面的"10"是行号,X=42时会跳到行号=40的程式码,否则会跳到下一行
20 X = X + 1
30 GOTO 10'跳到行号=10的程式码
40 PRINT "X是42!"'输出"X是42!"

La ramificación estilo Goto generalmente se considera un estilo de programación deficiente porque tiende a formar código espagueti complejo y difícil de entender.

Los lenguajes como C y C++ aún conservan la instrucción GOTO, pero el destino de GOTO se ha marcado con un marcador. Por lo general, no se recomienda el uso de este tipo de instrucción GOTO. Solo se recomienda su uso en algunas situaciones, como saltar de múltiples bucles:

while(1) {
  while (1) {
    if (done) {
      goto freedom;
    }
  }
}
freedom:

El programa anterior se puede comparar con el siguiente programa que no utiliza GOTO. El siguiente programa debe juzgarse en función del valor de la variable realizada en diferentes posiciones. En comparación, el programa anterior es más legible. También demuestra que las declaraciones Goto se pueden reescribir como declaraciones no Goto.

while(1) {
  while (1) {
    if (done) {
      break;
    }
  }
  if (done) {
    break;
  }
}

Además de C/C++, algunas personas señalarán que la declaración de interrupción con nombre o excepción en Java es muy similar a goto. De hecho, estas estructuras gramaticales no son en absoluto iguales a las declaraciones goto completamente ilimitadas en lenguajes de programación más antiguos como FORTRAN y COBOL. Incluso aquellos lenguajes de programación que aún admiten la palabra clave goto generalmente limitan el objetivo de goto para que no exceda el alcance de la función actual.

Característica 2: Código de espagueti

El código espagueti es un tipo de antipatrón en ingeniería de software. Se refiere al flujo de control del código fuente que es complejo, confuso y difícil de entender, especialmente cuando se utilizan muchos GOTO, excepciones, subprocesos u otras ramas no organizadas . La razón de su nombre es que el flujo del programa es tan retorcido y enredado como un plato de fideos.

Por un lado, es muy fácil escribir código espagueti cuando se utilizan varios lenguajes ensambladores (y sus lenguajes de máquina subyacentes) o scripts. La razón es que estos lenguajes de bajo nivel rara vez tienen mecanismos que puedan corresponder a bucles FOR o WHILE.

Por otro lado, incluso en los lenguajes de alto nivel más populares ahora, es fácil formar código tipo espagueti debido a programadores sin experiencia o habilidad, o programas complejos que se han modificado con frecuencia durante mucho tiempo.

for i in [1,2,3]:
    def printMa():
        print ('Ma')
    x = True
    if x == True:
     printMa()
    y = False
    if y == True:
     printMa()
    else:
     print("Ma")
    y = True
    if x and y == True:
        if i == 3:
            print('Mia let me GO !')
        else:
           print ('Mia')

Código espagueti para lenguajes de alto nivel

programación estructurada

Programación estructurada, un paradigma de programación. Utiliza subrutinas, estructuras de bloques, bucles for, bucles while y otras estructuras para reemplazar el tradicional goto. La esperanza es que esto mejore la claridad, la calidad y el tiempo de desarrollo de los programas informáticos y evite escribir código espagueti.

alguna historia interesante

Dijkstra llegó pronto a la conclusión de que la programación es una actividad difícil. Un programa, por complejo que sea, contiene mucha información detallada. Sin la ayuda de herramientas, esta información detallada está mucho más allá de la capacidad cognitiva de un programador. En un programa, incluso un pequeño error en un detalle puede hacer que todo el programa salga mal.

La solución propuesta por Dijkstra es utilizar la derivación matemática. Su idea es aprovechar los axiomas (Postulado), teorema (Teorema), corolario (Corolario) y lema (Lema) en matemáticas para formar una estructura euclidiana. Dijkstra creía que los programadores podían razonar sobre sus programas como los matemáticos.

sistema axiomático

El sistema axiomático fue establecido originalmente por Euclides con el propósito de establecer un sistema teórico riguroso mediante un proceso estandarizado. En pocas palabras, un sistema axiomático consiste en seleccionar un conjunto de axiomas básicos y evidentes, y luego utilizar estos axiomas como piedra angular para probar y derivar otros teoremas clave. A partir de esto, se puede formar un sistema teórico matemático completo, como la teoría de la geometría euclidiana establecida por Euclides. El sistema axiomático tiene tres propiedades importantes: autoconsistencia, independencia y completitud. Un sistema axiomático con tales propiedades es un buen sistema axiomático.

En otras palabras, el programador puede unir algunas construcciones probadas con código y, al demostrarse a sí mismo la corrección del código adicional, puede deducir la corrección de todo el programa. Por supuesto, antes de eso, primero debemos mostrar cómo derivar y demostrar la exactitud de un algoritmo simple, lo que en sí mismo es una tarea muy desafiante.

Desarrollado en los años 1960, Corrado Böhm y Giuseppe Jacopini publicaron un artículo en la revista "Communications of the ACM" en mayo de 1966, demostrando que se pueden utilizar estructuras secuenciales, estructuras condicionales y estructuras de bucle para construir programas arbitrarios. que cualquier programa con instrucciones goto se puede cambiar a un programa que no use instrucciones goto en absoluto.

 Estructuras de secuencia, ramificación y bucle.

Este descubrimiento es muy importante porque demuestra que el conjunto de estructuras de control que necesitamos para construir módulos deducibles es equivalente al conjunto mínimo de estructuras de control necesarias para construir todos los programas y, por lo tanto, nació la programación estructurada dependiente.

Dijkstra descubrió un problema durante el proceso de investigación: ciertos usos de las declaraciones goto harán que un módulo no pueda dividirse recursivamente en unidades demostrables más pequeñas, lo que resultará en la incapacidad de usar métodos de descomposición para dividir aún más problemas grandes en más pequeños. piezas demostrables.

Dijkstra propuso el famoso artículo "Ir a la declaración considerada dañina" en 1968, por lo que la programación estructurada se hizo popular. Sin embargo, goto también cuenta con firmes partidarios. En total, este acalorado debate duró más de 10 años. Hoy en día, todos somos practicantes de programación estructurada, voluntariamente o no, porque nuestros lenguajes de programación básicamente prohíben declaraciones de transferencia de control directo sin restricciones.

pensamiento esencial

La idea esencial de la programación estructurada es que la transferencia directa del control del programa está restringida y estandarizada. El uso de declaraciones de salto sin restricciones como goto dañará la estructura general del programa. Se recomienda y demuestra que toda la programación se puede programar con estructura secuencial, estructura de rama y estructura de bucle.

programación estructurada

Dijkstra propuso el famoso artículo "Ir a la declaración considerada dañina" en 1968, por lo que la programación estructurada se hizo popular. La idea central es descomponer recursivamente un proyecto complejo de ingeniería de software en funciones deducibles y demostrables. Cada función dividida se puede escribir utilizando un paradigma de programación estructurada.

Este artículo no amplía los patrones de programación y los explicará en capítulos separados sobre análisis y diseño de programas estructurados.

Supongo que te gusta

Origin blog.csdn.net/u011365893/article/details/129855595
Recomendado
Clasificación