Programación Funcional

Guía de Aprendizaje – Información al estudiante

1 Datos Descriptivos

AsignaturaProgramación Funcional
MateriaDesarrollo de Software
DepartamentoLSIIS
responsable
Créditos ECTS3
CarácterObligatoria
TitulaciónGrado de Matemáticas e Informática
CursoTercero
EspecialidadNo aplica
Curso académico2012-2013
Semestre en el queSegundo
se imparte
Semestre principalSegundo
Idioma en el queCastellano
se imparte
Página Webhttp://web3.fi.upm.es/AulaVirtual/course/view.php?id=331

2 Profesorado

NOMBRE Y APELLIDODESPACHOCorreo electrónico
Pablo Nogueira (Coord.)D-2304pnogueira@fi.upm.es

3 Conocimientos previos requeridos para poder seguir con normalidad la asignatura

Asignaturas superadasProgramación I, Programación II,
Algoritmos y Estructura de Datos

4 Objetivos de aprendizaje

CódigoCompetencias TransversalesNivel
CG01Capacidad de resolución de problemas aplicando3
conocimientos de matemáticas, ciencias e ingeniería.
CG02Capacidad para el aprendizaje autónomo y la actualización3
de conocimientos, y reconocimiento de su necesidad en las
áreas de las matemáticas y la informática.
CG05Capacidad de abstracción, análisis y síntesis.3
CG08Capacidad de comunicarse de forma efectiva con los3
compañeros, usuarios (potenciales) y el público en general
acerca de cuestiones reales y problemas relacionados con
la especialización elegida.
CG10Capacidad para usar las tecnologías de la información y3
la comunicación.

LEYENDA: Nivel de adquisición 1: Bajo Nivel de adquisición 2: Medio Nivel de adquisición 3: Alto

CódigoCompetencias EspecificasNivel
CE07Conocer los cimientos esenciales y fundacionales de la
informática, abarcando tanto conceptos y teorías abstractosA
como los valores y principios profesionales, subrayando
los aspectos esenciales de la disciplina que permanecen
inalterables ante el cambio tecnológico.
CE08Formalización y especificación de problemas reales cuyaS
solución requiere el uso de la informática.
CE09Capacidad de elegir y usar los métodos analíticos yA
de modelización relevantes, y de describir una solución
de forma abstracta.
CE11Comprender intelectualmente el papel central que tienenS
los algoritmos y las estructuras de datos, así como una
apreciación del mismo.
CE13Poseer destrezas fundamentales de la programación queS
permitan la implementación de los algoritmos y las
estructuras de datos en el software.
CE26Conocimiento de los tipos apropiados de soluciones, yA
comprensión de la complejidad de los problemas informáticos
y la viabilidad de su solución.
CE27Conocer la influencia, uso y aplicación de los fundamentosA
matemáticos utilizados en la especificación y construcción
de programas en lenguajes de alto nivel (funcionales) y
analizar y desarrollar programas en lenguajes de alto nivel
donde se realizan los conceptos de los fundamentos lógicos
y algebraicos de la informática.
CE30Elegir y usar los lenguajes de programación adecuados alA
tipo de aplicación a desarrollar.
CE31Concebir y diseñar la arquitectura de un sistema softwareS
CE43Capacidad para trabajar de forma efectiva como individuo,A
organizando y planificando su propio trabajo, de forma
independiente o como miembro de un equipo.

LEYENDA: A: Aplicación S: Análisis y Síntesis

5 Resultados de aprendizaje

5.1 Resultados de aprendizaje de la asignatura

CódigoResultado de aprendizajeCompetenciasNivel de
asociadasadquisición
RA1Comprender los fundamentos matemáticosCE07, CE09,3
de la programación en los lenguajes deCE13, CE27
alto nivel funcionales.Todas las CG
RA2Desarrollar programas funcionales purosTodas las CE3
y monádicos.Todas las CG
RA3Comprender y analizar el comportamientoCE07-CE092
semántico (operacional y denotacional) deCE26, CE27
programas funcionales.CE43
Todas las CG

5.2 Sistema de evaluación de la asignatura

5.2.1 Indicadores de logro

RefIndicadorRelación
con RA
I1Comprende y utiliza los conceptos de función recursiva,RA1-RA3
álgebra de la programación, orden superior y semántica.
I2Comprende y utiliza las implicaciones prácticas de losRA3
mecanismos de evaluación.
I3Comprende y sabe construir programas funcionales con tiposRA1, RA2
algebraicos y monádicos.
I4Comprende y sabe utilizar el isomorfismo entre lógicaRA1, RA2
y programación funcional.
I5Comprende y utiliza código funcional relativamente avanzado.RA1, RA3
I6Conoce y utiliza la sintaxis y praxis del lenguaje Haskell 98.RA2, RA3
I7Comprende y utiliza librerías de código funcionalRA2

5.2.2 Evaluación sumativa

