«Связь» - это термин, который описывает отношения между двумя объектами в программной системе (обычно это классы).
Когда класс использует другой класс или взаимодействует с ним, говорят, что он «зависит» от этого другого класса, и поэтому эти классы «связаны». По крайней мере, один из них «знает» о другом.
Идея состоит в том, что мы должны попытаться сохранить связь между классами в наших системах настолько «слабой», насколько это возможно: следовательно, «слабая связь» или иногда «разъединение» (хотя в английском языке «разъединение» означало бы «отсутствие связи вообще», люди часто используйте его для обозначения «слабой связи» между объектами).
Итак: что такое слабая или сильная связь на практике, и почему мы должны делать сущности слабосвязанными?
Связывание описывает степень зависимости между одним объектом другим объектом. Часто классы или объекты.
Когда ClassA сильно зависит от ClassB, вероятность того, что ClassA будет изменен при изменении ClassB, высока. Это сильная связь.
Однако если ClassA слегка зависит от ClassB, то вероятность того, что ClassA каким-либо образом изменится в коде ClassB, невелика. Это слабая связь или «разъединенные» отношения.
Слабая связь хороша, потому что мы не хотим, чтобы компоненты нашей системы сильно зависели друг от друга. Мы хотим сохранить нашу систему модульной, чтобы мы могли безопасно менять одну часть, не затрагивая другую.
Когда две части слабо связаны, они более независимы друг от друга и с меньшей вероятностью сломаются при изменении другой.
Например, при сборке автомобиля вы бы не хотели, чтобы внутренняя замена двигателя сломала что-то в руле.
Хотя это никогда не произойдет случайно при создании автомобиля, подобные вещи случаются с программистами все время. Слабая связь предназначена для уменьшения риска таких вещей.
Сильная связь обычно происходит , когда компания А знает слишком много о сущности B. Если компания А делает слишком много предположений о том , как компания Б работает или как он построен, чем существует высокий риск того, что изменение объекта B будет влиять на объект A. This потому что одно из его предположений о сущности B теперь неверно.
Например, представьте, что вы, как водитель, будете делать определенные предположения о том, как работает двигатель вашего автомобиля.
В тот день, когда вы покупаете новую машину с двигателем, который работает по-другому (или по какой-то причине ваш двигатель был заменен), ваши предыдущие предположения будут неверными. Если бы вы работали с кодом на компьютере, то теперь вы были бы неправильным кодом, который не работает должным образом.
Однако, если все предположения, которые вы делали в отношении водителя, заключаются в следующем: A- у них есть рулевое колесо и B- у них есть педали тормоза и газа, то изменения в автомобиле не будут влиять на вас, если ваши несколько предположений оставайся верным. Это слабая связь.
Важной техникой для достижения слабой связи является инкапсуляция. Идея состоит в том, что класс скрывает свои внутренние детали от других классов и предлагает строго определенный интерфейс для взаимодействия с ним других классов.
Так, например, если вы определения класса автомобиля, его интерфейс (общие методы), вероятно , будет drive(), stop(), steerLeft(), steerRight(), getSpeed(). Это методы, которые другие объекты могут вызывать на объектах Car.
Все остальные детали класса Car: как работает двигатель, какое топливо он использует и т. Д. Скрыты от других классов - чтобы они не знали слишком много об Car.
В тот момент, когда класс A знает слишком много о классе B: у нас есть сильно связанные отношения, где класс A слишком зависит от класса B, и изменение класса B, вероятно, повлияет на класс A. Создание системы сложно расширять и поддерживать.
Отношения между двумя сущностями, где они мало знают друг о друге (только то, что необходимо) - это слабо связанные или разъединенные отношения.