5 ECTS credits
150 u studietijd

Aanbieding 1 met studiegidsnummer 3019942BNR voor alle studenten in het 1e semester met een verdiepend bachelor niveau.

Semester
1e semester
Inschrijving onder examencontract
Niet mogelijk
Beoordelingsvoet
Beoordeling (0 tot 20)
2e zittijd mogelijk
Ja
Inschrijvingsvereisten
Studenten die dit opleidingsonderdeel opnemen, moeten geslaagd of ingeschreven zijn voor 'Structuur van computerprogramma's 1'. Studenten Ingenieurswetenschappen die dit opleidingsonderdeel opnemen, moeten geslaagd zijn voor ‘Informatica’ en moeten geslaagd of ingeschreven zijn voor ‘Informatie en communicatietechnologie’ én voor ‘Werktuigkunde en elektrotechniek’ of ‘Bouwkunde’ of Leefmilieutechnologie en duurzame materialen’.
Onderwijstaal
Nederlands
Faculteit
Faculteit Wetenschappen en Bio-ingenieurswetensch.
Verantwoordelijke vakgroep
Computerwetenschappen
Onderwijsteam
Elisa Gonzalez Boix (titularis)
Onderdelen en contacturen
26 contacturen Hoorcollege
26 contacturen Werkcolleges, practica en oefeningen
125 contacturen Zelfstudie en externe werkvormen
Inhoud

Deze cursus confronteert de student met moderne, in de praktijk gebruikte systeem-programmeertalen (in casu C en nazaten) en toont aan in hoeverre concepten en technieken die geïntroduceerd werden in inleidende cursussen zoals “Structuur van Computerprogramma’s I” voorkomen in, of kunnen getransponeerd worden naar, dit soort talen. Daarnaast worden concepten geïntroduceerd die uniek zijn aan laag-niveaul programmeertalen zoals manueel geheugenbeheer en pointers.

Onderwerpen die behandeld worden tijdens de les:

  1. Basis van programmastructuur en ontwikkelingsomgevingen.
    • Compilatie, linking en relocatie.
    • De C preprocessor, header bestanden, inlining, macro’s.
    • Make, debuggen.
  2. Fundamentele programmeerconcepten van C
    • Adressen en data-objecten
    • Variabelen, types, operatoren, expressies, typedefs.
    • Conditionele en iteratieve controlestructuren, andere controle instructies.
    • Functiedefinities, declaraties.
    • Scoping regels.
  3. Datastructuren en abstractie
    • Pointers, adressen en data-objecten.
    • Arrays, character arrays, arrays als syntactic sugar voor pointers.
    • Structures, bit fields, unions.
    • Dynamische geheugenallocatie, memory leaks.
    • Dynamische datastructuren, lijsten, bomen.
    • Functiepointers en hogere-orde functies, relatie tot geneste scopes, jump tables.
    • Klassieke abstracte datatypes, stack, queue.
  4. Input en Output
    • Standaardlibrary, standaard I/O, geformatteerde I/O, lijn I/O.
    • FILE’s, foutafhandeling.
    • Basis van de systeeminterface voor I/O.
  5. Executiemodel en verschillen met higher-level talen
    • Stack frames, stack en functies, cdecl.
    • Functies: recursieve vs. iteratieve processen.
    • Verschillende soorten geheugen errors, stack overflows.
    • Geavanceerde onderwerpen in het geheugenmodel:
      • Gestructureerde control flow, setjmp/longjmp
      • Scoping: dynamische en statische scope
  6. Laag-niveau programmeren met een geheugenveilige taal
    • Fundamentele concepten in Rust.
    • Typesysteem en eigendom, eigendomsregels, referenties en lenen
    • Datastructuren en abstractie in Rust
Studiemateriaal
Digitaal cursusmateriaal (Vereist) : Cursusnota's en slides beschikbaar, Canvas
Handboek (Aanbevolen) : The C Programming Language, Kernighan and Ritchie, 2e editie, Prentice Hall, 9780131103627, 1988
Handboek (Aanbevolen) : Pointers on C, Kenneth Reek, 1e editie, Pearson, 9780673999863, 1997
Bijkomende info

Tijdens de lessen zullen slides geprojecteerd worden. Deze slides zullen op voorhand beschikbaar gemaakt worden op Canvas. Bijkomende cursusnotities en voorbeeldprogramma’s die getoond worden tijdens de lessen zullen ook beschikbaar gemaakt worden op Canvas.

Daarnaast worden de volgende referentieboeken aangeraden:

- The C Programming Language (Kernighan and Ritchie)

- Pointers on C (Kenneth Reek)

Leerresultaten

Algemene competenties

Deze cursus is een introductie tot laag-niveau programmeertalen.

Er is een sterke focus op de manier waarop computerprogramma’s gestructureerd en ontwikkeld kunnen worden in talen waarvan de uitvoering niet langer afhangt van een virtuele machine of een interpreter, en waarin de ontwikkelaar manueel resources zoals het geheugen moet beheren. De cursus focust op het bestuderen van C en een aantal concepten van hogere programmeertalen.

