DM852: Introduktion til generisk programmering

Det Naturvidenskabelige Studienævn

Undervisningssprog: På dansk eller engelsk afhængigt af underviser, men engelsk ved internationale studerende
EKA: N340038102
Censur: Ekstern prøve
Bedømmelse: 7-trinsskala
Udbudssteder: Odense
Udbudsterminer: Forår
Niveau: Kandidat

STADS ID (UVA): N340038101
ECTS-point: 5

Godkendelsesdato: 27-10-2022


Varighed: 1 semester

Version: Godkendt - aktiv

Indgangskrav

Ingen

Faglige forudsætninger

Studerende, der følger kurset, forventes at
  • have viden om og kompeencer i objekt-orientere programmering.
  • have basal viden om og færdigheder i systemprogrammering og funktionel programmering.
  • have viden om computerarkitektur og basal oversætterkontruktion.
  • have viden om almene algoritmer og datastrukturer, og basale færdigheder i deres implementering.
  • være i stand til at vurdere kompleksiteten af algoritmer, med hensyn til køretid såvel som pladsforbrug.

Formål

Formålet med kurset er at sætte den studerende i stand til at implementere effektive generiske algoritmer og datasttrukturer i C++. I generisk programmering kan en algoritme formuleres ved brug af abstrakte typer der kun instantieres når algoritmen bruges med konkrete typer. Templates i C++ er en compile-time-mekanisme der gør det muligt at implementere generiske algoritmer på et højt abstraktionsnivea, og som er statisk type-sikre og har et minimalt overhead på køreid.

Kurset bygger på kompetencer i programmering, computer-arkitektur, systemprogrammering, algoritmer og data strukturer, og oversætterkonstruktion, med henblik på at kombinere dem, for at gøre den studerende i stand til at lave genbruglige praktiske implementeringer af almene algoritmer og datastrukturer.

I relation til uddannelsens læringsmål har kurset eksplicit fokus på
  • ekspertviden på et afgrænset fagområde, der er baseret på det højeste internationale forskningsfelt inden for det datalogiske fagområde.
  • at kunne forstå og på et videnskabeligt grundlag reflektere over det datalogiske fagområdes viden samt kunne identificere videnskabelige problemstillinger.
  • beskrive, analysere og løse avancerede datalogiske problemstillinger ved hjælp af de lærte modeller.
  • analysere fordele og ulemper ved forskellige datalogiske metoder, også inden for fagligt komplekse områder.
  • udvikle nye varianter af de lærte metoder, hvor det konkrete problem kræver det.
  • formidle forskningsbaseret viden og diskutere professionelle og videnskabelige problemstillinger med både fagfæller og ikke-specialister.
  • planlægge og udføre videnskabelige projekter på højt fagligt niveau herunder styre arbejds- og udviklingssituationer, der er komplekse, uforudsigelige og forudsætter nye løsningsmodeller.
  • kunne tage ansvar for egen faglig udvikling og specialisering.

Målbeskrivelse

Efter kurset er det forventet at den studerende har følgende.

Viden om
  • objektmodellen i C++, og de overordnede forskelle til forskelle i andre almene programmeringssprog.
  • den basale brug af exceptions i C++ og deres interagering med objektmodellen og håndtering af resourcer.
  • forskellige typer af polymorfi på et basalt niveau.
  • de fundamentale principper for generisk programmering i C++, deriblandt forskellen mellem abstrakte beskrivelser, beskrivelser ved brug af koncepter og konkrete implementeringer af algoritmer og datastrukturer.
  • fundamentale koncepter for generiske datastrukturer i C++, deriblandt, regularitet og iterators,
  • overordnede forskelle i understøttelse for generisk programmering i almene programmeringssprog.
  • basal brug af template-metaprogrammering i C++ for at løse konkrete problemer.
Færdigheder i
  • programmering i C++ med moderne faciliteter i sproget og almene mønstre.
  • implementering af generiske datastrukturer der modellerer givne koncepter.
  • implementering af generiske algoritmer ved brug af interfaces defineret af givne koncepter.
  • basal implementering af check af koncepter for datastrukturer.
  • basal brug af template-metaprogrammering i C++ for at løse konkrete problemer.

Kompetener i

  • basalt design af generiske datastrukturer der modellerer givne koncepter.
  • basalt design af generiske algoritmer ved brug af interfaces defineret af givne koncepter.
  • basal dokumentering af generiske datastrukturer der modellerer givne koncepter.
  • basal dokumentering af generiske algoritmer der bruger interfaces defineret af givne koncepter.
  • basal evaluering af den prakiske effektivitet af generiske algoritmer og datastrukturer, both med hensyn til pladsforbrug og køretid.
  • kommunikation og diskussion af basale designvalg for generiske algoritmer og datastrukturer.
  • opnå videregående viden om generisk programmering.

Indhold

De følgende hovedemner indgår i kurset.
  • Programmering i C++, deriblandt brug af standardbiblioteket, og idéerne bag dele af dets implementering.
  • Templates, type-deduktion og type-sikkerhed.
  • Fejlhåndtering.
  • Resource-håndtering (eks. hukommelse).
  • Almene generiske datastrukturer.
  • Almene generiske algoritmer.
  • Metaprogrammering.

Litteratur

Se itslearning for materiale og yderligere litteraturhenvisninger.

Eksamensbestemmelser

Eksamenselement a)

Tidsmæssig placering

Forår og juni

Udprøvninger

Portfolio og test

EKA

N340038102

Censur

Ekstern prøve

Bedømmelse

7-trinsskala

Identifikation

Fulde navn og SDU brugernavn

Sprog

Følger, som udgangspunkt, undervisningssprog

Hjælpemidler

Tilladt, nærmere beskrivelse af eksamensreglerne vil blive offentliggjort i itslearning.

ECTS-point

5

Uddybende information

Portfolio består af: Afsluttende projekt og opgaver.
Et antal opgaver afleveret undervejs i kurset samt et afsluttende projekt. Karakter baseres på et samlet indtryk af komponenterne som indgår i evaluering, dog med højest vægtning af det afsluttende projekt. Censor vil have adgang til besvarelserne af opgaverne.
Reeksamen: har samme form som den ordinære eksamen, med et antal opgaver og et projekt, men hvor deadline(s) vil være i reeksamensperioden.

Vejledende antal undervisningstimer

40 timer per semester

Undervisningsform

På naturvidenskab er undervisningen tilrettelagt efter trefasemodellen, dvs. intro-, trænings- og studiefasen.

  • Introfase: 30 timers forelæsnigner.
  • Træningsfase: 10 timers laboratorieøvelser.

Aktiviteter i studiefasen:

  • Brug af den tilegnede viden til at udvikle færdigheder og kompetencer i øvelser og projekter.
  • Læsning og diskussion af de videnskabelige artikler, bog-kapitler og andet materiale.

Ansvarlig underviser

Navn E-mail Institut
Jakob Lykke Andersen jlandersen@imada.sdu.dk Algoritmer

Skemaoplysninger

Administrationsenhed

Institut for Matematik og Datalogi (datalogi)

Team hos Uddannelsesjura & Registratur

NAT

Udbudssteder

Odense

Anbefalede studieforløb

Profil Uddannelse Semester Udbuds periode

Overgangsordninger

Overgangsordninger beskriver, hvordan et kursus erstatter et andet kursus, når der ændres i et studieforløb.
Hvis der er lavet en overgangsordning for et kursus vil den fremgå af oversigten.
Se overgangsordninger for alle kurser på Det Naturvidenskabelige Fakultet.