Što je načelo jedinstvene odgovornosti?

U računalnom programiranju i dizajnu, načelo jedinstvene odgovornosti je koncept koji zastupa stav da svaka klasa u programu treba obavljati samo jednu funkciju u većoj aplikaciji. Ova ideja djelomično promiče neke od ideala objektno orijentiranog programiranja, kao što je enkapsulacija, jer će cijela klasa biti usredotočena na obavljanje jedne odgovornosti i malo će se oslanjati na vanjske klase. U isto vrijeme, donekle je suprotan nekim konceptima ranog objektno orijentiranog programiranja, jer je funkcija jednog objekta odvojena od podataka s kojima objekt rukuje, što znači da će se mnogi objekti u kombinaciji možda morati konstruirati kako bi se održali neki središnji podaci. Načelo jedinstvene odgovornosti temelj je za tip modela dizajna poznat kao dizajn vođen odgovornošću.

Primjer načela jedinstvene odgovornosti mogao bi biti u obliku tradicionalne telefonske slušalice. Neki bi principi dizajna vidjeli slušalicu kao jedan objekt koji upravlja i ulazom s telefonske linije i prijenosom izlaza iz zvučnika. Pod modelom jedne odgovornosti, u kojem bi jedan objekt trebao imati samo jednu odgovornost, tada bi se slušalica sastojala od nekoliko zasebnih objekata od kojih svaki obavlja jednu funkciju, kao što je samo primanje unosa s telefonske linije ili samo izlaz podataka putem slušalica.

Jedna od prednosti koju omogućuje korištenje načela jedinstvene odgovornosti je vrlo visoka razina apstrakcije i modularnosti. U primjeru slušalice, ili ulaz s telefonske linije ili način na koji se signal šalje korisniku može se promijeniti bez utjecaja na susjedne klase sve dok se pridržavaju istog ugovora za sučelje. Osim toga, ponovna upotreba određenih komponenti može biti vrlo visoka, jer je svaka klasa potpuno inkapsulirana i oslanja se vrlo malo, ako uopće, na okolne objekte, umjesto toga usredotočujući se na svoju jedinu odgovornost.

Komplikacija koju bi načelo jedinstvene odgovornosti moglo stvoriti je velika količina klasa i objekata koji svi rade na istim podacima. To može značiti veliku količinu režijskih troškova i kompliciran proces dizajna. Također može otežati otklanjanje pogrešaka u velikom programu, jer bi se jedan dio programa mogao sastojati od tisuća datoteka malih klasa.

Kada se princip jedinstvene odgovornosti primjenjuje kroz dizajn vođen odgovornošću, podaci i metode koje se koriste za manipulaciju podacima odvajaju se za potrebe dizajna. Iako to dovodi do određene slobode, enkapsulacije i modularnosti u dizajnu, također može generirati niz srednjih uzoraka i dizajna koji se moraju koristiti za olakšavanje brojnih klasa koje pokušavaju ostvariti interakciju s podacima odjednom. S druge strane, ako su podaci o objektu i metode koje se koriste za manipuliranje njima povezani u jedan objekt s više odgovornosti, tada kod može postati teže modificirati kako se sustavi skaliraju, mijenjaju ili postaju složeniji.