Сплоченность и разделение, что они представляют? - PullRequest
34 голосов
/ 21 мая 2010

Что такое сплоченность и развязка? Я нашел информацию о связи, но не о развязке.

Ответы [ 5 ]

71 голосов
/ 21 мая 2010

Эта статья от Аарона очень хороша для понимания, также я бы порекомендовал вам прочитать книгу Мэннинга Spring in Action , в которой приведены очень хорошие примеры того, как пружина решает эту проблему, и она определенно улучшится. ваше понимание этого.

РЕДАКТИРОВАТЬ:

Я столкнулся с этим в этой замечательной книге под названием «Растущее объектно-ориентированное программное обеспечение, управляемое тестами»:

Сцепление:

Элементы связаны, если изменение в одно вызывает изменение в другом. За Например, если два класса наследуют от общий родитель, затем изменение в одном класс может потребовать изменения в Другой. Подумайте о комбинированной аудиосистеме: Это тесно связано, потому что если мы хочу перейти с аналогового на цифровой радио, мы должны восстановить весь система. Если мы собираем систему из отделяется, это будет иметь низкую связь и мы могли бы просто поменять получатель. «Свободно» связанные функции (то есть те, у кого слабая связь) проще в обслуживании.

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

сцепление элемента является мерой ли его обязанности формируют значимая единица. Например, класс который разбирает даты и URL не связным, потому что они не связаны концепции. Подумайте о машине, которая стирает одежду и посуду - это вряд ли удастся сделать оба хорошо. другая крайность, класс, который разбирает только пунктуация в URL вряд ли будет последовательным, потому что это не представляет собой целую концепцию. к сделать что-нибудь, программист должны найти другие парсеры для протокол, хост, ресурс и т. д. Особенности с «высокой» последовательностью проще в обслуживании.

13 голосов
/ 21 мая 2010

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

Соединение - насколько взаимозависимы различные части системы.например, как и где есть зависимости.Если два класса обращаются к методам друг друга, то они тесно связаны, так как изменение одного означало бы необходимость изменения другого.Разъединение - это процесс создания чего-то, что было бы тесно связано с меньшим или вовсе не так.

Гибкие системы имеют высокую когезию и слабую связь.

2 голосов
/ 21 мая 2010

Для связи, эта статья в Википедии должна ответить на все ваши вопросы. Эта статья посвящена сплоченности.

«Развязка» - это еще одно название для «мало / низко сцепления».

Итак, эти термины отвечают на следующие вопросы:

  • Насколько каждая часть вашего проекта зависит от другой части?
  • Если вы хотите использовать только часть вашего проекта (например, для решения конкретной проблемы), сколько вам нужно знать обо всем остальном проекте?
  • Направлена ​​ли каждая часть вашего проекта на одно решение конкретной проблемы или «утечка» решений в другие части?
0 голосов
/ 26 августа 2013

разъединение позволяет разделить взаимодействие объектов от классов и наследования на отдельные уровни абстракции, используемые для полиморфного разделения, что является практикой использования повторно используемого кода для предотвращения взаимодействия модулей дискретного кода друг с другом.

0 голосов
/ 06 ноября 2012

Вот мои мысли о сплоченности. Представь, что есть модуль. Внутри этого модуля у нас есть несколько задач. Когда эти задачи тесно связаны друг с другом, мы говорим, что у них высокая сплоченность. Когда эти задачи не связаны, мы говорим, что у них низкая сплоченность. Моя лучшая попытка объяснить разъединение состоит в том, что разъединение - это акт устранения связи.

Low Coupling помогает нам достичь высокой степени сцепления! Помните, что мы хотим, чтобы наш модуль имел связанные задачи и одну ответственность. Но что такое связь? Связь - это степень зависимости от других модулей для достижения нашей единственной ответственности за этот модуль. Таким образом, из-за слабой связи мы говорим, что мы не очень зависимы от внешних модулей, следовательно, у нас высокая когезия.

Однако, если у нас много зависимостей от внешних модулей, у нас будет высокая связь и низкая когезия. Получите это?

Другие более украшенные мыслители и группы говорят:

Сплоченность - это степень, в которой задачи, выполняемые одним модулем, функционально связаны. "IEEE, 1983" Сплоченность - это "клей", который удерживает модуль вместе. Его можно рассматривать как тип связи между компонентами модуля. Как правило, каждый хочет наивысшего уровня сплоченности возможно ". Бергланд, 1981

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

...