Mikä on yhden vastuun periaate?

Tietokoneohjelmoinnissa ja suunnittelussa yhden vastuun periaate on käsite, joka tukee näkemystä, jonka mukaan minkä tahansa ohjelman luokan tulisi suorittaa vain yksi toiminto laajemmassa sovelluksessa. Tämä ajatus edistää osittain joitain olio -ohjelmoinnin ihanteita, kuten kapselointia, koska koko luokka keskittyy yhden vastuun suorittamiseen ja on vähän riippuvainen ulkopuolisista luokista. Samaan aikaan se on jokseenkin ristiriidassa joidenkin varhaisen olio -ohjelmoinnin käsitteiden kanssa, koska yksittäisen objektin toiminta on irrotettu objektin käsittelemistä tiedoista, mikä tarkoittaa, että monet objektit yhdessä on ehkä rakennettava ylläpitääkseen joitakin keskeisiä tietoja. Yksittäisen vastuun periaate on perusta tietylle suunnittelumallille, joka tunnetaan vastuullisuuslähtöisenä suunnitteluna.

Esimerkki yhden vastuun periaatteesta voisi olla perinteinen puhelinluuri. Jotkut suunnitteluperiaatteet näkisivät luurin yhtenä objektina, joka käsittelee sekä puhelinlinjan tuloa että kaiuttimen ulostulon siirtoa. Yhden vastuumallin mukaan, jossa yhdellä esineellä pitäisi olla vain yksi vastuu, luuri koostuisi useista erillisistä objekteista, joista kukin suoritti yhden tehtävän, kuten vain vastaanoton puhelinlinjalta tai vain tietojen lähettämisen kuulokkeen.

Yksi eduista, joita yhden vastuun periaatteen käyttäminen mahdollistaa, on erittäin korkea abstraktio ja modulaarisuus. Luurin esimerkissä joko puhelinlinjan tuloa tai tapaa, jolla signaali lähetetään käyttäjälle, voidaan muuttaa vaikuttamatta naapuriluokkiin, kunhan ne noudattavat samaa rajapintasopimusta. Lisäksi tiettyjen komponenttien uudelleenkäytettävyys voi olla erittäin korkea, koska jokainen luokka on täysin koteloitu ja se riippuu hyvin vähän, jos ollenkaan, ympäröivistä esineistä ja keskittyy sen sijaan yhteen vastuuseen.

Yksinkertaisen vastuun periaatteen aiheuttama komplikaatio on suuri määrä luokkia ja objekteja, jotka kaikki toimivat samoilla tiedoilla. Tämä voi tarkoittaa suurta yleiskustannusta ja monimutkaista suunnitteluprosessia. Se voi myös vaikeuttaa suuren ohjelman virheenkorjausta, koska yksi osa ohjelmasta voi koostua tuhansista pienluokan tiedostoista.

Kun yksittäisen vastuun periaatetta sovelletaan vastuullisuuslähtöiseen suunnitteluun, tiedot ja tietojen käsittelymenetelmät erotetaan suunnittelua varten. Vaikka tämä johtaa tiettyyn vapauteen, kotelointiin ja modulaarisuuteen suunnittelussa, se voi myös luoda useita välimalleja ja malleja, joita on käytettävä helpottamaan useita luokkia, jotka kaikki yrittävät olla vuorovaikutuksessa tietojen kanssa. Toisaalta, jos objektin tiedot ja niiden manipulointiin käytetyt menetelmät on sidottu yhteen yhteen monivastuiseen objektiin, koodin muuttaminen voi muuttua vaikeammaksi, kun järjestelmä skaalautuu, muuttuu tai monimutkaistuu.