Informació general


Tipus d'assignatura: Obligatòria

Coordinador: Adso Fernández Baena

Trimestre:2

Crèdits: 4

Professorat: Rosa Herrero Antón

Descripció


L'assignatura Programació I suposa la primera aproximació al disseny d'algorismes utilitzant les bases de la programació orientada a objectes en el marc de la matèria de Desenvolupament. Es treballen problemes d'una certa complexitat, tant per dissenyar algorismes nous com per testejar i debugar adequadament algorismes implementats. L'assignatura consta de sessions teòriques i sessions de pràctica. Per assolir els coneixements de l'assignatura s'avalua per un costat tres pràctiques i per un altre els coneixements teòrics de manera individual.

Aquesta assignatura disposa de recursos metodològics i digitals per fer possible la seva continuïtat en modalitat no presencial en el cas de ser necessari per motius relacionats amb la Covid-19. D’aquesta forma s’assegurarà l’assoliment dels mateixos coneixements i competències que s’especifiquen en aquest pla docent.

El Tecnocampus posarà a l’abast del professorat i l’alumnat les eines digitals necessàries per poder dur a terme l’assignatura, així com guies i recomanacions que facilitin l’adaptació a la modalitat no presencial.

Resultats d'aprenentatge


En acabar l'assignatura els estudiants han de ser capaços de:

E6.1. Dissenyar l'arquitectura del software d'un videojoc d'acord a unes especificacions.

Metodologia de trabajo


L'assignatura utilitza les següents metodologies de treball:

Classe magistral, càpsules de vídeo, resolució de problemes, laboratori en grup reduït i aprenentatge col·laboratiu, i tutories no presencials.

Continguts


Tema 1: Introducció i conceptes generals de la programació orientada a objectes (POO)

1.1. Què és la POO?

1.2. Programació estructurada vs POO

1.3. Perquè utilitzar la POO i els seus beneficis

1.4. Característiques de la POO

1.5. Definició d'objecte i classe

1.6. Elements d'una classe

Tema 2: Descomposició funcional i disseny descendent

2.1. Descomposició de problemes en subproblemes

2.2. Diagrames de flux

2.3. Recorregut vs cerca

2.4. Pas de paràmetres: entrada, sortida, referència i valor

Tema 3: Conceptes bàsics de la programació orientada a objectes

3.1. Atributs objectuals, atributs de classe i constants

3.2. Constructors i instanciar objectes

3.3. Mètodes d'una classe i sobrecàrrega

3.4. Diagrames de llenguatge unificat de modelat (UML)

3.5. Paraula clau "this"

3.6. Classes vs classes estàtiques

3.7. Gestió d'excepcions i debug dins d'una classe

3.8. Operadors

Tema 4: Herència, interfaces i polimorfisme (jerarquia de classes)

4.1. Introducció, definició d'herència i exemples

4.2. Creació de classes base i derivades

4.3. Classes "sealed" i "abstract"

4.4. Interfaces

4.5. Polimorfisme

Tema 5: Estructures de dades

5.1. Llistes dinàmiques

5.2. Llistes ordenades (Key/value)

5.3. Cues (FIFO) i stacks (LIFO)

5.4. Taules de hash

5.5. Grafs

Activitats d'aprenentatge


Amb l'objectiu de recollir evidència de l'assoliment dels resultats d'aprenentatge esperats es realitzaran les següents activitats de caràcter avaluatiu (relacionades amb totes les competències comunes):

A1. Pràctiques de laboratori 1: Treballar amb matrius i anàlisi descendent (Evidència del resultat d’aprenentatge E6.1)

En aquesta pràctica l'estudiant haurà d'aplicar els conceptes explicats a les classes teòriques sobre els temes 1 i 2, més concret, la descomposició funcional i disseny descendent, a més de la diferència entre recorregut i cerca, caldrà dissenyar el diagrama de flux del joc. També aplicarà els conceptes explicats a les classes teòriques introductòries sobre la orientació a objectes.

L'activitat es realitzarà en parelles utilitzant un repositori Git amb un projecte inicial amb classes creades on caldrà omplir part del codi. Activitat no recuperable.

A2. Pràctiques de laboratori 2: Implementar classes i treballar amb objectes (Evidència del resultat d’aprenentatge E6.1)

En aquesta pràctica l'estudiant haurà d'aplicar els conceptes explicats a les classes teòriques sobre la programació orientada a objectes, més en concret, els temes 2 i 3 del temari teòric. A més l'estudiant utilitzarà classes de C# per a la lectura i escriptura de fitxers guardats en el disc dur de l'ordinador. L'estudiant haurà de seguir un diagrama UML per la creació de les diferents classes i haurà de dissenyar un diagrama de flux del joc.

