Jaký je princip jednotné odpovědnosti?
V počítačovém programování a designu je princip jediné odpovědnosti koncept, který zastává názor, že každá třída v programu by měla vykonávat pouze jednu funkci ve větší aplikaci. Tato myšlenka částečně podporuje některé ideály objektově orientovaného programování, jako je zapouzdření, protože celá třída bude zaměřena na vykonávání jediné odpovědnosti a nebude se spoléhat na vnější třídy. Současně je to poněkud protikladné k některým konceptům raného objektově orientovaného programování, protože funkce jednoho objektu je oddělena od dat, s nimiž objekt manipuluje, což znamená, že pro udržování může být potřeba zkonstruovat mnoho objektů v kombinaci některá centrální data. Zásada jednotné odpovědnosti je základem pro typ konstrukčního modelu známý jako návrh založený na odpovědnosti.
Příklad zásady jednotné odpovědnosti by mohl mít podobu tradičního telefonního přístroje. Některé konstrukční principy považují sluchátko za jediný objekt, který zpracovává jak vstup z telefonní linky, tak přenos výstupu z reproduktoru. V rámci jediného modelu zodpovědnosti, ve kterém by jeden objekt měl mít pouze jednu odpovědnost, by pak sluchátko sestávalo z několika samostatných objektů, z nichž každý vykonával jednu funkci, jako je pouze příjem vstupu z telefonní linky nebo výstup dat pouze prostřednictvím sluchátko.
Jednou z výhod, které umožňuje použití principu jediné odpovědnosti, je velmi vysoká úroveň abstrakce a modularity. V příkladu mikrotelefonu lze změnit buď vstup z telefonní linky, nebo způsob, jakým je signál vydán uživateli, aniž by to ovlivnilo sousední třídy, pokud dodržují stejnou smlouvu o propojení. Navíc, opakovaná použitelnost určitých komponent může být velmi vysoká, protože každá třída je plně zapouzdřena a spoléhá se jen velmi málo, pokud vůbec, na okolní objekty, místo toho se soustředí na svou jedinou odpovědnost.
Komplikací, kterou by mohl vytvořit princip jediné odpovědnosti, je velké množství tříd a objektů, které všechny pracují na stejných datech. To může znamenat velké množství režijních nákladů a komplikovaný proces návrhu. Může také ztížit ladění velkého programu, protože jedna část programu by mohla obsahovat tisíce souborů malých tříd.
Pokud je zásada jednotné odpovědnosti uplatňována prostřednictvím návrhu založeného na odpovědnosti, jsou data a metody použité k manipulaci s daty pro účely návrhu odděleny. I když to vede k určité volnosti, zapouzdření a modularitě v designu, může také generovat řadu přechodných vzorů a návrhů, které musí být použity k usnadnění řady tříd, které se všechny pokusí o interakci s daty najednou. Na druhé straně, pokud jsou data objektu a metody použité k manipulaci s ním spojeny do jediného objektu s více odpovědnostmi, pak může být kód obtížnější modifikovat, jak se systémy mění v měřítku, mění se nebo jsou složitější.