Usted está aquí: Inicio web asignaturas

Fichas de asignaturas 2006-07


  CÓDIGO NOMBRE
Asignatura 1713044 PROGRAMACIÓN FUNCIONAL
Titulación 1713 INGENIERÍA EN INFORMÁTICA
Departamento C137 LENGUAJES Y SISTEMAS INFORMATICOS
Curso -  
Duración (A: Anual, 1Q/2Q) 1Q  
Créditos ECTS 4  

Créditos Teóricos 2,5 Créditos Prácticos 2 Tipo Optativa

 

Profesorado
Inmaculada Medina Bulo (coordinadora)
Situación
prerrequisitos
Ninguno
Contexto dentro de la titulación
Esta asignatura introduce un paradigma de programación novedoso para el
alumno, que ha estudiado previamente el paradigma imperativo y el orientado a
objetos.

Supone aprender una nueva forma de enfocar y resolver problemas que produce
soluciones generales, elegantes y más fáciles de verificar.
Recomendaciones
Aunque no es en absoluto imprescindible, los alumnos que hayan cursado
previamente las asignaturas optativas de Programación Lógica y Lógica
Matemática se beneficiarán de los conocimientos adquiridos en ellas,
apreciando mejor las ventajas que presentan los lenguajes funcionales.
Competencias
Competencias transversales/genéricas
Capacidad para resolver problemas
Capacidad de análisis y síntesis
Comunicación oral y escrita
Trabajo en equipo
Competencias específicas
  • Cognitivas(Saber):

    Conocer los fundamentos del paradigma de la programación funcional
    Conocer el lenguaje funcional Haskell
    
  • Procedimentales/Instrumentales(Saber hacer):

    Resolver problemas empleando un enfoque funcional
    Modelar datos mediante estructuras funcionales
    Programar en el lenguaje funcional Haskell
    
  • Actitudinales:

    Creatividad
    Aprendizaje autónomo
Objetivos
Los objetivos que pretende cubrir la asignatura pueden resumirse en los
siguientes puntos:

1. Comprender el paradigma de la programación funcional y sus ventajas
2. Conocer los fundamentos del lenguaje funcional Haskell
3. Programar en el laboratorio siguiendo el paradigma funcional
Programa
Teoría: Programación funcional. (25h)

1. Paradigma de la programación funcional. (2h)
1.1. Introducción.
1.2. Funciones.
1.3. Sesiones y declaraciones.
1.4. Reducción de expresiones.

2. Conceptos fundamentales. (4h)
2.1. Tipos de datos.
2.2. Operadores.
2.3. Patrones.
2.4. Expresiones.

3. Funciones de orden superior y polimorfismo. (4h)
3.1. Parcialización (currificación).
3.2. Polimorfismo.

4. Definiciones de tipos y sistema de clases. (4h)
4.1. Definiciones de tipos.
4.2. Clases de tipos.

5. Listas, árboles y grafos. (6h)
5.1. Tipo lista.
5.2. Tipo árbol.
5.3. Tipo grafo.
5.4. Inducción estructural.

6. Evaluación perezosa. (5h)
6.1. Evaluación perezosa frente a evaluación impaciente.
6.2. Listas parciales e infinitas.
6.3. Redes finitas de procesos.

Prácticas: Programación funcional. (20h)

1. Entorno de desarrollo. (2h)
1.1. Hugs.
1.2. Opciones más frecuentes.
1.3. Ejecución desde Emacs.

2. Conceptos básicos (2h)
2.1. Primeros ejemplos.
2.2. Tipos de datos.

3. Funciones y expresiones (4h)
3.1. Definición de funciones.
3.2. Operadores.
3.3. Patrones.
3.4. Expresiones condicionales.
3.5. Definiciones locales.

4. Programación con listas (4h)
3.1. Tipo lista.
3.2. Casos de estudio.

5. Programación con árboles (4h)
4.1. Tipo árbol.
4.2. Casos de estudio.

6. Programación con grafos. (4h)
5.1. Tipo grafo.
5.2. Casos de estudio.
Metodología
Se empleará una metodología cuyo objetivo es lograr el aprendizaje a través de

la resolución de problemas. Las clases correspondientes a los créditos teóricos

constarán, fundamentalmente, de sesiones de resolución de problemas propuestos

