Свързване срещу сближаване
Свързването и кохезията са две концепции, открити в Java (и всички други обектно-ориентирани езици). Свързването измерва до каква степен всеки от програмните модули е зависим от другите програмни модули. Кохезията измерва доколко всяка от функциите е свързана в модула. Всъщност всеки обектно-ориентиран език (включително Java) има двете основни цели да увеличи съгласуваността и да намали едновременно свързването, за да разработи най-ефективните програми. Тези два показателя за софтуерно инженерство са разработени от Лари Константин, за да намалят разходите за модифициране и поддръжка на софтуер.
Какво е кохезия?
Кохезията измерва доколко всяка от функциите е свързана в програмен модул. Добре структурираните класове водят до силно сплотени програми. Ако определен клас изпълнява набор от силно свързани функции, този клас се нарича сплотен. От друга страна, ако един клас изпълнява куп напълно несвързани функции, това означава, че класът изобщо не е сплотен. Важно е да се разбере, че липсата на кохезивност не означава, че цялостното приложение няма необходимата функционалност. Просто без сплотеност ще бъде много трудно да се управлява функционалността, защото те ще бъдат разпръснати на много грешни места, тъй като сложността на приложението се увеличава с времето. Поддържането, модифицирането и разширяването на поведението, разпръснато из целия код, е много досадно дори за най-опитните програмисти.
Какво е свързване?
Свързването измерва до каква степен всеки от програмните модули е зависим от другите програмни модули. Взаимодействията между два обекта възникват, защото има свързване. Слабо свързаните програми са с висока гъвкавост и разширяемост. Силното свързване никога не е добро, защото един обект може да бъде силно зависим от друг обект. Това е кошмар, когато кодът се модифицира, защото високото свързване означава, че програмистите трябва да работят на няколко места от код дори за една единствена поведенческа модификация. Силното свързване винаги води до програми с ниска гъвкавост и по-малка мащабируемост/разширяемост. Въпреки това, в езици за програмиране като Java, пълното избягване на свързването е невъзможно. Но се препоръчва програмистите да положат всички усилия, за да намалят свързването възможно най-много. Възможно е също така да има известно свързване, което да помогне на обектите да взаимодействат помежду си, без да възпрепятства тяхната мащабируемост и гъвкавост.
Каква е разликата между свързване и сближаване?
Въпреки че свързването и кохезията се занимават с качеството на модула в софтуерното инженерство, те са напълно различни концепции. Кохезията говори за това доколко функционалностите са свързани една с друга в рамките на модула, докато свързването се занимава с това доколко един модул е зависим от другите програмни модули в рамките на цялото приложение. За да имаме софтуер с най-добро качество, кохезията и свързването трябва да достигнат двата противоположни края на техния спектър. С други думи, хлабавото свързване и силната кохезия осигуряват най-добрия софтуер. Наличието на частни полета, непублични класове и частни методи осигуряват слабо свързване, като същевременно правят всички членове видими в класа и наличието на пакет като видимост по подразбиране осигуряват висока кохезия.