Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура информационных систем. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
676 Кб
Скачать

сом Object B компонента Package B. В случае если изначально зависи-

мость была бы реализована через интерфейс (т.е. Interface A находился в Package B), то для инверсии зависимостей достаточно было бы пере-

нести интерфейс Interface A из пакета Package B в пакет Package A.

3.4.2. Принцип устойчивых зависимостей

Принцип устойчивых зависимостей предполагает, что все зависи-

мости должны быть направлены от менее устойчивых программных сущностей к более устойчивым. Формулировка принципа говорит об очевидном факте того, что ИС будет наиболее устойчивой (а, следова-

тельно, и надёжной) в случае, когда зависимости отдельных компонен-

тов будут направлены на наименее часто меняющиеся структуры данных.

Изменение таких структур данных, очевидно, ведёт к изменению большого числа зависящих от них программных сущностей и, как след-

ствие, к росту вероятности появления ошибки.

Количество зависимостей, а, следовательно, и степень неустойчи-

вости (I) можно рассчитать как отношение числа исходящих зависимо-

стей (Fan-out) к общему числу зависимостей компонента (Fan-in + Fanout). Таким образом, для каждого компонента степень устойчивости может быть рассчитана по формуле: I = Fan-out / (Fan-int + Fan-out).

3.4.3. Принцип устойчивости абстракций

Принцип открытости/закрытости предполагает, что расширение функционала ИС может производиться в основном за счёт механики наследования в объектно-ориентированных языках программирования.

В связи с этим очевидной становится следующая зависимость: чем большее число функций и параметров можно переопределить у про-

граммной сущности, тем проще вносить в неё изменения. Другими сло47

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

Принцип устойчивости абстракций может характеризоваться по-

средством коэффициента абстрактности A, рассчитываемого как отно-

шение числа абстрактных программных сущностей (абстрактных клас-

сов Na и интерфейсов Ni) к общему числу программных сущностей (аб-

страктных классов Na, интерфейсов Ni и конкретных классов Nc): A = (Na + Ni) / (Na + + Ni + Nc).

3.4.4. Графическая интерпретация принципов SDP и SAP

Метрики неустойчивости I и степени абстракции A можно исполь-

зовать в совокупности для оценки разрабатываемой системы. Обе мет-

рики колеблются в диапазоне [0; 1] и могут быть изображены на графи-

ке, представленном на рис. 10.

Рисунок 10 – График устойчивости ИС В случае если у компонентов ИС высокая степень абстракции и на

них направлено большое число зависимостей (т.е. они обладают высо-

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

48

классов согласно принципу OCP не приведёт к значительным правкам во всей ИС.

Таким образом, можно выделить «главную последовательность»,

соединив точки (0; 1) и (1; 0) прямой линией. Можно считать, что ком-

поненты, располагающиеся вблизи главной последовательности, соот-

ветствуют «золотой середине»: либо редко изменяются, либо их изме-

нения не затрагивают иных компонентов системы (см. рис. 11.).

Точка (1; 1) и её окрестности описывают высокоабстрактные ком-

поненты, на которые не направлены зависимости. Абстрактные компо-

ненты сами по себе не выполняют никаких функций, а лишь задают общие правила обработки данных. Таким образом, если на компоненты не направлено зависимостей, то в ИС не существует реализаций абст-

рактных программных сущностей, а следовательно, эти программные сущности не используются в ИС. Зону в окрестностях точки (1; 1)

Р.Мартин называет зоной «бесполезности».

Рисунок 11 – Главная последовательность Зона в окрестностях точки (0; 0) характеризует компоненты, от ко-

торых зависит большое число других компонентов, при этом не содер-

жащие абстрактных программных сущностей. Без нарушения принципа

OCP такие программные сущности изменять затруднительно, а боль-

49

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]