М. Фаулер, К. Скотт - UML. Основы - 2002 (1158629), страница 30
Текст из файла (страница 30)
Например, класс Слзрока в языке дача является частью пакета затга.!апя, но он может быть обнаружен в ряде компонентов. Зависимости между компонентами показывают, как изменения одного компонента могут повлиять на изменения других компонентов.
Существует довольно ограниченное количество видов зависимостей, которые можно использовать, включая зависимости типа связь и компиляция. Я часто применяю эти виды зависимостей для представления связей компонентов между собой. Объединение диаграмм компонентов и развертывания Хотя диаграммы развертывания и диаграммы компонентов можно изображать отдельно, также допускается помещать диаграмму компонентов на диаграмму развертывания, как показано на рис.
10.1. Это целесообразно делать, чтобы показать какие компоненты выполняются и на каких узлах. Так, например, на данной диаграмме компоненты Пользовательский Интерфейс Отделения Заболеваний Печени и Фасад Клиента Отделения Заболеваний Печени исполняются на ПК под управлением ОС 1йГ1пботзгэ. Компонент Пользовательский Интерфейс Отделения Заболеваний Печени зависит от компонента Фасад Клиента Отделения Заболеваний Печени, поскольку он обращается к конкретным методам этого Фасада. Хотя связь является двунаправленной в том смысле, что Фасад возвращает данные, компонент Фасад не знает, кто его вызывает, и поэтому не зависит от компонента Пользовательский Интерфейс.
С другой стороны, связь между двумя компонентами Предметная Область Медицинской Помощи является двунаправленной, поскольку каждый из них знает, какому компоненту он передает данные. Однако эти компоненты выполняются на отдельных узлах. Компонент может иметь более одного интерфейса, при этом в каждом случае видно„какие компоненты взаимодействуют с тем или иным интерфейсом.
На рис. 10.1 серверная часть приложения имеет два интерфейса. Один интерфейс используется фасадом приложения во время его исполнения на ПК, другой интерфейс используется компонентом конфигурирования во время его исполнения на сервере. Факт использования нескольких компонентов Предметная Область Медицинской Помощи скрыт от своих клиентов. Каждый компонент 1бо Глава 10. Физические диаграммы Предметная Область Медицинской Помощи имеет свою локальную базу данных. Разработчики часто изображают на физических диаграммах специальные символы, которые по своему внешнему виду напоминают различные элементы.
Например, применяются специальные пиктограммы для серверов, ПК и баз данных. В рамках языка ПМ1 это вполне допускается: каждую из пиктограмм можно рассматривать как стереотип соответствующего элемента диаграммы. Обычно такие пиктограммы способствуют лучшему пониманию диаграммы, хотя и усложняют ее, если одновременно изображаются узлы и компоненты, как на рис. 10.1. Когда использовать физические диаграммы Многие разработчики творчески подходят к использованию этого вида информации, однако другие строят эти диаграммы формально с целью соответствия стандартам языка ПМ1. Сам я разрабатываю эти диаграммы всякий раз, когда хочу представить физическую информацию, которая отличается от соответствующей логической информации. В большинстве случаев я рисую по меньшей мере одну диаграмму, на которой показаны узлы и основные компоненты в стиле рис. 10,1.
При этом я стараюсь использовать графические пиктограммы, если зто не приводит к излишнему усложнению диаграммы. Язык 0М~ и программирование Итак, мы практически полностью рассмотрели нотацию языка СМ1.. Остался один большой вопрос: как обычный программист может реально использовать язык СМЕ в повседневной однообразной работе? Попытаюсь ответить на этот вопрос, повествуя о том, как я сам использую язык БМ~. при программировании, хотя и в небольшом масштабе.
Я не буду слишком вдаваться в детали, но надеюсь, это поможет вам понять, что можно делать с помощью языка Т1М1.. Представим себе компьютерную систему, которая проектируется для сбора информации о пациентах больницы. Различные специалисты-медики наблюдают своих пациентов. Эта несложная система позволит каждому из них получать информацию о проведенных наблюдениях и вводить новую информацию. Поскольку объем данной книги ограничен, я не буду касаться базы данных и пользовательского интерфейса, а рассмотрю только основные классы предметной области. Пример настолько прост, что может быть описан единственным вариантом использования под названием ~просмотр и ввод данных наблюдения пациентов». Мы можем конкретизировать его с помощью следующих сценариев: ° Запросить последние данные сердечного ритма пациента.
° Запросить группу крови пациента. ° Обновить данные аб уровне сознания пациента. 152 Глаза 11. Язык ОМ~ и программирование ° Обновить данные о сердечном ритме пациента. Система определяет ритм как медленный, нормальный или быстрый в соответствии с заданными в системе диапазонами. Мой первый шаг в этом процессе состоит в разработке концептуальной модели, которая описывает понятия данной предметной области.
На этой стадии я не задумываюсь, как будет реализовано соответствующее программное обеспечение, а думаю только о том, как выстроить систему понятий в представлении докторов и медсестер. Я начну с модели, основанной на нескольких образцах анализа из моей книги (Фаулер, 1997(18)): «Наблюдение» (ОЬзегзга((оп), «Количество» (ь(иапЫ$у), «Диапазон» (Канне) и «Показатель с диапазоном» (РЬепопзепоп ««ЫЬ Ванне).
Наблюдение пациента: модель предметной области На рис. 11.1 показана начальная модель предметной области для нашей системы. Каким образом эти понятия представляют информацию о данной предметной области7 Я начну с самых простых понятий: Количество, Единица и Диапазон. Количество представляет собой значение, обладающее размерностью, например 6 футов — количество, величина которого равна 6, а единица измерения — фут.
Единицы просто представляют собой те категории измерения, которые нужны нам для работы. Диапазон позволяет рассматривать их как единичное понятие, например, диапазон от 4 до 6 футов представляется как единственный объект «Диапазон с верхней границей 6 футов и нижней границей 4 фута». В общем случае диапазоны могут быть выражены в терминах, допускающих сравнение (с использованием операторов <, >, <=, >= и =), таким образом, и верхняя и нижняя границы некоторого Диапазона являются некоторыми величинами (Количество представляет собой разновидность величины). Каждое выполненное доктором или медсестрой наблюдение представляет собой экземпляр понятия Наблюдение и является либо Измерением, либо Категорией Наблюдения. Таким образом, измерение роста в 6 футов для Мартина Фаулера следует представить как экземпляр Измерения.
С этим Измерением ассоциированы величина «6 футов», Тип Показателя «рост» и Пациент по имени Мартин Фаулер. Типы Показателей представляют собой измеримые величины: рост, вес, сердечный ритм и т. д. Некоторое наблюдение, согласно которому Мартин Фаулер имеет группу крови О, следует представить как Категорию Наблюдения, с которой 153 Наблюдение пациента: модель предметной области Рис. 13Л. Модель предметной области наблюдения пациента ассоциирован Показатель «группа крови 0». Этот Показатель в свою очередь связан с Типом Показателя «группа крови». Диаграмма объектов на рис.
11.2 может несколько прояснить данную ситуацию. Рис. 11.3 иллюстрирует, что можно выполнить Наблюдение, которое служит одновременно Измерением и Категорией Наблюдения. Основой етого факта служит то, что Измерение «90 ударов в минуту» может также являться Категорией Наблюдения, с которой связан Показатель «быстрый сердечный ритм».
154 Гпаэа11. Язык 0М~ и программирование Рие. 11.2. Диаграмма объектов наблюдения пациента На данной стадии мною рассмотрены только сами понятия без учета их поведения. Я не всегда поступаю именно так, однако данное представление оказывается подходящей отправной точкой для решения задачи, связанной главным образом с информацией.
Мною до сих пор рассматриваются понятия, связанные с наблюдением пациентов, как если бы я имел дело с доктором или медсестрой. (На самом деле, все так и есть. Концептуальные модели были построены с моей помощью парой докторов и медсестрой.) Чтобы перейти к объектно-ориентированному программированию, необходимо решить, как рассматривать это концептуальное представление в терминах программного обеспечения.
(Должен же я как-нибудь вставить в эту книгу код на Лача1) Большинство рассмотренных понятий могут быть преобразованы в классы языка дача. Понятия Пациент, Тип Показателя, Показатель, Единица Измерения и Количество преобразуются без проблем. Проблема возникает только с понятиями Диапазон и Наблюдение. Проблема с Диапазоном обусловлена тем, что мне нужно сформировать количественный диапазон для Показателя.