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 (
)
Anna Ramon Hinojosa (
)
Carles Arnal Castello (
)
Guillem Godoy Balil (
)
Ignasi Gómez Sebastià (
)
Jose Miguel Urquiza Ortiz (
)
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
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,
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,
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,
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,
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,
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,
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,
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
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.
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.
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
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.
Patrons de disseny en Java
Es descriuran i implementaran alguns dels patrons de disseny clàssics (decorador, estat, singleton. etc)
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
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
ActivitatActe 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:345 Continguts:
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:8123645 Setmana:
10
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:8123745 Setmana:
14
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:81236745 Setmana:
15 (Fora d'horari lectiu)
Teoria
0h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
2h
Aprenentatge autònom
0h
Supervisió primera entrega
Classes de laboratori relacionades amb la primera entrega. Objectius:8123645 Continguts:
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.
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
Pàgina de Java, el llenguatge de programació usat a l'assignatura. L'última versió disponible de la Java Platform es pot descarregar lliurement d'aquesta web. https://www.oracle.com/java/index.html
- 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.