Разница между 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