La programación procedimental es un paradigma de programación , clasificado como programación imperativa , [1] que implica implementar el comportamiento de un programa de computadora como procedimientos (también conocidos como funciones, subrutinas) que se llaman entre sí. El programa resultante es una serie de pasos que forman una jerarquía de llamadas a los procedimientos que lo constituyen.
Los primeros lenguajes de programación procedimentales importantes aparecieron c. 1957 –1964, incluidos Fortran , ALGOL , COBOL , PL/I y BASIC . [2] Pascal y C fueron publicados c. 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, como máquinas Lisp o procesadores Java , pero ningún intento tuvo éxito comercial. [ contradictorio ]
Ciertas prácticas de desarrollo de software a menudo se emplean con programación de procedimientos para mejorar la calidad y reducir los costos de desarrollo y mantenimiento.
La modularidad consiste en organizar los procedimientos de un programa en módulos separados, cada uno de los cuales tiene un propósito específico y comprensible.
Minimizar el alcance de las variables y los procedimientos puede mejorar la calidad del software al reducir la carga cognitiva de los procedimientos y módulos.
Un programa que carece de modularidad o de amplio alcance tiende a tener procedimientos que consumen muchas variables que otros procedimientos también consumen. El código resultante es relativamente difícil de entender y mantener.
Dado que un procedimiento puede especificar una interfaz bien definida y ser autónomo, admite la reutilización de código , en particular a través de la biblioteca de software .
La programación procedimental se clasifica como programación imperativa , porque implica un comando directo de ejecución.
Procesal es una subclase de imperativo ya que procesal incluye conceptos de bloque y alcance , mientras que imperativo describe un concepto más general que no requiere tales características. Los lenguajes procedimentales generalmente usan palabras reservadas que definen bloques, como if
, while
y for
, para implementar el flujo de control , mientras que los lenguajes imperativos no estructurados (es decir, lenguaje ensamblador ) usan tablas goto y de rama para este propósito.
También clasificada como imperativa, la programación orientada a objetos (POO) implica dividir la implementación de un programa en objetos que exponen el comportamiento (métodos) y los datos (miembros) a través de una interfaz bien definida. Por el contrario, la programación procedimental consiste en dividir la implementación del programa en variables , estructuras de datos y subrutinas . Una distinción importante es que, si bien los procedimientos implican procedimientos para operar en estructuras de datos, la programación orientada a objetos agrupa los dos. Un objeto es una estructura de datos y el comportamiento asociado con esa estructura de datos. [3]
Algunos lenguajes de programación orientada a objetos admiten el concepto de clase que permite crear un objeto basado en una definición.
La nomenclatura varía entre los dos, aunque tienen una semántica similar:
Los principios de modularidad y reutilización de código en los lenguajes funcionales son fundamentalmente los mismos que en los lenguajes procedimentales, ya que ambos provienen de la programación estructurada . Por ejemplo:
La principal diferencia entre los estilos es que los lenguajes de programación funcionales 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 soportar la escritura de programas tanto como sea posible en términos de funciones puras :
Muchos lenguajes funcionales, sin embargo, son de hecho impuramente funcionales y ofrecen construcciones imperativas/procedimentales 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 esté escrito en un estilo procedimental.
Existen algunos lenguajes funcionales esotéricos (como Unlambda ) que evitan los preceptos de programación estructurada por el hecho de que son 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.
En programación lógica , un programa es un conjunto de premisas y el cálculo se realiza intentando demostrar teoremas candidatos. Desde este punto de vista, los programas lógicos son declarativos , centrándose en cuál es el problema, más que en cómo resolverlo.
Sin embargo, la técnica de razonamiento hacia atrás , implementada mediante 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:
tienen una doble interpretación, tanto como procedimientos
y como implicaciones lógicas:
Un programador lógico experto utiliza la interpretación procedimental para escribir programas que sean efectivos y eficientes, y utiliza la interpretación declarativa para ayudar a garantizar que los programas sean correctos.