Saltar al contingut Menu
Mapa
  • Inici
  • Informació
  • Contacte
  • Mapa

Projecte de Programació (PROP)

Crèdits Dept.
6.0 (4.8 ECTS) CS

Professors

Responsable:  (-)
Altres:(-)

Objectius Generals

Un cop adquirits, en assignatures anteriors, els coneixements tècnics i metodològics necessaris per a la feina de construir programes, l'estudiant ha de ser capaç d'integrar aquests coneixements i aplicar-los al desenvolupament d'un projecte de programació de complexitat mitjana.

Els objectius docents d'aquesta assignatura van en aquesta direcció i s'estructuren en tres nivells:

1. Posar en pràctica i facilitar la integració dels coneixements de l'estudiant pel que fa a programació, algorísmia i estructures de dades.
2. Experimentar el procés de desenvolupament d'un projecte de software que suposi l'aplicació intensiva d'aquests coneixements en un marc d'exigències estrictes, tant funcionals com operatives. S'atendran tant els aspectes lligats al producte a construir: exigències de qualitat, correció, reusabilitat de components etc..., com al propi procés de construcció: organització de
l'equip de treball, documentació, interacció amb l'usuari, prototipatge etc...
3. Completar la formació de l'alumne en aquells aspectes, bàsicament lligats a les exigències de la programació a gran escala, no suficientment coberts per les assignatures de l'àmbit de la programació cursades anteriorment.

Objectius Específics

Coneixements

  1. Les fases d'un projecte de programació (especificació, anàlisi, disseny, implementació, prova i manteniment). El tipus de decisions a prendre en cada fase. La necessitat de documentar cadascuna d'elles.
  2. Els principals requisits interns i externs de qualitat dels programes (com a mínim, correctesa, eficiència, robustesa, comprensibilitat, modificabilitat, reusabilitat, usabilitat) i els compromisos entre ells.
  3. Els principis del disseny i la programació orientades a objectes, i la seva justificació. Els avantatges i inconvenients d'adoptar aquest paradigma en un projecte de programació.
  4. L'ús del mecanisme de classes i herència per evitar la redundància i per capturar abstraccions d'especificació, disseny i implementació. Els avantatges d'aquest ús de la orientació a objectes pel que fa a fiabilitat, modificabilitat, portabilitat, reusabilitat i productivitat.
  5. Els principals problemes que es planteja l'enginyeria del software (les solucions dels quals es veuran en altres assignatures).

Habilitats

  1. Desenvolupar un projecte de programació de mida mitjana, en grup, d'acord amb un pla de desenvolupament i una arquitectura proporcionades d'avantmà.
  2. Invocar els coneixements de programació adquirits en assignatures anteriors durant el desenvolupament d'un projecte de programació de mida mitjana, triant algorismes i estructures de dades adequades per a construir un programa correcte i eficient.
  3. Organitzar la feina de disseny i programació d'un grup de persones de mida mitjana (de tres a deu), d'acord amb a una planificació temporal preestablerta. Aquesta organització inclou tant el compliment de la planificació donada com al repartiment de tasques entre els membres del grup.
  4. Identificar parts susceptibles de ser factoritzades en l'especificació, disseny i implementació d'un programa, per tal de resoldre-les un sol cop. Usar de manera efectiva els mecanismes de l'orientació a objectes per fer la factorització.
  5. Tractar correctament les situacions anòmales dins del programa, usant, si és convenient, el mecanisme d'excepcions ofert pel llenguatge de programació.
  6. Dissenyar una interfície d'usuari raonablement còmoda i eficaç per al programa, usant una llibreria GUI.

