М. Фаулер, К. Скотт - UML Основы (1114905), страница 30
Текст из файла (страница 30)
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) Большинство рассмотренных понятий могут быть преобразованы в классы языка дача. Понятия Пациент, Тип Показателя, Показатель, Единица Измерения и Количество преобразуются без проблем. Проблема возникает только с понятиями Диапазон и Наблюдение. Проблема с Диапазоном обусловлена тем, что мне нужно сформировать количественный диапазон для Показателя. Это можно было бы осуществить, создав интерфейс «величина» и установив, что Количество реализует данный интерфейс, но это привело бы к определенным трудностям. В языке Бша11Са1к подобных проблем не возникает, да и в языке С++ для этой цели можно воспользоваться параметризованными типами. Что касается данного примера, то здесь целесообразно использовать класс КоличественныйДиапазон, который, в свою очередь, использует образец «Диапазон«.
Наблюдение пациента: модель предметной области 155 Рие. 11.3. Другая диаграмма обэентов наблюдения нациенога Проблема, связанная с Наблюдением, заключается в том, что Наблюдение одновременно может быть Категорией Наблюдения и Измерением (рис.
11.3). В языке дача, как и в большинстве других языков программирования, можно определить только одну классификацию. Я решил эту проблему, допустив, что любое Наблюдение должно иметь ассоциированный с ним Показатель, который позволяет классу Наблюдение аффективно реализовывать как понятие Наблюдение, так и понятие Категория Наблюдения. Хотя эти решения далеки от совершенства, тем не менее, они позволяют выполнить намеченную работу, Не пытайтесь создать программное обеспечение, которое в точности отражало бы концептуальную точку зрения. Напротив, следует придерживаться не буквы, а духа концептуальной модели, учитывая при этом ограничения имеющихся средств реализации.
156 Глава 11. Язык 0М~ и программирование Наблюдение пациента: модель спецификации На рис. 11.4 отражены модификации, которые внесены в модель предметной области, чтобы учесть некоторые из факторов, связанных с языком реализации. Рис. 11.4. Модель наблюдения пациента уровня спецификации Модель наблюдения пациента представлена здесь с точки зрения спецификации. На ней указаны скорее интерфейсы классов, чем сами классы.
Можно было бы поддерживать эту концептуальную модель и далее, но более вероятно, что начиная с етого момента, я буду работать только с моделью спецификации. Я не стараюсь поддерживать слишком много моделей. Мое личное правило состоит в следующем: если я не могу поддерживать модель посредством внесения в нее необходимых обновлений, то она отправляется в корзину. (Я знаю, что я к тому же ленив!) Теперь рассмотрим поведение, ассоциированное с нашей моделью наблюдения пациента (рис. 11.5).
Наблюдение пациента: модель спецификации 157 Рис. 11.Б. Операции модели наблюдения пациента Первый сценарий запрашивает последние данные о сердечном ритме пациента. В связи с этим возникает первый вопрос: кто должен нести ответственность за выполнение этого запроса2 Естественным ответом представляется Пациент. Пациент должен просмотреть все свои наблюдения, выбрать из них измерения с Типом Показателя «сердечный ритм» и найти среди них самое последнее значение.
Чтобы сделать это, необходимо добавить в Измерение момент времени. Поскольку аналогичные рассуждения могут быть применены и к другим наблюдениям, я также добавлю момент времени и в Наблюдение. Пациент имеет такую же ответственность по отношению к Показателю: Найти последнюю Категорию Наблюдения, которая обладает Показателем для данного Типа Показателя. На рис. 11.5 показаны те операции, которые были мною добавлены к классу Пациент, чтобы отразить в модели все сказанное выше. 158 Глава Ц. Язык ОМ1.
и программирование Не пытайтесь слишком тщательно определять операции, если на данный момент они не являются совершенно очевидными. Самое важное сейчас — это установить ответственность. Если вы можете облечь ее в форму операции, то это прекрасно; в противном случае для описания ответственности вполне достаточно и короткой фразы.