Kaj je načelo enotne odgovornosti?

Pri računalniškem programiranju in oblikovanju je načelo enotne odgovornosti koncept, ki zagovarja stališče, da bi moral vsak razred v programu opravljati samo eno funkcijo v večji aplikaciji. Ta ideja delno spodbuja nekatere ideale objektno usmerjenega programiranja, kot je enkapsulacija, ker bo celoten razred osredotočen na opravljanje ene same odgovornosti in se bo malo zanašal na zunanje razrede. Hkrati je nekoliko v nasprotju z nekaterimi koncepti zgodnjega objektno usmerjenega programiranja, ker je funkcija posameznega objekta ločena od podatkov, ki jih predmet obdeluje, kar pomeni, da bo morda treba zgraditi veliko objektov v kombinaciji, da se ohrani nekaj osrednjih podatkov. Načelo ene odgovornosti je osnova za vrsto modela oblikovanja, znanega kot načrtovanje, ki temelji na odgovornosti.

Primer načela enotne odgovornosti bi lahko bil v obliki tradicionalne telefonske slušalke. Nekatera načela oblikovanja bi slušalko videli kot en sam objekt, ki upravlja tako vhod iz telefonske linije kot prenos izhoda iz zvočnika. Pri modelu ene odgovornosti, pri katerem bi moral imeti en sam objekt samo eno odgovornost, bi slušalka sestavljala več ločenih objektov, od katerih je vsak opravljal eno samo funkcijo, na primer samo sprejemanje vnosa s telefonske linije ali samo oddajanje podatkov prek slušalko.

Ena od prednosti, ki jo omogoča uporaba načela enotne odgovornosti, je zelo visoka stopnja abstrakcije in modularnosti. V primeru slušalke je mogoče spremeniti bodisi vhod iz telefonske linije bodisi način, kako se signal oddaja uporabniku, ne da bi to vplivalo na sosednje razrede, dokler se držijo iste pogodbe za povezovanje. Poleg tega je lahko ponovna uporaba določenih komponent zelo visoka, ker je vsak razred popolnoma zaprt in se zelo malo, če sploh, zanaša na okoliške predmete, namesto tega se osredotoča na svojo eno odgovornost.

Zaplet, ki bi ga lahko povzročilo načelo enotne odgovornosti, je velika količina razredov in objektov, ki vsi delujejo na istih podatkih. To lahko pomeni velike stroške in zapleten postopek oblikovanja. Prav tako lahko oteži odpravljanje napak v velikem programu, saj lahko en del programa sestavlja na tisoče datotek majhnih razredov.

Ko se načelo ene odgovornosti uporablja pri načrtovanju, ki temelji na odgovornosti, so podatki in metode, ki se uporabljajo za manipulacijo s podatki, ločene za namene načrtovanja. Čeprav to vodi do določene svobode, enkapsulacije in modularnosti pri načrtovanju, lahko ustvari tudi številne vmesne vzorce in modele, ki jih je treba uporabiti za olajšanje številnih razredov, ki poskušajo komunicirati s podatki hkrati. Po drugi strani pa, če so podatki o objektu in metode, ki se uporabljajo za manipulacijo, povezani v en sam objekt z več odgovornostjo, potem lahko postane kodo težje spreminjati, ko se sistem poveča, spremeni ali postane bolj zapleten.