Competències

  1. Capacitat per crear i utilitzar models de la realitat.
  2. Capacitat per dissenyar sistemes, components o processos que s'ajustin a unes necessitats, utilitzant els mètodes, tècniques i eines més adients en cada cas.
  3. Capacitat per resoldre problemes poc estructurats.
  4. Capacitat per argumentar lògicament les decisions preses, la feina feta o un punt de vista. Capacitat per donar opinions, raonaments i justificacions fonamentades per tal de convèncer.
  5. Capacitat d'iniciativa: ser resolutiu, saber prendre decisions i actuar per solucionar un problema.
  6. Capacitat d'aprendre autònomament.
  7. Capacitat per treballar efectivament en grups petits de persones per a la resolució d'un problema de dificultat mitjana.
  8. Capacitat d'integrar-se: Buscar i proposar tasques en les quals desenvolupar les pròpies capacitats i habilitats.
  9. Capacitat de formar i organitzar un equip, uni o multidisciplinar, per abordar un projecte complex.
  10. Capacitat per presentar per escrit, de forma clara i correcta, els resultats de la pròpia feina (a nivell de documentar un lliurament de pràctiques).
  11. Capacitat de relació interpersonal. Receptivitat respecte l'interlocutor.
  12. Assumir la responsabilitat del propi treball.

Continguts

Hores estimades de:

T P L Alt L Ext. Est A Ext.
Teoria Problemes Laboratori Altres activitats Laboratori extern Estudi Altres hores fora d'horari fixat

1. Introducció
T      P      L      Alt    L Ext. Est    A Ext. Total 
2,0 0 0 0 0 2,0 0 4,0
Programació a petita i a gran escala. Criteris de qualitat interna i externa del software. Cicles de vida.

2. La orientació a objectes
T      P      L      Alt    L Ext. Est    A Ext. Total 
2,0 0 0 0 0 2,0 0 4,0
Especificació, disseny i programació orientades a objectes (OO). Objectes i classes, atributs i mètodes. Relació entre classes i TADs. Herència, polimorfisme i genericitat com a eines de modelatge i disseny. Relació de l'OO amb els criteris de qualitat del software.

3. Especificació
T      P      L      Alt    L Ext. Est    A Ext. Total 
4,0 0 0 0 0 2,0 0 6,0
Definició del projecte. Requeriments. Especificació funcional. Modelar primer el domini. Estudi d'un cas.

4. Disseny
T      P      L      Alt    L Ext. Est    A Ext. Total 
4,0 0 0 0 0 2,0 0 6,0
Arquitectura de programes. Nivels de disseny. Comunicació entre mòduls. Arquitectura en tres capes. Exemples.

5. Programació orientada a objectes
T      P      L      Alt    L Ext. Est    A Ext. Total 
4,0 0 0 0 0 1,0 0 5,0
Repàs dels conceptes de programació orientada a objectes, en principi vistos a assignatures anteriors, amb èmfasi en com s'implementen en el llenguatge de programació usat a l'assignatura.

Herència, polimorfisme i genericitat com a eines de programació. Mecanismes d'execució. Creació i destrucció d'objectes. Crides a mètodes i pas de paràmetres. "Binding" estàtic i dinàmic. "Garbage collection". Excepcions.

6. Prova de programes
T      P      L      Alt    L Ext. Est    A Ext. Total 
2,0 0 0 0 0 1,0 0 3,0
Prova de components. Optimització de components.
Integració de components.
Estatègies de prova i integració. Planificació de proves.
"Bastimentada" i tests de regressió.
Eines d'ajuda a la prova: "Debuggers", "profilers", automatizació de proves.

7. La interfície dels programes
T      P      L      Alt    L Ext. Est    A Ext. Total 
2,0 0 0 0 0 0 0 2,0
Tipus d'entrada i sortida. Comunicació entre programes.
Principis de comunicació amb interlocutors humans. Presentació d'informació, entrada i validació de dades, navegació, nivels d'ajut, models d'usuari.

8. Documentació
T      P      L      Alt    L Ext. Est    A Ext. Total 
2,0 0 0 0 0 0 0 2,0
Documentació tècnica i d'usuari. Estàndards de documentació. Eines d'ajut a a la documentació.

9. Qualitat dels programes
T      P      L      Alt    L Ext. Est    A Ext. Total 
2,0 0 0 0 0 0 0 2,0
Definició de la qualitat del software. Factors de qualitat. Mesures de qualitat dels programes. Validació i prova. Estàndards de qualitat del software.

