Tijdens een interview deze week werd mij gevraagd “wat is het verschil tussen Functioneel, Object-georiënteerd en Procedureel Programmeren” en om eerlijk te zijn wist ik niet echt hoe ik die vraag moest beantwoorden (en het was de eerste keer dat ik van Procedureel Programmeren hoorde…). Dus vandaag besloot ik wat onderzoek te doen en te (proberen te) begrijpen wat de belangrijkste verschillen zijn.
Laten we beginnen met wat definities:
” Functioneel programmeren (FP) is een programmeerparadigma – een stijl van het bouwen van de structuur en elementen van computerprogramma’s – die het rekenen behandelt als de evaluatie van wiskundige functies en die veranderlijke toestand en muteerbare gegevens vermijdt.” – Wikipedia
” Object-georiënteerd programmeren (OOP) is een programmeerparadigma gebaseerd op het concept van “objecten”, die gegevens kunnen bevatten, in de vorm van velden, vaak bekend als attributen; en code, in de vorm van procedures, vaak bekend als methoden.” – Wikipedia
” Procedureel programmeren is een programmeerparadigma, afgeleid van gestructureerd programmeren, gebaseerd op het concept van de procedure-aanroep. Procedures, ook bekend als routines, subroutines of functies, bevatten eenvoudigweg een reeks uit te voeren rekenkundige stappen.” – Wikipedia
Ok, dus dat is een inleiding, maar laten we eens wat meer in detail treden.
Voreerst, wat is een programmeerparadigma? Het is een stijl van programmeren, een manier van denken over software constructie. Een programmeerparadigma verwijst niet naar een specifieke taal, maar eerder naar een manier van programmeren, een methodologie. Sommige talen maken het gemakkelijk om in sommige paradigma’s te schrijven, maar andere niet. Voor meer details, zie het Wikipedia artikel.
Laten we nu eens duiken in de drie programmeerparadigma’s die ons vandaag interesseren:
Procedurele programmering (PP), ook bekend als inline programmeren heeft een top-down benadering. Het gaat om het schrijven van een lijst instructies om de computer te vertellen wat hij stap voor stap moet doen. Het is gebaseerd op procedures of routines.
Object-georiënteerd programmeren (OOP) gaat over het inkapselen van gegevens en gedrag in objecten. Een OOP toepassing zal gebruik maken van een verzameling van objecten die weet hoe bepaalde acties uit te voeren en hoe te interageren met andere elementen van de toepassing. Een object zou bijvoorbeeld een persoon kunnen zijn. Die persoon zou een naam hebben (dat zou een eigenschap van het object zijn), en zou weten hoe hij moet lopen (dat zou een methode zijn). Een methode in OOP kan worden beschouwd als een procedure in PP, maar hier hoort ze bij een specifiek object. Een ander belangrijk aspect van OOP zijn klassen. Een klasse kan worden beschouwd als een blauwdruk voor een object.
Functioneel programmeren (FP) gaat over het doorgeven van gegevens van functie naar functie naar functie om een resultaat te krijgen. In FP worden functies behandeld als gegevens, wat betekent dat je ze kunt gebruiken als parameters, ze kunt retourneren, functies kunt bouwen uit andere functies, en aangepaste functies kunt bouwen. Functies in FP moeten zuivere functies zijn, ze moeten gedeelde toestand vermijden, en neveneffecten en gegevens moeten onveranderlijk zijn. Een zuivere functie is een functie die, gegeven hetzelfde type invoer, altijd dezelfde uitvoer zal teruggeven, het is niet afhankelijk van een lokale of globale toestand. Een gedeelde toestand is een toestand die gedeeld wordt door meer dan één functie of meer dan één gegevensstructuur. Dus met shared state, om de effecten van een functie te begrijpen, moet je alle details van elke gedeelde variabele kennen. Het voegt veel complexiteit toe en laat minder modulariteit toe.