Paradigma de programación

De Wikipedia, la enciclopedia libre
Ir a la navegación Ir a la búsqueda

Se denominan paradigmas de programación a las formas de clasificar los lenguajes de programación en función de sus características. Los idiomas se pueden clasificar en múltiples paradigmas.

Algunos paradigmas se ocupan principalmente de las implicancias para el modelo de ejecución del lenguaje, como permitir efectos secundarios o si la secuencia de operaciones está definida por el modelo de ejecución. Otros paradigmas se refieren principalmente a la forma en que se organiza el código, como agrupar un código en unidades junto con el estado que modifica el código. Sin embargo, otros se preocupan principalmente por el estilo de la sintaxis y la gramática.

Los paradigmas de programación comunes incluyen:[1][2][3]

  • imperativo en el que el programador instruye a la máquina cómo cambiar su estado,
  • declarativo en el que el programador simplemente declara las propiedades del resultado deseado, pero no cómo calcularlo
    • funcional en el que el resultado deseado se declara como el valor de una serie de aplicaciones de función,
    • lógico en la que el resultado deseado se declara como la respuesta a una pregunta sobre un sistema de hechos y reglas,
    • matemático en el que el resultado deseado se declara como la solución de un problema de optimización
    • reactivo en el que se declara el resultado deseado con flujos de datos y la propagación del cambio

Las técnicas simbólicas como la reflexión, que permiten que el programa se refiera a sí mismo, también pueden ser consideradas como un paradigma de programación. Sin embargo, esto es compatible con los principales paradigmas y, por lo tanto, no es un paradigma real por derecho propio.

Por ejemplo, los lenguajes que caen en el paradigma imperativo tienen dos características principales: establecen el orden en el que ocurren las operaciones, con construcciones que controlan explícitamente ese orden, y permiten efectos secundarios, en los que el estado puede modificarse en un momento determinado, dentro de una unidad de código, y luego leer en un momento diferente dentro de una unidad de código diferente. La comunicación entre las unidades de código no es explícita. Mientras tanto, en la programación orientada a objetos, el código se organiza en objetos que contienen un estado que solo es modificado por el código que forma parte del objeto. La mayoría de los lenguajes orientados a objetos también son lenguajes imperativos. Por el contrario, los lenguajes que se ajustan al paradigma declarativo no indican el orden en el que ejecutar las operaciones. En su lugar, proporcionan una serie de operaciones disponibles en el sistema, junto con las condiciones en las que se permite que se ejecute cada una. La implementación del modelo de ejecución del lenguaje rastrea qué operaciones son libres de ejecutar y elige el orden en forma independiente. Más en Comparación de lenguajes de programación de múltiples paradigmas.

Resumen[editar]

Clasificación de los distintos paradigmas de programación según Peter Van Roy[4]:5[5]

Así como la ingeniería de software (como proceso) se define mediante diferentes metodologías, los lenguajes de programación (como modelos de computación) se definen mediante diferentes paradigmas. Algunos lenguajes están diseñados para admitir un paradigma (Smalltalk admite programación orientada a objetos, Haskell admite programación funcional), mientras que otros lenguajes de programación admiten múltiples paradigmas (como Object Pascal, C++, Java, JavaScript, C#, Scala, Visual Basic, Common Lisp, Scheme, Perl, PHP, Python, Ruby, Oz y F# ). Por ejemplo, los programas escritos en C ++, Object Pascal o PHP pueden ser puramente procedimentales, puramente orientados a objetos o pueden contener elementos de ambos u otros paradigmas. Los diseñadores y programadores de software deciden cómo utilizar esos elementos paradigmáticos.

En la programación orientada a objetos, los programas se tratan como un conjunto de objetos que interactúan. En la programación funcional, los programas se tratan como una secuencia de evaluaciones de funciones sin estado. Cuando se programan computadoras o sistemas con muchos procesadores, en la programación orientada a procesos, los programas se tratan como conjuntos de procesos concurrentes que actúan sobre estructuras de datos compartidas lógicas.

Muchos paradigmas de programación son tan conocidos por las técnicas que prohíben como por las que habilitan. Por ejemplo, la programación funcional pura no permite el uso de efectos secundarios, mientras que la programación estructurada no permite el uso de la instrucción "go to". En parte por esta razón, los nuevos paradigmas a menudo son considerados doctrinarios o demasiado rígidos por quienes están acostumbrados a estilos anteriores.[6]​ Sin embargo, evitar ciertas técnicas puede facilitar la comprensión del comportamiento del programa y demostrar teoremas sobre la corrección del programa.

Los paradigmas de programación también se pueden comparar con modelos de programación, lo que permite invocar un modelo de ejecución utilizando solo una API. Los modelos de programación también se pueden clasificar en paradigmas según las características del modelo de ejecución.

Para la computación paralela, es común usar un modelo de programación en lugar de un lenguaje. La razón es que los detalles del hardware paralelo se filtran en las abstracciones utilizadas para programar el hardware. Esto hace que el programador tenga que mapear patrones en el algoritmo sobre patrones en el modelo de ejecución (que se han insertado debido a una fuga de hardware en la abstracción). Como consecuencia, ningún lenguaje de programación paralelo se adapta bien a todos los problemas de cálculo. Por lo tanto, es más conveniente utilizar un lenguaje secuencial base e insertar llamadas a la API en modelos de ejecución paralela a través de un modelo de programación. Dichos modelos de programación paralela se pueden clasificar de acuerdo con abstracciones que reflejan el hardware, como la memoria compartida, la memoria distribuida conpaso de mensajes, nociones de lugar visibles en el código, etc. Estos pueden considerarse sabores del paradigma de programación que se aplican solo a lenguajes y modelos de programación paralelos.

Referencias[editar]

  1. Nørmark, Kurt. Overview of the four main programming paradigms. Aalborg University, 9 May 2011. Retrieved 22 September 2012.
  2. Frans Coenen (11 de octubre de 1999). «Characteristics of declarative programming languages». cgi.csc.liv.ac.uk. Consultado el 20 de febrero de 2014. 
  3. Michael A. Covington (23 de agosto de 2010). «CSCI/ARTI 4540/6540: First Lecture on Symbolic Programming and LISP». University of Georgia. Archivado desde el original el 7 de marzo de 2012. Consultado el 20 de noviembre de 2013. 
  4. Peter Van Roy (12 de mayo de 2009). «Programming Paradigms: What Every Programmer Should Know». info.ucl.ac.be. Consultado el 27 de enero de 2014. 
  5. Peter Van-Roy; Seif Haridi (2004). Concepts, Techniques, and Models of Computer Programming. MIT Press. ISBN 978-0-262-22069-9. 
  6. Frank Rubin (March 1987). «'GOTO Considered Harmful' Considered Harmful». Communications of the ACM 30 (3): 195-196. S2CID 6853038. doi:10.1145/214748.315722. Archivado desde el original el March 20, 2009.