Diferencia entre revisiones de «Programación Declarativa»
(→Vea además) |
|||
| Línea 1: | Línea 1: | ||
<div align="justify"> | <div align="justify"> | ||
| − | |||
{{Definición | {{Definición | ||
|nombre= Programación Declarativa | |nombre= Programación Declarativa | ||
|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= '''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.}}'''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|lenguajes de programación]] modernos. |
| − | |||
| − | }} | ||
| − | |||
| − | '''Programación Declarativa.''' La Programación declarativa es un | ||
| − | ==Características== | + | == Características == |
| − | La Programación Declarativa, en contraposición a la [[ | + | 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 | + | 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 | + | 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 | + | 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. | El componente lógico determina el significado del programa mientras que el componente de control solamente afecta a su eficiencia. | ||
| Línea 31: | Línea 26: | ||
*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 | *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== | + | == Diferencias entre imperativo y declarativo == |
| − | En la | + | 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 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 == | |
| − | + | 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 | *Ecuacional Funcional | ||
| Línea 75: | Línea 66: | ||
*Temporal Concurrencia | *Temporal Concurrencia | ||
| − | + | == Algunos lenguajes declarativos == | |
| − | |||
| − | ==Algunos lenguajes declarativos== | ||
| − | + | === Lenguajes lógicos === | |
| − | |||
*[[Prolog]] ([[Programación funcional]]), | *[[Prolog]] ([[Programación funcional]]), | ||
| Línea 88: | Línea 76: | ||
*[[F-Prolog]] (Programación Lógica Difusa) | *[[F-Prolog]] (Programación Lógica Difusa) | ||
| − | * | + | === Lenguajes algebraicos === |
| − | + | ||
| + | *[[Maude]] | ||
| + | *[[SQL]] | ||
| + | |||
| + | === Lenguajes funcionales === | ||
| − | + | *[[Haskell]], ([[Programación funcional]]) | |
| − | *[ | ||
| − | |||
| − | ==Referencias== | + | == Referencias == |
En estas referencias encontrará recursos de utilidad: | En estas referencias encontrará recursos de utilidad: | ||
| Línea 105: | Línea 95: | ||
*[http://es.wikipedia.org/wiki/Programación_declarativa Programación Declarativa] | *[http://es.wikipedia.org/wiki/Programación_declarativa Programación Declarativa] | ||
| − | == | + | == 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 Lenguajes de Programación] | *[http://www.ecured.cu/index.php/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:Informática]] | [[Categoría:Lenguajes_de_programación]][[Categoría:Informática]] | ||
Revisión del 14:57 16 may 2011
| ||||||
Sumario
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, 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
- 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)
Lenguajes algebraicos
Lenguajes funcionales
Referencias
En estas referencias encontrará recursos de utilidad:
- Conceptos de Programación Declarativa
- Programación Declarativa
- Programación Declarativa
- Programación Declarativa
- Programación Declarativa
- Programación Declarativa
