Respuesta

37

La programación estructurada es un término antiguo que creo abarcar funcional, de procedimiento y mucho más. Básicamente significa usar estructuras explícitas de flujo de control en lugar de saltar directamente de la instrucción a la instrucción.

La programación funcional y de procedimiento son, en ese sentido, paradigmas estructurados. La programación funcional también es una programación declarativa; la estructura que se le da a su código corresponde a su significado; un programa es una función que cambia el estado del mundo. La programación procedimental es lo que consideraría una programación "típica" en cualquier lenguaje C o sus descendientes, incluidos los lenguajes OO como Java y C++. Un programa es una serie de instrucciones que se ejecutarán en serie e invocar subprocedimientos a lo largo del camino.

O, como se ha descrito famoso:

La programación funcional es como describir su problema a un matemático . La programación imperativa es como dar instrucciones a un idiota .

--- arcus, #scheme on Freenode 
+0

La cita no es realmente pertinente para ayudar a resolver el problema original de la OP, ya que la cita es sobre la diferencia entre Los paradigmas de programación funcional e imperativa (sí, a pesar de que la programación de procedimientos generalmente se considera un subparadigma de programación imperativa) Además, argumentaría que Java en realidad no es compatible con la programación procedimental, ya que en Java todo es una clase o un objeto, a excepción de las nuevas características de Java 8, como las funciones lambda, que estarían relacionadas con la programación funcional. Entonces, tengo que rechazar esta respuesta. – nbro

9

La programación funcional es el uso de funciones como elementos de primera clase. Hacer uso de funciones de orden superior (tomar y/o devolver funciones); lo que lleva a construcciones poderosas y un código bien factorizado. Algunas personas se centran también en el aspecto de pureza de FP, lo que quiere decir que las funciones siempre deben devolver el mismo resultado, dada la misma entrada. Estos, creo, son los dos pilares básicos de FP. También veo que se evitan los efectos secundarios porque, en esencia, se abstraen un poco de las instrucciones de carga/nivel de la máquina de la tienda.

La programación estructurada se remonta al documento "Considerado perjudicial" de Djikstra. Significa utilizar las estructuras if/then/else/elif, do/while/until/for loops, etc. en lugar de recurrir a goto. Básicamente se abstrae un poco de las instrucciones de comparación/nivel de máquina de ramificación. La programación estructurada es ortogonal a la programación funcional y de procedimiento.

La programación de procedimiento, creo, se refiere a la programación con "subrutinas" imperativas (en oposición a "funciones" puras) que consisten generalmente en una serie de "enunciados" (en oposición a "expresiones") que dejan efectos secundarios.

+0

Diría que la programación de procedimientos es un subparadigma de la programación imperativa, como también se indica aquí: https: //en.wikipedia.org/wiki/Imperative_programming – nbro

+0

Muy cierto, voy a eliminar el "(a veces 'programación imperativa')" a un lado. El procedimiento es, de hecho, un _subset_ de imperativo. Es bastante posible programar imperativamente _sin_ "procedimientos" en algunos idiomas. Sin embargo, la diferencia clave entre un "procedimiento" y una "función", creo, es que la primera es imperativa. A eso me refería. – AshleyF

Cuestiones relacionadas