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
Conèixer les diferents fases de la compilació, en particular l'anàlisi lèxic, el sintàctic i el semàntic.
Conèixer eines per a la creació d'analitzadors lèxics i sintàctics.
Competències relacionades:
CCO1.2,
Conèixer les diferències entre compiladors i intèrprets.
Competències relacionades:
CCO1.2,
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,
Conèixer les característiques principals dels llenguatges de programació funcionals.
Competències relacionades:
CCO1.2,
Conèixer construccions avançades dels llenguatges de programació.
Competències relacionades:
CCO1.2,
Ser capaç de modelar i especificar problemes de hardware o software usant llenguatges funcionals.
Ser capaç d'aprendre nous llenguatges de programació de forma autònoma.
Competències relacionades:
CCO1.2,
G6.3,
Continguts
Introducció als llenguatges de programació.
Turing completesa. Paradigmes de la programació. Característiques principals.
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.
Llenguatges funcionals
Fonaments. Pattern Matching. Avaluació Eager/Lazy. Introducció a Haskell.
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.
Programació d'ordre superior
Les funcions d'ordre superior. Aplicacions. Programació de funcions d'ordre superior en llenguatges funcionals i orientats a objectes.
Especificació i modelat usant llenguatges funcionals
Llenguatges declaratius en l'especificació i el modelat. Prototipat. Especificacions executables. Transformació de programes.
Llenguatges de scripting
Característiques. Utilització de llenguatges de scripting. Combinació de paradigmes. Tipus. Ordre superior. Breu introducció a Python.
Activitats
ActivitatActe 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:459 Continguts:
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:123 Continguts:
Prova sobre els continguts del tema 2. Objectius:123 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:459 Continguts:
Presentació de continguts a les sessions de teoria, que són treballats per al llenguatge Haskell a les sessió de laboratori. Objectius:4569
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:4569 Continguts:
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:57 Continguts:
Examen escrit dels Temes 3 a 5. Objectius:56 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:3489 Continguts:
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.
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