IT-Universitetet i København
 
  Tilbage Kursusoversigt
Kursusbeskrivelse
Kursusnavn (dansk):Programmer som data 
Kursusnavn (engelsk):Programs as Data 
Semester:Efterår 2015 
Udbydes under:Bachelor i softwareudvikling (bswu) 
Omfang i ECTS:7,50 
Kursussprog:Dansk 
Kursushjemmeside:https://learnit.itu.dk 
Min. antal deltagere:
Forventet antal deltagere:57 
Maks. antal deltagere:60 
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 af 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 til 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:Please note, that due to technical challenges, changes may occur before the start of the semester (week 35) – this applies to all sections of the course description.

* 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 (.NET, Mono), 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:14 ugers undervisning bestående af forelæsninger og øvelser

---
Dette kursus indgår på femte semester af bacheloruddannelsen i softwareudvikling.
Det samlede studieforløb er beskrevet her: Bachelor softwareudvikling  

Obligatoriske aktivititer:I dette kursus skal de studerende gennemføre obligatoriske aktiviteter, som skal opfyldes for at blive indstillet til eksamen og evt. for at kunne aflevere skriftlig arbejde til eksamen.

Der stilles 10 ugeopgaver til løbende aflevering (se frister på kursushjemmesiden) og godkendelse; det er en forudsætning for at gå til eksamen at 8 af disse opgaver er godkendt.

Dato for aflevering af obligatoriske opgaver vil fremgå af kursushjemmeside. 
Eksamensform og -beskrivelse:C: Skriftlige arbejder uden mundtlig eksamen., (7-scale, external exam)

Take-home written exam/micro-project
- Individual
- Start at 7 January 9:00
- End at 8 January 14:00 - submission in LearnIT
- All materials, compilers, and so on, including Internet access, allowed
- Plagiarism or copying of solutions not allowed. No oral exam
- A fraud check will be performed after the hand-in. 20 % of students randomly selected will have to meet at ITU (place and time will be publiced later) to check authorship.  

Litteratur udover forskningsartikler:* Kursets lærebog er Peter Sestoft: Programming Language Concepts. Springer 2012. Se http://www.itu.dk/people/sestoft/plc/
* Desuden bruges to kapitler fra Torben Mogensen: Introduction to Compiler Design. Springer 2011, eller tidligere udgave http://www.diku.dk/hjemmesider/ansatte/torbenm/Basics/
* Endvidere, til referencebrug, materialer om F#, fx Michael Hansen & Hans Rischel: Functional Programming with F#, Cambridge University Press 2013, eller lignende. Se http://www2.imm.dtu.dk/~mire/FSharpBook/
 
Undervisere
Følgende personer underviser på kurset:
NavnStillingUndervisertypeIndsats (%)
Ahmad Salim Al-Sibahi Ph.d.-studerende(ITU) Underviser 0
Niels Hallenberg Ekstern lektor(ITU) Kursusansvarlig 100
Oliver Philip Roer Hjælpelærer(ITU) Hjælpelærer 0
Jakob Merrild Hjælpelærer(ITU) Hjælpelærer 0