Universidad de Castilla-La Mancha
 
Departamento de Sistemas Informáticos


 Plan de Estudios -> 42343

  Curso: 2010-11. Cambiar a:  2009-10   2011-12

Asignaturas | Profesores | Tutorías | Fechas Examen | Datos | Temario | Bibliografia
Asignatura de Grado 2010-11

Código:  42343
Nombre:  Programación Declarativa
Créditos: 6.0
Idioma: Español      Español
Cuatrimestre: 6
Módulo: III-CO
Carácter:
Página: Pulsa aquí para ver la página particular de la asignatura

La asignatura pertenece a los Estudios de Grado
 
     


Profesores 2010-11
GUERRERO ABENZA, JUAN ANTONIO
MORENO VALVERDE, GINES DAMIAN


Tutorías 2010-11
primer cuatrimestre segundo cuatrimestre
GUERRERO ABENZA, JUAN ANTONIO
miércoles 11:30-14:30
viernes 11:30-14:30
martes 11:30-14:30
jueves 11:30-14:30
MORENO VALVERDE, GINES DAMIAN
lunes 11:00-12:00
martes 11:30-13:30
jueves 10:30-13:30
martes 10:30-13:30
jueves 10:30-13:30


Fechas de Exámen 2010-11
día hora aulas centro tipo comentarios
02-06-2011 16:00 1.1 ESII GRUPO ÚNICO
08-07-2011 16:00 1.3 ESII GRUPO ÚNICO


Datos Generales 2010-11
Requisitos Previos

Esta asignatura se imparte en el tercer curso de la titulación, lo que permite asumir que los alumnos que la vayan a cursar, ya tendrán el suficiente entrenamiento en otras disciplinas afines que les habrán aportado conocimientos, capacidades y niveles de abstracción suficientes para asimilar convenientemente los contenidos que se imparten en la misma.

En lo que respecta a conocimientos previos, se espera una formación media en:

- Formalismos Matemáticos. Aquí se pone especial énfasis en los conocimientos referentes a lógica matemática y, en menor medida, álgebra, ya que suponen la base formal de los lenguajes lógicos y funcionales que se estudian clásicamente dentro del paradigma declarativo.

- Lenguajes y Técnicas de Programación. El alumno debe estar suficientemente familiarizado con algunos lenguajes de programación de estilo imperativo u orientado objeto, así como con técnicas de programación básicas, que en general no tengan por qué ser totalmente dependientes de un lenguaje de programación concreto para su implementación final. Esto permitirá contrastar de forma más satisfactoria el nuevo paradigma declarativo con otros estilos de programación, resaltando el amplio repertorio de recursos expresivos que aportan a la hora de codificar la solución a un problema minimizando el tamaño de las aplicaciones.

- Algorítmica y Estructuras de Datos. En relación con el apartado anterior, se espera que el alumno conozca las estructuras de datos y los esquemas algorítmicos básicos a la hora de representar y manipular la información de forma conveniente, para que posteriormente pueda simplificar tanto las tareas de implementación y mantenimiento, como el cálculo de coste computacional haciendo uso de tecnología declarativa.

- Teoría de Autómatas y Computación. Puesto que la programación declarativa viene aportando lenguajes de programación con altos niveles de abstracción y sólida cimentación matemática, se espera que el alumno conozca y sepa aplicar los fundamentos de la teoría de lenguajes formales, especificaciones algebraicas y métodos formales de la ingeniería del software.

Más específicamente el alumno debería:

- Ser capaz de trabajar dentro de un marco matemático y formal, y conocer la especificación de la sintaxis de un lenguaje de programación.

- Poseer cierta capacidad de abstracción que le permita fijarse en las ideas y conceptos claves
por encima de los detalles y la notación utilizada.

- Ser capaz de describir e interpretar de forma precisa algoritmos expresados en forma de pseudocódigo, pero también de diseñar algoritmos eficientes para resolver un problema dado y hacer uso de las mejores herramientas que les aporte un cierto lenguaje de programación elegido para su implementación final.


