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

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

Спасибо.

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

Ответ 1

Сцепление

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

приведенный в этой статье: http://steve.vinoski.net/pdf/IEEE-Old_Measures_for_New_Services.pdf

Ответ 8

Высокая степень сцепления в модулях и низкое сцепление между модулями часто рассматриваются как связанные с высоким качеством в языках программирования OO.

Например, код внутри каждого класса Java должен иметь высокую внутреннюю связность, но должен быть как можно более слабо связан с кодом в других классах Java.

Связь относится к тому, как связаны два класса/модулей и насколько они зависимы друг от друга. Быть низкой связью означает, что изменение чего-то крупного в одном классе не должно влиять на другое. Высокое сцепление сделает ваш код сложным для внесения изменений, а также для его поддержания, поскольку классы тесно связаны друг с другом, что может означать изменение всей системы.

Cohesion относится к тому, что будет делать класс (или модуль). Низкая сплоченность означает, что класс выполняет множество действий и не фокусируется на том, что он должен делать. Тогда высокая сплоченность означает, что класс ориентирован на то, что он должен делать, т.е. Только методы, относящиеся к намерению класса.

Все хорошие разработки программного обеспечения пойдут на высокую степень сцепления и низкое сцепление.