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