Articulo de referencia

Programación procedimental

La programación procedimental es un paradigma de programación , clasificado como programación imperativa , [ 1 ] que implica implementar el comportamiento de un programa informá...

La programación procedimental es un paradigma de programación , clasificado como programación imperativa , [ 1 ] que implica implementar el comportamiento de un programa informático como procedimientos (también llamados funciones o subrutinas) que se llaman entre sí. El programa resultante es una serie de pasos que forman una jerarquía de llamadas a sus procedimientos constituyentes.

Los primeros lenguajes de programación procedimentales importantes aparecieron entre 1957 y 1964, incluyendo Fortran , ALGOL , COBOL , PL/I y BASIC . [ 2 ] Pascal y C se publicaron entre 1970 y 1972.

Los procesadores informáticos ofrecen soporte de hardware para la programación procedimental mediante un registro de pila e instrucciones para llamar a procedimientos y regresar de ellos. Si bien es posible el soporte de hardware para otros tipos de programación, como las máquinas Lisp o los procesadores Java , ningún intento ha tenido éxito comercial.

Prácticas de desarrollo

Ciertas prácticas de desarrollo de software se suelen emplear junto con la programación procedimental para mejorar la calidad y reducir los costes de desarrollo y mantenimiento.

Modularidad y alcance

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 número de variables y 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 un alcance amplio suele tener procedimientos que consumen muchas variables que otros procedimientos también consumen. El código resultante es relativamente difícil de entender y de mantener.

Intercambio

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 .

Comparación con otros paradigmas de programación

Programación imperativa

La programación procedimental se clasifica como programación imperativa , porque implica el control directo de la ejecución.

Los lenguajes procedimentales son una subclase de los imperativos, ya que incluyen conceptos de bloques y ámbitosif , mientras que los imperativos describen un concepto más general que no requiere tales características. Los lenguajes procedimentales generalmente usan palabras reservadas que definen bloques, como ` while<input>`, `<input>` y `<input> for`, para implementar el flujo de control , mientras que los lenguajes imperativos no estructurados (es decir, el lenguaje ensamblador ) usan tablas de saltos y de bifurcación para este propósito.

Programación orientada a objetos

También clasificada como imperativa, la programación orientada a objetos (POO) implica dividir la implementación de un programa en objetos que exponen comportamiento (métodos) y datos (miembros) a través de una interfaz bien definida. En contraste, 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, mientras que la programación procedimental implica procedimientos para operar sobre estructuras de datos, la POO agrupa ambos. Un objeto es una estructura de datos y el comportamiento asociado a dicha estructura. [ 3 ]

Algunos lenguajes de programación orientada a objetos (POO) admiten el concepto de clase, que permite crear un objeto a partir de una definición.

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

Programación funcional

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 se derivan de la programación estructurada . Por ejemplo:

  • Los procedimientos se corresponden con las funciones. Ambos permiten reutilizar el mismo código en distintas partes de los programas y en diferentes puntos de su ejecución.
  • Del mismo modo, las llamadas a procedimientos corresponden a la aplicación de funciones.
  • Las funciones y sus componentes se separan modularmente entre sí de la misma manera, mediante el uso de argumentos de función, valores de retorno y ámbitos de variables.

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 permitir escribir programas en términos de funciones puras en la medida de lo posible :

  • Mientras que los lenguajes procedimentales modelan la ejecución del programa como una secuencia de comandos imperativos que pueden alterar implícitamente el estado compartido, los lenguajes de programación funcional modelan la ejecución como la evaluación de expresiones complejas que solo dependen entre sí en términos de argumentos y valores de retorno. Por esta razón, los programas funcionales pueden tener un orden de ejecución de código libre, y los lenguajes pueden ofrecer poco control sobre el orden en que se ejecutan las distintas partes del programa; por ejemplo, los argumentos de una invocación de procedimiento en Scheme se evalúan en un orden arbitrario.
  • Los lenguajes de programación funcional admiten (y utilizan ampliamente) funciones de primera clase , funciones anónimas y cierres , aunque estos conceptos también se han incluido en lenguajes procedimentales al menos desde Algol 68 .
  • Los lenguajes de programación funcional tienden a basarse en la optimización de llamadas recursivas y funciones de orden superior en lugar de estructuras de bucle imperativas.

Sin embargo, muchos lenguajes funcionales 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. Es común que el código de entrada/salida en lenguajes funcionales se escriba en estilo procedimental.

Existen algunos lenguajes funcionales esotéricos (como Unlambda ) que prescinden de los preceptos de la programación estructurada para ser difíciles de programar (y, por lo tanto, más desafiantes). Estos lenguajes constituyen la excepción a la regla general entre los lenguajes procedimentales y funcionales.

Programación lógica

En programación lógica , un programa es un conjunto de premisas, y la computación 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, en lugar de cómo resolverlo.

Sin embargo, la técnica de razonamiento hacia atrás , 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. Por lo tanto, las cláusulas de la forma:

H  :- B 1 , …, B n .

tienen una interpretación dual, tanto como procedimientos

para demostrar/resolver H , demostrar/resolver B 1 y … y B n

y como implicaciones lógicas:

B 1 y … y B n implica H .

Un programador lógico experto utiliza la interpretación procedimental para escribir programas eficaces y eficientes, y la interpretación declarativa para garantizar que los programas sean correctos.

Véase también

Referencias

  1. "Paradigmas de programación" .
  2. "Bienvenido a IEEE Xplore 2.0: Uso de lenguajes de programación procedimentales para el control de sistemas de producción". Actas. Séptima Conferencia IEEE sobre Aplicaciones de Inteligencia Artificial . IEEE . doi : 10.1109/CAIA.1991.120848 . S2CID 58175293 . 
  3. Stevenson, Joseph (agosto de 2013). "Programación procedimental frente a programación orientada a objetos" . neonbrand.com . Consultado el 19 de agosto de 2013 .