Open-closed-principen

Portrait of Bertrand Meyer
Open-closed-principen introducerades av Bertrand Meyer.

I objektorienterad programmering säger open-closed-principen (OCP) att "programvaruenheter (klasser, moduler, funktioner, etc.) bör vara öppna för utökning, men stängda för modifiering";[1] det vill säga en sådan enhet kan tillåta att dess beteende utökas utan att ändra dess källkod.

Namnet open-closed-princip har använts på två sätt. Båda sätten använder generaliseringar (till exempel arv eller delegeringsfunktioner) för att lösa problemet, men målen, teknikerna och resultaten är olika.

Open-closed-principen är en av de fem SOLID-principerna för objektorienterad design.

Meyers open-closed-princip

Bertrand Meyer anses allmänt ha skapat termen Open-closed-princip,[2] som dök upp i hans 1988 bok Object Oriented Software Construction.[1]:23

  • En modul anses vara öppen om den fortfarande är tillgänglig för utökning. Det bör till exempel vara möjligt att lägga till fält till de datastrukturer den innehåller, eller nya element till den uppsättning funktioner som den utför.
  • En modul anses vara stängd om [den] är tillgänglig för användning av andra moduler. Detta förutsätter att modulen har fått en väldefinierad, stabil beskrivning (gränssnitt i betydelsen informationsdöljande).

När Meyer skrev detta, krävde alla tillägg av fält eller funktioner till ett bibliotek oundvikligen ändringar i alla program beroende på det biblioteket. Meyers föreslagna lösning på detta problem förlitade sig på begreppet objektorienterat arv (särskilt implementeringsarv):[1]:229

En klass är stängd eftersom den kan kompileras, lagras i ett bibliotek och användas av klientklasser. Men den är också öppen, eftersom alla nya klasser kan använda den som förälder och lägga till nya funktioner. När en subklass definieras finns det därmed inget behov av att ändra originalet eller störa dess klienter.

Polymorf open-closed-princip

Under 1990-talet omdefinierades open-closed-principen till att i allmänhet hänvisa till användningen av abstraherade gränssnitt, där implementationerna kan ändras och flera implementationer kan skapas och polymorfiskt ersätta varandra.

I motsats till Meyers användning förespråkar denna definition arv från abstrakta basklasser. Gränssnittsspecifikationer kan återanvändas genom arv, men implementationen behöver inte återanvändas. Det befintliga gränssnittet är stängt för ändringar och nya implementationer måste som ett minimum implementera det gränssnittet.

Robert C. Martins artikel från 1996 "The Open-Closed Principle" var en av de mest framträdande skrifterna som valde detta tillvägagångssätt. 2001 kopplade Craig Larman open-closed-principen till Alistair Cockburns mönster Protected Variations och till David Parnas diskussion om informationsgömma.[3]

Se även

  • SOLID – "O" i "SOLID" representerar principen öppen-stängd
  • Robusthetsprincipen

Referenser

  1. ^ [a b c] Meyer, Bertrand (1988). Object-Oriented Software Construction. Prentice Hall. ISBN 0-13-629049-3 
  2. ^ Robert C. Martin "The Open-Closed Principle", C++ Report, January 1996
  3. ^ Larman, Craig. Protected Variation: The Importance of Being Closed. IEEE. doi:10.1109/52.922731. http://codecourse.sourceforge.net/materials/The-Importance-of-Being-Closed.pdf. 
  • The Principles of OOD
  • The Open/Closed Principle: Concerns about Change in Software Design
  • The Open-Closed Principle -- and What Hides Behind It