Principio di singola responsabilità

Da Wikipedia, l'enciclopedia libera.

Nella programmazione orientata agli oggetti, il principio di singola responsabilità (single responsibility principle, abbreviato con SRP) afferma che ogni oggetto deve avere una sola responsabilità, e che tale responsabilità debba essere interamente incapsulata dalla classe. Tutti i suoi servizi dovrebbero essere strettamente allineati a tale responsabilità. Il motivo è che è importante mantenere una classe focalizzata su un singolo aspetto, rendendo la classe più robusta.

Il termine è stato introdotto da Robert C. Martin in un articolo con lo stesso nome come parte dei suoi "Principi di Object Oriented Design", resa popolare dal suo libro Agile Software Development, Principles, Patterns, and practice. Martin l'ha descritta come basata sul principio di coesione, come descritto da Tom DeMarco nel suo libro Structured Analysis and Systems Specification. Martin definisce una responsabilità come un motivo per cambiare, e conclude che una classe o modulo dovrebbe avere uno, e solo uno, motivo per cambiare.

Il principio di singola responsabilità viene utilizzato in metodologie di progettazione come il responsibility-driven design.

Esempio[modifica | modifica sorgente]

Come esempio, si consideri un modulo che compila e stampa un report. Tale modulo può cambiare per due motivi. In primo luogo, il contenuto del report può cambiare. In secondo luogo, il formato del report può cambiare. Queste due cose cambiano per cause molto diverse: uno sostanziale e uno estetico.

Il principio di singola responsabilità dice che questi due aspetti del problema sono in realtà due responsabilità distinte, e dovrebbero quindi essere descritte in classi o moduli separati. Sarebbe cattiva progettazione accoppiare due cose che cambiano, per motivi diversi in momenti diversi.

Se vi è un cambiamento nel processo di compilazione del report, ci saranno maggiori probabilità che il codice per la stampa fallisca se si trova nella stessa classe.

Voci correlate[modifica | modifica sorgente]

  • SOLID - la "S" di "SOLID" sta per single responsibility