Principio aperto/chiuso
Nella programmazione orientata agli oggetti il principio aperto/chiuso (open/closed principle, abbreviato con OCP) afferma che le entità (classi, moduli, funzioni, ecc.) software dovrebbero essere aperte all'estensione, ma chiuse alle modifiche; in maniera tale che un'entità possa permettere che il suo comportamento sia modificato senza alterare il suo codice sorgente.
In particolare, una volta completata l'implementazione di un'entità, questa non dovrebbe essere più modificata, eccetto che per eliminare errori di programmazione. L'introduzione di nuove caratteristiche o la modifica di quelle esistenti dovrebbe richiedere la creazione di nuove entità.
Ciò è particolarmente importante in un ambiente di produzione, in cui i cambiamenti al codice sorgente possono richiedere la revisione del codice, test di unità, e altre procedure tali da garantire la qualità di un prodotto software: il codice che rispetta il principio non cambia quando viene esteso, e quindi non ha bisogno di tale sforzo.
Ereditarietà
modificaEsistono due modi per soddisfare tale principio attraverso l'ereditarietà, che si differenziano per finalità, tecniche e risultati. L'ereditarietà deve essere utilizzata facendo riferimento anche al principio di singola responsabilità ed al principio di sostituzione di Liskov.
Ereditarietà dell'implementazione
modificaCon l'ereditarietà dell'implementazione, vengono create nuove classi che estendono la classe originale. Le nuove classi possono avere o meno la medesima interfaccia della classe base. Questo approccio riduce la ridondanza del codice nelle classi derivate, spostando il codice sorgente comune nella classe base.
Ereditarietà dell'interfaccia
modificaCon l'ereditarietà dell'interfaccia, le classi derivate ereditano da una classe base astratta con funzioni virtuali pure [interfaccia]: in questo caso l'interfaccia è chiusa alle modifiche ed il suo comportamento può essere modificato implementando nuove classi derivate. Questo approccio consente la gestione di un insieme di oggetti differenti in modo uniforme.
Voci correlate
modifica- SOLID - la "O" di "SOLID" sta per open/closed principle
Collegamenti esterni
modifica- (EN) Denis Howe, open/closed principle, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL
- Il principio aperto/chiuso, su msdn.microsoft.com. URL consultato il 3 maggio 2019 (archiviato dall'url originale il 16 giugno 2013).
- Il principio aperto chiuso (Open close Principle), su sanlab.it. URL consultato il 13 agosto 2012 (archiviato dall'url originale il 5 marzo 2010).
- (EN) "The Open-Closed Principle", Robert C. Martin, C++ Report, gennaio 1996 (PDF), su objectmentor.com (archiviato dall'url originale il 22 agosto 2006).