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.