Descripción de Lenguajes y paradigmas de programación

Table of Contents

Datos académicos

Los siguientes datos son un resumen. Puedes encontrar la información completa en la página de la UA con la descripción de la asignatura.

Webs de la asignatura

En la asignatura utilizaremos las siguientes webs, cada una para una tarea. Es recomendable que las guardes en tus marcadores.

Objetivos de la asignatura

En la asignatura se razona sobre el concepto de programación desde un punto de vista práctico. ¿Qué elementos son comunes a los lenguajes de programación? ¿Qué características tienen? ¿Cuáles son los elementos esenciales y los accesorios? ¿Cómo diseñar un buen lenguaje de programación?

Veremos que uno de los elementos centrales de los lenguajes de programación es que permiten construir abstracciones. Un lenguaje de programación proporciona mecanismos de abstracción que nos permiten expresar una solución informática en un lenguaje cercano al dominio que estamos tratando.

En el curso utilizaremos los lenguajes de programación Scheme y Scala. Scheme es una variante muy extendida de LISP, lenguaje paradigma de la programación funcional. La utilización de un lenguaje tan sencillo nos permite reflexionar sobre cuáles son los elementos esenciales de los lenguajes de programación y su semántica. Scala es un lenguaje moderno que se ejecuta en la plataforma Java y que se está reconocido como uno de los más importantes lenguajes multi-paradigma, integrando de forma coherente conceptos de programación funcional y programación orientado a objetos.

En el curso trataremos cinco grandes bloques

  • Lenguajes de programación: Conceptos generales comunes al diseño y construcción de lenguajes de programación. Algunos contenidos: historia y paradigmas de lenguajes de programación, programación declarativa vs. programación procedural, tipos de datos.
  • Programación funcional: Estudio en profundidad del paradigma de programación funcional. Algunos contenidos: modelo computacional de sustitución, forma especial lambda, recursión, programacion funcional en Scheme, abstracción, estructuras de datos recursivas como listas y árboles.
  • Programación imperativa: Estudio de las características de la programación imperativa comparada con la programación funcional. Algunos contenidos: modelo de computación basado en entornos, asignación de variables, estado local.
  • Programación orientada a objetos: Repaso de los elementos esenciales del paradigma de programación orientada a objeto, poniéndolos en el contexto de lo que aportan al paradigma clásico procedural. Características avanzadas de POO en un lenguaje de reciente diseño como Scala.
  • Integración de paradigmas: Lenguajes que integran el paradigma funcional y el procedural. ¿Por qué es interesante integrarlos? Ventajas de la programación funcional para la concurrencia. Scala como un ejemplo de lenguaje de integración de paradigmas.

Competencias

  1. Conocer y diferenciar las características de los distintos paradigmas de programación (programación funcional, procedural y orientada a objetos) e identificarlas en lenguajes de programación concretos.
  2. Conocer los elementos que componen los lenguajes de programación (estructuras de control, procedimientos, tipos de datos) y distintas implementaciones de estos elementos en distintos lenguajes.
  3. Diferenciar entre tiempo de ejecución y tiempo de compilación en distintos ámbitos: detección de errores o definición, creación o ámbito de vida de variables.
  4. Conocer modelos de computación específicos que expliquen la semántica de los lenguajes de programación. En concreto: modelo de sustitución para la programación funcional y modelo de entornos para explicar el ámbito y los valores de los variables en la programación procedural.
  5. Utilizar la abstracción y la recursión para diseñar correctamente procedimientos y estructuras de datos (listas y árboles).
  6. Ser capaz de diseñar, implementar y corregir programas funcionales, en concreto utilizando el lenguaje de programación Scheme.
  7. Ser capaz de implementar programas sencillos en Scala, en los que se utilicen las características multi-paradigma del lenguaje.
  8. Comparar el paradigma orientado a objetos con el paradigma procedural clásico, reconociendo las ventajas que aporta en cuanto a abstracción, reutilización y modificación de código.
  9. Conocer los principios básicos del paradigma de programación lógica

Temario

Durante las clases teóricas se presentarán los conceptos más importantes de los temas de los que consta la asignatura, utilizando abundantes ejemplos prácticos y demostraciones. Además de los materiales presentados en estas clases deberéis leer y estudiar los materiales adicionales (apuntes, referencias o transparencias) que indicaremos en cada tema.

La lista de temas, junto con las semanas en las que se preveen impartirlos:

  1. Introducción a los lenguajes de programación (7 Febrero)
  2. Introducción a Scheme (14 Febrero)
  3. El paradigma de programación funcional (21, 28 Febrero)
  4. Recursión y estructuras de datos recursivas (7, 14 Marzo)
  5. Macros (21 Marzo)
  6. Introducción a Scala (28 Marzo)
  7. Tipos de datos (11 Abril)
  8. Nombres, ámbito y ligaduras (18 Abril)
  9. Subrutinas y abstracción de control (5 Mayo)
  10. Programación Orientada a Objetos (9 Mayo)

