Grau en Engineering in Technology Management

Forma't en un Grau Universitari únic a Espanya i amb un 100% d'ocupació

Disseny i programació orientats a objectes

Descripció
El paradigma de programació orientat a objectes és, actualment, un dels paradigmes més importants en el món de la programació. Partint d?aquesta idea, l?assignatura té com a objectiu que els alumnes aprenguin a dissenyar i programar en aquest paradigma, tot utilitzant un llenguatge actual utilitzat en entorns reals. L?assignatura farà èmfasis en la fase de disseny de programari, i dona per suposat, que els alumnes presenten uns coneixements i domini suficient del paradigma imperatiu i procedimental, per entendre el funcionament imperatiu d?un nou llenguatge de programació. Donat que la majoria dels projectes de programari es desenvolupen per equips de programadors, l?assignatura també vol dotar als alumnes de les competències necessàries per a afrontar aquests entorns de treball.
Tipus assignatura
Tercer - Obligatoria
Semestre
Anual
Curs
2
Crèdits
6.00

Professors Titulars

Coneixements previs

Metodologia i tecnologia de la programació (recomanació)

Objectius

Els Resultats d?Aprenentatge d?aquesta assignatura són:
RA.01 - Disseny de solucions informàtiques a problemes concrets.
RA.02 - Estructuració i modularització del codi.
RA.03 - Coneixements d?un llenguatge imperatiu real.
RA.04 - Coneixements d?un llenguatge orientat a objectes real.
RA.05 - Ús d?un entorn real de programació.
RA.06 - Utilització de patrons de disseny i diagrames de classes.
RA.07 - Treball en equip en l?anàlisi, disseny i implementació de software.
RA.08 - Dominar metodologies de disseny, implementació i validació de software.
RA.09 - Conèixer tècniques i llenguatges de programació a temps real, basats en esdeveniments i cooperatius.

L?assignatura, a partir d?aquests resultats d?aprenentatge, es planteja com a objectius assegurar que l?alumne, en acabar l?assignatura:

Objectiu.1 ? Demostra conèixer el paradigma orientat a objectes i totes les seves característiques.
Objectiu.2 ? Demostra conèixer un llenguatge orientat a objectes real i actual.
Objectiu.3 ? Demostra saber emprar un entorn de desenvolupament real.
Objectiu.4 ? Demostra tenir la capacitat de dissenyar software a partir d?unes especificacions concretes.
Objectiu.5 ? Demostra saber usar patrons de disseny software.
Objectiu.6 ? Demostra saber treballar en equip.

Continguts

Els continguts detallats de l?assignatura són (aquest contingut no es dona necessàriament de manera cronològica):

Coneixement del paradigma orientat a objectes.
Concepte de Classe o Prototip
Concepte d?Objecte o Instància
Variables
Variables de Classe
Variables d?Instància
Concepte de Missatge o Mètode
Mètodes de Classe
Mètodes d?Instància
Concepte d?Encapsulació i Abstracció
Concepte d?Herència
Concepte de Polimorfisme
Concepte d?Interfície

Coneixement d?un llenguatge orientat a objectes real.
Introducció a Java
Què és Java?
Característiques principals de Java
Introducció al llenguatge
Variables
Variables d?instància / classe / locals / paràmetres
Tipus de dades primitius vs referències
Arrays
Operadors
Assignació / Aritmètics / Comparacions
Instanceof
Sentencies, Expressions i Blocs
Sentencies de control de flux
If / Switch / While & do-While / For
Break / Continue / Return
Manegament d?Excepcions
Introducció al mecanisme
Com llençar excepcions (throw /throws)
Try-catch-finally
Introducció a l'OO
Declaració d?una classe
Visibilitat (private / protected / package / public)
Declaració de mètodes
Constructors
Pas de paràmetres
La referència ?this?
Instanciació i ús d?objectes
Static i Final
Enumeracions
Herència en Java
Interfícies
Jerarquia de classes en Java
La classe Object
Herència múltiple
Sobreescriptura de mètodes
Polimorfisme
La referència ?super?
Constructors de subclasses
Mètodes i classes abstractes
Números, Caràcters i Strings
Introducció a Genèrics
Packages
Basic I/O
Collections
AWT / Swing
Concurrència

