Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uml Book (Rus).doc
Скачиваний:
15
Добавлен:
11.08.2019
Размер:
58.74 Mб
Скачать

Типичные приемы моделирования Несколько потоков управления

Построение системы с несколькими потоками управления - непростая задача. Надо не только решить, как лучше всего распределить работу между параллельны­ми активными объектами, но и продумать правильные механизмы (см. главу 28) коммуникации и синхронизации между активными и пассивными объектами в сис­теме, гарантирующие правильность их поведения в присутствии нескольких пото­ков управления. Поэтому полезно визуализировать способы взаимодействия этих потоков между собой. В UML это можно сделать с помощью диаграмм классов (для описания статической семантики) и диаграмм взаимодействия (для описания ди­намической семантики), в которых участвуют активные классы и объекты. г,. Моделирование нескольких потоков управления осуществляется так:

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

2. Рассмотрите баланс распределения обязанностей между активными класса­ми (см. главы 4 и 9), а затем исследуйте, с какими другими активными и пас­сивными классами статически кооперируется каждый из них. Убедитесь, что каждый активный класс имеет внутреннюю структуру с высокой степенью связаности и слабо связан с соседними классами, и что для каждого класса правильно выбран набор атрибутов, операций и сигналов.

3. Отобразите статические решения в виде диаграмм классов, явно выделив каждый активный класс.

4. Рассмотрите, как каждая группа классов динамически кооперируется с про­чими. Отобразите свои решения на диаграммах взаимодействия. Явно пока­жите активные объекты как начальные точки соответствующих потоков управления. Идентифицируйте каждую связанную последовательность присваивая ей имя активного объекта.

5. Обратите особое внимание на коммуникации между активными объектами Пользуйтесь по мере необходимости как синхронными, так и асинхронны­ми сообщениями.

6. Обратите внимание на синхронизацию активных объектов и тех пассивных объектов, с которыми они кооперируются. Применяйте наиболее подходя­щую семантику - последовательную, охраняемую или параллельную.

На рис. 22.4 показана часть вида трейдерской системы с точки зрения про­цессов. Вы видите три объекта, которые параллельно питают систему информа­цией: StockTicker (БиржевойТикер), indexWatcher (наблюдательИцдекса) и CNNNewsFeed (НовостнаяЛентаСКМ), названные соответственно s, i и с. Два из них, s и i, обмениваются каждый со своим экземпляром класса Analyst (Ана­литик) - а1 и а2. В рамках этого небольшого фрагмента модели класс Analyst может быть спроектирован в упрощенном виде - из расчета на то, что в каждый момент времени в любом из его экземпляров может быть активен только один поток управления. Однако оба экземпляра класса Analyst одновременно обща­ются с объектом AlertManager (ДиспетчерОповещений), которому мы дали имя т. Следовательно, m необходимо спроектировать так, чтобы он сохранял свою се­мантику в присутствии нескольких потоков управления, тис одновременно об­щаются с t - объектом класса TradingManager (управляющийТрейдингом). Каждому соединению присвоен порядковый номер, определяемый тем, какой по­ток управления им владеет.

Примечание Диаграммы взаимодействия, подобные представленной выше, по­лезны для визуализации тех мест, где два потока управления могут пересекаться и где, следовательно, необходимо обратить особое внимание на проблемы коммуникации и синхронизации. Инструмен­тальным программам разрешается реализовывать и дополнитель­ные визуальные указания, например раскрашивать потоки в раз­ные цвета.

К подобным диаграммам часто присоединяют автоматы (см. главу 21) с ортого­нальными состояниями, чтобы детально показать поведение активных объектов.

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