TB16 behöver inte mer hjälp
TB16 182 – Fd. Medlem
Postad: 24 jul 2018 13:13

Kohesion och koppling (objektorienterad design)

Uppgift:

Vilket påstående om en objektorienterad design stämmer bäst?

a. Hög kohesion medför ofta hög koppling.

b. Hög kohesion medför ofta låg koppling.

c. Låg kohesion beror ofta på låg koppling.

Detta är en gammal tentauppgift, men eftersom att det inte finns något svar på denna fråga så vänder jag mig till detta forum för att få dela mina tankar kring hur jag tänker.

Min tankegång:

Påstående a:
Om en klass har hög kohesion (specialiserad på en uppgift eller ett visst område) kan väl det medföra att den tar del av andra klasser i större grad i jämförelse om den hade varit mer "spretig" (lägre kohesion) och skött allt själv... MEN att hög kohesion skulle MEDFÖRA hög koppling låter inte så troligt enligt mig efter att det beror på vad klasserna skall uträtta.

Påstående b:
Jag tänkte först att b nog är mest troligt, men varför skulle hög kohesion medföra låg koppling. Tänkt om jag har skapat en klass med hög kohesion som är specialiserad på en sak eller område, men som är beroende av många andra klasser för att utföra sitt jobb vilket kan leda till hög koppling. Faller inte detta påstående då?


Påstående c:
Att en omfattande och “spretig” klass ofta beror på att kopplingen är låg tycker jag låter mest troligt eftersom att om kopplingen är låg så kan man tänka sig att dessa klasser får vara mer självständiga vilket kan leda till att dom blir mer omfattande och spretiga?

Fråga:
Hur låter mina tankar kring dessa påståenden? Om något är felaktigt så skulle jag vara väldigt tacksam för feedback

Lindehaven 820 – Lärare
Postad: 24 jul 2018 16:47

Hög kohesion korrelerar ofta till låg koppling och vice versa. Man strävar efter hög kohesion i varje enskild klass/modul och låg koppling mellan klasser/moduler. Det ena underlättar det andra.

En klass/modul med hög kohesion är självständig, ämnad för något specifikt och har metoder/funktioner som endast utför uppgifter för klassen/modulen. Varje metod/funktion utför en enda specifik uppgift för klassen/modulen. De hör ihop i hög grad och är inte "spretiga". Om en klass/modul "sköter allt själv" riskerar den att bli mer "spretig" och få lägre kohesion.

En klass/modul med låg koppling gömmer information, använder inte globalt data, använder få eller inga externa gränssnitt, kontrollerar inte andra klasser/moduler och delar inte datastrukturer med andra klasser/moduler. Dessa olika design-principer ger lägre koppling mellan klasser/moduler och minskar behovet av att behöva ändra många olika klasser/moduler när en klass/modul ändras.

Så, det du tänkte först är rätt.

Lindehaven 820 – Lärare
Postad: 25 jul 2018 12:14

Exempel med förklaringar:

TB16 182 – Fd. Medlem
Postad: 25 jul 2018 13:31
Lindehaven skrev:

Hög kohesion korrelerar ofta till låg koppling och vice versa. Man strävar efter hög kohesion i varje enskild klass/modul och låg koppling mellan klasser/moduler. Det ena underlättar det andra.

En klass/modul med hög kohesion är självständig, ämnad för något specifikt och har metoder/funktioner som endast utför uppgifter för klassen/modulen. Varje metod/funktion utför en enda specifik uppgift för klassen/modulen. De hör ihop i hög grad och är inte "spretiga". Om en klass/modul "sköter allt själv" riskerar den att bli mer "spretig" och få lägre kohesion.

En klass/modul med låg koppling gömmer information, använder inte globalt data, använder få eller inga externa gränssnitt, kontrollerar inte andra klasser/moduler och delar inte datastrukturer med andra klasser/moduler. Dessa olika design-principer ger lägre koppling mellan klasser/moduler och minskar behovet av att behöva ändra många olika klasser/moduler när en klass/modul ändras.

Så, det du tänkte först är rätt.

Stort tack för ditt svar, Lindehaven. Jag skall kika på dina länkar som du har delat 

Svara
Close