Justificación en el Plan de Estudios, Relación con otras asignaturas y con la profesión

En los inicios de la era de la programación, dos son los grandes esquemas computacionales que emergen desde un mundo que todavía es más matemático que informático. Ambos marcos, aún cuando mantienen ciertas correspondencias y equivalencias desde una visión muy abstracta, repercuten posteriormente de forma muy distinta en los estilos de programación modernos. Si bien el lambda-cálculo de Church y Kleene de alguna manera inicia la trayectoria declarativa, por su parte la Máquina de Turing se erige como fuente de inspiración para la tradición imperativa. Este último caso se implanta físicamente de forma muy rápida sobre la arquitectura de Von Newman (que en esencia sigue vigente en el diseño de los computadores actuales), aprovechando las claras sinergias existentes entre el modelo lógico y el físico.

Esta evolución es en buena parte responsable de que el impacto de la programación declarativa sea a día de hoy mucho menor que el estilo imperativo a varios niveles, incluido el académico, aún cuando buena parte de los recursos expresivos de los lenguajes que se estudian en las carreras de informática tienen precedentes con fuerte sabor declarativo (recursión, tipos, etc.). De esta manera, para evitar que el desconocimiento de esta perspectiva de programación pueda sesgar el nivel de formación que requieren unos estudios superiores en informática, la asignatura de programación declarativa puede resultar fundamental especialmente para los alumnos que opten por la intensificación de computación.

El estudio de los lenguajes lógicos (como Prolog) y funcionales (Haskell), supone una salida práctica a buena parte de los conocimientos teóricos que el alumno adquiere en las asignaturas de Lógica y Álgebra, impartidas desde el Departamento de Matemáticas. A su vez, como herramientas de programación, complementan la percepción del concepto de programación que el alumno adquiere en otras asignaturas donde raramente se introducen conceptos que vayan más allá del mundo imperativo y orientado a objetos, obviando recursos expresivos tan potentes como la re-evaluación, pereza, reversibilidad, orden superior, etc. Todos estos enriquecimientos (que en un futuro más o menos cercano podrían ser transferidos a otros lenguajes más populares, como ya ha ocurrido con la recursión y los sistemas de tipos) redundan en una enorme simplificación del código, tanto en su concepción como en su tamaño, al estar más cercano al intelecto humano, lo que a su vez revierte en mejores condiciones para el mantenimiento, análisis y optimización de las aplicaciones software.

Los programas declarativos pueden verse como versiones directamente ejecutables de las especificaciones algebraicas que se estudian en asignaturas de estructuras de datos, y también como prototipos de aplicaciones informáticas que se abordan en las primeras fases de sus ciclos de vida, aspectos que se abordan en asignaturas de ingeniería del software. Además, gracias a su alto nivel de abstracción y su capacidad para explorar sistemáticamente y de forma natural grandes espacios de búsqueda, estos lenguajes vienen aplicándose satisfactoriamente en el mundo de la inteligencia artificial, sistemas basados en reglas, ingeniería del conocimiento, bases de datos (deductivas), teoría de juegos, sistemas inteligentes, procesamiento de lenguajes, etc… a los que más recientemente se están incorporando nuevos campos como el soft-computing y la web semántica. Todo este abanico de posibilidades conecta la asignatura de programación declarativa con buena parte de las que componen los dos últimos años del grado, al tiempo que amplía la visión de los futuros titulados para ejercer su profesión.




Temario/Contenidos 2010-11
Tema 1. Estilos de programación. Programación declarativa.

Tema 2. Programación lógica.
1. Introducción. Sintaxis y terminología.
2. Cláusulas. Cláusulas de Horn.
3. Programación con cláusulas de Horn.
4. Sustitución y Unificación.
5. Resolución. SLD-Resolución.
6. Lógica y control. SLD-árboles.