Prácticas

Durante las horas prácticas se realizarán de forma individual ejercicios de programación relacionados con los conceptos que se están estudiando en ese momento que servirán para reforzar y profundizar en las competencias de la asignatura.

Para el desarrollo de las prácticas utilizaremos los siguientes lenguajes de programación y entornos de desarrollo:

  • Racket (versión de Scheme, lenguaje de programación funcional)
  • Scala (lenguaje multiparadigma basado en Java con características de programación funcional)

Como resultado de estas prácticas se entregarán a los profesores de la asignatura 10 ejercicios en las fechas indicadas (normalmente cada una o dos semanas). Los ejercicios se revisarán individualmente en las mismas horas de prácticas, siendo esta una oportunidad excelente para realizar consultas y resolver dudas.

La lista de prácticas junto con la fecha en la que se lanzarán es la siguiente. Normalmente se deberán entregar en la semana siguiente. Avisaremos puntualmente en el blog de la asignatura.

  1. Scheme (21 Febrero)
  2. Programación funcional (28 Febrero)
  3. Forma especial lambda (7 Marzo)
  4. Recursión (14 Marzo)
  5. Esctructuras de datos recursivas (21 Marzo)
  6. Scala (4 Abril)
  7. Entornos y ámbito de variables (11 Abril)
  8. Subrutinas (18 Abril)
  9. Tipos de datos (9 Mayo)
  10. Programación Orientada a Objetos (16 Abril)

Horarios

Grupos de teoría:

GrupoDíaHoraProfesorAula
1Martes10-11 hDomingo GallardoD27 (Aulario 2)
1Miércoles10-11 hDomingo GallardoD27 (Aulario 2)
2Martes11-12 hDomingo GallardoD25 (Aulario 2)
2Miércoles11-12 hDomingo GallardoD25 (Aluario 2)
3Martes15-16 hCristina PomaresD27 (Aulario 2)
3Miércoles16-17 hCristina PomaresD27 (Aulario 2)

Grupos de práctica:

GrupoDíaHoraProfesorAula
1Lunes12:30-14:30 hCristina PomaresL16 (Laboratorio EPS)
2Martes16-18 hCristina PomaresL13 (Laboratorio EPS)
3Miércoles12:30-14:30 hCristina PomaresL16 (Laboratorio EPS)
4Miércoles14:30-16:30 hDomingo GallardoL16 (Laboratorio EPS)

Evaluación

Se realizará una evaluación continua basada en los ejercicios prácticos entregados y en dos exámenes parciales.

Las fechas y contenidos de los exámenes parciales serán:

  1. El primer examen se realizará el del 29 de marzo y cubrirá los temas 1 al 5. Horario:
    • Turno de mañana: 10:00-11:00 h. en el aula D27
    • Turno de tarde: 15:00-16:00 h. en el aula D27
    Los que asistís normalmente al grupo de las 11:00 podéis ir a cualquiera de los dos turnos.
  2. El segundo examen se realizará el 25 de mayo e incluirá los temas 6 al 8. Horario:
    • Turno de mañana: 10:00-11:00 h. en el aula D27
    • Turno de tarde: 16:00-17:00 h. en el aula D27

La calificación final de la asignatura se obtendrá de la siguiente forma:

  1. Cada uno de los 10 ejercicios prácticos tendrá una nota máxima de 1 punto, pudiendo acumularse por tanto 10 puntos en este concepto.
  2. Cada examen parcial tendrá una nota máxima de 20 puntos, pudiendo acumularse por tanto 40 puntos en este concepto.
  3. Por último, se realizará una prueba final en la que se plantearán cuestiones teóricas y prácticas relacionadas con las competencias de la asignatura. Tendrá una nota máxima de 50 puntos.

Calificación = (Nota ejercicios + Nota parciales + Nota prueba final) / 100

Bibliografía

Vamos a utilizar dos libros como bibliografía básica. Utilizaremos Structure and Interpretation of Computer Programs principalmente para la parte del paradigma funcional y Programming Language Pragmatics para el resto de la asignatura.

Structure and Interpretation of Computer Programs (SICP)

Cubierta del SICP

  • Autores: Harold Abelson y Gerald Jay Sussman
  • Editorial: MIT Press, 1996
  • Enlace a la edición on-line
  • Signatura en la Biblioteca Politécnica: I.06/ABE/STR

Programming Language Pragmatics

Cubierta del PLP

  • Autor: Michael L. Scott
  • Editorial: Morgan Kaufmann Publishers, 2009 (Third Edition)
  • Web
  • Signatura en la Biblioteca Politécnica: POE 004.43/SCO/PRO
Validate XHTML 1.0