Principio di singola responsabilità

(Reindirizzamento da Single Responsability Principle)

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 nell'articolo The Principles of OOD, come parte dei suoi "Principi di Object Oriented Design", oggi noti anche come principi SOLID. In seguito è stato ripreso dallo stesso Martin nel suo 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 modifica

Come esempio, si consideri una classe che compila e stampa un report. Tale classe può dover essere soggetta a mutamenti per due motivi. In primo luogo, il contenuto del report da produrre può cambiare, determinando la necessità di modificare i metodi preesistenti associati alla produzione del report. In secondo luogo, il formato del report può cambiare. Queste due componenti cambiano per cause molto diverse: uno sostanziale e uno estetico.

Il principio di singola responsabilità afferma che questi due aspetti sono in realtà due responsabilità distinte, e dovrebbero quindi essere definite in classi separate. Sarebbe cattiva progettazione accoppiare due entità che mutano, per motivi diversi ed in momenti diversi.

Se si apporta un cambiamento nel processo di compilazione del report, vi è una maggiore probabilità che il codice per la stampa contenga errori se si trova nella stessa classe (e viceversa). Ciò dipende dalla maggiore complessità del codice e dalla sua scarsa manutenibilità, che rende più probabile l'errore umano. Inoltre il codice presenta minore riusabilità ed estensibilità.

Concetti strettamente associati al principio di singola responsabilità sono la separazione delle preoccupazioni o compiti (separation of concerns) e l'accoppiamento debole (loose coupling).

Voci correlate modifica

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