Por favor, activa JavaScript y desactiva tu adblock para este sitio

El Javatar

Blog dedicado a la Programación en Java, C, PHP, Phyton, HTML, SQL y Mucho Más

viernes, 9 de mayo de 2014

Paradigmas de Programación VII: Programación por Restricciones

Paradigmas de Programación VII - Programación por Restricciones
Bienvenid@ a una nueva entrada de la serie que en ElJavatar.com hemos dedicado a la profundización en el tema de los paradigmas de programación. Continuamos con los paradigmas clasificados dentro de la programación declarativa, dedicando esta entrada entonces a la programación restringida o basada en restricciones.

Según Wikipedia, la programación con restricciones es un paradigma de la programación en informática, donde las relaciones entre variables son expresadas en términos de restricciones (ecuaciones); es decir que se trata de un paradigma de programación basado en la especificación de un conjunto de restricciones, las cuales deben ser satisfechas por cualquier solución del problema planteado, en lugar de especificar los pasos para obtener dicha solución.

Este conjunto de restricciones sustituyen entonces los elementos propios de la programación lógica con el objetivo de mejorar el resultado final, es decir, que las relaciones que unen las variables son reemplazadas por ecuaciones específicas llamadas restricciones.

El enfoque de la programación con restricciones se basa principalmente en buscar un estado en el cual una gran cantidad de restricciones sean satisfechas simultáneamente. Un problema se define típicamente como un estado de la realidad en el cual existe un número de variables con valor desconocido. Un programa basado en restricciones busca entonces dichos valores para todas las variables.

Por lo tanto, el objetivo del desarrollador que basa la construcción de su código en la filosofía de la filosofía en la que se basa este paradigma, debe de satisfacer el máximo de restricciones simultáneamente; de esta forma, un programa basado en restricciones que trabaje sobre una serie de valores fijos debe de aplicar sólo dichos valores a las variables para la resolución del código.

La programación con restricciones se relaciona mucho con la programación lógica: De hecho cualquier programa lógico puede ser traducido en un programa con restricciones y viceversa; sin embargo, muchas veces los programas lógicos son traducidos a programas con restricciones debido a que como lo habíamos mencionado, la solución es más eficiente que su contraparte.

Bien, hasta el momento hemos definido la esencia procedimental sobre la cual se basa este paradigma, pero para poder apreciar de mejor forma los objetivos y/o ventajas reales del uso de la programación restricciones es necesario echar un vistazo a los dominios de aplicación de este paradigma los cuales son:

- Dominios booleanos, donde solo existen restricciones del tipo verdadero/falso
- Dominios en variables enteras y reales
- Dominios lineales, donde sólo se describen y analizan funciones lineales
- Dominios finitos, donde las restricciones son definidas en conjuntos finitos
- Dominios mixtos, los cuales involucran dos o más de los anteriores

Los lenguajes de programación con restricciones por lo general son ampliaciones de otro lenguaje. En este sentido, el primer lenguaje utilizado a tal efecto fue Prolog; es por esta razón que este paradigma en sus inicios fue conocido como Programación Lógica con Restricciones.

Es por tal razón que ambos paradigmas comparten características muy similares, tales como las variables lógicas (una vez que una variable es asignada a un valor, no puede ser cambiado), o el backtracking que es una estrategia para encontrar soluciones a problemas que satisfacen restricciones.

La programación con restricciones puede ser entonces implementada como un lenguaje propio o como bibliotecas para ser usadas en algún lenguaje de programación imperativo. Algunos lenguajes populares de programación con restricciones son:

- B-Prolog (Basado en Prolog, proprietario)
- CHIP V5 (Basado en Prolog, también existen bibliotecas en C y C++, proprietario)
- Ciao Prolog (Basado en Prolog, software libre: GPL/LGPL)
- ECLiPSe (Basado en Prolog, software libre)
- Mozart ( Basado en Oz, software libre: X11)
- SICStus (Basado en Prolog, proprietario)
- GNU Prolog (Basado en Prolog, software libre)
- SWI-Prolog Un entorno Prolog que contiene varias librerías para soluciones con restricciones (LGPL)

Comunidades dedicadas a la Programación por Restricciones


Avispa - Portal dedicado a la Programación por Restricciones


Avispa es un portal dedicado a la programación por restricciones que nació como una iniciativa de estudiantes de la Universidad del Valle (Colombia) y de la Pontificia Universidad Javeriana de Cali (Colombia), en la que se pueden conocer y aportar proyectos que han sido desarrollados usando como pilar de desarrollo la programación con restricciones.

A continuación te dejo la grabación de un Hangout en el cual se habla a más profundidad y con ejemplos prácticos sobre el uso de la programación por restricciones:


Una de las aplicaciones de la programación por restricciones la podemos hallar en el uso de la programación lineal, la cual usa una serie de funciones lineales con sistemas de ecuaciones lineales como restricciones para su desarrollo; un claro ejemplo lo podemos encontrar en el siguiente libro:

- Programación Lineal: Metodologías y Problemas

Fuente:
http://linceus.blogspot.com.es/2014/03/paradigmas-de-programacion-vii.html

Bueno, eso es todo por el momento. Sin embargo, continuaremos en la próxima entrega de esta serie, en la cual y a pesar de no haberla incluido dentro de la clasificación inicial, hablaremos de la programación orientada a eventos.

==> Artículo 8: Paradigmas de Programación VIII: Programación Orientada a Eventos

No hay comentarios.:

Publicar un comentario