10. Explicació del projecte a desenvolupar
T      P      L      Alt    L Ext. Est    A Ext. Total 
5,0 0 0 0 0 0 0 5,0
Explicació de l'enunciat del projecte i discussió d'alternatives.
Explicació del pla de desenvolupament, dels objectius de cada etapa i de la metodologia a seguir.
Explicació del contingut de cada lliurament de material i dels criteris de valoració.
  • Laboratori:
    Algunes d'aquestes explicacions podran traslladar-se de classes de teoria a classes de laboratori per motius de calendari.

11. Aprenentatge de les notacions i les eines a utilitzar
T      P      L      Alt    L Ext. Est    A Ext. Total 
0 0 3,0 0 6,0 0 0 9,0
  • Laboratori:
    El professor explicarà:

    - Els elements bàsics de la notació a usar a les fases d'especificació i disseny. Actualment s'utilitzarà (un subconjunt molt reduit de) UML.
    - Les parts del llenguatge de programació no prou coberts en el tema teòric. Aquest curs s'utilitzarà preferentment Java.
    - Una introducció a les llibreries disponibles (si cal) i en especial de les llibreries per construir una interfície gràfica d'usuari.
    - Una introducció a les eines de desenvolupament, prova i optimització que no siguin conegudes d'assignatures anteriors.
    En tots els casos, les explicacions seran breus i l'estudiant haurà de completar el seu aprenentatge de manera autònoma.
  • Activitats de laboratori addicionals:
    Completar l'aprenentatge de les notacions i eines que
    el professor ha presentat breument a les classes de laboratori.

12. Desenvolupament del projecte
T      P      L      Alt    L Ext. Est    A Ext. Total 
0 0 5,0 0 70,0 0 0 75,0
Es descriu en els següents apartats.
  • Laboratori:
    Entrevistes amb el professor tutor del projecte per discutir alternatives, solucionar dubtes, rebre comentaris sobre el material ja lliurat i, en general, fer un seguiment de l'estat del projecte.
  • Activitats de laboratori addicionals:
    Treball fora d'hores reglades destinat al desenvolupament del projecte. S'inclou el temps passat en trobades presencials amb els altres membres del grup i en interacció off-line
    (per exemple, via correu electrònic) amb ells i amb el tutor.


Total per tipus T      P      L      Alt    L Ext. Est    A Ext. Total 
29,0 0 8,0 0 76,0 10,0 0 123,0
Hores addicionals dedicades a l'avaluació 1,0
Total hores de treball per l'estudiant 124,0

Projecte

Descripció

El projecte proposat als estudiants té les seguents caracteristiques:
- Es parteix d'un enunciat mínim per tal que l'estudiant tingui l'iniciativa per interpretar el que ha de fer el seu programa.
- El projecte és suficientment gran perquè un intent de solució "directe" no sigui factible.
- El projecte té un fort component algorísmic i d'estructures de dades.
- L'objectiu de l'estudiant ha de ser lliurar el seu programa, dins d'uns marges raonables, com a producte acabat i no tan sols com a una pràctica.
- Per a la seva implementació, es fomentarà l'ús de components creats per altres i l'aportació de components a altres projectes.

Per implementar aquest projecte, el sistema de treball serà el seguent:
- Els estudiants s'organitzen en grups de 3 persones, i els grups s'estructuren en macrogrups de 3 grups (els "clusters") de 9 persones.
- Cada "cluster" tindrà un profesor tutor assignat.
- Hi haurà 3 enunciats diferents cada quatrimestre que hauran de ser resolts tots ells per cada un dels "clusters" (un enunciat per a cada grup). Encara que els enunciats són diferents, presentaran suficients semblances com perquè tingui sentit identificar parts comunes que puguin ser desenvolupades una sola vegada i reutilitzades per tot el "cluster".
- Dins de cada grup, un estudiant i tan sols un és responsable de programar i provar cada classe.

Pla de desenvolupament

