Design för förändring: Koppling och sammanhållning i objektorienterade system

Koppling och sammanhållning är två missförstådda termer inom programvaruteknik. Dessa är termer som används för att indikera den kvalitativa analysen av modulariteten i ett system, och de hjälper oss att identifiera och mäta designkomplexiteten hos objektorienterade system.

En god kunskap om båda är nödvändig för att bygga system som är skalbara, hanterbara och kan utökas över tiden. I det här inlägget kommer jag att diskutera båda dessa; Jag kommer att presentera kodexempel i mina framtida inlägg om detta ämne.

Hur skiljer sig sammanhållning och koppling från varandra? Hur är begrepp sammanhållning och koppling relaterade till bra eller dålig programvarudesign? Innan vi utforskar sammanhållning och koppling och hur de påverkar programvarudesign, låt oss förstå vad vart och ett av dessa koncept är och deras typer.

Koppling

Koppling kan definieras som graden av ömsesidigt beroende som finns mellan mjukvarumoduler och hur nära de är kopplade till varandra. I huvudsak indikerar koppling styrkan av sammankopplingen mellan mjukvarumoduler. När denna koppling är hög kan vi anta att mjukvarumodulerna är beroende av varandra, dvs de kan inte fungera utan den andra. Det finns flera dimensioner av kopplingen:

  • Innehållskoppling - det här är en typ av koppling där en viss modul kan komma åt eller ändra innehållet i någon annan modul. I grund och botten, när en komponent skickar parametrar för att styra aktiviteten hos någon annan komponent, finns det en styrkoppling mellan de två komponenterna.
  • Vanlig koppling - det här är en typ av koppling där du har flera moduler som har tillgång till en delad global data
  • Stämpelkoppling - detta är en typ av koppling där datastruktur används för att överföra information från en komponent i systemet till en annan
  • Styrkoppling - detta är en typ av koppling där en modul kan ändra flödet för körning av en annan modul
  • Datakoppling - i denna typ av koppling interagerar två moduler genom att utbyta eller skicka data som en parameter

Sammanhållning

Sammanhållning anger nivån på intraberoende bland elementen i en programvarumodul. Med andra ord är sammanhållning ett mått på i vilken grad ansvarsområdena för en enskild modul eller en komponent utgör en meningsfull enhet. Sammanhållning är av följande typer:

  • Sammanfallande sammanhållning - detta är en oplanerad slumpmässig sammanhållning som kan vara ett resultat av att dela upp en modul i mindre moduler.
  • Logisk sammanhållning - detta är en typ av sammanhållning där flera logiskt relaterade funktioner eller dataelement placeras i samma komponent
  • Temporal sammanhållning - detta är en typ av sammanhållning där element i en modul grupperas på ett sätt som de bearbetas vid samma tidpunkt. Ett exempel kan vara en komponent som används för att initialisera en uppsättning objekt.
  • Procedurell sammanhållning - det här är en typ av sammanhållning där funktionerna i en komponent är grupperade på ett sätt så att de kan utföras sekventiellt och göra dem procedurellt sammanhängande
  • Kommunikationssammanhållning - i denna typ av sammanhållning grupperas elementen i en modul logiskt på ett sätt som de körs sekventiellt och de arbetar på samma data
  • Sekventiell sammanhållning - i denna typ av sammanhållning grupperas elementen i en modul på ett sådant sätt att utmatningen från en av dem blir ingången till nästa - de utförs alla sekventiellt. I huvudsak, om utdata från en del av en komponent är inmatning från en annan, säger vi att komponenten har sekventiell sammanhållning.
  • Funktionell sammanhållning - det här är den bästa och mest föredragna typen av sammanhållning där sammanhållningsgraden är högst. I denna typ av sammanhållning grupperas elementen i en modul funktionellt i en logisk enhet och de fungerar tillsammans som en logisk enhet - detta främjar också flexibilitet och återanvändbarhet.

De bästa metoderna

Tät koppling ökar underhållskostnaden eftersom det är svårt och ändringar av en komponent skulle påverka alla andra komponenter som är anslutna till den. Så kodomvandling blir svår eftersom du behöver refaktorera alla andra komponenter i den anslutna kedjan så att funktionaliteten inte går sönder. Denna process är besvärlig och tar mycket ansträngande ansträngning och tid. 

Du bör designa klasser som innehåller färre antal instansvariabler, dvs. din klassdesign är "bra" om den innehåller ett litet antal instansvariabler. Helst bör var och en av metoderna i din klass manipulera en eller flera av dessa instansvariabler. Teoretiskt är en klass maximalt sammanhängande om var och en av förekomstvariablerna i klassen används eller manipuleras av var och en av metoderna i den klassen. När sammanhållningen i klassen är hög är metoderna och datamedlemmarna i klassen medberoende och arbetar tillsammans som en enda logisk enhet. Men i verkligheten är det inte möjligt att designa sådana klasser eller jag skulle hellre säga, det är inte tillrådligt att utforma klasser som är maximalt sammanhängande.