Llenguatges de Programació

Esteu aquí

Crèdits
6
Tipus
Obligatòria d'especialitat (Computació)
Requisits
Departament
CS
Els llenguatges de programació són l'eina bàsica en moltes de les activitats que realitzarà un enginyer informàtic. És per això, que la capacitat de triar el llenguatge de programació més adient és crucial. Cal tenir en compte que no és el mateix si ens interessa principalment l'eficiència, la fiabilitat o la velocitat de desenvolupament. L'assignatura donarà una visió global sobre els llenguatges de programació, així com una petita introducció a la compilació. A més, presentarem amb una mica més de detall els llenguatges funcionals i els usarem per introduir nous elements dels llenguatges de programació, com ara els sistemes de tipus o la programació d'ordre superior. També mostrarem com aquests llenguatges poden ser usats per especificar i modelar hardware i software o, per exemple, en aplicacions financeres. Finalment, es consideraran breument els llenguatges de scripting, cada cop més usats, tant en el prototipat com en el desenvolupament d'aplicacions. Cal remarcar que l'assignatura també treballarà la capacitat per aprendre nous llenguatges.

Professorat

Responsable

  • Jordi Petit Silvestre ( )

Altres

  • Edelmira Pasarella Sanchez ( )
  • Gerard Escudero Bakx ( )
  • Jordi Delgado Pin ( )

Hores setmanals

Teoria
2
Problemes
0
Laboratori
2
Aprenentatge dirigit
0
Aprenentatge autònom
6

Competències

Competències Transversals

Comunicació eficaç oral i escrita

  • G4 [Avaluable] - Comunicar de forma oral i escrita amb altres persones coneixements, procediments, resultats i idees. Participar en debats sobre temes propis de l'activitat de l'enginyer tècnic en informàtica.
    • G4.3 - Comunicar-se de manera clara i eficient en presentacions orals i escrites sobre temes complexos, adaptant-se a la situació, al tipus de públic i als objectius de la comunicació, utilitzant les estratègies i els mitjans adequats. Analitzar, valorar i respondre adequadament a les preguntes de l'auditori.

ús solvent dels recursos d'informació

  • G6 [Avaluable] - Gestionar l'adquisició, l'estructuració, l'anàlisi i la visualització de dades i d'informació de l'àmbit de l'enginyeria informàtica, i valorar de forma crítica els resultats d'aquesta gestió.
    • G6.3 - Planificar i utilitzar la informació necessària per a un treball acadèmic (per exemple, per al treball de final de grau) a partir d'una reflexió crítica sobre els recursos d'informació utilitzats. Gestionar la informació de manera competent, independent i autònoma. Avaluar la informació trobada i identificar-ne les llacunes.

Competències Tècniques de cada especialitat

Especialitat computació

  • CCO1 - Tenir un coneixement profund dels principis fonamentals i dels models de la computació i saber-los aplicar per a interpretar, seleccionar, valorar, modelar i crear nous conceptes, teories, usos i desenvolupaments tecnològics, relacionats amb la informàtica.
    • CCO1.2 - Demostrar coneixement dels fonaments teòrics dels llenguatges de programació i les tècniques de processament lèxic, sintàctic i semàntic associades, i saber aplicar-les per a la creació, el disseny i el processament de llenguatges.

Objectius

  1. Conèixer les diferents fases de la compilació, en particular l'anàlisi lèxic, el sintàctic i el semàntic.

    Competències relacionades: CCO1.2,
  2. Conèixer eines per a la creació d'analitzadors lèxics i sintàctics.
    Competències relacionades: CCO1.2,
  3. Conèixer les diferències entre compiladors i intèrprets.
    Competències relacionades: CCO1.2,
  4. Diferenciar les característiques d'un llenguatge de programació. Identificar els seus punts forts i els seus punts febles i ser capaç de justificar una tria.
    Competències relacionades: CCO1.2, G4.3,
  5. Conèixer les característiques principals dels llenguatges de programació funcionals.
    Competències relacionades: CCO1.2,
  6. Conèixer construccions avançades dels llenguatges de programació.
    Competències relacionades: CCO1.2,
  7. Ser capaç de modelar i especificar problemes de hardware o software usant llenguatges funcionals.

    Competències relacionades: CCO1.2, G4.3, G6.3,
  8. Conèixer les característiques principals dels llenguatges de scripting.

    Competències relacionades: CCO1.2,
  9. Ser capaç d'aprendre nous llenguatges de programació de forma autònoma.
    Competències relacionades: CCO1.2, G6.3,

Continguts

  1. Introducció als llenguatges de programació.
    Turing completesa. Paradigmes de la programació. Característiques principals.
  2. Introducció a la compilació.
    Compilació i interpretació. L'anàlisi lèxic. L'anàlisi sintàctic. Gramàtiques. Taula de símbols. Arbre de sintaxi abstracta. Anàlisi semàntic. Generació de codi.
  3. Llenguatges funcionals
    Fonaments. Pattern Matching. Avaluació Eager/Lazy. Introducció a Haskell.
  4. Sistemes de tipus
    Els tipus en els llenguatges de programació. Els tipus i la fiabilitat. Sistemes de tipus en els llenguatges funcionals i en els llenguatges orientats a objectes.
  5. Programació d'ordre superior
    Les funcions d'ordre superior. Aplicacions. Programació de funcions d'ordre superior en llenguatges funcionals i orientats a objectes.
  6. Especificació i modelat usant llenguatges funcionals
    Llenguatges declaratius en l'especificació i el modelat. Prototipat. Especificacions executables. Transformació de programes.
  7. Llenguatges de scripting
    Característiques. Utilització de llenguatges de scripting. Combinació de paradigmes. Tipus. Ordre superior. Breu introducció a Python.