A l'inici del curs, els estudiants reben els enunciats dels projectes i tenen una setmana per organitzar-se en grups i "clusters".

Hi ha tres lliuraments al llarg del curs, separats per períodes de temps similars (entre quatre i cinc setmanes). L'esquema del contingut de cada un d'ells és el següent:

- Primer lliurament: especificació i anàlisi. Es lliurarà un enunciat ampliat en llenguatge natural, una descripció detallada de les funcionalitats a desenvolupar, un model del domini del problema i la lista de requeriments no funcionals del programa.

- Segon lliurament: disseny i principi de l'implementació. Aquesta entrega inclou el disseny de la possible part compartida entre els grups del "cluster" i la seva implementació. A més a més s'ha de implementar completament el model del domini.

- Tercer lliurament: programa final funcionant completament d'acord amb les especificacions del primer lliurament, acompanyat de la documentació tècnica i la documentació d'usuari del programa.

Els dos primers lliuraments són asíncrons, mentre que el lliurament final consisteix en una entrevista amb cada grup d'aproximadament una hora de durada, en la qual els estudiants fan una "demo" del seu programa i responen a les possibles preguntes del tutor.

Metodologia docent

Classes de teoria:

Serveixen d'una banda, per presentar els continguts més generals de l'assignatura, que tenen poc a veure amb l'enunciat concret a resoldre cada quadrimestre. S'intentarà concentrar aquestes classes
cap a principi de curs.

D'altra banda, en els moments adequats del curs s'hi intercalen les explicacions sobre l'enunciat del projecte, la metodologia general a seguir en cada etapa, i el material que cal incloure en cada lliurament.

Classes de laboratori en horari fixat:

Algunes d'aquestes classes, normalment cap a principi de curs, serveixen perquè el professor presenti breument les notacions, llenguatges, llibreries i eines a utilitzar. En la majoria de classes de laboratori, però, no és el professor qui porta la iniciativa. Són unes hores que cada grup de projecte pot fer servir per treballar en comú, o bé per consultar dubtes amb el professor i rebre comentaris sobre els lliuraments anteriors.

Treball independent:

El gruix d'hores de l'assignatura correspon al treball que l'estudiant fa fora d'hores reglades, treballant en el projecte, individualment o juntament amb el seu grup de treball.

Mètode d'avaluació

S'avaluaran tres lliuraments de material (documentació i/o software), distribuïts al llarg del curs. El calendari dels lliuraments s'anunciarà durant el primer mes de curs.

Lliurament 1 (Especificació i Anàlisi): 10%
Lliurament 2 (Disseny i principi de la programació): 25%
Lliurament 3 (Final): 65%

L'avaluació dels lliuraments podrà tenir en compte tant l'aportació individual de l'estudiant com els resultats del seu grup. Això implica que no tots els components d'un grup tindran necessàriament la mateixa nota. Cada membre del grup ha de programar aproximadament una tercera part del programa. En cas de desviació important es podrà considerar que l'estudiant no s'ha presentat a l'assignatura.

En els lliuraments 1 i 2 s'avalua principalment l'assoliment dels objectius acordats amb el tutor. En el lliurament 3, amb caràcter general s'avaluen tant el grau d'acabament com la qualitat del projecte (tot i que ambdues caracteristiques venen, en bona part, determinades per la feina feta en els lliuraments anteriors). Concretament, s'avaluen tres grups de característiques:

1. Assoliment d'objectius: Fins a quin punt el programa és complet i funciona correctament, d'acord amb les especificacions pactades.

2. Factors interns:
- Qualitat del disseny
- Qualitat de la codificació
- Reusabilitat i mantenibilitat
- Funcionament del grup i del cluster; inclou el grau de compartició de dissenys i codis, i l'ús efectiu del codi compartit.
- Jocs de proves lliurats.

3. Factors externs:
- Correctesa, eficiència i robustesa.
- Qualitat de la interfície i usabilitat.
- Documentació per a l'usuari.

En qualsevol dels lliuraments, el tutor podrà no acceptar un lliurament de feina manifestament incompleta. En aquest cas, la nota del lliurament podrà ser "No presentat".

