IT-Universitetet i København
 
  Tilbage Kursusoversigt
Kursusbeskrivelse
Kursusnavn (dansk):Programmer som data 
Kursusnavn (engelsk):Programs as Data 
Semester:Efterår 2011 
Udbydes under:Bachelor i softwareudvikling (bswu) 
Omfang i ECTS:7,50 
Kursussprog:Dansk 
Kursushjemmeside:http://www.itu.dk/courses/BPRD/E2011/ 
Min. antal deltagere:12 
Forventet antal deltagere:40 
Maks. antal deltagere:45 
Formelle forudsætninger:Betydelig programmeringserfaring og solid beherskelse af Java og C#, samt kendskab til F# eller Standard ML. Erfaring med programmers tids- og pladsforbrug. Det er en fordel sideløbende at følge kurset Operativsystemer og C.

---
Dette kursus indgår på femte semester af bacheloruddannelsen i softwareudvikling og koordineres med det parallelle kursus Operativsystemer og C. 
Læringsmål:Efter dette kursus skal du

* Kunne analysere og forklare tidsforbrug og pladsforbrug for et
program skrevet i Java, C#, C og et dynamisk programmeringssprog,
baseret på en forståelse hvordan sprogene er implementeret,
herunder hvilken rolle lageradministration og spildopsamling
spiller; og kunne bruge denne forståelse til at vurdere fordele og
ulemper ved at anvende en given sprogkonstruktion i en given
situation (fx objekttype versus værditype i C#).

* Kunne benytte værktøjer effektiv genkendelse af regulære udtryk,
til leksikalsk analyse og til syntaksanalyse; kunne forklare
begrænsningerne i disse værktøjer med brug af relevante teoretiske
begreber; samt kunne vælge de mest relevante værktøjer til løsning
af en foreliggende genkendelsesopgave.

* Kunne designe repræsentationer af abstrakt syntaks for et givet
problem, i et funktionelt såvel som et objektorienteret sprog;
kunne benytte værktøjer til at opbygge abstrakt syntaks ud fra
tekstuelle inddata; og kunne benytte rekursion til analyse og
transformation af abstrakt syntaks, for eksempel typeanalyse,
oversættelse, eller reduktion af logiske eller aritmetisks udtryk.

* Kunne sammenligne udtrykskraft og effektivitet for forskellige
programmeringssprog (især Java, C#, C og dynamisk typede sprog), og
forklare hvordan deres egenskaber følger af designbeslutninger og
implementationsteknikker bag sprogene.

* Kunne vise hvordan et program både kan anskues som aktiv skaber af
dynamisk opførsel (programkørsler) og som passive data der kan
analyseres, transformeres eller genereres af andre programmer.

* Kunne forklare hvordan et givet nyt programmeringssprog forholder
sig til kendte sprog. 
Fagligt indhold:* Leksikalsk analyse, regulære udtryk, endelige tilstandsmaskiner,
ikke-deterministiske og deterministiske tilstandsmaskiner,
lexer-generatorer.

* Syntaksanalyse, top-ned versus bund-op, LL versus LR,
parser-generatorer.

* Stakmaskiner, evaluering af udtryk, Postscript, mellemkode for en
simpel stakmaskine.

* Oversættelse af en delmængde af C (*p, &x, pointer-aritmetik,
arrays, arr[i]) til stakmaskinkode.

* Typetjek, typeinferens, statisk typede sprog, dynamisk typede
sprog.

* Maskinmodellen bag Java, C#, F# (stak, hob, spildopsamling), og
oversættelse fra kildetekst til stakmaskinkode.

* Mellemkodesprogene i Java Virtual Machine og Common Language
Infrastructure, og deres implementation med generering af
registermaskinkode på køretid.

* Spildopsamlingsteknikker (garbage collection).

* Funktionsprogrammering med Scheme, abstrakt syntaks som konkret
syntaks.

* Continuations, exceptions, og en fortolker for en delmængde af
Icon. 
Læringsaktiviteter:12 forelæsninger og 12 øvelsesgange

---
Dette kursus indgår på femte semester af bacheloruddannelsen i softwareudvikling og koordineres med det parallelle kursus Operativsystemer og C.
Det samlede studieforløb er beskrevet her:
Bachelor softwareudvikling  

Eksamensform og -beskrivelse:A2: Skriftlig eksamen med alle skriftlige og trykte hjælpemidler, 7-trins-skala, Ekstern censur

I dette kursus skal de studerende gennemføre obligatoriske aktiviteter (fx deltagelse, opgaver, øvelser, fremlæggelser, produktioner), som skal opfyldes for at blive indstillet til eksamen og evt. for at kunne aflevere skriftlig arbejde til eksamen. Hvis aktiviteterne ikke gennemføres annulleres tilmeldingen til eksamen.

De obligatoriske aktiviteter (datoer annonseres på kursusbloggen/-hjemmesiden):
* Der stilles 11 ugeopgaver til løbende aflevering og godkendelse; det er en forudsætning for at gå til eksamen at 9 af disse opgaver er godkendt



Skriftlig eksamen har en varighed på 4 time(r).



Afleverings/gennemførelse af obligatoriske aktiviteter inden fredag d. 2. december 2011 kl. 15:00.  

Litteratur udover forskningsartikler:* Hansen & Rischel: Functional programming with F#, draft 2011, Danmarks Tekniske Universitet: eller lignende.
* Mogensen: Basics of Compiler Design. DIKU, University of Copenhagen, 2010. Se http://www.diku.dk/hjemmesider/ansatte/torbenm/Basics/
* Sestoft: Programming Language Concepts for Software Developers. IT University of Copenhagen, august 2011. 
 
Undervisere
Følgende personer underviser på kurset:
NavnStillingUndervisertypeIndsats (%)
Peter Sestoft Professor(ITU) Kursusansvarlig 100
Jonas Brabrand Jensen Ph.d.-studerende(ITU) Underviser 0
David Raymond Christiansen Ph.d.-studerende(ITU) Underviser 0
Kasper Videbæk Nielsen Hjælpelærer(ITU) Hjælpelærer 0

Afholdelse (tid og sted)
Kurset afholdes på følgende tid og sted:
UgedagTidspunktForelæsning/ØvelserStedLokale
Mandag 10.00-11.50 Forelæsning ITU 2A14
Mandag 12.00-13.50 Forelæsning ITU 2A14
Mandag 14.00-15.50 Øvelser ITU 2A14

Eksamen afholdes på følgende tid og sted:
EksamensdatoTidspunktEksamenstypeStedLokale
2012-01-09 09:00-13:00 Skriftlig eksamen ITU 4A14/4A16