Сцепление и сцепление - PullRequest
       24

Сцепление и сцепление

67 голосов
/ 02 сентября 2008

Я пытаюсь свести понятия сцепления и сплоченности к краткому определению. Может ли кто-нибудь дать мне краткое и понятное объяснение (короче, чем определения в Википедии здесь и здесь )? Как они взаимодействуют?

Спасибо.

У кого-нибудь есть хороший, короткий пример?

Ответы [ 6 ]

200 голосов
/ 02 сентября 2008

Сцепление

  • Свободно: Вы и парень в магазине. Вы общаетесь по четко определенному протоколу для достижения ваших соответствующих целей - вы платите деньги, он позволяет вам выйти с сумкой Cheetos. Любой из вас может быть заменен без нарушения работы системы.

  • Tight: Ты и твоя жена.

Сплоченность

  • Низкий: магазин. Вы идете туда для всего, от газа до молока, к банкомату. Продукты и услуги имеют мало общего, и удобство их размещения в одном месте может оказаться недостаточным для компенсации результирующего увеличения стоимости и снижения качества.

  • Высокий: магазин сыров. Они продают сыр. Ничего больше. Не могу победить их, когда дело доходит до сыра.

64 голосов
/ 02 сентября 2008

Связь - мера того, насколько модуль (пакет, класс, метод) зависит от других модулей. Желательно уменьшить связь или уменьшить количество, которое данный модуль полагается на другие модули системы.

Сплоченность - мера того, насколько тесно связаны члены (классы, методы, функциональные возможности в пределах метода) модуля с другими членами того же модуля. Желательно увеличить сцепление, поскольку это указывает на то, что модуль имеет очень специфическую задачу и выполняет только эту задачу.

22 голосов
/ 19 февраля 2010

Связь означает зависимость от других.
Сплоченность означает полноту с самим собой.

22 голосов
/ 02 сентября 2008

Одним из лучших исчерпывающих обсуждений концепций проектирования программного обеспечения, связанных с ОО (включая эти), является Построение объектно-ориентированного программного обеспечения Бертрана Мейера .

Что касается «связи», он дает свое правило «Слабая связь / малые интерфейсы» следующим образом:

Если два модуля обмениваются данными, они должны обмениваться как можно меньшим количеством информации.

Материал Майера, связанный со сплоченностью, никогда не сводился к одному содержательному утверждению, но я думаю, что это предложение из Code Complete Стив Макконнелла довольно хорошо резюмирует:

Под связностью понимается, насколько тесно все подпрограммы в классе или весь код подпрограммы поддерживают центральное назначение

3 голосов
/ 02 сентября 2008

Быстрый и простой способ измерить связь - это измерить ваши import (или аналогичные) утверждения.

1 голос
/ 02 сентября 2008

"Связь - это мера взаимозависимостей между модулями, что должно быть минимизировано "сплоченность, качество, которое нужно максимизировать, фокусируется на отношениях между действиями, выполняемыми каждым модулем. "

цитата из этой статьи: http://steve.vinoski.net/pdf/IEEE-Old_Measures_for_New_Services.pdf

...