2008-09-02 4 views
58

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

Спасибо.

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

+0

Одно из различий, которое ускользало от меня сначала: «связь» - это * между * классами, а «сплоченность» - внутри * одного класса. – 2016-04-19 04:54:12

ответ

177

Муфта

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

  • Tight: Вы и ваша жена.

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

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

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

+15

Humm, я ожидал пример жены для высокой сплоченности, я должен сказать, я немного разочарован :) – ubiquibacon 2011-10-26 06:07:44

+6

«У нас есть несколько Камамбер, сэр ... Это немного насморк, сэр ... Ну , на самом деле это очень насморк, сэр ... Я думаю, что это намного больше, чем вам нравится, сэр ... Да, сэр. «О, кошка съела его». – MikeMurko 2013-04-11 13:20:10

+0

Я пришел искать этот ответ, чтобы показать коллегу. Ему не хватает отношений, хотя – danielcooperxyz 2014-12-09 22:38:54

62

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

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

1

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

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

1

Быстрый и грязный способ измерения связи заключается в том, чтобы измерять import (или аналогичные) заявления.

21

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

Что касается «связи», он дает его слабой связи/правило Small Interfaces следующим образом:

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

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

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

+0

Отличный ответ! Мне кажется наиболее понятным – SebNag 2016-09-16 21:10:35

16

Сцепление означает зависимость от others.Cohesion означает полноту с ней и я.

1

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

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

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

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

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

Смежные вопросы