con antelación en las que los alumnos podrán emplear cuantos materiales estimen

convenientes.

Los alumnos deberán primero intentar resolver los problemas por sí mismos, para

luego trabajar por parejas, explicándose mutuamente la solución obtenida e
intentando encontrar errores en la solución del compañero, o bien, intentando

llegar juntos a una solución. Posteriormente, las soluciones se pondrán en
común en grupo y se invitará a su exposición. El objetivo es fomentar el
trabajo cooperativo, el espíritu crítico y la comunicación.

Se hará especial hincapié en la necesidad de comprobar la corrección de la
solución final obtenida y su bondad respecto a distintos criterios, al objeto

de fomentar el espíritu crítico.

El profesor enseñará los conocimientos teóricos y técnicos necesarios bajo
demanda, conforme los alumnos los requieran para resolver los problemas
planteados, limitándose a actuar de guía en el proceso de aprendizaje. El
alumno es responsable de su propio aprendizaje.

No obstante, el profesor realizará al principio de cada tema una breve
introducción de sus aspectos principales y de dónde encontrar información
adicional, proporcionando diversos materiales a lo largo del curso.

Las clases prácticas complementan los contenidos de la parte teórica. Se
proporcionarán ejercicios que se desarrollarán en el laboratorio a lo largo del
curso.

Tanto las clases teóricas como las prácticas se servirán del campus virtual

como apoyo para la  docencia. Estarán disponibles herramientas de comunicación

como foros  especializados, tutorías electrónicas privadas y correo
electrónico, así como diversos contenidos en formato digital.
Distribución de horas de trabajo del alumno/a

Nº de Horas (indicar total): 100

  • Clases Teóricas: 19  
  • Clases Prácticas: 13  
  • Exposiciones y Seminarios: 7  
  • Tutorías Especializadas (presenciales o virtuales):
    • Colectivas: 6  
    • Individules:  
  • Realización de Actividades Académicas Dirigidas:
    • Con presencia del profesorado:  
    • Sin presencia del profesorado: 16  
  • Otro Trabajo Personal Autónomo:
    • Horas de estudio: 31  
    • Preparación de Trabajo Personal: 4  
    • ...
        
  • Realización de Exámenes:
    • Examen escrito: 4  
    • Exámenes orales (control del Trabajo Personal):  
Técnicas Docentes
Sesiones académicas teóricas:   Exposición y debate:   Tutorías especializadas:  
Sesiones académicas Prácticas:   Visitas y excursiones:No   Controles de lecturas obligatorias:No  
Criterios y Sistemas de Evaluación
Se emplearán como técnicas de evaluación exámenes y trabajos.

Como criterios de evaluación de tendrán en cuenta la claridad, elegancia y
eficiencia de las soluciones obtenidas y su adecuación a los principios del
paradigma de la programación funcional. Se valorará especialmente la capacidad
del alumno para explicar con claridad el proceso por el cual obtiene la
solución al problema.

El alumno podrá superar la asignatura mediante evaluación continua, a través de
la entrega de trabajos y la realización de exámenes durante el curso. La nota
final será en un 70% la media de las notas obtenidas en cada uno de los
trabajos propuestos y en un 30% la media de las notas obtenidas en los exámenes
de control.

No obstante, también es posible asistir a las convocatorias de exámenes finales
que establecen los Estatutos de la Universidad de Cádiz. A este efecto, la
asignatura se evaluará mediante un examen final realizado en el laboratorio y
la nota final será exclusivamente la obtenida en él.
Recursos Bibliográficos
Bibliografía básica.

Bird, Richard
Introducción a la programación funcional con Haskell.
Prentice-Hall. 2000.

Hudak, P.
The Haskell school of expression: learning functional programming through
multimedia.
Cambridge University Press. 2000.

Ruiz, Blas C.; Gutiérrez, Francisco; Guerrero, Pablo y Gallardo, José E.
Razonando con Haskell. Un curso sobre programación funcional.
Thomson. 2004.

Thompson, S.
Haskell: The craft of functional programming.
Addison-Wesley. 1996.

Bibliografía complementaria.

Jones, M. P.
Hugs user's manual.
The University of Nottingham and Yale University. 1998.

El presente documento es propiedad de la Universidad de Cádiz y forma parte de su Sistema de Gestión de Calidad Docente.