Spojivost vs kohezija
Spajanje i kohezija su dva koncepta koja se nalaze u Javi (i svim drugim objektno orijentisanim jezicima). Spajanje meri koliko svaki od programskih modula zavisi od ostalih programskih modula. Kohezija mjeri koliko je svaka od funkcija snažno povezana unutar modula. Zapravo, svaki objektno orijentisani jezik (uključujući Javu) ima dva glavna cilja povećanja kohezivnosti i istovremeno smanjenje povezanosti, kako bi se razvili najefikasniji programi. Ove dvije metrike softverskog inženjeringa razvio je Larry Constantine kako bi smanjio troškove modifikacije i održavanja softvera.
Šta je kohezija?
Kohezija mjeri koliko je svaka od funkcija jako povezana unutar programskog modula. Dobro strukturirani časovi vode do visoko kohezivnih programa. Ako određena klasa izvodi skup visoko povezanih funkcija, kaže se da je ta klasa kohezivna. S druge strane, ako klasa izvodi gomilu potpuno nepovezanih funkcionalnosti, to znači da klasa uopće nije kohezivna. Važno je shvatiti da nedostatak kohezivnosti ne znači da cjelokupna aplikacija nema potrebnu funkcionalnost. Samo što će bez kohezije biti vrlo teško upravljati funkcionalnošću jer će one biti razbacane na mnogo pogrešnih mjesta kako se kompleksnost aplikacije vremenom povećava. Održavanje, modifikacija i proširenje ponašanja raštrkanih po cijelom kodu je vrlo zamorno čak i za najiskusnije programere.
Šta je spajanje?
Uparivanje mjeri koliko je svaki od programskih modula ovisan o drugim programskim modulima. Interakcije između dva objekta nastaju jer postoji sprega. Slabo povezani programi imaju visoku fleksibilnost i proširivost. Jaka sprega nikada nije dobra jer jedan objekt može biti jako ovisan o nekom drugom objektu. Ovo je noćna mora kada se kod modificira, jer visoka povezanost znači da programeri moraju raditi na nekoliko mjesta koda čak i za jednu modifikaciju ponašanja. Jaka sprega uvijek vodi do programa niske fleksibilnosti i manje skalabilnosti/proširivosti. Međutim, u programskim jezicima kao što je Java, potpuno izbjegavanje spajanja je nemoguće. Ali preporučuje se da programeri daju sve od sebe da smanje spregu što je više moguće. Također je moguće imati neke spojnice koje pomažu objektima da međusobno komuniciraju bez ometanja njegove skalabilnosti i fleksibilnosti.
Koja je razlika između spajanja i kohezije?
Iako se spajanje i kohezija bave kvalitetom modula u softverskom inženjerstvu, oni su potpuno različiti koncepti. Kohezija govori o tome koliko su funkcionalnosti povezane jedna s drugom unutar modula, dok se spajanjem bavi koliko je jedan modul ovisan o drugim programskim modulima unutar cijele aplikacije. Da bi imali najkvalitetniji softver, kohezija i spajanje bi trebali doseći dva suprotna kraja njihovog spektra. Drugim riječima, labava veza i jaka kohezija pružaju najbolji softver. Posjedovanje privatnih polja, nejavnih klasa i privatnih metoda omogućavaju labavu povezanost, dok čine sve članove vidljivima unutar klase i posjedovanje paketa kao zadane vidljivosti osiguravaju visoku koheziju.