Projectes de Programació

Esteu aquí

Crèdits
6
Departament
CS
Tipus
Obligatòries
Requisits
  • Precorequisit: IES
  • Precorequisit: IDI
  • Prerequisit: EDA
Fer un projecte de programació associat al cicle de vida d'una aplicació informàtica, amb èmfasi en la fase d'implementació.
Web: http://www.cs.upc.edu/~prop

Professors

Responsable

  • Jordi Delgado Pin ( )

Altres

  • Alicia Maria Ageno Pulido ( )
  • Borja Valles Fuente ( )
  • Elvira Pino Blanco ( )
  • Horacio Rodríguez Hontoria ( )
  • Jose Miguel Rivero Almeida ( )
  • Miquel Sanchez Marre ( )

Hores setmanals

Teoria
2
Problemes
0
Laboratori
2
Aprenentatge dirigit
0.4
Aprenentatge autònom
5.75

Competències

Competències Transversals

Treball en equip

  • G5 - 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 - 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.
    Related competences: CT4.1, CT4.2, CT5.2,
  2. 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.
    Related competences: CT8.6, CT6.1, 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ó.
    Related competences: CT5.1, CT5.4, CT5.5, 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ó.
    Related competences: CT5.1, CT5.4,
  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.
    Related competences: CT5.3, CT4.2, CT5.2, 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ó.
    Related competences: CT5.1, CT5.3,
  7. Dissenyar una interfície d'usuari raonablement còmoda i eficaç per al programa, usant una llibreria GUI.
    Related competences: CT5.6, CT2.5,
  8. Desenvolupar un projecte de programació de mida mitjana, en grup, d'acord amb un pla de desenvolupament i una arquitectura proporcionades d'avantmà.
    Related competences: CT2.4, CT4.3, CT5.3, G5.2, CT3.6, CT4.1, CT4.2, CT5.2, CT5.4, CT5.5, G1.2, 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. Depuració de programes
    Program Testing: prova i depuració.
    Prova de components.
    Estratègies de prova i integració. 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
    Tipus d'entrada i sortida.
    Principis de comunicació amb interlocutors humans. Presentació d'informació, entrada i validació de dades, navegació, nivels d'ajut, models d'usuari.
  7. Eines pel desenvolupament del programari
    Es descriuran per sobre eines per facilitar el desenvolupament del programari: compilació automàtica (gradle), control de versions (git), integració continua (Jenkins), anàlisi estàtica (FindBugs), integració amb testing (junit)

Activitats

Descripció del projecte i formació de grups

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

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

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

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

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

Depuració de programes

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

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
Teoria
4
Problemes
0
Laboratori
0
Aprenentatge dirigit
0
Aprenentatge autònom
4
Objectius: 4 5
Continguts:

Java: implementació d'interfícies

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

Supervisió primera entrega

Classes de laboratori relacionades amb la primera entrega.
Teoria
0
Problemes
0
Laboratori
10
Aprenentatge dirigit
0
Aprenentatge autònom
20
Objectius: 8 1 2 3 6 4 5
Continguts:

Supervisió segona entrega

Classes de laboratori relacionades amb la segona entrega.
Teoria
0
Problemes
0
Laboratori
12
Aprenentatge dirigit
0
Aprenentatge autònom
28
Objectius: 8 1 2 3 6 7 4 5
Continguts:

Presentació segona entrega

Presentació i entrevista presencial de la segona entrega.
Teoria
0
Problemes
0
Laboratori
0
Aprenentatge dirigit
7.5
Aprenentatge autònom
0
Objectius: 8
Continguts:

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 grup 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 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 grups de 3 persones, i els grups s'estructuren en macrogrups de 5 grups (els "clusters") de 15 persones.
- Cada "cluster" tindrà un professor tutor assignat.
- Dins de cada grup, 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: 0.20 * Nota_Examen_Teoria + 0.80 * Nota_Projecte

Nota_Projecte: (0.40 * Entrega1 + 0.60 * Entrega2) * FT

Donat que el projecte és un treball en equip en el que han de participar tots i només els membres del grup, 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 grup. Es farà públic juntament amb les notes de la tercera entrega, i es determinarà a partir del repartiment de tasques dintre del grup (entregat a la Entrega2) i de les presentacions finals del
grup amb el seu tutor.


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

Competència transversal "Empreneduria i innovació": S'avalua usant una rúbrica simple en que el tutor de cada grup puntua els diferents aspectes associats a la competència de cada membre dels grups.

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.