Programación procedimental

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

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:

  • 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.
  • Por el mismo token, las llamadas de procedimiento corresponden a la aplicación de función.
  • Funciones y su separación modular entre sí de la misma manera, mediante el uso de argumentos de función, valores de retorno y alcances 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 admitir la escritura de programas tanto como sea posible en términos de funciones puras:

  • Mientras que las lenguas de procedimiento modelan la ejecución del programa como una secuencia de comandos imperativos que pueden alterar implícitamente el estado compartido, la ejecución de modelos de lenguajes de programación funcional como la evaluación de expresiones complejas que sólo dependen unos de otros en términos de argumentos y valores de retorno. Por esta razón, los programas funcionales pueden tener un orden gratuito de ejecución de código, y los idiomas pueden ofrecer poco control sobre el orden en el que se ejecutan varias partes del programa. (Por ejemplo, los argumentos a una invocación de procedimiento en Scheme se ejecutan en un orden arbitrario.)
  • Los idiomas de programación funcional apoyan (y utilizan en gran medida) funciones de primera clase, funciones anónimas y cierres, aunque estos conceptos también se han incluido en los idiomas de procedimiento al menos desde el Algol 68.
  • Los lenguajes funcionales de programación tienden a depender de la optimización de llamadas a la cola y funciones de orden superior en lugar de construcciones imperativas.

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.

Contenido relacionado

Abstracción (ciencias de la computación)

Protocolo de transporte en tiempo real (RTP)

El Real-time Transport Protocol o Protocolo de transporte en tiempo real es un protocolo de red para entregar audio y video a través de redes IP. RTP se...

Herencia múltiple

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save