L'activitat es realitzarà en parelles utilitzant un repositori Git amb un projecte inicial on hi haurà un codi inicial i a més, caldrà afegir noves classes. Activitat no recuperable.

A3. Pràctiques de laboratori 3: Conceptes d'herència (Evidència del resultat d’aprenentatge E6.1)

En aquesta tercera pràctica del curs, l'estudiant haurà d'aplicar els conceptes d'herència, interfaces i polimorfisme (jerarquia de classes) explicats en el tema 4 i 5 del curs. L'estudiant haurà de dissenyar un diagrama UML de les classes utilitzades i un diagrama de flux del joc.

L'activitat es realitzarà en parelles utilitzant un repositori Git amb un projecte inicial on hi haurà un codi inicial i a més, caldrà afegir noves classes. Activitat no recuperable.

A4. Exercicis a classe: Qüestionaris teòrics (Evidència de tots els resultats d’aprenentatge)

A l'inici d'algunes classes es realitzaran diversos tests individuals de preguntes curtes dels conceptes teòrics treballats. Activitat no recuperable.

A5. Exercicis a casa: Exercicis pràctics curts (Evidència de tots els resultats d’aprenentatge)

Diversos exercicis pràctics a l'aula virtual, a realitzar en parella, dels conceptes teòrics treballats. Activitat no recuperable.

A6. Examen pràctic final (Evidència de tots els resultats d’aprenentatge)

Examen pràctic individual a partir d'un projecte inicial caldrà resoldre exercicis o problemes dels conceptes teòrics i pràctics de tota l'assignatura.

Criteris generals de les activitats:

  • El professor presentarà un enunciat per cada activitat i els criteris d'avaluació i/o rúbriques.
  • El professor informarà de les dates i format del lliurament de l'activitat (s'haurà de realitzar la corresponent entrega electrònica de la pràctica juntament amb les explicacions pertinents de la mateixa).

Sistema d'avaluació


La nota de cada alumne es calcularà seguint els següents percentatges:

A1. Pràctiques de laboratori 1: Treballar amb matrius i anàlisi descendent 12%

A2. Pràctiques de laboratori 2: Implementar classes i treballar amb objectes 12%

A3. Pràctiques de laboratori 3: Conceptes d'herència 12%

A4. Exercicis a classe: Qüestionaris teòrics 5%

A5. Exercicis a casa: Exercicis pràctics curts 9%

A6. Examen pràctic final 50%

Nota final = A1·0,12 + A2·0,12 + A3·0,12 + A4·0,05 + A5·0,09 + A6·0.50

Consideracions:

  • Cal obtenir una nota superior o igual a 5 a l'examen final A6 per a aprovar l'assignatura.
  • Una activitat no entregada o lliurada amb retard i sense justificació (citació judicial o assumpte mèdic) compta com un 0. 
  • És potestatiu dels docents acceptar o no lliuraments fora dels terminis que s'indiquin per les activitats A1, A2 i A3, i sempre abans de l'examen final. En el cas que aquests lliuraments fora de termini s'acceptin, és potestatiu del docent decidir si aplica alguna penalització i la quantia d'aquesta.
  • És responsabilitat de l'alumne evitar el plagi en totes les seves formes. En el cas de detectar un  plagi, independentment del seu abast, en alguna activitat correspondrà a tenir una nota de 0. A més, el professor comunicarà a la Cap d'estudis la situació per a que es prenguin mesures aplicables en matèria de règim sancionador.

Recuperació:

  • Només es poden presentar a la recuperació els estudiants que es presentin a l'examen final i que no superin la qualificació mínima (5) a la nota final.
  • Les activitats A1, A2, A3, A4 i A5 no es poden recuperar.
  • La nota de l'examen de recuperació substitueix només a la nota de l'activitat A6.

Bibliografia


Bàsic

Clark, Dan (2011) Beginning C# Object-Oriented Programming. Apress.

Fagerberg, Jonas (2015)  C# for Beginners: The Tactical Guidebook: Learn Csharp by Coding. CreateSpace Independent Publishing Platform.

Meyer, Bertrand (1997) Object-Oriented Software Construction. Prentice Hall, segunda edición.

Versión española: Construcción de software orientado a objetos, Prentice Hall Iberia, 1999.

Chaudhary, Harry H. (2014) C# Programming: Step By Step Beginner's To Experts Edition. Createspace LLC USA.