Substitutieprincipe van Liskov

Uit Wikipedia, de vrije encyclopedie

Het substitutieprincipe van Liskov, ook wel Liskov Substitution Principle (LSP) genoemd, is een principe uit het objectgeoriënteerd programmeren met betrekking tot het overerven. Het principe luidt als volgt:

Stel is een aantoonbare eigenschap van de objecten van het type . Dan zou een aantoonbare eigenschap van de objecten van het type moeten zijn, waarbij een subtype is van .

Dit principe houdt in dat als de basisklasse T gebruikt wordt in een programma, het programma ook correct dient te werken met alle specifieke implementaties van T, zonder wijzigingen in het programma te hoeven maken.

Het substitutieprincipe van Liskov werd voorgesteld in 1987 door Barbara Liskov op de conferentie Data abstraction and hierarchy en werd in 1993 geformuleerd.[1]

Het probleem[bewerken | brontekst bewerken]

klassendiagram wekker

Een van de belangrijke elementen uit het objectgeoriënteerde programmeren is de overerving: een klasse kan variabelen, functies en procedures erven van een superklasse. De relatie tussen de klassen is meestal een is-een-relatie(surjectie).

Een voorbeeld is de wekkerklasse. In de Wekkerklasse staan de functie maakGeluid en het veld geluid. Op het moment dat de Wekker hoort af te gaan wordt de functie maakGeluid aangeroepen en gaat het alarm af. Een analoge wekker is een wekker en zou dus Wekker moeten overerven. Ook een digitale wekker is een wekker en erft dus van de wekkerklasse. De dovenwekker is ook een wekker en zou dus moeten overerven van Wekker. Maar nu is er een probleem, deze wekker trilt in plaats van dat hij geluid maakt. De functie maakGeluid heeft dus geen duidelijke implementatie.

Dit gaat dus in tegen het substitutieprincipe van Liskov: de methode maakGeluid is een methode van Wekker, maar maakGeluid hoort niet bij DovenWekker, terwijl DovenWekker een Wekker is.

Referenties[bewerken | brontekst bewerken]

  1. Barbara Liskov, Jeannette Wing (16 juli 1993), Family Values: A Behavioral Notion of Subtyping, pp. 36.

Externe link[bewerken | brontekst bewerken]