- •Конспект лекций модуля № 1 "Введение" дисциплины "Распределенные программные системы и технологии" Тема 1. Определение и характеристики распределенных программных систем
- •1.1. Определение и задачи распределенных систем
- •1.2. Прозрачность
- •1.3. Открытость
- •1.4. Масштабируемость
- •1.5. Дополнительные свойства распределенных систем
- •1.5.1. Отказоустойчивость.
- •1.5.2. Безопаснтность.
- •1.6. Проблемы создания распределенных систем
- •Тема 2. Организация распределенных систем
- •2.1. Уровни распределенных программных систем
- •2.2. Аппаратный уровень
- •2.2.1. Классификация Флина
- •Simd(векторные компьютеры)
- •Misd(систалический массив)
- •Mimd(локальные, глобальные сети)
- •2.2.2. Классификация, основанная на процессорах и памяти (разделённой памяти)
- •2.2.3. Мультипроцессоры и мультикомпьютеры Базовые архитектуры
- •Мультипроцессоры
- •Гомогенные мультикомпьютерные системы
- •Гетерогенные мультикомпьютерные системы
- •2.3. Уровень операционных систем
- •2.3.1. Виды операционных систем
- •2.3.2 Распределенные операционные системы
- •Операционные системы для однопроцессорных компьютеров
- •Мультипроцессорные операционные системы
- •Мультикомпьютерные операционные системы
- •Системы с распределенной разделяемой памятью
- •2.3.3. Сетевые операционные системы
- •2.4. Программное обеспечение промежуточного уровня
- •2.4.1. Позиционирование программного обеспечения промежуточного уровня
- •2.4.2. Модели промежуточного уровня
- •2.4.3. Службы промежуточного уровня
- •2.4.4. Промежуточный уровень и открытость
- •Тема 3. Архитектуры распределенных программных систем
- •3.1. Протокол запрос-ответ
- •3.2. Выбор архитектуры
- •3.2.1.Виды архитектур
- •3.2.2. Архитектура клиент/сервер
- •3.2.3. Трехзвенная архитектура
- •3.2.4. Архитектура распределенных объектов.
- •Тема 4. Декомпозиция программных систем
- •4.1. Проектирование модульных систем
- •4.1.1. Основные понятия
- •4.3.2. Проектирование на основе структур данных (Data-Structure-Centered Design)
- •4.3.3. Компонентное проектирование (Component-Based Design)
- •4.1. Декомпозиция программных систем
- •4.1.1. Объектно-ориентированная декомпозиция
- •4.1.2. Статически-ориентированная декомпозиция
- •4.2. Метрики связанности модулей
- •4.2.1. Основные метрики
- •4.2.2. Главная последовательность
- •4.2.3. Расстояние от главной последовательности
- •4.3. Параллелизм программных систем
- •4.3.1 Признаки параллельных программ
- •4.3.2. Параллелизм данных (Data Parallel)
- •4.3.3. Параллелизм задач
- •4.3.3.1. Общая идея
- •4.3.3.2. Модель процесс/канал
- •4.3.3.3. Модель обмен сообщениями
- •4.3.3.3. Модель общая память
- •4.3.4. Оценки эффективности параллелизма.
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 доводит эту идею до ее логического завершения.
