Сцепление и сцепление
Я пытаюсь свести понятия сцепления и сплоченности к краткому определению. Может ли кто-нибудь дать мне короткое и понятное объяснение (короче, чем определения в Wikipedia здесь и здесь)? Как они взаимодействуют?
Спасибо.
У кого-нибудь есть хороший, короткий пример?
Ответы
Ответ 1
Сцепление
Сплоченность
-
Низкий: магазин. Вы идете туда для всего: от газа до молока до банкомата. Продукты и услуги имеют мало общего, и удобство их всех в одном месте может оказаться недостаточным, чтобы компенсировать увеличение стоимости и снижение качества.
-
Высокий: магазин сыра. Они продают сыр. Ничего больше. Не могу избить их, когда дело доходит до сыра.
Ответ 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
Ответ 7
См. исходную статью, в которой были введены термины:
http://www.research.ibm.com/journal/sj/132/ibmsj1302C.pdf
Ответ 8
Высокая степень сцепления в модулях и низкое сцепление между модулями часто рассматриваются как связанные с высоким качеством в языках программирования OO.
Например, код внутри каждого класса Java должен иметь высокую внутреннюю связность, но должен быть как можно более слабо связан с кодом в других классах Java.
Связь относится к тому, как связаны два класса/модулей и насколько они зависимы друг от друга. Быть низкой связью означает, что изменение чего-то крупного в одном классе не должно влиять на другое. Высокое сцепление сделает ваш код сложным для внесения изменений, а также для его поддержания, поскольку классы тесно связаны друг с другом, что может означать изменение всей системы.
Cohesion относится к тому, что будет делать класс (или модуль). Низкая сплоченность означает, что класс выполняет множество действий и не фокусируется на том, что он должен делать. Тогда высокая сплоченность означает, что класс ориентирован на то, что он должен делать, т.е. Только методы, относящиеся к намерению класса.
Все хорошие разработки программного обеспечения пойдут на высокую степень сцепления и низкое сцепление.