Programación procedimental

Paradigma de programación

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 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 sus procedimientos constituyentes.

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

Los procesadores de ordenador proporcionan soporte de hardware para la programación procedimental a través de un registro de pila e instrucciones para llamar a los procedimientos y regresar de ellos. Es posible el soporte de hardware para otros tipos de programación, como las máquinas Lisp o los procesadores Java , pero ningún intento tuvo éxito comercial. [ contradictorio ]

Prácticas de desarrollo

Ciertas prácticas de desarrollo de software suelen emplearse con programación procedimental para mejorar la calidad y reducir los costos 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 alcance de las 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 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 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 un comando directo de ejecución.

El lenguaje procedimental es una subclase del imperativo, ya que incluye conceptos de bloque y alcanceif , mientras que el imperativo describe un concepto más general que no requiere dichas características. Los lenguajes procedimentales generalmente usan palabras reservadas que definen bloques, como , while, y for, para implementar el flujo de control , mientras que los lenguajes imperativos no estructurados (es decir, el lenguaje ensamblador ) usan tablas goto y de ramificación para este propósito.

Programación orientada a objetos

La programación orientada a objetos (POO), también clasificada como imperativa, 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 trata de 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 los dos. Un objeto es una estructura de datos y el comportamiento asociado con esa estructura de datos. [3]

Algunos lenguajes OOP admiten el concepto de clase, lo que permite crear un objeto basado en una definición.

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

ProcesalOrientado a objetos
ProcedimientoMétodo
RegistroObjeto
MóduloClase
Llamada de procedimientoMensaje

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 corresponden a funciones. Ambos permiten la reutilización del mismo código en varias partes de los programas y en varios puntos de su ejecución.
  • De la misma manera, las llamadas a procedimientos corresponden a la aplicación de funciones.
  • Las funciones y sus módulos se separan entre sí de la misma manera, mediante el uso de argumentos de función, valores de retorno y alcances 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 respaldar la escritura de programas tanto como sea posible en términos de funciones puras :

  • 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 sólo dependen unas de otras en términos de argumentos y valores de retorno. Por esta razón, los programas funcionales pueden tener un orden libre de ejecución de código, y los lenguajes pueden ofrecer poco control sobre el orden en el que se ejecutan las distintas partes del programa; por ejemplo, los argumentos para 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 confiar en la optimización de llamadas de cola y funciones de orden superior en lugar de construcciones de bucle imperativos.

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 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 la programación estructurada por el hecho de que resulta difícil programarlos (y, por lo tanto, un desafío). Estos lenguajes son la excepción a la base común entre los lenguajes procedimentales y funcionales.

Programación lógica

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 y se centran en cuál es el problema, en lugar de 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. Por lo tanto, las cláusulas de la forma:

B :- B 1 , …, B n .

tienen una doble interpretación, tanto como procedimientos

Para mostrar/resolver H , mostrar/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 que sean efectivos y eficientes, y utiliza la interpretación declarativa para ayudar a 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 procedimental para controlar 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 .
Obtenido de "https://es.wikipedia.org/w/index.php?title=Programación_procedimental&oldid=1251939603"