3.2.3 - Programación Profesional

Tercer Año

Característica del Área Curricular
Plan 2015
Cuatrimestre Segundo
Hs. Cat. 90
Res. C.S. 291/2015

Presentación

Los lenguajes de programación son la herramienta fundamental en la práctica profesional del analista universitario en sistemas. Es por ello que es importante poder entenderlos a nivel profundo. Además cada vez es más común el uso de lenguajes especializados por lo que es importante que los estudiantes aprendan a diseñarlos e implementarlos ellos mismos.

Objetivos

La asignatura tiene como objetivo que el alumno adquiera los conocimientos necesarios para realizar software reactivo. Aprenda a seleccionar, modificar un lenguaje o generar uno nuevo para la resolución eficiente de problemas en un campo específico.

Buscará que el alumno adquiera autonomía para actuar en un ambiente acotado a los requisitos del trabajo.

Planteará un ambiente para que el alumno tenga una práctica de un trabajo real, donde pueda agrupar todos los conocimientos adquiridos hasta este momento y de esta forma desarrolle las capacidades, habilidades y actitudes necesarias para promover la autoformación, como signo distintivo de la madurez personal e intelectual.

Que sea capaz de abordar proyectos colaborativos e interdisciplinarios.

Contenido Temático

Unidad 1

Lenguajes formales. Alfabetos. Gramáticas. Gramáticas libres de contexto. Relación de derivación. Árboles de parseo. Gramáticas ambiguas. Eliminación de ambigüedades. Sintaxis concreta. Sintaxis abstractas. Árboles de sintaxis. Términos en forma inductiva. Términos en forma concreta.

Unidad 2

Analizadores sintácticos. Definición y ejemplos. Librería Parsing en Haskell. Derivación de una implementación de analizadroes sintácticos. Funciones primitivas y derivadas. Ejemplo extendido: análisis sintactico de un lenguaje aritmético. Asociatividad de operadores. El problema de la recursión a izquierda. Eliminación de recursión a izquierda. Librería Parsec Haskell.

Unidad 3

Semántica de lenguajes de programación. Equivalencias de programa. Enfoques de semántica de lenguajes. Semántica operacional, denotacional y axiomática. Semántica operacional. Relaciones de evaluación. Valores. Árboles de derivación. Proòedades de la relación de evaluación. Determinismo. Forma normal. Terminación. Unicidad de las formas normales. Ejemplo de semántica operacional. Rol de las categorías sintácticas. Términos atascados. Semántica denotacional de un lenguaje imperativo simple.

Unidad 4

Sistemas de tipos. Definición. Variantes. Propiedades básicas. Inferencia vs. Chequeo. Tipado fuerte. Lenguajes seguros. Teoremas de preservación y progreso. Formas canónicas. Lambda cálculo simple tipado. Sintaxis y semántica. Propiedades. Curry vs. Church. Sistema T de Gödel

Unidad 5

Abstracciones en programación. Funtores. Definición y propiedades. Ejemplos. Mónadas como generalización de substitución. Notación do. Entrada/Salida en Haskell. Ejemplos de mónadas comunes: error, reader, writer, state transformer. Listas como mónadas. Lenguajes de dominio específico. Embebido profundo y superficial. Uso de mónadas en la implementación de lenguajes embebidos en Haskell.

Bibliografía

Programming in Haskell - G. Hutton - Cambridge University Press - 2007.
Theories of Programming languages - J. Reynolds - Cambridge University Press - 1998.
Types and Programming Languages - B. Pierce - MIT Press - 2002.
Introducción a la programación funcional usando Haskell - R. Bird - Prentice Hall - 2000.

Aula virtual y otros recursos web

Aula Virtual

Regresar al Plan de Estudios