Principio di singola responsabilità

SOLID

Nella programmazione orientata agli oggetti, il principio di singola responsabilità (single responsibility principle, abbreviato con SRP) afferma che ogni elemento di un programma (classe, metodo, variabile) deve avere una sola responsabilità, e che tale responsabilità debba essere interamente incapsulata dall'elemento stesso. Tutti i servizi offerti dall'elemento dovrebbero essere strettamente allineati a tale responsabilità.

Il termine è stato introdotto da Robert C. Martin in un articolo con lo stesso nome come parte dei suoi "Principi di Object Oriented Design", oggi noti anche come principi SOLID, e in seguito è stato ripreso dallo stesso Martin nel popolare libro Agile Software Development, Principles, Patterns, and Practice. A sua volta, Martin si è ispirato dal principio di coesione descritto da Tom DeMarco nel 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 (a single reason for change).

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

Esempio

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

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