Разница между coupling и cohesion

Это термины из принципов разработки ПО.

Целью этапа проектирования в жизненном цикле разработки программного обеспечения является создание решения проблемы, указанной в документе SRS (Спецификация требований к программному обеспечению). Результатом этапа проектирования является проектный документ программного обеспечения (SDD).

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

Концептуальный проект системы:

  • Написано простым языком, т.е. понятным для клиента языком.

  • Подробное объяснение характеристик системы.

  • Описывает функциональность системы.

  • Это не зависит от реализации.

  • Связан с документом требования.

Технический проект системы:

  • Аппаратная составляющая и дизайн.

  • Функциональность и иерархия программных компонентов.

  • Архитектура программного обеспечения

  • Сетевая архитектура

  • Структура данных и поток данных.

  • Компонент ввода/вывода системы.

  • Показывает интерфейс.

Модуляризация: модульность - это процесс разделения программной системы на несколько независимых модулей, где каждый модуль работает независимо. Есть много преимуществ модуляризации в разработке программного обеспечения. Некоторые из них приведены ниже:

  • Легко понять систему.

  • Обслуживание системы простое.

  • Модуль может использоваться много раз в соответствии с их требованиями. Нет необходимости писать это снова и снова.

Связь (Coupling): Связь является мерой степени взаимозависимости между модулями. Хорошее программное обеспечение будет иметь низкую связность.

Типы связности:

  • Связность данных (Data Coupling): если зависимость между модулями основана на том факте, что они обмениваются данными, передавая только данные, то говорят, что модули связаны данными. При соединении данных компоненты независимы друг от друга и взаимодействуют через данные. Коммуникации модулей не содержат бродячих данных (?tramp data). Пример - система расчетов с клиентами;

  • Связность штампов (Stamp Coupling): При соединении штампов полная структура данных передается от одного модуля к другому. Следовательно, он включает в себя tramp data. Это может быть необходимо из соображений эффективности - этот выбор сделал проницательный дизайнер, а не ленивый программист;

  • Связность управления (Control Coupling): если модули взаимодействуют, передавая управляющую информацию, то говорят, что они связаны управлением. Может быть плохо, если параметры указывают совершенно другое поведение, и хорошо, если параметры позволяют факторизовать и повторно использовать функциональность. Пример - функция сортировки, которая принимает функцию сравнения в качестве аргумента;

  • Внешняя связность (External Coupling): при внешней связности модули зависят от других модулей, внешних по отношению к разрабатываемому программному обеспечению или аппаратному обеспечению определенного типа. Ex - протокол, внешний файл, формат устройства и т. д.

  • Общая связность (Common Coupling): модули имеют общие данные, такие как глобальные структуры данных. Изменения в глобальных данных означают отслеживание всех модулей, которые обращаются к этим данным, для оценки эффекта изменения. Таким образом, у него есть недостатки, такие как сложность повторного использования модулей, ограниченная способность контролировать доступ к данным и меньшая ремонтопригодность.

  • Связность содержимого (Content Coupling): при связности содержимого один модуль может изменять данные другого модуля, или поток управления передается от одного модуля к другому модулю. Это наихудшая форма связности, и ее следует избегать.

Сцепление/единство/сплоченность (Cohesion): это мера степени, в которой элементы модуля функционально связаны. Это степень, в которой все элементы, направленные на выполнение одной задачи, содержатся в компоненте. По сути, сцепление - это внутренний клей, который удерживает модуль вместе. Хороший дизайн программного обеспечения будет иметь высокое сцепление.

Types of Cohesion:

  • Functional Cohesion: в компоненте содержится каждый важный элемент для отдельного вычисления. Функциональная сплоченность выполняет задачу и функции. Это идеальная ситуация.

  • Sequential Cohesion: элемент выводит некоторые данные, которые становятся входными данными для другого элемента, т. е. поток данных между частями. Это происходит естественным образом в функциональных языках программирования.

  • Communicational Cohesion: два элемента работают с одними и теми же входными данными или вносят свой вклад в одни и те же выходные данные. Пример - обновить запись в базе данных и отправить ее на принтер.

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

  • Temporal Cohesion: элементы связаны по своему времени. В модуле, связанном с временной связностью, все задачи должны выполняться в один и тот же промежуток времени. Эта связность содержит код для инициализации всех частей системы. Происходит множество различных действий, и все они происходят в единицу времени.

  • Logical Cohesion: элементы связаны логически, а не функционально. Компонент Ex-A считывает входные данные с ленты, диска и сети. Весь код этих функций находится в одном компоненте. Операции родственные, но функции существенно различаются.

  • Coincidental Cohesion: элементы не связаны (несвязаны). Элементы не имеют никакой концептуальной связи, кроме местоположения в исходном коде. Это случайность и худшая форма сплоченности. Вывести следующую строку и поменять местами символы строки в одном компоненте.

Источники:

Доп. материал:

Last updated