Ansvar
Et ansvar er en betegnelse for en funktionalitet, der hører til en klasse.
En klasse kan godt opfylde flere ansvar.
Et ansvar implementeres ved at klassen har nogle metoder, der til sammen
kan udfører den funktionalitet, som ansvaret dækker over.
Man kan undertiden have glæde af at skelne mellem vidensanvar og
udføre/handleansvar.
Et videnansvar er ansvaret for at "vide noget" og det vil senere
blive implementeret som metoder, der returnerer dataværdier. Ofte (men langt
fra altid) vil et videnansvar blive implementeret som en eller flere private
variable, vis værdier returners af en eller flere metoder.
Et udføreansvar er ansvaret for at gøre noget, f.eks. registrere data,
ændre en tilstand eller udskrive noget på skærmen.
Undertiden er det vanskeligt at skelne mellem viden og udføreansvar, men da
begge resulterer i nogle metoder behøver man ikke være meget præcis i sin
skelnen.
Man kan også skelne mellem primære og afledte ansvar. Denne skelnen sker
uafhængigt af viden/udføreansvar.
Et primært ansvar er betegnelsen på en funktionalitet, man kan bede klassen
udføre, mens et afledt ansvar er en del-funktionalitet, der udføres af klassen
som følge af den udføre det primære ansvar.
Hermed et eksempel, som måske er lidt søgt men forhåbentligt også
illustrativt:
Klassen mor (eller far) har følgende ansvar
smør leverpostejmad
lav madpakke
læg dyne på
sig godnat
sluk lys
smør chokolademad
smør ostemad
put i seng
Hvis man kun kan bede mor om at lave madpakke og putte i seng er disse de
primære ansvar. Hvis mor skal lave madpakke kan det naturligvis godt medføre at
det bliver nødvendigt for mor at smøre leverpostejmad, ostemad og chokolademad,
men disse er afledte ansvar hvis man ikke særskilt kan bede om denne
funktionalitet.
På tilsvarende vis kan det godt være at man kan bede far om at blive puttet
i seng og han derved bliver nødt til at lægge dyne på, sige godnat og slukke
lyset, men hvis man ikke særskilt kan bede om at få slukket lyset er det altså
et afledt ansvar.
Primære ansvar er de vigtigste og vil resultere i en eller flere metoder. Sekundære
ansvar bliver sætninger i disse metoder.
På et tidligt tidspunkt i designet er det meget MEGET vigtigt ikke at
skelne, men når designet begynder at hænge samme kan man ikke alene skelne men
også kassere sekundære ansvar og kun fokusere på de primære ansvar.