Open/closed-principe

Uit Wikipedia, de vrije encyclopedie
(Doorverwezen vanaf Open/closed principe)
Ga naar: navigatie, zoeken

Het open/closed-principe komt uit het objectgeoriënteerd programmeren en luidt: "software-entiteiten (klassen, modules, functies, etc.) zouden open moeten zijn voor uitbreiding, maar gesloten voor verandering".[1] Dit wil zeggen dat er uitbreiding zou moeten kunnen plaatsvinden, zonder de broncode aan te passen. Als in een productieomgeving bij het wijzigen van code het product moet worden gekwalificeerd met behulp van code-reviews, unit-tests en/of soortgelijke procedures, kan dit principe een hoop werk schelen.

De naam open/closed-principe wordt op twee manieren gebruikt. Beide gebruiken overerving om het probleem op te lossen, maar de doelen, technieken en resultaten zijn verschillend.

Meyers open/closed-principe[bewerken]

Bertrand Meyer wordt algemeen beschouwd als de bedenker van het open/closed-principe,[2] dat in 1988 werd gepresenteerd in zijn boek Object-Oriented Software Construction. Zijn idee was dat wanneer de code van een klasse af was, de klasse alleen nog maar mag worden gewijzigd om fouten te herstellen. Zodra er geen fouten meer in de klasse zitten, zou deze nooit meer mogen worden aangepast; nieuwe of veranderde features zouden in een nieuwe klasse moeten worden gezet. Met behulp van overerving kan code-duplicatie worden voorkomen. De afgeleide klasse hoeft niet dezelfde interface te hebben als de basisklasse.

Meyers definitie pleit voor implementatieovererving. Een implementatie kan worden hergebruikt door overerving, maar de interface hoeft niet te worden gebruikt. De bestaande implementatie is gesloten voor verandering en nieuwe implementaties hoeven bij het overerven de interface niet te implementeren.

Polymorfisch open/closed-principe[bewerken]

Tijdens de jaren 90 werd het open/closed-principe geherdefinieerd, waarbij abstracte klassen in het principe werden opgenomen. Abstracte interfaces zijn interfaces die vertellen welke methoden er minimaal in een uitbreidende klasse moeten zitten zonder een implementatie te geven. Door interfaces kunnen verschillende implementaties worden gemaakt die elkaar via polymorfisme kunnen vervangen.

In tegenstelling tot de definitie van Meyer, bepleit deze definitie het gebruik van abstracte klassen. Interfacespecificaties (functies en/of velden) dienen te worden hergebruikt bij het overerven, maar de implementatie mag veranderen. De bestaande interface mag worden geopend om uit te breiden, maar moet gesloten blijven voor verandering (van de interfacespecificaties). Elke nieuwe implementatie moet minimaal de interface implementeren.

Het artikel "The Open-Closed Principle", dat Robert C. Martin in 1996 publiceerde, was een van de eerste publicaties met deze benadering. Craig Larman relateerde het open/closed-principe met het patroon Protected Variations van Alistair Cockburn en met de discussie van David Parnas over inkapseling.[3]

Zie ook[bewerken]

  • SOLID – de "O" van "SOLID" staat voor het open/closed-principe

Noten[bewerken]

  1. Bertrand Meyer (1988).
  2. Robert C. Martin, The Open-Closed Principle, C++ Report, januari 1996, p. 1
  3. Craig Larman, "Protected Variation: The Importance of Being Closed", IEEE Software, mei/juni 2001, p. 89-91