Breve descripción deMomentoLugarPeso en la
las actividades evaluablescalificación
PrácticaUna en el semestreAulas Informáticas100%
(sistema de evaluación continua)y en casa
ExamenUno en el semestreAulas de examen100%
(sistema de evaluación mediante prueba final y
convocatoria extraordinaria de julio)

6 Criterios de calificación

6.1 Introducción

Los criterios de evaluación de la asignatura se establecen en conformidad con la "Normativa Reguladora de los Sistemas de Evaluación" (en adelante "Normativa Reguladora") actualmente vigente en la Universidad Politécnica de Madrid para los planes de estudio adaptados al R.D. 1393/2007. Dicha normativa está disponible en la siguiente URL:

http://www.upm.es/sfs/Rectorado/Vicerrectorado%20de%20Alumnos/Informacion/Normativa/Normativa_Evaluacion.pdf

Las normas de esta guía pueden ser modificadas al comienzo del semestre en función de la disposición de recursos de la Facultad. Dichas modificaciones se anunciarán con toda la antelación posible en el transcurso de las clases y a través de los recursos informáticos de los que dispone la asignatura o, en su defecto, a través cualesquiera otros medios disponibles de la UPM, la Facultad, o sus departamentos.

6.2 Convocatorias

Según la Normativa Reguladora, se establecen dos convocatorias de evaluación:

  1. Convocatoria ordinaria, que se corresponde con las actividades de evaluación que se realizan durante el semestre.
  2. Convocatoria extraordinaria, que se corresponde con las actividades de evaluación que deben realizar aquellos estudiantes que no logren superar la asignatura en la convocatoria ordinaria. La convocatoria extraordinaria tiene lugar en el mes de julio y pueden concurrir a ella los alumnos que han estado matriculados en el semestre del año académico en el que se imparte la asignatura y no han superado la misma.

6.3 Convocatoria ordinaria

6.3.1 Sistemas de evaluación

Según la Normativa Reguladora, en la convocatoria ordinaria el alumno puede optar únicamente por uno de los siguientes sistemas de evaluación:

  1. Sistema de evaluación continua.
  2. Sistema de evaluación mediante prueba final.

El sistema de evaluación continua será el que se aplique en general a todos los alumnos de la asignatura. El alumno que desee seguir el sistema de evaluación mediante prueba final deberá comunicarlo mediante escrito firmado al coordinador de la asignatura en un plazo de 15 días naturales desde el comienzo de las clases. Los detalles del procedimiento y el escrito a rellenar se encuentran disponibles en en http://www.fi.upm.es/?pagina=1147

6.3.2 Sistema de evaluación continua

Se evalúa al alumno de forma continua a lo largo del semestre mediante la realización progresiva y tutorada de una práctica estructurada en partes.

La práctica completa se evaluará en una escala de 0 a 10 al terminar el semestre. Para aprobar la asignatura debe obtenerse una calificación mínima de 5 en la práctica. Los alumnos que no realicen la práctica tendrán una calificación de 0 en la convocatoria.

El alumno será evaluado al completar cada parte, pero dicha evaluación será utilizada para reforzar los conocimientos y no para calificar, acorde al espíritu de la evaluación continua y no al de evaluar continuamente. La nota final de la práctica reflejará el progreso del alumno además de su capacidad técnica y la consecución de los Resultados de Aprendizaje.

Las fechas de realización de cada parte de la práctica se indicarán con suficiente antelación de acuerdo a la Normativa Reguladora.

Las prácticas podrán ser individuales o en grupo en función de la disponibilidad de Aulas Informáticas.

En caso de verificarse plagio de la práctica tanto los copiador(es) como los copiado(s) anuentes tendrán la asignatura suspensa y se solicitará a Jefatura de Estudios la apertura de su expediente académico para que conste en el mismo que han plagiado.

6.3.3 Sistema de evaluación mediante prueba final

En esta modalidad se evalúa a los alumnos mediante un examen escrito al finalizar el semestre. La fecha y lugar estarán indicados en el calendario de exámenes del semestre. El examen se calificará de 0 a 10 y para aprobar la asignatura debe obtenerse una calificación mínima de 5.

En caso de verificarse plagio se aplicará la sanción descrita en la sección *Sistema de evaluación continua de esta guía.

6.4 Convocatoria extraordinaria

Los alumnos que no han superado la asignatura en la convocatoria ordinaria, independientemente del sistema de evaluación elegido para dicha convocatoria ordinaria, tienen la posibilidad de concurrir a la convocatoria extraordinaria del mes de julio.

En esta modalidad se evalúa a los alumnos mediante un examen escrito. La fecha y lugar será la marcada en el calendario de exámenes extraordinarios. El examen se calificará de 0 a 10 y para aprobar la asignatura debe obtenerse una calificación mínima de 5.

En caso de verificarse plagio se aplicará la sanción descrita en la sección *Sistema de evaluación continua de esta guía.

