Diferencia entre revisiones de «Programación Declarativa»

(Carácterísticas)
m (Texto reemplazado: «<div align="justify">» por «»)
 
(No se muestran 16 ediciones intermedias de 4 usuarios)
Línea 1: Línea 1:
<div align="justify">
 
  
 
{{Definición
 
{{Definición
Línea 5: Línea 4:
 
|imagen= Lenguajes.png
 
|imagen= Lenguajes.png
 
|tamaño=
 
|tamaño=
|concepto= '''Programación Declarativa.''' La Programación declarativa es un [[paradigma de programación]] basado en la [[lógica]] en el que se estudian de forma simple muchos aspectos avanzados de los [[lenguajes de programación]] modernos.  
+
|concepto=Es un paradigma de programación basado en la [[lógica]] en el que se estudian de forma simple muchos aspectos avanzados de los lenguajes de programación modernos.}}'''Programación Declarativa.''' Es un [http://www.ecured.cu/index.php/Programaci%C3%B3n,_lenguajes_y_paradigmas#Paradigmas_computacionales paradigma de programación] basado en la [[lógica]] en el que se estudian de forma simple muchos aspectos avanzados de los [[Lenguajes de programación|lenguajes de programación]] modernos.  
  
}}
+
== Características ==
  
'''Programación Declarativa.''' La Programación declarativa es un [[paradigma de programación]] basado en la [[lógica]] en el que se estudian de forma simple muchos aspectos avanzados de los [[lenguajes de programación]] modernos.  
+
La Programación Declarativa, en contraposición a la [[Programación Imperativa]] es un paradigma de programación que está basado en el desarrollo de programas especificando o "declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución.  
  
==Diferencias entre imperativo y declarativo==
+
La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla (tan sólo se le indica a la computadora que es lo que se desea obtener o que es lo que se está buscando). No existen asignaciones destructivas, y las variables son utilizadas con transparencia referencial
  
En la [[programación imperativa]] se describe paso a paso un conjunto de instrucciones que deben ejecutarse para variar el estado del programa y hallar la solución, es decir, un [[algoritmo]] en el que se describen los pasos necesarios para solucionar el problema.
+
Aunque en la Programación Declarativa cabe más de un paradigma de programación, se ha optado por centrarla en el estudio de la denominada [[Programación Lógica]], el cual está basado en el cálculo de proposiciones y sus relaciones lógicas.
 +
 
 +
La programación declarativa es un estilo de programación en el que el programador especifica qué debe computarse más bien que cómo deben realizarse los cómputos.
 +
 
 +
*"programa = lógica + control" (Kowalski)
 +
*"algoritmos + estructuras de datos = programas" (Wirth)
 +
 
 +
El componente lógico determina el significado del programa mientras que el componente de control solamente afecta a su eficiencia.
 +
 
 +
La tarea de programar consiste en centrar la atención en la lógica dejando de lado el control, que se asume automático, al sistema.
 +
 
 +
La característica fundamental de la programación declarativa es el uso de la [[lógica]] como [[lenguaje de programación]]:
 +
 
 +
*Un [http://www.ecured.cu/index.php/Aplicación_informática programa] es una teoría formal en una cierta lógica, esto es, un conjunto de fórmulas lógicas que resultan ser la especificación del problema que se pretende resolver, y
 +
la computación se entiende como una forma de inferencia o deducción en dicha lógica. Los principales requisitos que debe cumplir la lógica empleada son:
 +
 
 +
*Disponer de un lenguaje que sea suficientemente expresivo.
 +
*Disponer de una semántica operacional (un mecanismo de cómputo que permita ejecutar los programas).
 +
*Disponer de una semántica declarativa que permita dar un significado a los programas de forma independiente a su posible ejecución.
 +
 
 +
== Diferencias entre imperativo y declarativo ==
 +
 
 +
En la Programación Imperativa se describe paso a paso un conjunto de instrucciones que deben ejecutarse para variar el estado del programa y hallar la solución, es decir, un [[Algoritmo|algoritmo]] en el que se describen los pasos necesarios para solucionar el problema.
  
 
En la programación declarativa las sentencias que se utilizan lo que hacen es describir el problema que se quiere solucionar, pero no las instrucciones necesarias para solucionarlo. Esto último se realizará mediante mecanismos internos de inferencia de información a partir de la descripción realizada.
 
En la programación declarativa las sentencias que se utilizan lo que hacen es describir el problema que se quiere solucionar, pero no las instrucciones necesarias para solucionarlo. Esto último se realizará mediante mecanismos internos de inferencia de información a partir de la descripción realizada.
  
==Aplicaciones==
+
== Aplicaciones ==
  
Este estilo de programación encuentra numerosas aplicaciones industriales en campos como las bases de datos, [[ingeniería del software]], [[procesadores de lenguajes]], [[lenguaje natural]], investigación operativa, seguridad de redes, etc.  
+
Este estilo de programación encuentra numerosas aplicaciones industriales en campos como las bases de datos, [[Ingeniería de software|Ingeniería del software|ingeniería del software]], [[Procesadores de lenguajes|procesadores de lenguajes]], [[Lenguaje natural|lenguaje natural]], investigación operativa, seguridad de redes, etc.
  
==Ventajas==
+
== Ventajas ==
  
 
Se ha dicho que los lenguajes declarativos tienen la ventaja de ser razonados matemáticamente, lo que permite el uso de mecanismos matemáticos para optimizar el rendimiento de los programas.
 
Se ha dicho que los lenguajes declarativos tienen la ventaja de ser razonados matemáticamente, lo que permite el uso de mecanismos matemáticos para optimizar el rendimiento de los programas.
  
*Elegancia, claridad, sencillez, potencia y concisión
+
*Elegancia, claridad, sencillez, potencia y concisión.
*Semánticas claras, simples y matemáticamente bien fundadas
+
*Semánticas claras, simples y matemáticamente bien fundadas.
*Cercanos al nivel de abstracción de las especificaciones formales/informales de los problemas a resolver
+
*Cercanos al nivel de abstracción de las especificaciones formales/informales de los problemas a resolver.
*Referencialmente transparentes: Comportamiento matemático adecuado que permite razonar sobre los programas
+
*Referencialmente transparentes: Comportamiento matemático adecuado que permite razonar sobre los programas.
*Soportan técnicas muy avanzadas de desarrollo, mantenimiento y validación de programas
+
*Soportan técnicas muy avanzadas de desarrollo, mantenimiento y validación de programas.
*Altas dosis de paralelismo implícito
+
*Altas dosis de paralelismo implícito.
*Aplicaciones variadas y de gran interés
+
*Aplicaciones variadas y de gran interés.
 +
*Son fiables, elegantes y expresivos.
  
Son fiables, elegantes y expresivos.
+
== Resultados de corrección y completitud ==
  
==Resultados de corrección y completitud==
+
Según la clase de lógica que se emplee como fundamento del lenguaje declarativo se obtenedrá los diferentes estilos de programación declarativa.
 
 
Según la clase de lógica que empleemos como fundamento del lenguaje declarativo obtenemos los diferentes estilos de programación declarativa.
 
 
 
Clase de lógica Estilo
 
  
 
*Ecuacional Funcional
 
*Ecuacional Funcional
Línea 48: Línea 66:
 
*Temporal Concurrencia
 
*Temporal Concurrencia
  
 +
== Algunos lenguajes declarativos ==
 +
 +
=== Lenguajes lógicos ===
 
   
 
   
 +
*[[Prolog]] ([[Programación funcional]]),
 +
*[[ML]] (Programación funcional),
 +
*[[Lisp]] (Programación funcional),
 +
*[[Curry]] (Programación Lógico-Funcional)
 +
*[[F-Prolog]] (Programación Lógica Difusa)
  
==Algunos lenguajes declarativos==
+
=== Lenguajes algebraicos ===
  
*Existen varios tipos de lenguajes declarativos:
+
*[[Maude]]
  Los lenguajes lógicos, como
+
*[[SQL]]
  *[[Prolog]] ([[Programación funcional]]),
 
  *[[ML]] (Programación funcional),
 
  *[[Lisp]] (Programación funcional),
 
  *[[Curry]] (Programación Lógico-Funcional)
 
  *[[F-Prolog]] (Programación Lógica Difusa)
 
  
*Los lenguajes algebraicos, como [[Maude]] y [[SQL]]
+
=== Lenguajes funcionales ===
*Los lenguajes funcionales, como [[Haskell]], ([[Programación funcional]])
 
  
==Fuentes
+
*[[Haskell]], ([[Programación funcional]])
[[http://campusvirtual.unex.es/cala/epistemowikia/index.php?title=Idea_b%C3%A1sica_en_programaci%C3%B3n_declarativa  Programación Declarativa]]
 
*[http://www.dsic.upv.es/asignaturas/facultad/pdd/prd.html Programación Declarativa]
 
  
==Referencias==
+
== Referencias ==
  
 
En estas referencias encontrará recursos de utilidad:
 
En estas referencias encontrará recursos de utilidad:
*[http://www.uhu.es/18214/temas/tema1(I).pdf Lenguaje Prolog: Conceptos de Programación Declarativa]
+
*[http://www.uhu.es/18214/temas/tema1(I).pdf Conceptos de Programación Declarativa]
 
*[http://www.dsic.upv.es/asignaturas/facultad/pdd/prd.html Programación Declarativa]
 
*[http://www.dsic.upv.es/asignaturas/facultad/pdd/prd.html Programación Declarativa]
*[www.inf-cr.uclm.es/www/pjulian/teaching/sl_apPD.pdf Programación Declarativa]
+
*[http://www.inf-cr.uclm.es/www/pjulian/teaching/sl_apPD.pdf Programación Declarativa]
 
*[http://babel.ls.fi.upm.es/teaching/prog_decl/index-es.html Programación Declarativa]
 
*[http://babel.ls.fi.upm.es/teaching/prog_decl/index-es.html Programación Declarativa]
*[[http://www.di.uniovi.es/~labra/PDec/ Programación Declarativa]
+
*[http://www.di.uniovi.es/~labra/PDec/ Programación Declarativa]
 
*[http://es.wikipedia.org/wiki/Programación_declarativa Programación Declarativa]
 
*[http://es.wikipedia.org/wiki/Programación_declarativa Programación Declarativa]
  
==Vea además==  
+
== Véase además ==  
 +
 
 
*[http://www.ecured.cu/index.php/Programación,_lenguajes_y_paradigmas Programación Lenguajes y Paradigmas]  
 
*[http://www.ecured.cu/index.php/Programación,_lenguajes_y_paradigmas Programación Lenguajes y Paradigmas]  
*[http://www.ecured.cu/index.php/Lenguajes_de_programación
+
*[http://www.ecured.cu/index.php/Lenguajes_de_programación Lenguajes de Programación]
Lenguajes de Programación]
 
 
*[http://www.ecured.cu/index.php/Lenguajes_de_computadora Lenguajes de computadoras]
 
*[http://www.ecured.cu/index.php/Lenguajes_de_computadora Lenguajes de computadoras]
 +
 +
== Fuentes ==
 +
 +
*[http://campusvirtual.unex.es/cala/epistemowikia/index.php?title=Idea_b%C3%A1sica_en_programaci%C3%B3n_declarativa  Programación Declarativa]
 +
*[http://www.dsic.upv.es/asignaturas/facultad/pdd/prd.html Programación Declarativa]
 
</div>
 
</div>
[[Categoría:Lenguajes_de_programación]]
+
[[Categoría:Lenguajes_de_programación]][[Categoría:Informática]]

última versión al 16:03 6 jul 2019

Programación Declarativa
Información sobre la plantilla
Lenguajes.png
Concepto:Es un paradigma de programación basado en la lógica en el que se estudian de forma simple muchos aspectos avanzados de los lenguajes de programación modernos.

Programación Declarativa. Es un paradigma de programación basado en la lógica en el que se estudian de forma simple muchos aspectos avanzados de los lenguajes de programación modernos.

Características

La Programación Declarativa, en contraposición a la Programación Imperativa es un paradigma de programación que está basado en el desarrollo de programas especificando o "declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución.

La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla (tan sólo se le indica a la computadora que es lo que se desea obtener o que es lo que se está buscando). No existen asignaciones destructivas, y las variables son utilizadas con transparencia referencial

Aunque en la Programación Declarativa cabe más de un paradigma de programación, se ha optado por centrarla en el estudio de la denominada Programación Lógica, el cual está basado en el cálculo de proposiciones y sus relaciones lógicas.

La programación declarativa es un estilo de programación en el que el programador especifica qué debe computarse más bien que cómo deben realizarse los cómputos.

  • "programa = lógica + control" (Kowalski)
  • "algoritmos + estructuras de datos = programas" (Wirth)

El componente lógico determina el significado del programa mientras que el componente de control solamente afecta a su eficiencia.

La tarea de programar consiste en centrar la atención en la lógica dejando de lado el control, que se asume automático, al sistema.

La característica fundamental de la programación declarativa es el uso de la lógica como lenguaje de programación:

  • Un programa es una teoría formal en una cierta lógica, esto es, un conjunto de fórmulas lógicas que resultan ser la especificación del problema que se pretende resolver, y

la computación se entiende como una forma de inferencia o deducción en dicha lógica. Los principales requisitos que debe cumplir la lógica empleada son:

  • Disponer de un lenguaje que sea suficientemente expresivo.
  • Disponer de una semántica operacional (un mecanismo de cómputo que permita ejecutar los programas).
  • Disponer de una semántica declarativa que permita dar un significado a los programas de forma independiente a su posible ejecución.

Diferencias entre imperativo y declarativo

En la Programación Imperativa se describe paso a paso un conjunto de instrucciones que deben ejecutarse para variar el estado del programa y hallar la solución, es decir, un algoritmo en el que se describen los pasos necesarios para solucionar el problema.

En la programación declarativa las sentencias que se utilizan lo que hacen es describir el problema que se quiere solucionar, pero no las instrucciones necesarias para solucionarlo. Esto último se realizará mediante mecanismos internos de inferencia de información a partir de la descripción realizada.

Aplicaciones

Este estilo de programación encuentra numerosas aplicaciones industriales en campos como las bases de datos, Ingeniería del software|ingeniería del software, procesadores de lenguajes, lenguaje natural, investigación operativa, seguridad de redes, etc.

Ventajas

Se ha dicho que los lenguajes declarativos tienen la ventaja de ser razonados matemáticamente, lo que permite el uso de mecanismos matemáticos para optimizar el rendimiento de los programas.

  • Elegancia, claridad, sencillez, potencia y concisión.
  • Semánticas claras, simples y matemáticamente bien fundadas.
  • Cercanos al nivel de abstracción de las especificaciones formales/informales de los problemas a resolver.
  • Referencialmente transparentes: Comportamiento matemático adecuado que permite razonar sobre los programas.
  • Soportan técnicas muy avanzadas de desarrollo, mantenimiento y validación de programas.
  • Altas dosis de paralelismo implícito.
  • Aplicaciones variadas y de gran interés.
  • Son fiables, elegantes y expresivos.

Resultados de corrección y completitud

Según la clase de lógica que se emplee como fundamento del lenguaje declarativo se obtenedrá los diferentes estilos de programación declarativa.

  • Ecuacional Funcional
  • Clausal Relacional
  • Heterogenea Tipos
  • Géneros ordenados Herencia
  • Modal S.B.C.
  • Temporal Concurrencia

Algunos lenguajes declarativos

Lenguajes lógicos

Lenguajes algebraicos

Lenguajes funcionales

Referencias

En estas referencias encontrará recursos de utilidad:

Véase además

Fuentes