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

Kommentar

NEDLÆGGES - udbydes sidste gang F24
 1. Eksamensforsøg afholdes juni 2024 (ordinær eksamen)
 2. Eksamensforsøg afholdes august 2024 (reeksamen)
3. Eksamensforsøg afholdes Januar 2025 (reeksamen)

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.