Competencies and objectives
Course context for academic year 2023-24
La asignatura parte de la premisa de que los estudiantes conocen con cierta profundidad algunos lenguajes de programación, principalmente imperativos y orientados a objetos. Su objetivo principal es que consigan una mayor perspectiva y puedan razonar en general sobre los lenguajes de programación. ¿Qué elementos son comunes a los lenguajes de programación? ¿Qué características tienen? ¿Cuáles son los elementos esenciales y los accesorios? ¿Qué familias o paradigmas de lenguajes podemos identificar? ¿Cómo diseñar un buen lenguaje de programación? Dominando estos contenidos será mucho más fácil aprender nuevos lenguajes de programación, identificar sus aspectos esenciales e incluso ser capaz de diseñar lenguajes específicos orientados a dominios concretos.
En el curso utilizaremos los lenguajes de programación Racket y Swift. Racket se construye sobre Scheme, 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. Swift es un moderno lenguaje multiparadigma creado reciéntemente por Apple con aspiraciones de soportar múltiples plataformas (dispositivos móviles, sistemas operativos o servidores) y que integra de forma coherente conceptos de programación funcional y programación orientado a objetos y que introduce nuevos paradigmas de programación como la programación orientada a protocolos. A diferencia de Racket, Swift es un lenguaje compilado, seguro y fuertemente tipado.
En la asignatura trataremos cuatro grandes aspectos:
- 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, comparándolo con el paradigma imperativo tradicional. Algunos contenidos: modelo computacional de sustitución, forma especial lambda, recursión, programacion funcional en Racket y Swift, abstracción, estructuras de datos recursivas como listas y árboles.
- 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 Swift. Programación orientada a protocolos.
- Integración de paradigmas: Lenguajes que integran el paradigma funcional y el imperativo. ¿Por qué es interesante integrarlos? Ventajas de la programación funcional para la concurrencia. Swift como un ejemplo de lenguaje de integración de paradigmas.
Course content (verified by ANECA in official undergraduate and Master’s degrees) for academic year 2023-24
Specific Competences (CE)
- CE7 : Coneixement, disseny i utilització de manera eficient dels tipus i estructures de dades més adequades per a la resolució d'un problema.
- CE8 : Capacitat per a analitzar, dissenyar, construir i mantenir aplicacions de forma robusta, segura i eficient, triant el paradigma i els llenguatges de programació més adequats.
Learning outcomes (Training objectives)
No data
Specific objectives stated by the academic staff for academic year 2023-24
No data
General
Code:
34017
Lecturer responsible:
GALLARDO LOPEZ, DOMINGO
Credits ECTS:
6,00
Theoretical credits:
1,20
Practical credits:
1,20
Distance-base hours:
3,60
Departments involved
-
Dept:
SCIENCE OF COMPUTING AND ARTIFICIAL INTELLIGENCE
Area: SCIENCE OF COMPUTING AND ARTIFICIAL INTELLIGENCE
Theoretical credits: 1,2
Practical credits: 1,2
This Dept. is responsible for the course.
This Dept. is responsible for the final mark record.
Study programmes where this course is taught
-
DOUBLE DEGREE IN COMPUTER ENGINEERING AND BUSINESS ADMINISTRATION
Course type: COMPULSORY (Year: 2)
-
DEGREE IN COMPUTER ENGINEERING
Course type: COMPULSORY (Year: 2)