Programmeerparadigma’s

Inhoud

Hoewel het kernprogramma van informatica imperatief programmeren als uitgangspunt neemt, hebben leerlingen de mogelijkheid om zich te verdiepen in alternatieve programmeerparadigma’s. In deze cursus bestuderen we naast imperatieve programmeerparadigma’s ook verschillende declaratieve programmeerparadigma’s. Dat wil zeggen: paradigma’s die de computer niet vertellen hoe we ons doel willen bereiken (imperatief), maar simpelweg wat we willen bereiken (declaratief). Dit zorgt voor een heldere en compacte programmeerstijl.

Na een overzicht van programmeermodellen in het algemeen, en de verschillen tussen imperatief en declaratief programmeren, duiken we in vijf concrete paradigma’s: functioneel programmeren, reactief programmeren, object georiënteerd programmeren, concurrent programmeren en logisch programmeren.

Functioneel programmeren kenmerkt zich door het gebruik van pure functies en onveranderlijke datastructuren. Hierdoor weten we dat onze programma’s geen onverwachte zijeffecten kunnen vertonen: een eigenschap die we referentiële transparantie noemen. Het gevolg is dat we makkelijker over onze programma’s kunnen redeneren. In plaats van lussen maakt functioneel programmeren gebruik van recursie als primair controlemechanisme. Door het gebruik van algebraïsche datatypes en patroonherkenning kunnen we gegevensstructuren helder definiëren en elk geval afzonderlijk behandelen. Daarnaast zorgt een sterk typesysteem er voor dat geschreven programma’s van nature correct zijn, niet zullen falen tijdens de uitvoer, en dat herstructureren van code eenvoudiger is. Daarnaast zijn, door het gebruik van hogere-orde functies programma’s compositioneel op te zetten.

Reactief programmeren is bedacht om, ondanks pure functies, toch interactie te hebben met eindgebruikers en op een elegante manier de toestand van een applicatie te beheren. Dit doen we aan de hand van de Model-View-Update-architectuur: het model beschrijft de volledige toestand van de applicatie, de view is een pure functie die dit model omzet naar een weergave, en de update-functie verwerkt inkomende berichten en berekent een nieuw model. Deze cyclus zorgt voor een eenrichtingsstroom van gegevens. Zijeffecten zoals netwerkaanvragen worden buiten deze cyclus gehouden via effecten.

Object georiënteerd programmeren organiseert code rondom objecten: zelfstandige eenheden die zowel toestand (gegevens) als gedrag (methoden) combineren. Door inkapseling verbergt een object zijn interne werking en communiceert het uitsluitend via een gedefinieerde interface met de buitenwereld. Via overerving kunnen nieuwe objecttypen worden opgebouwd op bestaande, zodat gedrag hergebruikt en gespecialiseerd wordt.

Concurrent programmeren is een methode om een proces op te splitsen in meerdere taken. Bij het werken met meerdere taken, krijgt de programmeur de verantwoordelijkheid van om tussen deze taken te communiceren en te synchroniseren. We behandelen twee fundamentele methoden om dit te doen: door geheugen te delen en door berichten uit te wisselen. We zullen ook zien wat er gebeurd wanneer we er geen rekening mee houden dat taken gelijktijdig worden uitgevoerd of racen voor hun gedeelde bronnen.

Logisch programmeren stelt ons in staat berekeningen te maken aan de hand van relaties. We schrijven programma’s door een databank van feiten en regels op te stellen, en deze databank vervolgens te ondervragen. De motor achter dit proces is unificatie: het mechanisme waarmee variabelen aan waarden worden gekoppeld door structuren met elkaar te matchen. Wanneer meerdere oplossingen mogelijk zijn, maakt de interpreter gebruik van backtracking: het systematisch teruggaan naar een eerder keuzepoint om een alternatief pad te verkennen.

Al deze paradigma’s vereisen een radicaal andere manier van denken bij het ontwikkelen van, en redeneren over programma’s. Vaardigheden die helpen bij het oplossen van een breed scala aan problemen. Elk onderdeel van deze cursus wordt afgesloten met een tussentoets, sommige theoretisch, sommige praktisch van aard.

Doelen

  1. De kenmerken van imperatief en declaratief programmeren evalueren.
  2. Binnen elk paradigma programma’s evalueren en ontwikkelen.
  3. Mentale modellen bij elk paradigma gebruiken en beoordelen.
  4. Bij verschillende programmeerproblemen een gefundeerde afweging maken voor het te gebruiken paradigma.
  5. Bovengenoemde, cursief gedrukte concepten begrijpen en toepassen.

Voorkennis

Ervaring met de basiselementen uit programmeertalen is gewenst. Het gaat om begrippen als keuze, herhaling, recursie, functie en procedure, zoals behandeld bij de cursus Programmeermodellen van Inf4All, of een vergelijkbare cursus imperatief programmeren. Kennis van HTML en CSS komt van pas maar is niet noodzakelijk.

Materialen

  • Online lesmateriaal op digitale leeromgeving

Werkwijze

De cursus is taakgestuurd opgezet. Er is een tweewekelijkse cyclus van oriëntatie (hoor/werkcollege), zelfstudie (lees- en leertaken) en nabespreking (responsiecollege).

Toetsing

Elk van de vijf paradigma’s wordt afgerond met een tussentoets. Alle onderdelen worden beoordeeld met een voldaan/onvoldaan. Het eindcijfer wordt bepaald door een individueel mondeling dat aan het einde van de cursus plaats vindt met iedere deelnemer en een groepsgesprek, ook aan het einde van de cursus.

Elk individueel mondeling duurt 30 minuten. We bespreken samen je huiswerktentamens en groepsopdracht. Het groepsgesprek duurt ook 30 minuten en gaat over het toepassen van de lesstof in de klas. De laatste tussentoets is een voorbereiding hierop. Hoewel deze gesprekken onderdeel zijn van de toetsing, heeft het een karakter van een inhoudelijke (werk)bespreking van collega-programmeurs.

Docent

Tim Steenvoorden is sinds 2021 werkzaam als universitair docent aan de Open Universiteit. Daar verzorgt hij vakken over Functioneel programmeren, Concepten van programmeertalen, Besturingssystemen en Computerarchitectuur. Zijn onderzoeksinteresses liggen op het gebied van het ontwerpen en implementeren van programmeertalen. Verder houdt hij zich bezich met de didactiek van informatica-onderwijs, is hij bestuurslid bij Vakvereniging i&i, en is hij coördinator van Inf4All.

Logo in4all_sidebar