Principio aperto/chiuso

Da Wikipedia, l'enciclopedia libera.

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à[modifica | modifica sorgente]

Esistono 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[modifica | modifica sorgente]

Con 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[modifica | modifica sorgente]

Con 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 | modifica sorgente]

  • SOLID - la "O" di "SOLID" sta per open/closed principle

Collegamenti esterni[modifica | modifica sorgente]