Coupling vs Cohesion
Kobling og kohesjon er to begreper som finnes i Java (og alle andre objektorienterte språk). Kobling måler hvor mye hver av programmodulene er avhengig av de andre programmodulene. Kohesjon måler hvor sterkt hver av funksjonene er relatert i en modul. Faktisk har ethvert objektorientert språk (inkludert Java) de to hovedmålene å øke sammenhengen og redusere koblingen samtidig, for å utvikle mest effektive programmer. Disse to programvaretekniske beregningene ble utviklet av Larry Constantine for å redusere kostnadene ved å modifisere og vedlikeholde programvare.
Hva er Cohesion?
Cohesion måler hvor sterkt hver av funksjonene er relatert i en programmodul. Godt strukturerte klasser fører til svært sammenhengende programmer. Hvis en bestemt klasse utfører et sett med svært relaterte funksjoner, sies den klassen å være sammenhengende. På den annen side, hvis en klasse utfører en haug med tot alt urelaterte funksjoner, betyr det at klassen ikke er sammenhengende i det hele tatt. Det er viktig å forstå at det å ikke ha sammenheng ikke betyr at den generelle applikasjonen ikke har den nødvendige funksjonaliteten. Det er bare at uten samhørighet vil det være veldig vanskelig å administrere funksjonaliteten fordi de vil bli spredt på mange feil steder ettersom kompleksiteten til applikasjonen øker over tid. Å vedlikeholde, modifisere og utvide atferd spredt over hele koden er veldig kjedelig selv for de mest erfarne programmerere.
Hva er kobling?
Kobling måler hvor mye hver av programmodulene er avhengig av de andre programmodulene. Interaksjoner mellom to objekter oppstår fordi det er kobling. Løst koblede programmer har høy fleksibilitet og utvidbarhet. Sterk kobling er aldri bra fordi ett objekt kan være svært avhengig av et annet objekt. Dette er et mareritt når koden er modifisert, fordi høy kobling betyr at programmererne må jobbe på flere steder med kode for selv en enkelt atferdsendring. Sterk kobling fører alltid til programmer med lav fleksibilitet og mindre skalerbarhet/utvidbarhet. I programmeringsspråk som Java er det imidlertid umulig å fullstendig unngå kobling. Men det anbefales at programmererne gjør sitt beste for å redusere koblingen så mye som mulig. Det er også mulig å ha noen koblinger for å hjelpe objekter til å samhandle med hverandre uten å hemme skalerbarheten og fleksibiliteten.
Hva er forskjellen mellom Coupling og Cohesion?
Selv om kobling og kohesjon handler om kvaliteten til en modul i programvareteknikk, er det helt forskjellige konsepter. Cohesion snakker om hvor mye funksjonaliteten er relatert til hverandre innenfor modulen, mens kobling handler om hvor mye en modul er avhengig av de andre programmodulene innenfor hele applikasjonen. For å ha den beste kvaliteten på programvaren, bør kohesjon og kobling nå de to motsatte ender av spekteret deres. Løs kobling og sterk kohesjon gir med andre ord den beste programvaren. Å ha private felt, ikke-offentlige klasser og private metoder gir løs kobling, samtidig som det gjør alle medlemmene synlige i klassen og har pakke som standardsynlighet gir høy samhørighet.