Hva er prinsippet om enkeltansvar?
Innen dataprogrammering og design er prinsippet om enkeltansvar et konsept som støtter oppfatningen om at enhver klasse i et program bare skal utføre en funksjon i den større applikasjonen. Denne ideen fremmer delvis noen av idealene til objektorientert programmering, for eksempel innkapsling, fordi en hel klasse vil være fokusert på å utføre et enkelt ansvar og vil ha lite avhengighet av utenforstående klasser. Samtidig er det noe antitetisk for noen av begrepene for tidlig objektorientert programmering, fordi funksjonen til et enkelt objekt er frakoblet fra dataene som objektet håndterer, noe som betyr at mange objekter i kombinasjon kanskje må konstrueres for å opprettholde noen sentrale data. Enkeltansvarsprinsippet er grunnlaget for en type designmodell kjent som ansvarsdrevet design.
Et eksempel på prinsippet om enkeltansvar kan ha form av et tradisjonelt telefonrør. Noen designprinsipper vil se håndsettet som et enkelt objekt som håndterer både inngang fra telefonlinjen og overføring av utgang fra høyttaleren. Under en enkelt ansvarsmodell, der et enkelt objekt bare skal ha et enkelt ansvar, da ville håndsettet bestå av flere separate objekter som hver utførte en enkelt funksjon, for eksempel bare å motta innspill fra telefonlinjen, eller bare sende ut dataene gjennom øretelefonen.
En av fordelene ved bruk av prinsippet om et enkelt ansvar er et veldig høyt abstraksjonsnivå og modularitet. I håndsetteksemplet kan enten inngangen fra telefonlinjen eller måten signalet sendes ut til brukeren, endres uten å påvirke de nærliggende klassene, så lenge de holder seg til den samme kontrakten for grensesnitt. I tillegg kan gjenbrukbarheten til visse komponenter være veldig høy, fordi hver klasse er fullstendig innkapslet og er avhengig av lite, om i det hele tatt, på omgivende gjenstander, i stedet for å fokusere på det ene ansvaret.
En komplikasjon som enkeltansvarsprinsippet kan skape, er en stor mengde klasser og objekter som alle bruker samme data. Dette kan bety en stor mengde overhead og en komplisert designprosess. Det kan også gjøre feilsøking av et stort program vanskelig, fordi en enkelt del av programmet kan bestå av tusenvis av små klassefiler.
Når prinsippet om enkeltansvar blir anvendt gjennom et ansvarsdrevet design, skilles dataene og metodene som brukes for å manipulere dataene for designformål. Selv om dette fører til en viss frihet, innkapsling og modularitet i design, kan det også generere et antall mellomliggende mønstre og design som må brukes for å lette et antall klasser som alle prøver å samhandle med dataene samtidig. På den annen side, hvis dataene til et objekt og metodene som brukes for å manipulere det hele er bundet sammen i et enkelt objekt med flere ansvarsområder, kan koden bli vanskeligere å endre når systemer skaleres, endres eller blir mer komplekse.