Arvutiprogrammeerimises ja disainis on ühtse vastutuse põhimõte kontseptsioon, mis toetab seisukohta, et programmi mis tahes klass peaks suuremas rakenduses täitma ainult ühte funktsiooni. See idee edendab osaliselt objektorienteeritud programmeerimise ideaale, näiteks kapseldamist, kuna terve klass keskendub üheainsa vastutuse täitmisele ja ei sõltu välistest klassidest. Samal ajal on see mõnevõrra vastuolus mõne varajase objektorienteeritud programmeerimise kontseptsiooniga, kuna ühe objekti funktsioon on lahti seotud andmetest, mida objekt käsitleb, mis tähendab, et säilitamiseks võib olla vaja konstrueerida palju objekte koos. mõned kesksed andmed. Ühtse vastutuse põhimõte on vastutustundliku disainina tuntud disainimudeli tüübi aluseks.
Ühe vastutuse põhimõtte näide võib olla traditsioonilise telefonitoru kujul. Mõned disainipõhimõtted näeksid telefonitoru ühe objektina, mis käsitleb nii telefoniliini sisendit kui ka kõlari väljundi edastamist. Ühtse vastutuse mudeli korral, kus ühel objektil peaks olema ainult üks vastutus, koosneks telefonitoru mitmest eraldiseisvast objektist, millest igaüks täidab ühte funktsiooni, nt ainult telefoniliinilt sisendi vastuvõtmine või ainult andmete väljastamine. kuular.
Üks eeliseid, mida ühe vastutuse põhimõtte kasutamine võimaldab, on väga kõrge abstraktsioonitase ja modulaarsus. Telefonitoru näites saab muuta kas telefoniliini sisendit või signaali kasutajale väljastamise viisi, ilma et see mõjutaks naaberklasse, kui nad järgivad sama liideselepingut. Lisaks võib teatud komponentide korduvkasutatavus olla väga kõrge, kuna iga klass on täielikult kapseldatud ja toetub väga vähe, kui üldse, ümbritsevatele objektidele, keskendudes selle asemel oma ühele vastutusele.
Ühtse vastutuse põhimõte võib tekitada komplikatsiooni, mis on suur hulk klasse ja objekte, mis kõik töötavad samadel andmetel. See võib tähendada suuri üldkulusid ja keerulist projekteerimisprotsessi. Samuti võib see raskendada suurte programmide silumist, kuna programmi üks osa võib koosneda tuhandetest väikese klassi failidest.
Kui ühtse vastutuse põhimõtet rakendatakse vastutuspõhise disaini kaudu, eraldatakse andmed ja andmetega manipuleerimiseks kasutatavad meetodid kavandamise eesmärgil. Kuigi see toob kaasa teatud vabaduse, kapseldamise ja kujunduse modulaarsuse, võib see luua ka mitmeid vahepealseid mustreid ja kujundusi, mida tuleb kasutada mitme klassi hõlbustamiseks, mis kõik üritavad andmetega korraga suhelda. Teisest küljest, kui objekti andmed ja selle kõigega manipuleerimiseks kasutatavad meetodid on ühendatud üheks mitme vastutusega objektiks, võib koodi muutuda raskemini muudetavaks, kui süsteemid skaleeruvad, muutuvad või muutuvad keerukamaks.