1. Introducció
1.1. Per què estudiem els llenguatges de programació?
1.2. Paradigmes de llenguatges de programació
1.3. Criteris de qualitat dels llenguatges de programació
2. Sintaxi i semàntica d'un llenguatge de programació
2.1. Estructura d'un programa
2.2. Compilació
3. Variables i tipus de dades
3.1. Dades, variables i constants
3.2. Tipus de dades
3.3. Tipus de dades elementals
3.4. Tipus de dades estructurats
3.5. Exercicis
4. Abstracció
4.1. Nivells d'abstracció
4.2. Dades
4.3. Control
4.4. Abstracció procedural
4.5. Exercicis
5. Llenguatges imperatius
5.1. Paradigma estructurat en blocs
5.2. Perspectiva històrica: ALGOL 60, ALGOL 68, Pascal, Ada, C.
5.3. Revisió de C
5.4. Exercicis/laboratori
6. Llenguatges orientats a objectes
6.1. Revisió de tipus abstractes de dades
6.2. Conceptes bàsics del disseny i programació orientats a objectes
(classes, objectes, pas de missatges, identitat, persistència, ...)
6.3. Herència
6.4. Polimorfisme i dynamic binding
6.5. Llenguatges basats en objectes i orientats a objectes
6.6. Java
6.7. Exercicis/laboratori
7. Programació lògica
7.1. Introducció al càlcul proposicional i càlcul de predicats
7.2. Resolució
7.3. Unificació
7.4. Backtraking
7.5. Prolog
7.6. Exercicis/laboratori
8. Programació funcional
8.1. Introducció
8.2. Característiques dels llenguatges funcionals
8.3. LISP
8.4. Exercicis/laboratori
9. Concurrència
9.1. Programació seqüencial i programació concurrent
9.2. Sincronització de processos
(semàfors, monitors, rendezvous, pas de missatges)
9.3. Exemples en alguns llenguatges: Ada, Java
9.4. Exercicis/laboratori
10. Llenguatges "script"
10.1. Motivació
10.2. Perspectiva històrica: awk, sed, perl, python
10.3. Introducció al perl
10.4. Exercicis/laboratori
11. Network programming
11.1. Introducció
11.2. HTML
11.3. CGI Scripts (en C i Perl)
11.4. Java Applets
11.5. XML
11.7. Exercicis/laboratori
12. Graphical User Interfaces (GUIs) i programació orientada a events
12.1. Programació orientada a events
12.2. Components gràfics en Java
12.3. Model d'events en Java
12.4. Exercicis