Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций 1.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
785.92 Кб
Скачать

4.1. Декомпозиция программных систем

4.1.1. Объектно-ориентированная декомпозиция

В настоящее время разработаны и успешно развиваются различные методики разбиения задач создания сложных программных систем на более простые составляющие. Основным лидером здесь является метод объектно-ориентированной декомпозиции в его различных вариантах. На основе метода OOD разработаны различные системы объектного проектирования, например, широко известный пакет Rational Rose. Между тем развитие технологий программирования давно предлагает нам конструктивы для создания новых гибких и интуитивно-доступных способов декомпозиции. Одним из них является понятие полностью абстрактного класса (pure abstract class) или интерфейса (interface).

4.1.2. Статически-ориентированная декомпозиция

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

Пусть каждый компонент системы предоставляет во внешнее пользование некоторый набор интерфейсов. Каждый такой интерфейс назовем серверным разъемом компонента. Пусть также для каждого компонента указано какие интерфейсы нужно (можно) ему предоставить извне для обеспечения его работоспособности.

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

Клиентский разъем некоторого класса совместим с серверным разъемом того-же класса (т.е. может быть подсоединен к нему).

Если классы различны, то для совместимости необходимо, чтобы класс серверного разъема был потомком класса клиентского разъема.

После того, как правила сформулированы, можно абстрагироваться от понимания разъемов как указателей на полностью абстрактные классы, а рассматривать их как объекты, обладающие указанными выше свойствами. Таким образом, мы получаем некоторую простую алгебраическую систему, состоящую из компонентов (возможно, принадлежащих некоторым классам), сопоставленных им клиентских и серверных разъемов, между которыми введено отношение совместимости и, наконец, классов разъемов, между которыми введено отношение наследования. При этом отношения наследования и совместимости связаны между собой описанными выше правилами 1 и 2.

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

Отличительной чертой метода статической декомпозиции (static object decomposition, SOD) является (сравнительно) простая приспособляемость его к нуждам повторного использования (reusing) бинарного кода. В отличие от COM или CORBA здесь не нужно предоставлять громоздкие описания внутреннего устройства интерфейсов на языках типа IDL, достаточно описать место некоторого интерфейса в иерархии наследования. Эта иерархия может быть зафиксирована в пользовательской системе (например, а реестре Windows). Конечно, в этом случае для сборки полноценных систем потребуется гораздо более развитая система базовых классов, нежели в случае COM, но создание такой системы представляется вполне возможным.

На основе метода SOD возможно построение визуального средства сборки сложных систем из готовых (бинарных) компонентов. Подобные системы были бы доступны для использования не только программистами, но и системными администраторами, интеграторами, инженерами АСУ и даже простыми пользователями.

Заметим, что представление метода SOD не противоречит представлению других популярных визуальных средств разработки, например таких, как Delphi, но развивает и обогащает его. Более того, зачатки SOD содержатся в этих RAD-системах. Например, в Delphi можно создать простое приложение для работы с базами данных, на написав при этом ни строчки кода, а лишь соединив друг с другом должным образом доступные компоненты. Метод SOD доводит эту идею до ее логического завершения.