7 Contenidos y Actividades de Aprendizaje

Contenidos específicos

TemaApartadoIndicadores
relacionados
Tema 1:1.1 Tipo, expresión, función, operador.I1,I6,I7
Introducción1.2 Algebra libre, ajuste de patrones,I1,I3,I4
recursión e inducción. Semánticas.
1.3 Orden superior, polimorfismo, clasesI1-I7
de tipo. Semánticas.
Tema 2:2.1 Listas y definición por comprensión.I1,I3,I5-I8
Aplicaciones2.2 Estructuras de datos funcionales.I3-I7
2.3 Estructuras infinitas y co-recursión.I1,I2,I5,I6
Tema 3:3.1 Isomorfismo Curry-Howard.I1,I4,I5
Conceptos avanzados3.2 Mónadas.I1,I2,I3,I5
3.3 Implementación.I2,I3,I6,I7

8 Breve descripción de las modalidades organizativas y los métodos de enseñanza empleados

CLASES DE TEORÍAMétodo expositivo y estudio de casos.
PRÁCTICASAprendizaje basado en problemas.
TRABAJOS AUTÓNOMOSEjercicios voluntarios. Práctica.
TRABAJOS EN GRUPOPráctica
TUTORÍASAtención personalizada en
teoría y laboratorio.

9 Recursos didácticos

BIBLIOGRAFÍARichard Bird. Introduction to Functional Programming using Haskell.
–———————————————————————
Paul Hudak. The Haskell School of Expression.
–———————————————————————
Graham Hutton. Programming in Haskell.
–———————————————————————
Bruce J. MacLennan. Functional Programming: Practice and Theory.
–———————————————————————
Chris Reade. Elements of Functional Programming
RECURSOS WEBSitio Moodle de la asignatura
http://web3.fi.upm.es/AulaVirtual/course/view.php?id=331
Portal Haskell http://www.haskell.org.
EQUIPAMIENTOAulas docentes con proyector y pizarra. Aulas informáticas con
proyector, pizarra y ordenadores para los alumnos.
Compilador GHC e intérprete GHCi.

10 Cronograma de trabajo

SemanaActividades en AulaActividades enTrabajoTrabajoActividadesOtros
Aula InformáticaIndividualen Grupode Evaluación
Semana 1Tipo, expresión, función, operador.
(2 horas)Haskell 98. (2 horas)
Semana 2Tipo, expresión, funcion, operador.Estudio teoría
(5 horas)Haskell 98. Algebra libre, ajustey ejercicios voluntarios.
de patrones. Semánticas. (2 horas)(3 horas)
Semana 3Tipo, expresión, función, operador.Estudio teoría
(5 horas)Haskell 98. Algebra libre, ajustey ejercicios voluntarios.
de patrones. Semánticas. (2 horas)(3 horas)
Semana 4Tipo, expresión, función, operador.Estudio teoría
(5 horas)Haskell 98. Algebra libre, ajustey ejercicios voluntarios.
de patrones. Semánticas. Recursión e(3 horas)
inducción. (2 horas)
Semana 5Listas. Recursión e inducción.Estudio teoría
(5 horas)Polimorfismo. Orden superior. (2 horas)y ejercicios voluntarios.
(3 horas)
Semana 6Listas. Definición por comprensión.Estudio teoría
(5 horas)Polimorfismo. Orden superior.y ejercicios voluntarios.
(2 horas)(3 horas)
Semana 7Listas infinitas. Orden superior.Estudio teoría
(5 horas)Co-recursión. Semánticas.y ejercicios voluntarios.
(2 horas)(3 horas)
Semana 8Clases de tipos. Haskell 98.Estudio teoría y
(5 horas)(2 horas)Enunciado Práctica.
(3 horas)
Semana 9Clases de tipos y polimorfismo.Estudio teoría y
(6 horas)Haskell 98. Listas. (2 horas)Práctica. (4 horas)
Semana 10Implementación. Mónada Maybe.Estudio teoría y
(6 horas)(2 horas)Práctica. (4 horas)
Semana 11Implementación. Mónada IO.Estudio teoría y
(6 horas)(2 horas)Práctica. (4 horas)
Semana 12Mónadas. Isomorfismo Curry-Howard.Estudio teoría y
(6 horas)(2 horas)Práctica. (4 horas)
Semana 13PrácticaPráctica.
(5 horas)(2 horas)(3 horas)
Semana 14PracticaPráctica.
(5 horas)(2 horas)(3 horas)
Semana 15PrácticaPráctica.
(5 horas)(2 horas)(3 horas)
Semana 16PrácticaPráctica.
(5 horas)(2 horas)(3 horas)
Semana dePreparación examen finalExamen Final
Examen(8 + 16 horas)(3 horas)
(3 horas)

Nota: Para cada actividad se especifica la dedicación en horas que implica para el alumno.