Al investigar (libros, Wikipedia, preguntas similares sobre SE, etc.) llegué a comprender que la programación imperativa es uno de los principales paradigmas de programación, donde se describe una serie de comandos (o declaraciones) para que la computadora los ejecute (así que mucho ordene que tome acciones específicas, de ahí el nombre "imperativo"). Hasta aquí todo bien.
La programación de procedimientos, por otro lado, es un tipo específico (o subconjunto) de programación imperativa, donde se utilizan procedimientos (es decir, funciones) para describir los comandos que debe realizar la computadora.
Primera pregunta : ¿Existe un lenguaje de programación imperativo que no sea de procedimiento? En otras palabras, ¿puedes tener una programación imperativa sin procedimientos?
Actualización : esta primera pregunta parece ser respondida. Un lenguaje PUEDE ser imperativo sin ser procesal o estructurado. Un ejemplo es el lenguaje ensamblador puro.
Luego también tiene la programación estructurada, que parece ser otro tipo (o subconjunto) de programación imperativa, que surgió para eliminar la dependencia de la declaración GOTO.
Segunda pregunta : ¿Cuál es la diferencia entre la programación procesal y la estructurada? ¿Puedes tener uno sin el otro y viceversa? ¿Podemos decir que la programación procesal es un subconjunto de la programación estructurada, como en la imagen?
Primera pregunta: Sí, muchos lenguajes puros orientados a objetos califican. Si bien tienen métodos, que están muy cerca de las funciones, ven estos métodos en términos de mensajes y no les dan suficiente peso para llamar al lenguaje procesal.
Segunda pregunta: la diferencia a menudo tiene un alcance diferente. Puede tener una función con declaraciones goto por todas partes, que tendrá un estilo de procedimiento, pero no una programación estructurada. Por otro lado, la mayoría de los lenguajes OO admiten y fomentan la programación estructurada, pero no la programación de procedimientos.
La programación de procedimientos describe el orden global del programa. Los programas de procedimiento son aquellos que se entienden de manera más efectiva al mirar sus gráficos de llamadas. La programación estructural es una propiedad local, se aplica al uso de if y while a diferencia de goto.
Como tal, estas dos propiedades son disjuntas, puede tener una sin la otra.
fuente
unsafePerformIO
permite causando Havok). Otros bromean que Haskell es su lenguaje de programación imperativo favorito. Pero el hecho es que una gran cantidad de código Haskell vive separado de forma limpiaIO
, no utiliza lagunas no estándar para filtrar los efectos secundarios y es puramente funcional.La mayoría de los lenguajes populares de los últimos 50 años han sido diseñados en torno a la arquitectura informática prevalente, llamada arquitectura Von Neumann , en honor a uno de sus creadores, John von Neumann.
Estos idiomas se llaman idiomas imperativos.
En una computadora von Neumaan, tanto los datos como los programas se almacenan en la misma memoria. La CPU que ejecuta las instrucciones está separada de la memoria. Por lo tanto, las instrucciones y los datos deben transmitirse de la memoria a la CPU. Los resultados de las operaciones en la CPU deben volver a la memoria. Casi todas las computadoras digitales construidas desde la década de 1940 se basan en la arquitectura von Neumaan.
fuente
Me temo que ninguna de las respuestas dadas hasta ahora captura el núcleo de los conceptos muy bien.
Imperativo, procesal y estructurado no son propiedades mutuamente excluyentes, solo se centran en un solo aspecto de la lógica de modelado.
Imperativo es la contraparte de Imperativo declarativo, básicamente significa que usted le dice a la computadora qué hacer al hacer que ejecute una serie de instrucciones que proporciona. Un programa declarativo, por otro lado, dice qué lograr . En otras palabras, definir pasos versus definir un resultado.
La programación procesal se refiere a la capacidad del procesador (ya sea hardware o un intérprete) para envolver las instrucciones en compuestos, saltar a dicho compuesto y volver al punto después del salto una vez que el compuesto ha sido ejecutado. Esto puede sonar trivial y, según los estándares actuales, lo es, pero necesita un poco de soporte básico en la máquina antes de poder hacer esto: la capacidad de saltar, algún tipo de pila para empujar una dirección que puede aparecer y saltar más tarde y un puntero de pila. Los microprocesadores pronto ofrecieron esta característica, pero se puede imaginar un procesador primitivo que solo es capaz de ejecutar instrucciones que se le suministran secuencialmente, como una cinta perforada o un procesador de tarjeta perforada.
La programación estructurada es el siguiente paso desde la capacidad de saltar a otra instrucción. En última instancia, todo se reduce a saltos, pero si puede tener saltos condicionales, puede crear declaraciones de flujo de control básicas como if-then, for, while, repeat-until y switch. La aplicación de estos se llama programación estructurada.
En cualquier entorno de programación moderno, tendrá todo lo anterior a su disposición y los dará por sentado para que ya no hablemos de ellos como tales. Las propiedades diferenciadoras entre lenguajes se han desplazado durante mucho tiempo a paradigmas de nivel superior, como la programación funcional y orientada a objetos.
Sin embargo, la programación declarativa todavía no es común, principalmente porque siempre será específica del dominio, al menos en cierta medida. No puede tener un lenguaje declarativo de propósito general. Es por eso que todavía estamos atrapados con los llamados lenguajes de tercera generación, donde la programación declarativa o "modelado" se consideraría de cuarta generación.
fuente