Open-closed-principen

Från Wikipedia
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[redigera | redigera wikitext]

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[redigera | redigera wikitext]

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[redigera | redigera wikitext]

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

Referenser[redigera | redigera wikitext]