Si en el tercer lliurament el projecte no és raonablement operatiu -és a dir, si les funcionalitats bàsiques no estan correctament acabades- la nota d'aquest tercer lliurament serà determinada principalment pel grau d'assoliment dels objectius pactats. En aquest cas, la nota final de l'assignatura será el minim entre 4 i la que s'obté aplicant la ponderació indicada.

Bibliografía bàsica

  • Bertrand Meyer Construcción de software orientado a objetos, Prentice Hall, 1998.
  • Timothy Budd An Introduction to object-oriented programming, Addison-Wesley, 2002.
  • Robert V. Binder Testing object-oriented systems : models, patterns, and tools, Addison-Wesley, 1999.
  • Ken Arnold, James Gosling, David Holmes The Java programming language, Addison-Wesley, 2000.
  • Allen J. Peralta Giménez, Horacio Rodríguez Hontoria Enginyeria del software : programació orientada a objectes, Edicions UPC, 1994.

Bibliografía complementària

  • Bertrand Meyer Object-oriented software construction, Prentice Hall, 1997.
  • Grady Booch, James Rumbaugh, Ivar Jacobson The Unified modeling language user guide, Addison-Wesley, 1999.
  • James Rumbaugh, Ivar Jacobson, Grady Booch El Lenguaje unificado de modelado : manual de referencia, Addison-Wesley, 2000.
  • James Rumbaugh, Ivar Jacobson, Grady Booch The Unified modeling language reference manual, Addison-Wesley, 2005.
  • Grady Booch, James Rumbaugh, Ivar Jacobson El Lenguaje unificado de modelado, Addison-Wesley, 1999.
  • Richard C. Lee, William M. Tepfenhart UML and C++ : a practical guide to object-oriented development, Prentice Hall, 1997.
  • Roger S. Pressman Software engineering : a practitioner's approach, McGraw Hill, 2005.
  • Ron Jeffries, Ann Anderson, Chet Hendrickson Extreme programming installed, Addison-Wesley, 2001.
  • Alan Cooper and Robert Reimann About face 2.0 : the essentials of interaction design, Wiley, 2003.

Enllaços web

  1. http://java.sun.com/
    Pàgina de Java, el llenguatge de programació usat a l'assignatura. L'última versió disponible de la Java Platform es pot descargar lliurement d'aquesta web.


  2. http://www-306.ibm.com/software/rational/
    Pàgina de Rational Rose Modeller, l'eina CASE utilitzada a l'assignatura.


  3. http://argouml.tigris.org/
    Pàgina de ArgoUML, eina CASE alternativa de lliure distribució.


  4. http://mat21.etsii.upm.es/ayudainf/aprendainf/programacion.htm
    Apunts bàsics de Java, en castellá, que es poden baixar gratuitament.


Capacitats prèvies

- Capacitat de resoldre problemes algorísmics de dificultat mitjana a partir d'una especificació clara, i d'implementar les solucions en un llenguatge de programació imperatiu.

- Coneixement dels mecanismes bàsics d'estructuració de programes (modularització, encapsulació, tipus abstractes de dades, classes) i capacitat per aplicar-los a problemes petits-mitjans (uns pocs mòduls)

- Coneixement dels elements de programació orientada a objectes (classes, objectes, herència, mecanismes d'execució).

- Familiaritat amb un llenguatge imperatiu, preferentment orientat a objectes.

- Capacitat d'usar i programar estructures de dades senzilles (taules, estructures lineals, diccionaris) en aquest llenguatge.

- Capacitat d'usar llibreries en el aquest llenguatge.

- Domini d'estratègies bàsiques per trobar i corregir errors en mòduls senzills.


Compartir

 
logo FIB © Facultat d'Informàtica de Barcelona - Contacte - RSS
Aquest web utilitza cookies pròpies per oferir una millor experiència i servei. En continuar amb la navegació entenem que acceptes la nostra política de cookies.
Versió clàssica Versió mòbil