Декомпозиция подсистем на модули

Известны два типа моделей модульной декомпозиции:

q модель потока данных;

q модель объектов.

В основе модели потока данных лежит разбиение по функциям.

Модель объектов основана на слабо сцепленных сущностях, имеющих собственные наборы данных, состояния и наборы операций.

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

Модульность

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

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

Как показано на рис. 4.11, с увеличением количества модулей (и уменьшением их размера) затраты также растут.

Декомпозиция подсистем на модули - student2.ru

Рис. 4.11.Затраты на модульность

Таким образом, существует оптимальное количество модулей Opt, которое приводит к минимальной стоимости разработки. Оптимальный модуль должен удовлетворять двум критериям:

q снаружи он проще, чем внутри;

q его проще использовать, чем построить.

Информационная закрытость

Принцип информационной закрытости (автор — Д. Парнас, 1972) утверждает: содержание модулей должно быть скрыто друг от друга [60]. Как показано на рис. 4.12, модуль должен определяться и проектироваться так, чтобы его содержимое (процедуры и данные) было недоступно тем модулям, которые не нуждаются в такой информации (клиентам).

Декомпозиция подсистем на модули - student2.ru

Рис. 4.12.Информационная закрытость модуля

Информационная закрытость означает следующее:

1) все модули независимы, обмениваются только информацией, необходимой для работы;

2) доступ к операциям и структурам данных модуля ограничен.

Достоинства информационной закрытости:

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

q обеспечивается легкая модификация системы (вероятность распространения ошибок очень мала, так как большинство данных и процедур скрыто от других частей системы).

Идеальный модуль играет роль «черного ящика», содержимое которого невидимо клиентам. Он прост в использовании — количество «ручек и органов управления» им невелико (аналогия с эксплуатацией телевизора). Его легко развивать и корректировать в процессе сопровождения программной системы. Для обеспечения таких возможностей система внутренних и внешних связей модуля должна отвечать особым требованиям. Обсудим характеристики внутренних и внешних связей модуля.

Связность модуля

Связность модуля (Cohesion) — это мера зависимости его частей [58], [70], [77]. Связность — внутренняя характеристика модуля. Чем выше связность модуля, тем лучше результат проектирования, то есть тем «черней» его ящик (капсула, защитная оболочка модуля), тем меньше «ручек управления» на нем находится и тем проще эти «ручки».

Для измерения связности используют понятие силы связности (СС). Существует 7 типов связности:

1. Связность по совпадению(СС=0). В модуле отсутствуют явно выраженные внутренние связи.

2. Логическая связность(СС=1). Части модуля объединены по принципу функционального подобия. Например, модуль состоит из разных подпрограмм обработки ошибок. При использовании такого модуля клиент выбирает только одну из подпрограмм.

Недостатки:

q сложное сопряжение;

q большая вероятность внесения ошибок при изменении сопряжения ради одной из функций.

3. Временная связность(СС=3). Части модуля не связаны, но необходимы в один и тот же период работы системы.

Недостаток: сильная взаимная связь с другими модулями, отсюда — сильная чувствительность внесению изменений.

4.Процедурная связность (СС=5). Части модуля связаны порядком выполняемых ими действий, реализующих некоторый сценарий поведения.

5.Коммуникативная связность (СС=7). Части модуля связаны по данным (работают с одной и той же структурой данных).

6.Информационная (последовательная) связность (СС=9). Выходные данные одной части используются как входные данные в другой части модуля.

7.Функциональная связность (СС=10). Части модуля вместе реализуют одну функцию.

Отметим, что типы связности 1,2,3 — результат неправильного планирования архитектуры, а тип связности 4 — результат небрежного планирования архитектуры приложения.

Сцепление модулей

Сцепление (Coupling) — мера взаимозависимости модулей поданным [58], [70], [77]. Сцепление — внешняя характеристика модуля, которую желательно уменьшать.

Количественно сцепление измеряется степенью сцепления (СЦ). Выделяют 6 типов сцепления.

1.Сцепление по данным(СЦ=1). Модуль А вызывает модуль В.

Все входные и выходные параметры вызываемого модуля — простые элементы данных (рис. 4.13).

Декомпозиция подсистем на модули - student2.ru

Рис. 4.13.Сцепление поданным

2.Сцепление по образцу(СЦ=3). В качестве параметров используются структуры данных (рис. 4.14).

Декомпозиция подсистем на модули - student2.ru

Рис. 4.14.Сцепление по образцу

3.Сцепление по управлению(СЦ=4). Модуль А явно управляет функционированием модуля В (с помощью флагов или переключателей), посылая ему управляющие данные (рис. 4.15).

Декомпозиция подсистем на модули - student2.ru

Рис. 4.15. Сцепление по управлению

4. Сцепление по внешним ссылкам(СЦ=5). Модули А и В ссылаются на один и тот же глобальный элемент данных.

5. Сцепление по общей области(СЦ=7). Модули разделяют одну и ту же глобальную структуру данных (рис. 4.16).

6. Сцепление по содержанию(СЦ=9). Один модуль прямо ссылается на содержание другого модуля (не через его точку входа). Например, коды их команд перемежаются друг с другом (рис. 4.16).

Декомпозиция подсистем на модули - student2.ru

Рис. 4.16.Сцепление по общей области и содержанию

На рис. 4.16 видим, что модули В и D сцеплены по содержанию, а модули С, Е и N сцеплены по общей области.

Наши рекомендации