Programación procedimental

Compartir Imprimir Citar

La programación procedimental es un paradigma de programación, derivado de la programación imperativa, basado en el concepto de la llamada a procedimiento. Los procedimientos (un tipo de rutina o subrutina) simplemente contienen una serie de pasos computacionales a realizar. Cualquier procedimiento dado puede llamarse en cualquier momento durante la ejecución de un programa, incluso por otros procedimientos o por sí mismo. Los primeros lenguajes de programación de procedimientos importantes aparecieron entre 1957 y 1964, incluidos Fortran, ALGOL, COBOL, PL/I y BASIC. Pascal y C se publicaron alrededor de 1970-1972.

Los procesadores de computadora brindan soporte de hardware para la programación de procedimientos a través de un registro de pila e instrucciones para llamar a procedimientos y regresar de ellos. Es posible el soporte de hardware para otros tipos de programación, pero ningún intento tuvo éxito comercial (por ejemplo, máquinas Lisp o procesadores Java).

Trámites y modularidad

La modularidad es generalmente deseable, especialmente en programas grandes y complicados. Las entradas generalmente se especifican sintácticamente en forma de argumentos y las salidas se entregan como valores de retorno.

La determinación del alcance es otra técnica que ayuda a mantener los procedimientos modulares. Impide que el procedimiento acceda a las variables de otros procedimientos (y viceversa), incluidas instancias anteriores de sí mismo, sin autorización explícita.

Los procedimientos menos modulares, a menudo utilizados en programas pequeños o escritos rápidamente, tienden a interactuar con una gran cantidad de variables en el entorno de ejecución, que otros procedimientos también pueden modificar.

Debido a la capacidad de especificar una interfaz simple, ser autónomo y reutilizarse, los procedimientos son un vehículo conveniente para crear piezas de código escritas por diferentes personas o diferentes grupos, incluso a través de bibliotecas de programación.

Comparación con otros paradigmas de programación

Programación imperativa

Los lenguajes de programación de procedimientos también son lenguajes imperativos, porque hacen referencias explícitas al estado del entorno de ejecución. Esto podría ser cualquier cosa, desde variables (que pueden corresponder a registros del procesador) hasta algo así como la posición de la "tortuga" en el lenguaje de programación Logo.

A menudo, los términos "programación de procedimientos" y "programación imperativa" se usan como sinónimos. Sin embargo, la programación procedimental se basa en gran medida en los bloques y el alcance, mientras que la programación imperativa en su conjunto puede o no tener tales características. Como tales, los lenguajes procedimentales generalmente usan palabras reservadas que actúan sobre bloques, como if, while y for, para implementar el flujo de control, mientras que Los lenguajes imperativos no estructurados usan sentencias goto y tablas de ramas para el mismo propósito.

Programación orientada a objetos

El enfoque de la programación procedimental es dividir una tarea de programación en una colección de variables, estructuras de datos y subrutinas, mientras que en la programación orientada a objetos es dividir una tarea de programación en objetos que exponen el comportamiento (métodos) y datos (miembros o atributos) mediante interfaces. La distinción más importante es que, mientras que la programación procedimental usa procedimientos para operar en estructuras de datos, la programación orientada a objetos agrupa los dos juntos, por lo que un 'objeto', que es una instancia de una clase, opera en su " 34;propio" estructura de datos.

La nomenclatura varía entre los dos, aunque tienen una semántica similar:

Procedimiento Objetivo
Procedimiento Método
Record Objeto
Módulo Clase
Llamada de procedimiento Mensaje

Programación funcional

Los principios de modularidad y reutilización de código en los lenguajes funcionales prácticos son fundamentalmente los mismos que en los lenguajes procedimentales, ya que ambos se derivan de la programación estructurada. Así por ejemplo:

La principal diferencia entre los estilos es que los lenguajes de programación funcional eliminan o al menos restan importancia a los elementos imperativos de la programación procedimental. Por lo tanto, el conjunto de características de los lenguajes funcionales está diseñado para admitir la escritura de programas tanto como sea posible en términos de funciones puras:

Sin embargo, muchos lenguajes funcionales son de hecho impuramente funcionales y ofrecen construcciones imperativas/procedimiento que permiten al programador escribir programas en estilo procedimental, o en una combinación de ambos estilos. Es común que el código de entrada/salida en lenguajes funcionales se escriba en un estilo procedimental.

Existen algunos lenguajes funcionales esotéricos (como Unlambda) que evitan los preceptos de programación estructurada por ser difíciles de programar (y por lo tanto desafiantes). Estos lenguajes son la excepción al terreno común entre los lenguajes procedimentales y funcionales.

Programación lógica

En la programación lógica, un programa es un conjunto de premisas y el cálculo se realiza intentando probar teoremas candidatos. Desde este punto de vista, los programas lógicos son declarativos, enfocándose en cuál es el problema, más que en cómo resolverlo.

Sin embargo, la técnica de razonamiento inverso, implementada por la resolución SLD, utilizada para resolver problemas en lenguajes de programación lógica como Prolog, trata los programas como procedimientos de reducción de objetivos. Así cláusulas de la forma:

H:- B1,..., Bn.

tienen una interpretación dual, tanto como procedimientos

para mostrar/solver H, show/solve B1 y... Bn

y como implicaciones lógicas:

B1 y Bn H.

Los programadores lógicos experimentados usan la interpretación procedimental para escribir programas que sean efectivos y eficientes, y usan la interpretación declarativa para asegurarse de que los programas sean correctos.