Projectes de Programació

Esteu aquí

Crèdits
6
Tipus
Obligatòria
Requisits
  • Prerequisit: EDA
  • Precorequisit: IDI
  • Precorequisit: IES
Departament
CS
Fer un projecte de programació associat al cicle de vida d'una aplicació informàtica, amb èmfasi en la fase d'implementació.

Professorat

Responsable

  • Alicia Ageno Pulido ( )

Altres

  • Alejandro Ivan Paz Ortiz ( )
  • Borja Valles Fuente ( )
  • Carles Arnal Castello ( )
  • Guillem Godoy Balil ( )
  • Jordi Turmo Borrás ( )
  • Miquel Sanchez Marre ( )
  • Pablo Blanco del Prado ( )
  • Ricardo Fernández Domenech ( )
  • Salvador Medina Herrera ( )
  • Sergio Álvarez Napagao ( )

Hores setmanals

Teoria
2
Problemes
0
Laboratori
2
Aprenentatge dirigit
0.28
Aprenentatge autònom
5.72

Competències

Competències Transversals

Treball en equip

  • G5 [Avaluable] - Ser capaç de treballar com a membre d'un equip, ja sigui com a un membre més, ja sigui realitzant tasques de direcció, amb la finalitat de contribuir a desenvolupar projectes d'una manera pragmàtica i amb sentit de la responsabilitat; assumir compromisos tenint en compte els recursos disponibles.
    • G5.2 - Planificar i acordar els objectius, les regles de funcionament, les responsabilitats, l'agenda i el procediment de revisió de la feina. Identificar conflictes, negociar-los i resoldre-los de forma efectiva. Adaptar-se a diferents tipus de grups (gran/petit, tècnic/mixt, presencial /a distància). Interactuar amb eficàcia i promoure la participació de tots els membres del grup.

