Download PLAN GLOBAL
Document related concepts
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