Ministerio de Cultura y Educación
Universidad Nacional de San Luis
Facultad de Ciencias Físico Matemáticas y Naturales
Departamento: Informatica
Área: Area IV: Pr. y Met. de Des. del Soft.
(Programa del año 2020)
I - Oferta Académica
Materia Carrera Plan Año Periodo
(OPTATIVAS) PROGRAMACION FUNCIONAL EN HASKELL-APLICACIONES ING. INFORM. 026/12- 08/15 2020 1° cuatrimestre
II - Equipo Docente
Docente Función Cargo Dedicación
NECCO, CLAUDIA MONICA Prof. Responsable P.Asoc Exc 40 Hs
III - Características del Curso
Credito Horario Semanal Tipificación Duración
Teórico/Práctico Teóricas Prácticas de Aula Práct. de lab/ camp/ Resid/ PIP, etc. Total B - Teoria con prácticas de aula y laboratorio Desde Hasta Cantidad de Semanas Cantidad en Horas
Periodo
2 Hs.  Hs.  Hs. 3 Hs. 5 Hs. 1º Cuatrimestre 09/03/2020 19/06/2020 15 75
IV - Fundamentación
En la actualidad están empezando a usarse cada vez más el paradigma de la programación declarativa para aplicaciones y proyectos a gran escala, no es difícil encontrar entornos empresariales reales donde los lenguajes declarativos se utilizan para resolver problemas.
La programación declarativa consta de dos grandes bloques temáticos, la programación funcional y la programación lógica. Podemos encontrar código escrito usando programación lógica y/o funcional en entornos tan dispares como aplicaciones de bases de datos de comercio electrónico, herramientas de gestión financieras, software de predicción económica, sistemas de control de semáforos, herramientas de parseado, aplicaciones de planificación (por ejemplo, existen exitosas aplicaciones de planificación para la asignación de personal de aerolíneas a vuelos comerciales escritas en el lenguaje funcional Haskell), desarrollo de intérpretes de comandos y de lenguajes de guiones (componentes que aparecen en multitud de aplicaciones empresariales propietarias de gran tamaño), aplicaciones de inteligencia artificial, sistemas de procesamiento de lenguaje natural, etc.
Es importante proporcionar al alumno de informática formación en diferentes paradigmas de programación, que le proporcionen habilidades distintas a las desarrolladas en el contexto de los paradigmas más convencionales de programación procedural/orientada a objetos.
V - Objetivos / Resultados de Aprendizaje
Los objetivos de esta asignatura son:

- Profundizar en los fundamentos del paradigma de la Programación Declarativa, en particular en los principios y técnicas de la programación funcional.

- Utilizar el lenguaje funcional Haskell, un estándar hoy en día en la comunidad educativa para la enseñanza de la Programación Funcional, así como en la investigación de otros conceptos y formalismos.

- Dar una visión al alumno de un paradigma de programación distinto de los que conoce, que implica una forma de resolver problemas diferente y constituye además un complemento de su formación, profundizando los conocimientos introducidos en la asignatura "Programación II".

- Presentar usos y aplicaciones actuales del paradigma en diferentes líneas, tales como: Interfaces de Bases de datos, Bioinformática, Interfaces Gráficas de Usuario (IGU), Gráficos, etc.
VI - Contenidos
Tema 1. Introducción y Repaso
Tipos de Datos: Constructores de tipo predefinidos. Definiciones de tipos. Sinónimos de tipo. Definiciones de tipos de datos. Tipos Polimórficos. Listas.
Listas por comprensión.
Funciones: definiciones locales. Funciones de orden superior. Expresiones lambda. Aplicación parcial. Funciones de plegado.

Tema 2. Polimorfismo
Tipos Algebraicos (Polimórficos). Tipos recursivos. Diseño de programas usando tipos algebraicos. Tipos abstractos de datos.

Tema 3. El sistema de clases
Funciones Sobrecargadas. Algunas Clases e Instancias predefinidas. Instancias paramétricas. Derivación de instancias. Tipos sobrecargados: Contextos.

Tema 4. Entrada/Salida
Programación "imperativa" sin efectos colaterales. Introducción a los Functores, Functores Aplicativos y Monads para la programación funcional. El monad I/O.