In hoofdzaak wordt de vergelijking gemaakt tussen Scheme/Python en C,  maar andere talen vervolledigen de vergelijking. Alternatieve oplossingen voor laag-niveau programmeren met een geheugenveilige taal worden ook besproken, waarbij er wordt ingezoomd op Rust.

Tegen het einde van de cursus beheerst de student veel voorkomende programmeerconcepten, zoals die bestaan in laag-niveau talen zoals C en diens nazaten. De student heeft op een theoretisch niveau kennis en inzicht in pointers, manueel geheugenbeheer en stack-based runtimes. De student heeft ook de benodigde woordenschat om in een discussie deze onderwerpen uit te leggen en te vergelijken. De student is in staat om software te ontwikkelen gebruik makende van de compilers en debuggers die aangeboden worden door traditionele Unix-gebaseerde omgevingen voor C. De student is in staat om verworven kennis en inzicht in praktijk te brengen en in dit medium programmeertaken af te werken die voldoen aan een gegeven lijst van objectieve kwaliteitseisen.

Studenten moeten in staat zijn om duidelijk te communiceren over de bestudeerde onderwerpen. Dit wordt gedaan door studenten te vragen een geschreven rapport over hun programmeerproject in te dienen. Studenten moeten ook in staat zijn om hun ontwerp of hun gemaakte keuzes te verantwoorden. Dit wordt gedaan door hen vragen te stellen over hun project tijdens de mondelinge verdediging.

Nadat ze de cursus afgewerkt hebben, moeten studenten de benodigde fundamentele kennis verworven hebben om dieper in te gaan op onderwerpen die laag-niveau programmeervaardigheden vereisen (bv. systeemprogrammeren, implementatie van programmeertalen).

Beoordelingsinformatie

De beoordeling bestaat uit volgende opdrachtcategorieën:
Examen Schriftelijk bepaalt 50% van het eindcijfer

ZELF Praktijkopdracht bepaalt 50% van het eindcijfer

Binnen de categorie Examen Schriftelijk dient men volgende opdrachten af te werken:

  • Schriftelijk ex (gesl boek) met een wegingsfactor 50 en aldus 50% van het totale eindcijfer.

    Toelichting: Schriftelijk examen met gesloten boek

Binnen de categorie ZELF Praktijkopdracht dient men volgende opdrachten af te werken:

  • Individueel programmeerproject met een wegingsfactor 50 en aldus 50% van het totale eindcijfer.

    Toelichting: Individueel programmeerproject met mondelinge verdediging

Aanvullende info mbt evaluatie

Studenten zullen beoordeeld worden op basis van een schriftelijk examen over de theorie (50%) en een programmeerproject dat individueel moet voltooid en verdedigd worden (50%). Studenten moeten minstens 8/20 halen in elk evaluerend onderdeel om een score te krijgen voor de hele cursus. Als de scores voor alle onderdelen niet hoger zijn dan 8, wordt de laagste score gebruikt voor het eindcijfer. Afwezigheid op één van deze onderdelen houdt een afwezigheid in voor de hele cursus. Deelcijfers voor het examen of project, als de student voor dit onderdeel ten minste de helft van de score behaalt, worden overgeheveld naar de tweede zittijd. Afstand doen van deelcijfers is niet mogelijk. 

Het schriftelijk examen is een gesloten boek examen waarin de kennis en het inzicht van de student met betrekking tot de onderwerpen die besproken werden in de cursus (zie inhoudstafel) getest worden. De student wordt verwacht om de belangrijke aspecten van een onderwerp te synthetiseren alsook om korte programmeertaken af te werken; b.v., vervolledig een programma dat voldoet aan een gegeven set van objectieve kwaliteitseisen, analyseer een deel van een programma ten opzichte van welbepaalde criteria, enz.

Het programmeerproject zal bekendgemaakt worden met specificaties over het eindproduct. Het project zal bestaan uit verschillende fases die op voorhand gespecificeerd zullen worden in de taak, nl. startende van een gegeven laag-niveau applicatie waarvan een template geschetst is, moet de student een programma vervolledigen dat een deel van het volledige eindproduct voorstelt. De student levert de implementatie van het project binnen samen met een rapport dat de gemaakte keuzes samenvat. Het project zal mondeling verdedigd worden.

Toegestane onvoldoende
Kijk in het aanvullend OER van je faculteit na of een toegestane onvoldoende mogelijk is voor dit opleidingsonderdeel.

Academische context

Deze aanbieding maakt deel uit van de volgende studieplannen:
Bachelor in de ingenieurswetenschappen: elektronica en informatietechnologie Profiel profiel computerwetenschappen
Bachelor in de ingenieurswetenschappen: verkort traject elektronica en informatietechnologie na vooropleiding industriële wetenschappen
Voorbereidingsprogramma Master of Science in de ingenieurswetenschappen: computerwetenschappen: Traject A (76 ECTS)
Voorbereidingsprogramma Master of Science in de ingenieurswetenschappen: computerwetenschappen: Traject B (65 ECTS)