În programarea și proiectarea computerelor, principiul responsabilității unice este un concept care susține opinia că orice clasă dintr-un program ar trebui să îndeplinească o singură funcție în aplicația mai mare. Această idee promovează parțial unele dintre idealurile programării orientate pe obiecte, cum ar fi încapsularea, deoarece o întreagă clasă se va concentra pe îndeplinirea unei singure responsabilități și se va baza puțin pe clasele externe. În același timp, este oarecum antitetic față de unele dintre conceptele timpurii de programare orientată pe obiecte, deoarece funcția unui singur obiect este decuplată de datele pe care obiectul le manipulează, ceea ce înseamnă că multe obiecte în combinație ar putea trebui construite pentru a menține. unele date centrale. Principiul responsabilității unice stă la baza unui tip de model de proiectare cunoscut sub numele de proiectare bazată pe responsabilitate.
Un exemplu al principiului responsabilității unice ar putea lua forma unui receptor telefonic tradițional. Unele principii de proiectare ar vedea receptorul ca un singur obiect care gestionează atât intrarea de la linia telefonică, cât și transmisia ieșirii de la difuzor. Conform unui model de responsabilitate unică, în care un singur obiect ar trebui să aibă doar o singură responsabilitate, atunci receptorul ar fi format din mai multe obiecte separate, care îndeplinesc fiecare o singură funcție, cum ar fi primirea doar de intrare de la linia telefonică sau numai ieșirea datelor prin cască.
Unul dintre avantajele pe care le face posibilă utilizarea principiului responsabilității unice este un nivel foarte ridicat de abstractizare și modularitate. În exemplul de receptor, fie intrarea de la linia telefonică, fie modul în care semnalul este transmis utilizatorului poate fi schimbată fără a afecta clasele învecinate, atâta timp cât acestea respectă același contract de interfață. În plus, reutilizarea anumitor componente poate fi foarte mare, deoarece fiecare clasă este complet încapsulată și se bazează foarte puțin, dacă este deloc, pe obiectele din jur, concentrându-se în schimb pe singura sa responsabilitate.
O complicație pe care o poate crea principiul responsabilității unice este o cantitate mare de clase și obiecte care operează toate pe aceleași date. Acest lucru poate însemna o cantitate mare de cheltuieli generale și un proces de proiectare complicat. De asemenea, poate face dificilă depanarea unui program mare, deoarece o singură porțiune a programului poate consta din mii de fișiere de clasă mici.
Atunci când principiul responsabilității unice este aplicat printr-un proiect bazat pe responsabilitate, datele și metodele utilizate pentru manipularea datelor sunt separate în scopuri de proiectare. Deși acest lucru duce la o anumită libertate, încapsulare și modularitate în proiectare, poate genera, de asemenea, o serie de modele și modele intermediare care trebuie utilizate pentru a facilita un număr de clase care încearcă toate să interacționeze cu datele simultan. Pe de altă parte, dacă datele unui obiect și metodele folosite pentru a le manipula pe toate sunt legate împreună într-un singur obiect cu mai multe responsabilități, atunci codul poate deveni mai greu de modificat pe măsură ce sistemele se scalează, se schimbă sau devin mai complexe.