Tema 5. Aplicaciones
Análisis, estudio, presentación y discusión sobre alguna librería existente (aplicación), escrita en lenguaje Haskell. Desarrollo de código usando la librería elegida.

VII - Plan de Trabajos Prácticos
1) desarrollo prácticos de aula en lenguaje Haskell .

2) Desarrollo y presentación de un proyecto en lenguaje Haskell.

3) Busqueda en Internet de publicaciones sobre aplicaciones actuales del paradigma.
4) Elección, análisis y presentación individual de una biblioteca, aplicación o herramienta escrita en Haskell, que debe incluir una evaluación personal y posterior discusión de la misma en el contexto de su aplicabilidad, eficiencia, etc. Se desarrollará código usando la herramenta elegida.
VIII - Regimen de Aprobación
CONDICIONES PARA DICTADO REGULAR

- Para regularizar la asignatura:
El alumno debe:
1) asistir al menos al 80% de las clases teórico/practicas y de laboratorio de la materia.
2) presentar y aprobar de los trabajos prácticos solicitados.
3) presentar y aprobar el proyecto solicitado.
4) Realizar el análisis, seguido de una presentación oral sobre alguna aplicación actual del paradigma. Esta presentación debe incluir una evaluación personal y posterior discusión de la aplicación en el contexto de su aplicabilidad, eficiencia, etc.

- Para promocionar la asignatura:
El alumno debe cumplir con las condiciones de regularización con un nivel superior o igual al 70% del total y aprobar la sección especial de integración de cada evaluación.

Habrá dos instancias adicionales para la presentación (recuperación) de los puntos 2) y 3) en caso de no haber alcanzado la nota requerida para la regularización/promoción en la primera instancia.

No se aceptan alumnos libres.

CONDICIONES EXCEPCIONALES - Programa en Fase No Presencial

1) Modalidad Sincrónica
- Los alumnos deberán conectarse vía Internet en los horarios de asistencia ALTAMENTE RECOMENDADA a clases teórico/practicas convenidas con la docente. Para tal fín se realizarán videoconferencias con la aplicación gratuita ZOOM. Los alumnos serán consultados sobre sus posibilidades de conectividad, a los fines de proveer soluciones alternativas para aquellos alumnos que no puedan cumplir esta modalidad.
- Los alumnos podrán conectarse vía Internet en los horarios de asistencia RECOMENDADA a las clases de aula y laboratorio, usando la aplicación mencionada en el punto anterior, para consultas generales.

2) Modalidad Asincrónica
Via e-mail se enviará a los alumnos bibliografía obligatoria y opcional, prácticos y laboratorios de entrega obligatoria.

3) Modalidad Asincrónica con límite temporal
Los alumnos deben presentar los laboratorios solicitados los días estipulados por la docente enviándolos por mail a la cuenta: progUNSLCMN@gmail.com
IX - Bibliografía Básica
[1] Guía de estudio del Lenguaje Haskell. Material provisto por la Catedra.
[2] Learn You a Haskell for Great Good!.A Beginner's Guide by Miran Lipovaca. No Starch press. April 2011, 400 pp. ISBN-13: 978-1-59327283-8, ISBN-10: 978-1-59327283-8. Adaptación al español gratuita on-line en http://aprendehaskell.es/).
[3] Real World Haskell, Bryan O'Sullivan, Don Stewart, and John Goerzen. Paperback: 700 pages, O'Reilly, November 2008, English, ISBN-10: 0596514980, ISBN-13: 978-0596514983. Disponible on line gratuito en http://book.realworldhaskell.org/
X - Bibliografia Complementaria
[1] Programación Funcional. Jeroen Fokker.Universidad de Utrecht, 90 páginas. 1996. Versión On-Line: https://openlibra.com/es/book/programacion-funcional-ed-fokker
XI - Resumen de Objetivos
- Profundizar el paradigma de la Programación Funcional.

- Introducción a la programación monádica del lenguaje funcional Haskell

- Análisis de aplicaciones actuales del paradigma.
XII - Resumen del Programa
Programación Funcional en Lenguaje Haskell:
- Tipos de Datos, Funciones, Polimorfismo, Sistema de clases.
- Functores, Functores Aplicativos y Monads.
- Entrada/Salida en el lenguaje Haskell.
- Aplicaciones y usos actuales del Paradigma.
XIII - Imprevistos
 
XIV - Otros