1. Disseny modular orientat a objectes
1.1. Conceptes bàsics
1.1.1. Descomposició i abstracció
1.1.2. Formes d'abstracció
1.1.3. Indepèndencia de la representació
1.2. Mòduls Funcionals vs Tipus de Dades
1.3. Jerarquia de tipus
1.3.1. Herència vs Subtipatge
1.3.2. El principi de substitució
1.3.3. Sobreescriptura i Sobrecàrrega
1.3.4. Tipus aparent i tipus real
1.3.5. Assignació i lligam missatge-mètode
1.3.6. Polimorfisme
1.3.7. Genericitat
1.3.8. Covariància i Contravariància
1.4. Ajuts per a entendre les implementacions
1.4.1. Funció d'abstracció
1.4.2. Invariant de la representació
1.5. Herència
1.5.1. Bons i mals usos de l'herència
1.5.2. Compatibilitat de les especificacions Pre/Post
1.5.3. Mutabilitat
1.5.4. Composició vs Herència
1.6. Exemples de disseny
2. Especificació i raonament formal
2.1. Raonament inductiu
2.1.1. Recursivitat avançada
2.2. Especificació equacional de Tipus de Dades
2.3. Introducció als mètodes formals en el disseny d'algorismes
2.3.1. Problemàtica dels errors
2.3.2. Programar amb especificacions
2.3.3. Testeig vs Derivació/Verificació
2.3.4. Notació de Hoare
2.4. Especificació formal d'operacions. Precondicions i postcondicions
2.5. Derivació i verificació formal d'algorismes
2.5.1. Semàntica axiomàtica
2.5.2. Verificació de programes recursius
2.5.3. Construcció de programes per generalització
2.5.4. Transformació recursiu-iteratiu
2.5.5. Derivació i verificació de programes iteratius