Ús d?un entorn de desenvolupament real.
Eina de modelatge de diagrames
IntelliJ IDEA com a entorn de desenvolupament
Git com a Sistema de Control de Versions
Jira com a gestor de projectes

Capacitat de dissenyar software a partir d?unes especificacions.
UML
Classe / Objecte / Missatge
Encapsulament i Abstracció
Encapsulament vs Visibilitat
Relacions entre classes
Herència
Polimorfisme

Ús de patrons de disseny software.
GRASP guidelines
Layered Architecture
Patró Model-Vista-Controlador
Responsibility-driven design
Object-Orientation and Databases
DAO design pattern

Treball en equip en un projecte de desenvolupament de software.
Eines de comunicació
Sistemes de Control de versions
Eines de gestió de projectes

Els continguts de l?assignatura es veuen distribuïts durant tot el curs, l?ordre d?impartició no es correspon amb l?ordre del temari anterior. Durant el curs es van presentant els conceptes i es van reforçant a mesura que s?avança. Els temes d?anàlisi, disseny i implementació i patrons es veuran de forma iterativa durant tot el curs introduint les diferents estructures de dades.

Metodologia

L?assignatura s?orienta per tal que l?alumne prengui part activa en el seu propi aprenentatge. La metodologia docent està pensada per tal que l?assignatura sigui dinàmica i participativa. Les classes magistrals es combinen amb classes d?exercicis i activitats a classe, així com pràctiques guiades pel professorat de l?assignatura.

La metodologia docent de l?assignatura està clarament diferenciada en dos semestres. En el primer, s?assoleixen els fonaments del paradigma de l?orientació a objectes i de la programació en Java. L?orientació docent d?aquest semestre és amb classes magistrals, exercicis d?avaluació contínua i pràctiques. En el segon semestre, l?assignatura s?enfoca amb la metodologia d?aprenentatge basada en projectes. Els coneixements assolits durant el primer semestre es consoliden mitjançant la realització d?un projecte quasi real de desenvolupament de software.

Els continguts de l?assignatura es troben planificats que ser impartits en tres nivells. En primer lloc, es realitzarà una introducció teòrica del concepte. Seguidament, s?introduiran els conceptes de disseny de software relacionats amb aquest concepte. Finalment, s?explicarà la implementació d?aquests conceptes en un llenguatge de programació.

Avaluació

Per tal d?aprovar l?assignatura, cal aprovar tots dos semestres per separat.

Nota_final = Nota_S1 * 0.5 + Nota_S2 * 0.5

Primer semestre
El primer semestre s?avaluarà mitjançant la realització d?un conjunt d?exercicis individuals (moderadament significatius) i un projecte (altament significatius).

Els exercicis tenen un objectiu formatiu perquè l?estudiant practiqui de forma individual els coneixements, abans de posar-los en pràctica en el projecte. La nota dels exercicis només es tindrà en compte si el projecte està aprovat i afavoreix a l?estudiant.

El projecte del primer semestre avaluarà els coneixement de disseny i programació dels estudiants. Aquest està dividit en 2 fases de disseny i 2 fases d?implementació. Els conceptes avaluats durant cada una de les quatre fases seran independent entre sí, de manera que caldrà aprovar cada fase per separat per tal d?aprovar el projecte. Si alguna de les fases del projecte no està aprovada, la nota màxima a la que podrà optar l?estudiant serà un quatre (4).

Exercicis = Mitjana (Exercici_1, Exercici_2, Exercici_3)
Projecte = Mitjana (Fase_1, Fase_2, Fase_3, Fase_4) * 0.8 + Memòria * 0.2

Nota_S1 = Projecte * 0.6 + Exercicis * 0.4 (si Exercicis > Projecte)
Nota_S1 = Projecte (si Exercicis <= Projecte)

