1. Conceptes bàsics en el disseny de programes.
1.1. Descomposició i abstracció. Formes d'abstracció.
1.2. Modularització.
1.3. Disseny descendent vs Disseny ascendent.
2. Orientació a objectes.
2.1. Herència vs Subtipatge.
2.2. Utilització vs Refinament.
2.3. Polimorfisme vs Genericitat.
2.4. El principi de substitució. Compatibilitat de les especificacions.
2.5. Patrons de disseny.
3. Casos pràctics de disseny d'aplicacions.
4. Documentació, verificació i proves.
4.1. Documentació vs Especificació formal.
4.2. Ajuts per entendre les implementacions: funció d'abstracció i invariant de la representació.
4.3. Eines de suport.
El projecte de programació es desenvoluparà obligatòriament en grup. El professor monitoritzarà un cop per setmana el projecte, a partir de l'inici del seu desenvolupament. Cada grup haurà de discutir setmanalment amb el "client" (el professor) aspectes com ara les delimitacions del projecte i els mètodes i tècniques d'implementació, rebent el feedback necessari. Al mateix temps, cada grup haurà de proposar nous objectius de cara a la setmana vinent. La monitorització es farà en hores de laboratori, i han d'assistir-hi tots els alumnes. En cas de no poder-hi assistir, l'alumne haurà de concertar una cita alternativa amb el professor. Altrament es considerarà el projecte com a interromput.
La interacció amb el "client" (professor) a l'hora de definir l'especificació de les funcionalitats i usos del programa, i la discussió de la implementació del programa amb un "expert" (professor), influiran en la qualificació.
L'avaluació podrà tenir en compte tant l'aportació individual de l'alumne com els resultats del seu grup. Això implica que no tots els components d'un grup tindran necessàriament la mateixa nota.
Criteris específics de la nota «No Presentat»:
L'alumne obrindrà la nota de "No Presentat" només en el cas que no hagi fet el darrer lliurament del projecte ni s'hagi presentat a examen.
L'objectiu principal d'aquesta assignatura és el de practicar la programació d'aplicacions de mitjana escala, incloent el disseny, la documentació, implementació i proves. Es treballaran tant els aspectes lligats a la qualitat del producte final (eficiència, correcció, reusabilitat de components, ...) com al propi procés per arribar-hi (organització de l'equip de treball, documentació, proves, prototipatge, ...).
L'alumne haurà d'aplicar coneixements i habilitats adquirits en les assignatures prèvies de "Metodologia i tecnologia de la programació" i "Estructures de dades i algorísmia", i complementar-los amb nous coneixements adquirits pel seu compte (p.ex. de Java) amb la guia del professor.