Öppen-stängd princip

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

Namnet öppet-stängt 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 det uppenbara dilemmat, men målen, teknikerna och resultaten är olika.

Öppen-stängd-principen är en av de fem SOLID- principerna för objektorienterad design.

Meyers öppna-stängda princip

Bertrand Meyer är allmänt krediterad för att ha skapat termen öppen-stängd princip , som dök upp i hans bok från 1988 Object Oriented Software Construction .

  • En modul kommer att sägas vara öppen om den fortfarande är tillgänglig för förlängning. 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 kommer att sägas 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änssnittet i betydelsen informationsdöljande).

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

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

Polymorf öppen-stängd princip

Under 1990-talet omdefinierades den öppna-stängda principen populärt för att hänvisa till användningen av abstraherade gränssnitt, där implementeringarna kan ändras och flera implementeringar kunde 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 implementering behöver inte vara det. Det befintliga gränssnittet är stängt för ändringar och nya implementeringar 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 tog detta tillvägagångssätt. 2001 Craig Larman den öppna-stängda principen till mönstret av Alistair Cockburn kallat Protected Variations och till David Parnas diskussion om informationsgömma .

Se även

  1. ^ a b c   Meyer, Bertrand (1988). Objektorienterad mjukvarukonstruktion . Prentice Hall. ISBN 0-13-629049-3 .
  2. ^ a b Robert C. Martin "The Open-Closed Principle", C++-rapport , januari 1996 Arkiverad 22 augusti 2006, på Wayback Machine
  3. ^ Larman, Craig (maj–juni 2001). "Skyddad variation: Vikten av att vara stängd" (PDF) . IEEE programvara . IEEE. 18 (2): 89–91. doi : 10.1109/52.922731 .

externa länkar