L?estudiant ha de formar part d?un grup, tan si presenta el projecte individualment o en parella.
Totes les fases i la memòria han d?estar acceptades per poder aprovar el projecte. A la rúbrica d?avaluació s?indicaran els criteris d?acceptació.

L?estudiant disposarà de 3 convocatòries per al lliurament del projecte.

Segon semestre
El segon semestre s?avaluarà mitjançant la realització d?un conjunt d?exercicis individuals (moderadament significatius) i un projecte grupal (altament significatiu) en grups de 5 estudiants.

Els exercicis tenen un objectiu formatiu perquè l?estudiant practiqui de forma individual els coneixements, abans de posar-los en pràctica en el projecte. La nota dels exercicis només es tindrà en compte si el projecte està aprovat i afavoreix a l?estudiant.

El projecte del segon semestre s?avaluarà tenint en compte 3 blocs: (1) la nota del projecte realitzat, (2) la nota de mentoria, i (3) la nota dels companys de projecte (P2P).
La nota del projecte es calcularà a partir de 3 apartats: 40% execució, 40% qualitat de software i 20% documentació. Aquests tres apartats han d?estar acceptats per poder aprovar el projecte. A la rúbrica d?avaluació s?indicaran els criteris d?acceptació.

La nota de mentoria serà un factor multiplicador entre 0,5 i 1,5. Aquest l?assignarà el professor mentor del projecte individualment a cada estudiant. Aquesta nota s?obtindrà a través de la percepció del mentor, durant les reunions setmanals de seguiment, sobre el coneixement demostrat per cada estudiant.

La nota P2P serà un factor multiplicador entre 0 i 1,5. Aquest l?assignaran els estudiants a tots els membres del seu grup. S?utilitzaran 4 qüestionaris que tots els estudiants hauran de respondre. En cas que un estudiant no respongui dos o més dels qüestionaris, la seva nota individual del projecte serà un NP.

Exercicis = Mitjana (Exercici_4, Exercici_5, Exercici_6)
Projecte = (Execució * 0.4 + Qualitat_software * 0.4 + Documentació * 0.2) * Mentoria * P2P

Nota_S2 = Projecte * 0.6 + Exercicis * 0.4 (si Exercicis > Projecte)
Nota_S2 = Projecte (si Exercicis <= Projecte)

Els estudiants només podran lliurar el projecte durant la convocatòria ordinària.

Criteris avaluació
Bibliografia bàsica

[1] C.S.Horstman and G.Cornell, Core Java 2, Vol I. Fundamentos, Septima edición, Prentice Hall, 2006.
[2] K.Arnold, JGosling and D.Holmes, The Java programming language, Boston : Addison-Wesley, 2000
[3] M.Fowler, UML Distilled Third Edition. A brief guide to the standard object modeling language, Addison-Wesley, 2003.
[4] R.Miles and K.Hamilton, Learning UML 2.0, O'Reilly Media Inc, 2006.
[5] C.Larman, Applying UML and patterns : an introduction to object-oriented analysis and design, Prentice Hall PTR, 1998
[6] E.Gamma, R.Helm, R.Johnson and J.Vlissides, Design patterns: elements of reusable object-oriented software, Addison-Wesley Longman Publishing Co., 1995
[7] J.Cooper, Java Design Patterns, Addison Wesley, 2000
[8] D.Lea, Concurrent programming in Java: design principles and patterns, Addison-Wesley, 2000

Material complementari

[9] M.Fowler, Refactoring: Improving the Design of Existing Code, Addison-Wesley Professional, 2018
[10] R.Martin, Clean Code: A Handbook of Agile Software Craftsmanship, Pearson, 2008
[11] K.Sierra and B.Bates, Head First Java, O'Reilly Media, 2005
[12] E.Freeman, B.Bates, K.Sierra and E.Robson, Head First Design Patterns: A Brain-Friendly Guide, O'Reilly Media, 2004