Activitats

Activitat Acte avaluatiu


Introducció als llenguatges de programació

Es presentaran els continguts a la classe de teoria i es realitzaran treballs pràctics a la sessió de laboratori.
Objectius: 4 5 9
Continguts:
Teoria
2h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
4h

Introducció a la compilació

Presentació dels continguts a les classes de teoria. Realització de pràctiques de laboratori utilitzant analitzadors lèxics i sintàctics i realitzant un petit treball pràctic.
Objectius: 1 2 3
Continguts:
Teoria
2h
Problemes
0h
Laboratori
8h
Aprenentatge dirigit
0h
Aprenentatge autònom
8h

CL

Prova sobre els continguts del tema 2.
Objectius: 1 2 3
Setmana: 6
Teoria
2h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
8h

Llenguatges funcionals

Presentació de continguts i realització de problemes a les classes de teoria. Realització de treballs pràctics en Haskell a les sessions de laboratori.
Objectius: 4 5 9
Continguts:
Teoria
4h
Problemes
0h
Laboratori
6h
Aprenentatge dirigit
0h
Aprenentatge autònom
8h

Sistemes de tipus

Presentació de continguts a les sessions de teoria, que són treballats per al llenguatge Haskell a les sessió de laboratori.
Objectius: 4 5 6 9
Teoria
4h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Programació d'ordre superior

Presentació de continguts a les sessions de teoria i aplicació al llenguatge Haskell a les sessions de laboratori.. També es veurà quines formes de programació d'ordre superior admeten a d'altres llenguatges coneguts com ara Java.
Objectius: 4 5 6 9
Continguts:
Teoria
2h
Problemes
0h
Laboratori
2h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Especificació i modelat usant llenguatges funcionals

Presentació de continguts a les sessions de teoria i realització d'algun cas pràctic, que posteriorment es codificat a la sessió de laboratori.
Objectius: 5 7
Continguts:
Teoria
4h
Problemes
0h
Laboratori
2h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

EP

Examen escrit dels Temes 3 a 5.
Objectius: 5 6
Setmana: 10
Teoria
0h
Problemes
0h
Laboratori
2h
Aprenentatge dirigit
0h
Aprenentatge autònom
10h

Llenguatges de scripting

Presentació de les característiques principals i d'algun exemples de llenguatges a classe de teoria. Utilització de llenguatges de scripting al laboratori, com ara gestors de processos o per navegadors web, etc.
Objectius: 3 4 8 9
Continguts:
Teoria
2h
Problemes
0h
Laboratori
6h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Aprenentatge d'un nou llenguatge de programació

L'estudiant haurà d'aprendre un nou llenguatge que se li assignarà.

Teoria
2h
Problemes
0h
Laboratori
2h
Aprenentatge dirigit
0h
Aprenentatge autònom
4h

CT

En aquest acte s'avaluarà l'aprenentatge
Objectius: 4 9
Setmana: 14
Teoria
1h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Activitats de repàs



Teoria
2h
Problemes
0h
Laboratori
2h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

EF


Objectius: 4 5 6 7 8
Setmana: 15 (Fora d'horari lectiu)
Teoria
3h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
12h

Metodologia docent

Les classes estan dividides en sessions de teoria i laboratori.

A les sessions de teoria es desenvoluparan els coneixements de l'assignatura, intercalant l'exposició de nou material teòric amb exemples i la interacció amb els alumnes per tal de discutir els conceptes.

A les classes de laboratori es posaran en pràctiques els conceptes introduïts i s'aplicaran a llenguatges de programació i a problemes concrets. Es realitzaran tres petites pràctiques que aniran associades a les diferents proves d'avaluació.

Mètode d'avaluació

La nota de l'assignatura és

N = 0.40·F + 0.25·P1 + 0.25·P2 + 0.10·D

on:

F = nota de l'examen final
P1 = nota delm parcial (mitjans de curs)
P2 = nota de a pràctica (finals de curs)
D = nota del treball dirigit

L'examen parcial sera un examen d'ordinador que avalua Haskell. L'examen final serà un examen escrit que avaluarà sobre tots els continguts del curs. La pràctica consisteix en utilitzar eines per generar compiladors i Python per a resoldre un cas pràctic.

El treball dirigit consisteix en preparar un vídeo i un document escrit sobre les propietats d'un o alguns llenguatges de programació. La seva avaluació es farà per evaluació entre companys (co-avaluació). Les qualificacions de les competències transversals s'obtenen del treball dirigit.

Bibliografia

Bàsica:

Capacitats prèvies

Capacitats prèvies sobre lògica adquirides a l'assignatura Fonaments Matemàtics (FM):
- Coneixement dels conceptes bàsics de lògica de proposicions i predicats
- Coneixements sobre Inferència lògica.

Capacitats prèvies sobre Programació adquirides a les assignatures d'Estructura de Dades i Algorismes (EDA) i Projectes de Programació (PROP):
- Coneixement sobre programació.
- Coneixement sobre llenguatges de programació orientats a objectes