Spojenie vs súdržnosť
Spojenie a súdržnosť sú dva koncepty, ktoré sa nachádzajú v Jave (a všetkých ostatných objektovo orientovaných jazykoch). Spojenie meria, do akej miery je každý z programových modulov závislý od ostatných programových modulov. Súdržnosť meria, do akej miery sú jednotlivé funkcie spojené v rámci modulu. V skutočnosti má každý objektovo orientovaný jazyk (vrátane Javy) dva hlavné ciele, a to zvýšiť súdržnosť a súčasne znížiť prepojenie, aby sa vyvinuli čo najefektívnejšie programy. Tieto dve metriky softvérového inžinierstva vyvinul Larry Constantine s cieľom znížiť náklady na úpravu a údržbu softvéru.
Čo je súdržnosť?
Kohézia meria, ako silne spolu súvisia jednotlivé funkcie v rámci programového modulu. Dobre štruktúrované triedy vedú k vysoko súdržným programom. Ak určitá trieda vykonáva súbor vysoko súvisiacich funkcií, hovorí sa, že táto trieda je súdržná. Na druhej strane, ak trieda vykonáva množstvo úplne nesúvisiacich funkcií, znamená to, že trieda nie je vôbec súdržná. Je dôležité pochopiť, že neexistencia súdržnosti neznamená, že celková aplikácia nemá požadovanú funkčnosť. Ide len o to, že bez súdržnosti bude veľmi ťažké spravovať funkčnosť, pretože budú rozptýlené na mnohých nesprávnych miestach, pretože zložitosť aplikácie sa časom zvyšuje. Udržiavanie, upravovanie a rozširovanie správania roztrúseného po celom kóde je veľmi únavné aj pre tých najskúsenejších programátorov.
Čo je spojka?
Spojenie meria, do akej miery je každý z programových modulov závislý od ostatných programových modulov. Interakcie medzi dvoma objektmi sa vyskytujú, pretože existuje spojenie. Voľne spojené programy majú vysokú flexibilitu a rozšíriteľnosť. Silná väzba nie je nikdy dobrá, pretože jeden objekt môže byť vysoko závislý od iného objektu. Toto je nočná mora, keď sa kód upraví, pretože vysoká väzba znamená, že programátori musia pracovať na niekoľkých miestach kódu, čo i len na jednu zmenu správania. Silná väzba vždy vedie k programom s nízkou flexibilitou a menšou škálovateľnosťou/rozšíriteľnosťou. Avšak v programovacích jazykoch, ako je Java, nie je možné úplne sa vyhnúť spájaniu. Odporúča sa však, aby programátori vynaložili maximálne úsilie na čo najväčšie zníženie väzby. Je tiež možné mať nejaké prepojenie, ktoré pomáha objektom interagovať medzi sebou bez toho, aby to obmedzovalo ich škálovateľnosť a flexibilitu.
Aký je rozdiel medzi spájaním a súdržnosťou?
Aj keď spojenie a súdržnosť riešia kvalitu modulu v softvérovom inžinierstve, ide o úplne odlišné koncepty. Kohézia hovorí o tom, do akej miery spolu súvisia funkcie v rámci modulu, zatiaľ čo spojka sa zaoberá tým, do akej miery je jeden modul závislý od ostatných programových modulov v rámci celej aplikácie. Aby sme mali softvér najvyššej kvality, súdržnosť a prepojenie by mali dosiahnuť dva opačné konce svojho spektra. Inými slovami, voľná väzba a silná súdržnosť poskytuje najlepší softvér. Súkromné polia, neverejné triedy a súkromné metódy poskytujú voľné spojenie a zároveň zviditeľňujú všetkých členov v rámci triedy a nastavenie balíka ako predvolenej viditeľnosti poskytuje vysokú súdržnosť.