Competencies and objectives
Course context for academic year 2026-27
The course is based on the premise that students already have a solid knowledge of some programming languages, mainly imperative and object-oriented ones. Its main goal is to help them gain a broader perspective and develop the ability to reason about programming languages in general. What elements are common to programming languages? What characteristics do they have? Which elements are essential and which are accessory? What language families or paradigms can we identify? How can we design a good programming language? By mastering these concepts, it becomes much easier to learn new programming languages, identify their essential aspects, and even design domain-specific languages for particular purposes.
Throughout the course we will use the programming languages Racket and Swift. Racket is built on top of Scheme, a widely used dialect of LISP, the paradigmatic functional programming language. Using such a simple language allows us to reflect on the essential elements of programming languages and their semantics. Swift is a modern multi-paradigm language recently created by Apple with the aim of supporting multiple platforms (mobile devices, operating systems, and servers). It coherently integrates concepts from both functional and object-oriented programming and introduces new programming paradigms such as protocol-oriented programming. Unlike Racket, Swift is a compiled, safe, and strongly typed language.
The course addresses four major areas:
* Programming Languages: General concepts common to the design and construction of programming languages. Some topics include: the history and paradigms of programming languages, declarative vs. procedural programming, and data types.
* Functional Programming: An in-depth study of the functional programming paradigm, comparing it with the traditional imperative paradigm. Topics include: the substitution model of computation, the lambda special form, recursion, functional programming in Racket and Swift, abstraction, and recursive data structures such as lists and trees.
* Object-Oriented Programming: A review of the essential elements of the object-oriented programming paradigm, placing them in the context of what they contribute to the classic procedural paradigm. Advanced OOP features in a recently designed language such as Swift. Protocol-oriented programming.
* Paradigm Integration: Languages that integrate functional and imperative paradigms. Why is this integration interesting? Advantages of functional programming for concurrency. Swift as an example of a language that integrates paradigms.
Learning outcomes / Course competencies (verified by ANECA in official undergraduate and Master’s degrees) for academic year 2026-27
Specific Competences (CE)
- CE7 : Understand, design and use the most appropriate data types and structures to solve problems in the most efficient manner.
- CE8 : Capacity to analyse, design, build and maintain robust, secure and efficient applications, choosing the most appropriate paradigm and programming languages.
Learning outcomes (Training objectives)
No data
Specific objectives stated by the academic staff for academic year 2026-27
We define the following specific competences:
- Know and distinguish the characteristics of the different programming paradigms — functional, procedural, and object-oriented programming — and identify them in specific programming languages.
- Know the elements that make up programming languages — control structures, procedures, and data types — and different implementations of these elements in different languages.
- Distinguish between runtime and compile time in different contexts: error detection, or the definition, creation, and lifetime scope of variables.
- Know the substitution model as an explanation of the semantics of functional programming languages.
- Use abstraction and recursion to correctly design procedures and data structures, such as lists and trees.
- Be able to design, implement, and debug functional programs using the programming languages Racket and Swift.
- Be able to implement simple programs in Swift that use the language’s multi-paradigm features.
- Know the advantages of the object-oriented paradigm in terms of abstraction, reuse, and code modification. Know and be able to use Swift’s object-oriented features.
- Know the fundamental elements of abstraction applied to the design of programming languages. Know new programming paradigms, such as protocol-oriented programming.
General
Code:
34017
Lecturer responsible:
Pomares Puig, Cristina
Credits ECTS:
6,00
Theoretical credits:
1,20
Practical credits:
1,20
Distance-base hours:
3,60
Departments involved
-
Dept:
Computer Science and Artificial Intelligence
Area: Science of the Computation, 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)