Tema 3. El lenguaje Prolog.
1. Elementos sintácticos.
2. Términos como estructuras de datos.
3. Listas.
4. Igualdad y negación.
5. Seguimiento de un programa.
6. El corte y sus usos.
7. Predicados predefinidos.
8. Definición de operadores.

Tema 4. Técnicas avanzadas de programación en Prolog.
1. Parámetros acumuladores.
2. Simulación de variables imperativas.
3. Generar y comprobar.
4. Búsqueda en grafos.
5. Reglas gramaticales (DCG´s).

Tema 5. Programación funcional.
1. Estilo aplicativo.
2. Programación funcional con tipos. Haskell.
3. Declaración de datos y tipos de datos.
4. Declaración de funciones. Reglas de reescritura. Patrones.
5. Definiciones locales.
6. Apéndice: Cadenas (strings). Errores.

Tema 6. Programación funcional avanzada.
1. Funciones de orden superior.
2. Funciones estrictas y no estrictas. Evaluación voraz y evaluación perezosa.
3. Manejo de estructuras infinitas.
4. Formas especiales con listas. Secuencias aritméticas. Comprehesión de listas.

Tema 7. Programación simbólica.
1. S-expresiones.
2. Introducción a LISP.
3. Interpretación de S-expresiones.
4. Manejo de listas.
5. Funciones y variables.
6. Igualdad. Aritmética. Condicionales. Expresiones cualificadas.
7. Orden superior.
8. Aplicaciones.



Bibliografia 2010-11
Título Autor Editorial Año
From Logic Programming to Prolog Apt, K. Prentice Hall 1997
Introducción a la Programación Funcional en Haskell. (2ª ed) Bird, R.; Walder, P. Prentice-Hall 2000
PROLOG: Programming for Artificial Intelligence Bratko, I. Addison Wesley 1990
Programación en Prolog Clocksin, W.F.; Mellis, C.S. Gustavo Gili 1987
From Logic to Logic Programming Doets, K. The MIT Press, Cambidge 1994
Prolog by example. How to learn, teach and use it Coelho,H.; Cotta,J.C. Springer-Verlag 1988
Functional programming Field, A.J.; Harrison, P.G. Addison Wesley 1988
Essentials of Logic Programming Hogger, C. Oxford University Press 1990
A gentle inttroduction to Haskell (versiones 94 y 98) Hudak, P.; Peterson, J.; Fasel, J.H http:// haskell.org 1999
Programación Lógica. Teoría y Práctica Julián, P.; Alpuente, M. Pearson-Prentice Hall 2007
Trem Rewriting Systems. En Handbook of Logic in Computer Science, Vol. I Klop, J. Oxford Univ. Press 1992
Lógica, programación e inteligencia artificial Kowalski, R. Diaz de Santos 1988
Computation as Logic Lalement, R. Prentice Hall 1993
Foundations of logic programming Lloyd, J.W. Springer-Verlag 1987
Elements of Functional Programming Reade, C. Addison Wesley 1993
Symbolic computing with Lisp and Prolog Robert, A.M.; Rex, L.P. John Wiley & sons 1988
Razonando con Haskell. Una introducción a la Programación Funcional Ruíz, B.C.; Gutiérrez, F.; Guerrero, P.; Gallardo, J.E. Universidad de Málaga 2000
Sicstus Prolog User's Manual Sicstus Prolog Swedish Institute of Computer Science 2008
The art of Prolog: Advanced programming techniques Sterling, L.; Shapiro, E. The MIT Press, Cambidge 1986
HASKELL: The Craft of Functional Programming Thomsom, S. Addison Wesley 1996
Common Lisp. A gentle introduction to symbolic computation Touretzky, D.S. The Benjamin/Commings Publishing Company, Inc. 1989


 

Sindicación     Sindicación     Sindicación
Curso: 2010-11
© Departamento de Sistemas Informáticos
ESII - Avda. de España s/n
02071 Albacete
Tfno: 967 59 92 00 - Fax: 967 59 92 24

aviso legal