Kas yra vienos atsakomybės principas?

Kompiuterių programavimo ir projektavimo srityje vienos atsakomybės principas yra koncepcija, kuri palaiko požiūrį, kad bet kuri programos klasė didesnėje programoje turėtų atlikti tik vieną funkciją. Ši idėja iš dalies skatina kai kuriuos objektinio programavimo idealus, tokius kaip inkapsuliacija, nes visa klasė bus sutelkta į vienos atsakomybės vykdymą ir mažai pasikliaus išorinėmis klasėmis. Tuo pačiu metu tai šiek tiek prieštarauja kai kurioms ankstyvojo objektinio programavimo koncepcijoms, nes vieno objekto funkcija yra atsieta nuo duomenų, kuriuos objektas tvarko, o tai reiškia, kad norint išlaikyti gali tekti sukurti daugybę objektų kartu. kai kurie centriniai duomenys. Vienos atsakomybės principas yra tokio tipo projektavimo modelio, žinomo kaip atsakomybe grindžiamas dizainas, pagrindas.

Vienos atsakomybės principo pavyzdys galėtų būti tradicinis telefono ragelis. Remiantis kai kuriais dizaino principais, telefonas būtų laikomas vienu objektu, kuris tvarko ir telefono linijos įvestį, ir išvesties iš garsiakalbio perdavimą. Pagal vienos atsakomybės modelį, pagal kurį vienas objektas turėtų turėti tik vieną atsakomybę, ragelis sudarytų iš kelių atskirų objektų, kurių kiekvienas atliktų vieną funkciją, pvz., tik gautų įvestį iš telefono linijos arba tik išvestų duomenis per ausinė.

Vienas iš privalumų, kurį suteikia vienos atsakomybės principas, yra labai aukštas abstrakcijos ir moduliškumo lygis. Ragelio pavyzdyje įvestis iš telefono linijos arba signalo išvesties vartotojui būdas gali būti pakeistas nepažeidžiant gretimų klasių, jei jos laikosi tos pačios sąsajos sutarties. Be to, tam tikrų komponentų pakartotinis panaudojimas gali būti labai didelis, nes kiekviena klasė yra visiškai įdėta ir labai mažai priklauso nuo aplinkinių objektų, jei išvis, sutelkiant dėmesį į vieną atsakomybę.

Komplikacija, kurią gali sukelti vienos atsakomybės principas, yra didelis skaičius klasių ir objektų, kurie visi veikia su tais pačiais duomenimis. Tai gali reikšti daug pridėtinių išlaidų ir sudėtingą projektavimo procesą. Tai taip pat gali apsunkinti didelės programos derinimą, nes vieną programos dalį gali sudaryti tūkstančiai mažų klasės failų.

Kai bendros atsakomybės principas taikomas taikant atsakomybe pagrįstą dizainą, duomenys ir metodai, naudojami duomenų apdorojimui, projektavimo tikslais yra atskiriami. Nors tai lemia tam tikrą dizaino laisvę, įkapsuliavimą ir moduliškumą, tai taip pat gali sukurti keletą tarpinių modelių ir dizaino, kurie turi būti naudojami tam, kad būtų palengvinta daugybė klasių, kurios bando vienu metu sąveikauti su duomenimis. Kita vertus, jei objekto duomenys ir metodai, naudojami visais jais manipuliuoti, yra sujungti į vieną daugialypį objektą, kodą gali būti sunkiau modifikuoti, nes sistemos mastelis, keičiasi ar tampa sudėtingesnis.