Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 72
Текст из файла (страница 72)
Многие задачи сочетают различные аспекты нескольких архитектур. 14.12.1. Пакетное преобразование Пакетное преобразование (ЬассЬ сгапз(огшасюп) состоит из нескольких вычислительных процессов. Приложение получает входные данные и должно вычислить результат. Никакого взаимодействия с внешним миром в промежутке не предпо- 14.12. Распространенные архитектурные стили 307 лагается. В качестве примеров можно привести стандартные вычислительные задачи; компиляторы, программы для расчета бухгалтерских ведомостей, программы автоматического проектирования СБИС, анализа напряжений в мостах и многие другие. Для таких задач модель состояний тривиальна или вовсе вырождена. Модель классов достаточно важна: она описывает ввод, вывод и промежуточные стадии вычислений.
Модель взаимодействия документирует вычисления и связывает между собой модели классов. Наиболее важным аспектом решения задачи является определение четкой последовательности этапов. В прошлом, когда мы работали в отделе исследований Оепега! Е!есгпс, один наш коллега (Билл Премерлани) написал компилятор, который принимал АЯСП-файл с графическими изображениями на входе и генерировал код определений реляционной базы данных на выходе. Эта работа предшествовала появлению коммерчески доступных средств объектно-ориентированного моделирования.
На рис. 14.3 показана последовательность этапов. Компилятор состоял из пяти моделей классов: одна для входных данных, другая — для выходных и три — для промежуточных представлений. Рнс. 14.3. Последовательность этапов компиляции Пакетное преобразование проектируется в следуюшей последовательности. 1. Разбить преобразование на этапы, каждый из которых состоит в выполне- нии части преобразования.
2. Подготовить модели классов для ввода, вывода и промежуточных данных. Каждый этап учитывает только те представления, которые связывают его с соседями. 3. Детализировать каждый этап до тех пор, пока его реализация не станет оче- видной. 4. Оптимизировать получившийся конвейер. 14.12.2. Непрерывное преобразование Непрерывное преобразование (сотишоиз ггапз(огшаг1оп) — это характеристика системы, выходной сигнал которой зависит от изменяющихся сигналов на входах. В отличие от пакетного преобразования, которое вычисляет результат один раз, непрерывное преобразование должно обновлять выходные сигналы достаточно часто (теоретически — непрерывно, однако на практике вычисление осуществляется с большой частотой дискретизации).
Из-за жестких временных ограничений система не может вычислять весь набор выходных данных заново каждый раз при изменении входного сигнала (иначе это было бы просто пакетное преобразование). 308 Глава 14 ° Проектирование системы Вместо этого система должна рассчитывать приращения выходных данных. В качестве типичных примеров приложений этого класса можно привести: обработчики сигналов, оконные системы, инкрементные компиляторы и системы контроля производственных процессов. Для этих систем модели классов, состояний и взаимодействия должны быть примерно такими же, как и для пакетных преобразований. Один из методов реализации систем такого рода состоит в построении функционального конвейера.
Эффект любого изменения входного сигнала последовательно распространяется по конвейеру. Разработчик может добавлять промежуточные и избыточные объекты для повышения производительности конвейера. Некоторые приложения требуют синхронизации значений внутри конвейера. Такие системы выполняют операции за четко определенное время. В них поток операций должен быть аккуратно сбалансирован, чтобы значения поступали в нужное место в нужный момент, не создавая заторов.
На рис. 14.4 показан пример работы графического приложения. Приложение отображает геометрические фигуры в пользовательских координатах в систему координат окна. Затем оно обрезает фигуры по размерам окна. Наконец, каждая фигура сдвигается на экране с учетом положения оконной системы координат. Рис. 14.4. Последовательность этапов работы графического приложения Непрерывное преобразование проектируется в следующей последовательности. 1.
Разбить преобразование на этапы, каждый из которых должен описывать какую-либо часть преобразования. 2. Определить модели входных, выходных и промежуточных данных, как для пакетного преобразования. 3. Продифференцировать каждую операцию так, чтобы работать с приращениями. Таким образом, изменение входного сигнала должно распространяться по конвейеру в виде последовательных приращений. 4. Добавить оптимизирующие промежуточные объекты.
14.12.3. Интерактивный интерфейс Интерактивный интерфейс (1псегаст1че )птег(асе) — это система, в которой доминируют взаимодействия с внешними агентами (людьми или устройствами). Внешние агенты не зависят от системы, поэтому она не может их контролировать, а может лишь запрашивать у них ввод данных. Интерактивный интерфейс обычно составляет лишь часть некоторого приложения, которая часто может рассматриваться независимо от вычислений.
В качестве примера интерактивной 14.12. Распространенные архитектурные стили 309 системы можно привести: интерфейс запросов, основанный на формах, оконный менеджер рабочей станции или панель управления моделированием. Наиболее важные аспекты интерактивного интерфейса — это протокол взаимодействия системы с внешними агентами, синтаксис возможных взаимодействий, представление выходных данных (варианты отображения на экране), поток управления внутри системы, производительность и обработка ошибок. Интерактивные интерфейсы определяются главным образом моделью состояний. Модель классов описывает элементы взаимодействия (входные и выходные маркеры, форматы представления). Модель взаимодействия описывает взаимодействие диаграмм состояний. Интерактивный интерфейс проектируется в следующей последовательности.
1. Изолировать классы интерфейса от классов приложения. 2. Использовать предопределенные классы для описания взаимодействия с внешними агентами везде, где это возможно. Например, в оконных системах имеется множество предопределенных окон, меню, кнопок, форм и других классов, готовых к использованию в приложениях. 3.
Используйте модель состояний в качестве структуры программы. Интерактивные интерфейсы лучше всего реализуются с использованием параллельного управления (многозадачность) или событийного управления (прерывание). Процедурное управление (выдача запроса и ожидание ответа) удобно только применительно к жестким управляющим последовательностям. 4. Изолируйте физические события от логических.
Часто логическое событие может соответствовать множеству физических событий. Например, графический интерфейс может получать входные данные из формы, контекстного меню, от функциональной клавиши, введенной последовательности команд или из файла. 5.
Полностью описывайте функции приложения, вызываемые интерфейсом. Убедитесь, что в модели имеется достаточно информации для их реализации. 14.12.4. Динамическое моделирование Динамическое моделирование (дупаппс з1шц!аг1оп) — это моделирование, или отслеживание, объектов реального мира. В качестве примеров можно привести моделирование траекторий движения молекул, расчет траекторий космических кораблей, экономические модели и видеоигры. Моделирование проще всего проектировать с использованием объектно-ориентированных технологий.
Объекты и операции берутся непосредственно из модели приложения. Управление может быть реализовано двумя способами: внешний управляющий объект может имитировать конечный автомат, либо же объекты могут обмениваться сообщениями между собой, как и происходит в реальном мире. В отличие от интерактивной системы, внутренние объекты при динамическом моделировании соответствуют объектам реального мира, поэтому модель классов 310 Глава 1ч ~ Проектирование системы в таких задачах имеет сушественное значение и часто получается достаточно сложной. Модели состояний и взаимодействия также важны. Динамическая модель проектируется в следующей последовательности.
1. Идентифицировать активные объекты реального мира в модели классов. Эти объекты обладают периодически обновляемыми атрибутами. 2. Идентифицировать дискретные события. Дискретные события соответствуют дискретным взаимодействиям объектов, таким как включение питания или нажатие на тормоз. Дискретные события могут быть реализованы в виде операций над объектами. 3. Идентифицировать непрерывные зависимости. Атрибуты реального мира могут зависеть от других атрибутов или непрерывно изменяться со временем, как, например, высота, скорость или положение рулевого колеса.
Эти атрибуты должны обновляться через периодические промежутки времени с использованием методик аппроксимации для минимизации погрешностей квантования. 4. Обычно модель управляется циклом с небольшим шагом по времени. Дискретные события между объектами также часто включаются в этот цикл. Обычно самое сложное при динамическом моделировании — обеспечить адекватную производительность. В идеальном мире произвольное количество параллельных процессоров могло бы выполнять моделирование в точном соответствии с тем, как события развиваются в реальном мире. На практике проектировщику приходится оценивать вычислительную стоимость каждого цикла и обеспечивать систему достаточными вычислительными ресурсами. Непрерывные процессы приходится аппроксимировать дискретными шагами. 14.12.5.