Download PLAN GLOBAL

Document related concepts

Haskell wikipedia , lookup

Programación funcional wikipedia , lookup

Meta Lenguaje wikipedia , lookup

Mónada (programación funcional) wikipedia , lookup

Glasgow Haskell Compiler wikipedia , lookup

Transcript
PLAN GLOBAL
I.
DATOS DE IDENTIFICACIÓN
UNIVERSIDAD
FACULTAD
CARRERA O
PROGRAMA
ASIGNATURA O
MATERIA
SEMESTRE O AÑO
GESTIÓN
CARGA HORARIA
DOCENTE
II.
UNIVERSIDAD MAYOR DE SAN SIMÓN
FACULTADAD DE CIENCIAS Y TECNOLOGÍA
INGENIERÍA INFORMÁTICA
PROGRAMACIÓN FUNCIONAL
SEMESTRE II
2015
96 HORAS ACADÉMICAS
LIC. GOMEZ AJHUACHO, DIEGO CARLOS
JUSTIFICACIÓN
Los lenguajes de programación tienden a lo funcional. Muchos de los lenguajes de
paradigma orientado a objetos (C#, Java, Ruby), incluyendo los de scripting
(Javascript), están añadiendo conceptos funcionales a sus lenguajes base.
Ésta tendencia se debe a los beneficios que aporta el paradigma funcional en el
desarrollo de programas informáticos. Por ejemplo:
a. El tratamiento de funciones como ciudadanos de primera clase que permite la
creación y utilización de funciones de alto orden. Ésta característica
recientemente fue añadida en la versión 8 del lenguaje de programación Java
de Oracle con el proyecto Lambda.
b. Composición de funciones, permite la creación de nuevas funciones a través
de la composición de las mismas. Es una característica que el lenguaje
Javascript lo ha estado manteniendo desde hace tiempo.
c. Evaluación perezosa o denominada también evaluación según la necesidad. Es
una característica que permite el tratamiento de operaciones infinitas.
d. Tratamiento monádico de procesos y acciones. Permite realizar una
abstracción sobre el proceso.
Todas éstas características son comunes en los lenguajes de programación funcional y
por esa razón se debe dar importancia a la enseñanza de Programación Funcional en la
formación académica de los futuros profesionales de nuestro medio.
Con los conocimientos del Programación Funcional, el futuro profesional será capaz de
realizar una abstracción basada en el comportamiento, es decir en la forma como las
funciones interactúan en la solución de un problema. Además, será capaz de aplicar y
utilizar conceptos funcionales en el desarrollo de programas informáticos.
Página 1
La materia de Programación Funcional es la base para futuras materias con las cuales
tiene una relación vertical y directa: Teoría de Autómatas y Lenguajes Formales,
Semántica de Lenguajes de Programación y Taller de Compiladores.
Asimismo, se requiere que el estudiante posea conocimientos de matemática básica.
III.
PROPÓSITO GENERAL DE LA ASIGNATURA
Desarrollar en el estudiante la capacidad de abstracción y resolución de problemas
desde un punto de vista funcional, incentivando al estudiante la realización de
investigación a través de la lectura de papers, realización de laboratorios o prácticas e
implementación de un proyecto, y esta manera preparar al futuro profesional para el
desarrollo e implementación de programas informáticos donde aplique lo aprendido.
IV.
COMPETENCIAS A DESARROLLAR EN LOS ESTUDIANTES
Desarrolla programas informáticos que respondan a los requerimientos del mercado,
aplicando las técnicas, conceptos y utilidades de la Programación Funcional.
V.
ORGANIZACIÓN DE UNIDADES
UNIDAD I: Introducción a la Programación Funcional
COMPETENCIAS
COMPETENCIAS
Desarrolla programas informáticos que respondan a los requerimientos del mercado,
aplicando las técnicas, conceptos y utilidades de la Programación Funcional.
CONTENIDOS
CONCEPTUALES
 Paradigmas de los
lenguajes de
programación
 Introducción al
lenguaje de
programación
funcional Haskell y
sus aplicaciones
PROCEDIMENTALES
 Instalación de un
compilador para
Haskell
 Administración las
librerías para el
compilador Haskell
 Preparación y
selección del
proyecto de materia
ACTITUDINALES
 Interés por el
paradigma funcional.
INDICADORES




INDICADORES
Conoce los diferentes paradigmas de los lenguajes de programación.
Sabe que es Haskell y sus aplicaciones.
Instala un compilador para Haskell y administra las librerías
Participa en clases.
Página 2
UNIDAD II: Introducción a los tipos, clases y funciones de Haskell
COMPETENCIAS
COMPETENCIAS
Desarrolla programas informáticos que respondan a los requerimientos del mercado,
aplicando las técnicas, conceptos y utilidades de la Programación Funcional.
CONTENIDOS
CONCEPTUALES
Conceptos básicos
sobre tipos y
funciones
 Conceptos sobre
clases en Haskell

PROCEDIMENTALES
 Identificación de
tipos básicos
 Elaboración de
funciones sencillas
 Elaboración manual y
automática del tipo
de una función
ACTITUDINALES
Interés por el
aprendizaje de la
elaboración manual
del tipo de una
función
 Valoración por la
elaboración manual
del tipo de una
función

INDICADORES





INDICADORES
Explica los conceptos sobre tipos, funciones y clases
Conoce los tipos y clases básicas
Elabora de manera manual y automática el tipo de una función
Participa regularmente en clases demostrando interés por el aprendizaje de
generación de tipos de funciones
Comprende la importancia de la elaboración manual de los tipos de funciones ya que
ellos validan la correctud de las funciones.
UNIDAD III: Sintaxis de las funciones en Haskell
COMPETENCIAS
COMPETENCIAS
Desarrolla programas informáticos que respondan a los requerimientos del mercado,
aplicando las técnicas, conceptos y utilidades de la Programación Funcional.
CONTENIDOS

CONCEPTUALES
Creación de funciones por:
o Comparación por
patrones
o Definiciones por casos
o Definiciones locales
PROCEDIMENTALES
 Creación de
funciones de
diferentes formas
 Utilización de las
diferentes formas
Página 3
ACTITUDINALES
 Valora la
expresividad
de las
diferentes
formas de




o Expresiones lambda
Tipos de expresiones:
o Condicionales
o Variables de contexto
Funciones recursivas
Composición de funciones
Aplicación parcial de funciones

de expresiones
en Haskell
Elaboración del
primer prototipo
del proyecto de
materia
creación de
funciones y
expresiones.
INDICADORES



INDICADORES
Conoce y utiliza las diferentes formas de creación de funciones y expresiones.
Participa en clases con preguntas y resuelve ejercicios
Realiza los avances respectivos para su proyecto final
UNIDAD IV: Funciones de Orden Superior y Polimorfismo
COMPETENCIAS
COMPETENCIAS
Desarrolla programas informáticos que respondan a los requerimientos del mercado,
aplicando las técnicas, conceptos y utilidades de la Programación Funcional.
CONTENIDOS


CONCEPTUALES
Funciones de orden
superior y su utilidad en:
o Mapas y filtros
o Folds y Scans
Funciones polimórficas y
su aplicación en listas y
tuplas
PROCEDIMENTALES
 Rescritura de
funciones básicas
utilizando
funciones de alto
orden y
polimórficas
INDICADORES



INDICADORES
Conoce los conceptos de funciones de alto orden y polimórficas
Utiliza las funciones de alto orden en los ejercicios
Participa en clases con las preguntas y ejercicios
Página 4
ACTITUDINALES
 Valora la
importancia de las
funciones de alto
orden y
polimorfismo
UNIDAD V: Definición de tipos y clases en Haskell
COMPETENCIAS
COMPETENCIAS
Desarrolla programas informáticos que respondan a los requerimientos del mercado,
aplicando las técnicas, conceptos y utilidades de la Programación Funcional.
CONTENIDOS


CONCEPTUALES
Definición de Tipos de Datos
o Algebraicos
o Enumerados
o Polimórficos
o Recursivos
Definición Clases
o Instanciación
o Instancias derivadas
PROCEDIMENTALES
 Creación de tipos
de datos de
diferentes formas
 Instanciación de
tipos de datos
 Elaboración de
segundo
prototipo del
proyecto de
materia
ACTITUDINALES
 Interés en la
creación de
tipos y clases
INDICADORES




INDICADORES
Crea sus propios tipos y clases de datos utilizando adecuadamente la recursividad y
polimorfismo
Elabora las instancias para sus tipos creados
Participa en clases en las preguntas y ejercicios
Realiza los avances respectivos para su proyecto final
UNIDAD VI: Módulos, Clases y Utilidades en Haskell
COMPETENCIAS
COMPETENCIAS
Desarrolla programas informáticos que respondan a los requerimientos del mercado,
aplicando las técnicas, conceptos y utilidades de la Programación Funcional.
CONTENIDOS


CONCEPTUALES
Agrupación de funciones y
tipos por módulos
Sistema de Clases
o La clase Functor
o Módulo Data.List
o Módulo Data.Char
PROCEDIMENTALES
 Cargar librerías en
el intérprete de
Haskell y
programas.
Página 5

ACTITUDINALES
Valora la
utilización de
funciones en vez
de volver a
crearlas
o
o
Módulo Data.Map
Módulo Data.Set
INDICADORES


INDICADORES
Conoce y aplica el concepto de módulos de Haskell en sus programas
Conoce y utiliza una serie de funciones básicas de cada grupo en sus programas
UNIDAD VII: Manejo de entrada, salida y Monads en Haskell
COMPETENCIAS
COMPETENCIAS
Desarrolla programas informáticos que respondan a los requerimientos del mercado,
aplicando las técnicas, conceptos y utilidades de la Programación Funcional.
CONTENIDOS




CONCEPTUALES
La notación ‘do’ y el
tipo IO
Funciones para
manejo de archivos
Funciones para
manejo de línea de
comandos del
sistema
Introducción a
Monads
PROCEDIMENTALES
 Manejo de archivos
en Haskell
 Manejo de funciones
para línea de
comandos en Haskell
 Elaboración del
tercer prototipo del
proyecto de materia
ACTITUDINALES
 Valora la importancia
de las funciones
puras y funciones con
IO
INDICADORES




INDICADORES
Maneja archivos en Haskell, junto con funciones de línea de comandos
Conoce la utilidad de Monads de Haskell
Participa en clases en las preguntas y ejercicios
Realiza los avances respectivos para su proyecto final
UNIDAD VIII: Varios tópicos en Haskell
COMPETENCIAS
COMPETENCIAS
Desarrolla programas informáticos que respondan a los requerimientos del mercado,
aplicando las técnicas, conceptos y utilidades de la Programación Funcional.
Página 6
CONTENIDOS
CONCEPTUALES
Haskell lenses
Bases de datos en
Haskell
 Interfaces gráficas en
Haskell
 Aplicaciones Web en
Haskell
INDICADORES





VI.
PROCEDIMENTALES
 Elaboración del
proyecto final de la
materia

ACTITUDINALES
Interés en la
aplicación de Haskell
en otras areas
INDICADORES
Conoce las librerías y tecnologías disponibles en Haskell para aplicaciones específicas
Participa en clases en las preguntas
Realiza los avances respectivos para su proyecto final
METODOLOGÍA
Para el desarrollo de la materia de Programación Funcional se utilizará el enfoque
Constructivista con el cual se mantendrá un proceso dinámico, participativo e
interactivo entre el docente y estudiante.
Se utilizará técnicas como la recuperación de conocimientos previos, contrastación de
conocimientos, zonas de desarrollo próximo, equilibrio-desequilibrio-reequilibrio de
las estructuras de conocimiento y aprendizajes significativos que son propios del
enfoque constructivista.
Los conocimientos que se impartirán en la materia están divididos en Conceptos,
Procedimientos y Actitudes de manera el estudiante no solo aprenda teoría, sino
también práctica y moral.
A lo largo de la materia el estudiante trabajará en un proyecto de pequeño-mediano
alcance donde podrá aplicar lo aprendido en la materia.
Cada una de las clases estará dividido en 3 momentos: inicio, desarrollo y finalización.
En el momento de inicio se trabajará en la recuperación de conocimientos previos y la
presentación del propósito de la clase respectiva. Se utilizara diferentes actividades
como ser: videos, cuestionarios, discusiones grupales, etc.
En el momento del desarrollo se trabajará en la contrastación de los conocimientos
previos con los nuevos contenidos, como también en la estructuración y aplicación
delos nuevos conocimientos. En ésta parte se tendrá clases magistrales donde se
expondrá los diferentes conceptos, clases tutoriales donde se tendrá sesiones
aplicativas en laboratorio y clases de discusión donde se interactuará directamente
con los estudiantes mediantes los ejercicios de clase, prácticas y casos de aplicación.
Para momento de finalización se recapitulará lo aprendido y se incentivará a una
reflexión de manera que el estudiante este seguro de los nuevos conocimientos
adquiridos.
Página 7
La lo largo de la materia se evaluará diferentes aspectos como ser la participación en
clases, la interacción grupal, los diferentes trabajos y ejercicios y el proyecto final.
Asimismo se tendrá 2 exámenes que evalúen los conocimientos adquiridos.
VII.
CRONOGRAMA DE ACUERDO AL NÚMERO DE SESIONES CON
DISTRIBUCIÓN DE CONTENIDOS POR SESIÓN
UNIDAD
UNIDAD I
UNIDAD II
UNIDAD III
UNIDAD IV
UNIDAD V
UNIDAD VI
UNIDAD VII
UNIDAD VIII
VIII.
NOMBRE DE LA UNIDAD
Introducción a la
Programación Funcional
Introducción a los tipos,
clases y funciones de Haskell
Sintaxis de las funciones en
Haskell
Funciones de orden superior
y Polimorfismo
Definición de tipos y clases
en Haskell
Módulos, Clases y Utilidades
en Haskell
Manejo de entrada, salida y
Monads en Haskell
Varios tópicos en Haskell
Nº DE SESSIONES/CLASES
3
4
6
6
6
6
6
6
EVALUACIÓN SEGÚN INDICADORES
UNIDAD
UNIDAD I
UNIDAD II
UNIDAD III
UNIDAD IV
UNIDAD V
UNIDAD VI
UNIDAD VII
UNIDAD VIII
Actividades
derivadas de los
indicadores que
serán evaluados
Participación
Trabajos o
tareas
Primer parcial
Tipo de
Evaluación
Cuantitativa
Segundo parcial Cuantitativa
Proyecto final de
la material
Página 8
Instrumento de
evaluación
Puntaje
Participación
10%
20%
Examen
20%
Examen
Proyecto
20%
30%
BIBLIOGRAFÍA
Programming in Haskell
Graham Hutton. Addison-Wesley, 2007.
Introduction to Functional Programming using Haskell
Richard Bird. Prentice Hall, 1998.
The Haskell School of Expression. Learning Functional Programming through Multimedia
Paul Hudak. Cambridge University Press, 2000.
Haskell. The Craft of Functional Programming
Simon Thompson. Addison-Wesley, 1999.
Razonando con Haskell. Un curso sobre programación funcional
Blas Ruiz, Francisco Gutierrez, Pablo Guerrero y Jose Gallardo. Thomson, 2004.
Learn You a Haskell For Great!!
Miran Lipovaca.
Página 9