"З'єднання" - це термін, який описує взаємозв'язок між двома сутностями в програмній системі (як правило, класах).
Коли клас використовує інший клас або спілкується з ним, кажуть, що він "залежить" від цього класу, і ці класи "пов'язані". Принаймні одна з них «знає» про іншу.
Ідея полягає в тому, що ми повинні намагатися зберегти зв’язок між класами в наших системах якомога більш "вільним": отже, "вільне з'єднання" або іноді "розв'язка" (хоча в перекладі з англійської мови "розв'язка" означатиме "взагалі немає зв'язку", люди часто використовують його для позначення «вільної зв'язку» між сутностями).
Отже: що таке практичне сполучення та сильне сполучення на практиці, і чому ми маємо робити об'єкти вільно пов'язаними?
З'єднання описує ступінь залежності однієї сутності до іншої сутності. Часто класи або предмети.
Коли ClassA сильно залежить від ClassB, шанси вплинути на ClassA при зміні ClassB високі. Це сильна зв’язок.
Однак якщо ClassA залежить від ClassB, то шанси зміни будь-якого класу зміни на код ClassB низькі. Це нещільне з’єднання або "роз'єднані" відносини.
Вільне з'єднання добре, оскільки ми не хочемо, щоб компоненти нашої системи сильно залежали один від одного. Ми хочемо зберегти нашу систему модульною, де ми можемо безпечно змінювати одну частину, не впливаючи на іншу.
Коли дві частини вільно з'єднуються, вони більш незалежні одна від одної і мають меншу ймовірність розірватися при зміні іншої.
Наприклад, будуючи автомобіль, ви не хочете, щоб внутрішня зміна двигуна щось зламала в кермі.
Хоча це ніколи не трапиться випадково при будівництві автомобіля, у програмістів весь час трапляються подібні речі. Вільна муфта призначена для зменшення ризику подібних речей.
Сильна зв'язок зазвичай виникає, коли суб'єкт А занадто багато знає про сутність B. Якщо суб'єкт А робить занадто багато припущень щодо того, як господарство B функціонує або як він побудований, то існує високий ризик, що зміна сутності B вплине на сутність A. Це це тому, що одне з припущень щодо сутності B зараз неправильне.
Наприклад, уявіть, що як водій, ви б зробили певні припущення щодо того, як працює двигун вашого автомобіля.
У день, коли ви купуєте новий автомобіль з двигуном, який працює по-іншому (або чомусь ваш двигун був замінений), ваші попередні припущення були б невірними. Якби ви вводили код на комп’ютері, ви б зараз помилковий код, який не працює належним чином.
Однак якщо всі припущення, які ви як водій ви зробили щодо автомобілів, такі: A- у них є кермо, а B- у них педалі гальм і газів, то зміни в машині на вас не вплинуть, якщо ваші кілька припущень. залишайтеся правильними. Це нещільна муфта.
Важливою технікою досягнення сипучого зчеплення є інкапсуляція. Ідея полягає в тому, що клас приховує внутрішні деталі інших класів і пропонує строго визначений інтерфейс для інших класів для спілкування з ним.
Так, наприклад, якщо ви визначення класу автомобіля, його інтерфейс (загальні методи), ймовірно , буде drive()
, stop()
, steerLeft()
, steerRight()
, getSpeed()
. Це методи, які інші об'єкти можуть використовувати на об'єктах автомобіля.
Всі інші деталі класу "Автомобіль": як працює двигун, вид палива, яке він використовує тощо, приховані від інших класів - щоб не допустити їх занадто багато про автомобіль.
Момент класу A занадто багато знає про клас B: у нас сильно пов'язані відносини, коли клас A занадто залежний від класу B, а зміна класу B, ймовірно, вплине на клас А. Зростання системи важко розширюється та підтримується.
Відносини між двома сутностями, де вони мало знають одне про одного (лише те, що потрібно) - це нещільно пов'язані або роз'єднані відносини.