Emprenedoria i innovació

  • G1 [Avaluable] - Conèixer i comprendre l'organització d'una empresa i les ciències que regeixen la seva activitat; capacitat de comprendre les regles laborals i les relacions entre la planificació, les estratègies industrials i comercials, la qualitat i el benefici. Desenvolupar la creativitat, l'esperit emprenedor i la tendència a la innovació.
    • G1.2 - Tenir iniciatives que generin oportunitats, nous objectes o solucions noves, amb una visió d'implementació de procés i de mercat, i que impliqui i faci participar als altres en projectes que s'han de desenvolupar (capacitat d'actuar de manera autònoma).

Competències Tècniques

Competències tècniques comunes

  • CT2 - Utilitzar d'una manera apropiada teories, procediments i eines en el desenvolupament professional de l'enginyeria informàtica en tots els seus àmbits (especificació, disseny, implementació, desplegament -implantació- i avaluació de productes) de manera que es demostri la comprensió dels compromisos adoptats a les decisions de disseny.
    • CT2.3 - Dissenyar, desenvolupar, seleccionar i avaluar aplicacions, sistemes i serveis informàtics i, al mateix temps, assegurar-ne la fiabilitat, la seguretat i la qualitat en funció de principis ètics i de la legislació i la normativa vigents.
    • CT2.4 - Demostrar coneixement i capacitat per a aplicar les eines necessàries a l'emmagatzematge, el processament i l'accés als sistemes d'informació, fins i tot els que es basen en la web.
    • CT2.5 - Dissenyar i avaluar interfícies persona-computador que garanteixin l'accessibilitat i la usabilitat als sistemes, als serveis i a les aplicacions informàtiques.
  • CT3 - Demostrar coneixement i comprensió del context organitzatiu, econòmic i legal en el qual es desenvolupa la seva feina (coneixement adequat del concepte d'empresa, del marc institucional i jurídic de l'empresa, d'organització i gestió de les empreses).
    • CT3.6 - Demostrar coneixement de la dimensió ètica a l'empresa: la responsabilitat social i corporativa en general i, en particular, les responsabilitats civils i professionals de l'enginyer en informàtica.
  • CT4 - Demostrar coneixement i capacitat d'aplicació dels procediments algorísmics bàsics de les tecnologies informàtiques per a dissenyar solucions a problemes, analitzant la idoneïtat i la complexitat dels algorismes
    • CT4.1 - Identificar les solucions algorísmiques més adequades per a resoldre problemes de dificultat mitjana.
    • CT4.2 - Raonar sobre la correcció i l'eficiència d'una solució algorísmica.
    • CT4.3 - Demostrar coneixement i capacitat d'aplicació dels principis fonamentals i de les tècniques bàsiques dels sistemes intel·ligents i de la seva aplicació pràctica.
  • CT5 - Analitzar, dissenyar, construir i mantenir aplicacions de forma robusta, segura i eficient, triant el paradigma i els llenguatges de programació més adequats.
    • CT5.1 - Triar, combinar i explotar diferents paradigmes de programació, en el moment de construir software, tenint en compte criteris com la facilitat de desenvolupament, l'eficiència, la portabilitat i la mantenibilitat.
    • CT5.2 - Conèixer, dissenyar i utilitzar de forma eficient els tipus i les estructures de dades més adients per a la resolució d'un problema.
    • CT5.3 - Dissenyar, escriure, provar, depurar, documentar i mantenir codi en un llenguatge d'alt nivell per a resoldre problemes de programació aplicant esquemes algorísmics i utilitzant estructures de dades.
    • CT5.4 - Dissenyar l'arquitectura dels programes utilitzant tècniques d'orientació a objectes, de modularització i d'especificació i implementació de tipus abstractes de dades.
    • CT5.5 - Usar les eines d'un entorn de desenvolupament de software per a crear i desenvolupar aplicacions.
    • CT5.6 - Demostrar coneixement i capacitat d'aplicació dels principis fonamentals i de les tècniques bàsiques de la programació paral·lela, concurrent, distribuïda i en temps real.
  • CT6 - Demostrar coneixement i comprensió del funcionament intern d'un computador i del funcionament de les comunicacions entre ordinadors.
    • CT6.1 - Demostrar coneixement i tenir capacitat per a administrar i mantenir sistemes, serveis i aplicacions informàtiques.
  • CT8 - Planificar, concebre, desplegar i dirigir projectes, serveis i sistemes informàtics en tots els àmbits, liderar-ne la posada en marxa, la millora contínua i valorar-ne l'impacte econòmic i social.
    • CT8.6 - Demostrar comprensió de la importància de la negociació, dels hàbits de treball efectius, del lideratge i de les habilitats de comunicació en tots els entorns de desenvolupament de software.
    • CT8.7 - Controlar versions i configuracions del projecte.

Objectius

  1. 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.
    Competències relacionades: CT4.1, CT4.2, CT5.2,
  2. Organitzar la feina de disseny i programació d'un equip de persones de mida mitjana (de tres a cuatre), 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.
    Competències relacionades: CT6.1, CT8.6, G5.2, CT8.7,
  3. 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ó.
    Competències relacionades: CT5.4, CT5.5, CT5.1, CT2.3,
  4. Conèixer els principis del disseny i la programació orientades a objectes, la seva justificació, i els avantatges i inconvenients d'adoptar aquest paradigma en un projecte de programació.
    Competències relacionades: CT5.4, CT5.1,
  5. Usar el mecanisme de classes i herència per evitar la redundància i per capturar abstraccions d'especificació, disseny i implementació. Entendre els avantatges d'aquest ús de la orientació a objectes pel que fa a fiabilitat, modificabilitat, portabilitat, reusabilitat i productivitat.
    Competències relacionades: CT4.2, CT5.2, CT5.3, CT2.3,
  6. Tractar correctament les situacions anòmales dins del programa, usant, si és convenient, el mecanisme d'excepcions ofert pel llenguatge de programació. Testejar el programa de manera sistemàtica i exhaustiva.
    Competències relacionades: CT5.1, CT5.3,
  7. Dissenyar una interfície d'usuari raonablement còmoda i eficaç per al programa, usant una llibreria GUI.
    Competències relacionades: CT2.5, CT5.6,
  8. Desenvolupar un projecte de programació de mida mitjana, en grup, d'acord amb un pla de desenvolupament i una arquitectura proporcionades d'avantmà.
    Competències relacionades: G5.2, CT3.6, CT4.1, CT4.2, CT5.2, CT5.4, CT5.5, G1.2, CT2.4, CT4.3, CT5.3, CT2.3,

Continguts

  1. Repàs d'IES: Especificació, diagrames de classes i casos d'ús.
    Cicles de vida.
    Definició del projecte. Requeriments. Especificació funcional. Modelar primer el domini.
    UML: diagrama de classes (domini). Diagrama de casos d'ús. Explicacions textuals.
    Estudi d'un cas.
  2. Introducció a Java i Conceptes d'OO en Java
    Especificació, disseny i programació orientades a objectes (OO). Classes, objectes, atributs, mètodes i relacions. Encapsulament i ocultació, abstracció i classificació, herència. Polimorfisme, "binding" estàtic i dinàmic. Altres relacions: associació, agregació, dependència.
  3. Disseny i implementació en Java de l'arquitectura en 3 capes
    Descripció del paradigma de disseny d'arquitectura en 3 capes i implementació en Java
  4. Prova de programes
    Program Testing: prova i depuració.
    Prova de components.
    Estratègies de prova i integració. Drivers i stubs/mocks. Planificació de proves.
    "Bastimentada" i tests de regressió.
    Eines d'ajuda a la prova (JUnit)
    Tractament de errors i excepcions.
  5. Patrons de disseny en Java
    Es descriuran i implementaran alguns dels patrons de disseny clàssics (decorador, estat, singleton. etc)
  6. Conceptes bàsics de disseny d'interfícies en Java
    Com dissenyar una interfície gràfica senzilla utilitzant les llibreríes stàndard de Java i aplicant els principis d'arquitectura en 3 capes
  7. Eines pel desenvolupament del programari
    Es descriuran per sobre eines per facilitar el desenvolupament del programari: control de versions (Git), integració amb testing (JUnit)

Activitats

Activitat Acte avaluatiu


Repàs cicle de vida del software

Repàs de conceptes d'enginyeria del software i UML. Exemple pràctic de (part d') un primer lliurament.
Objectius: 3 4 5
Continguts:
Teoria
4h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
3h

Descripció del projecte i formació d'equips

Descripció de les entregues del projecte. Formació dels equips de pràctiques.
Objectius: 8 2
Teoria
0h
Problemes
0h
Laboratori
2h
Aprenentatge dirigit
0h
Aprenentatge autònom
0h

Introducció a Java i Conceptes bàsics d'OO en Java

Desenvolupament del tema 2 de l'assignatura.
Objectius: 8 4 5
Continguts:
Teoria
8h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
8h

Disseny i implementació en Java de l'arquitectura en 3 capes

Desenvolupament del tema 3 de l'assignatura.
Objectius: 8 3 4 5
Continguts:
Teoria
4h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
2h

Depuració de programes

Desenvolupament del tema 4 de l'assignatura.
Objectius: 8 6
Continguts:
Teoria
6h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Patrons de disseny en Java

S'explicaran (o repassaran si ja es van veure a IES) i implementaran en Java alguns dels patrons de disseny clàssics
Objectius: 4 5
Continguts:
Teoria
4h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
4h

Java: implementació d'interfícies

Desenvolupament del tema 6 de l'assignatura.
Objectius: 8 7
Continguts:
Teoria
4h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
4h

Primera entrega del projecte

Disseny i principi de la implementació. S'ha d'implementar completament el model del domini i el nucli bàsic algorítmic del projecte, proporcionant els jocs de proves i tests de la part implementada.
Objectius: 8 1 2 3 6 4 5
Setmana: 10
Tipus: entrega
Teoria
0h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
0h

Segona entrega del projecte

Lliurament intermedi. La documentació a presentar ha d'incloure el diagrama de classes complet (UML) del projecte.
Objectius: 8 1 2 3 7 4 5
Setmana: 14
Tipus: entrega
Teoria
0h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
0h

Tercera entrega del projecte

Lliurament final. La documentació a presentar ha d'incloure la implementació completa del projecte, així com els jocs de prova i el manual d'usuari. A més del lliurament de la documentació, cada equip haurà de fer una presentació del seu projecte.
Objectius: 8 1 2 3 6 7 4 5
Setmana: 15 (Fora d'horari lectiu)
Tipus: entrega
Teoria
0h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
2h
Aprenentatge autònom
0h

Teoria
0h
Problemes
0h
Laboratori
16h
Aprenentatge dirigit
0h
Aprenentatge autònom
29h

Teoria
0h
Problemes
0h
Laboratori
12h
Aprenentatge dirigit
0h
Aprenentatge autònom
29.8h

Teoria
0h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
2.2h
Aprenentatge autònom
0h

Metodologia docent

El temari s'exposa de forma molt pràctica, a través de la presentació de molts exemples.

Les classes de teoria introdueixen tot els coneixements, les tècniques i els conceptes necessaris per a la realització del projecte de l'assignatura.
Algunes de les classes de laboratori, 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 equip de projecte pot fer servir per treballar en comú, o bé per consultar dubtes amb el professor i rebre'n els seus comentaris.

Les dues hores de classes de teoria i les dues de laboratori es fan setmanalment, excepte la primera setmana que només es fa teoria (dues sessions) i les dues darreres que només es fa laboratori.

La realització del projecte és la part principal de la feina a realitzar dins de l'assignatura. Aquest projecte tindrà un fort component algorísmic i d'estructures de dades.

Per implementar aquest projecte, el sistema de treball serà el segent:
- Els estudiants s'organitzen en equips de 4 persones, i els equips s'estructuren en grups de laboratori de 15-20 persones.
- Cada grup de laboratori tindrà un professor tutor assignat.
- Dins de cada equip, un estudiant i tan sols un és responsable de programar i provar cada classe.

El curs utilitza el llenguatge de programació Java.

Mètode d'avaluació

Nota Final: Nota_Projecte

Nota_Projecte: (0.40 * Entrega1 + 0.15 * Entrega2 + 0.45 * Entrega3) * FT

Donat que el projecte és un treball en grup en el que han de participar tots i només els membres del equip, la nota final del projecte està ponderada per FT. Aquest Factor de Treball (FT) és una ponderació (0<=FT<=1) individual que valora el grau de treball de cada membre del equip. Es farà públic juntament amb les notes de la darrera entrega, i es determinarà a partir del repartiment de tasques dintre del equip (entregats a la Entrega1 i la Entrega3) i de les presentacions finals del equip amb el seu tutor.


Competència transversal "Treball en equip": S'avalua usant una rúbrica simple, disponible pels estudiants, en que el tutor de cada grup puntua els diferents aspectes associats a la competència de cada membre dels equips.

Competència transversal "Empreneduria i innovació": S'avalua considerant la iniciativa de l'equip en els dos moments en què s'han de prendre decisions pròpies, no predeterminades a l'assignatura: les funcionalitats extres del projecte i els algorismes i estructures de dades amb què es resoldrà la funcionalitat principal. Per tant, l'avaluació és una combinació de dos criteris:
1) En funció de les funcionalitats opcionals proposades versus les funcionalitats opcionals implementades
2) En funció de la iniciativa de l'equip en escollir algorismes i EDs per implementar les funcionalitats principals

Bibliografia

Bàsica:

Complementaria:

Web links

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, mecanismes d'execució).

- Familiaritat amb un llenguatge imperatiu orientat a objectes.

- Capacitat d'usar i programar estructures de dades en aquest llenguatge.

- Capacitat d'usar llibreries en aquest llenguatge.

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