Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 15
Текст из файла (страница 15)
3.27). Учреждение может открыть множество счетов для кредитных карт, каждый из которых будет идентифицироваться номером счета. Каждый счет характеризуется максимальным кредитом, текущим балансом и почтовым адресом. Счет может принадлежать одному или нескольким клиентам, проживающим по данному адресу. Учреждение периодически рассылает отчеты по счетам. В отчете указывается дата платежа, стоимость всех элементов кредита и минимальный платеж. Кроме того, перечисляются транзакции, которые были осуществлены за отчетный период: получение наличных, процентные платежи, покупки, штрафы и корректировки. Для каждой покупки указывается название магазина. Ма!!!пВАббгеаа ! !пащобоп СгебИСап1Ассосп1 ассоопгмотЬе паве аббгеаа рлопеыитьег аббгеаа рьопеысвЬег тах!татСгебд сспепгва!апсе О..! а1а!етеп10а!е ! О..! ассосп!Но!бег Тгапеаспоп 81агепгеп1 Соа!отег 1 О..! ггапаасбопмсгпЬег !гапаасбопОаге ехр!апа1яв атосп1 раутеп!ОсеОа!е ПпапсеСПагце в!п!тотРаутеп! пассе Аб!се!тел! Ригспаае !п1егеа1 СааЬАбуапсе геатуре Мегспапг пате Рис.
3.27. Модель классов для управления счетами кредитных карт оконной системы. Между окнами должны быть ассоциации, например, они могут перекрывать одно другое. Тем не менее эта простая модель даст вам некоторое ощущение того, что должна представлять собой модель классов. Мы можем критиковать ее, потому что она содержит в себе некоторьге четкие утверждения.
Такая модель могла бы послужить основой для создания более полной модели. 3.5. Навигация моделей классов 67 Описанную модель можно протестировать, задавая различные вопросы. ° Какие транзакции были проведены по данному счету за определенный промежуток времени? ° Какой объем транзакций был обработан учреждением за последний год? ° Какие клиенты пользовались кредитными картами для оплаты покупок в конкретном магазине? ° Сколько счетов для кредитных карт имеет конкретный клиент в данный момент? ° Каков максимальный кредит для данного клиента по всем его счетам? В состав ()МЕ входит специальный язык для выражения вопросов такого рода. Этот язык называется объектным языком ограничений (ОЪ|есг Сопзгга1пг Еапйцайе — ОСВ) [ЪЪ'агшег-99!.
Мы опишем его в следуюших двух разделах, а в разделе 3.5.3 переформулируем приведенные выше вопросы на ОСЕ. Разумеется, мы не пытаемся дать полное описание этого языка, мы расскажем только о том, что нужно для прослеживания моделей. 3.5.1. ПРОСлЕживаниЕ мОДЕлЕй с помощью конструкций ОС~ Язык ОСЕ позволяет прослеживать конструкции в моделях классов. ° Атрибуты. ОСЕ позволяет переходить от объекта к значениям его атрибутов.
Используется следующий синтаксис сначала указывается имя объекта, после которого ставится точка, а затем имя атрибута. Например, выражение аСтедЫСатИАссоипг.таитит Стейт означает значение атрибута талтитСгеейг объекта класса СгейгСапИссоилг. Мы ставим перед именем класса артикль а, если хотим обозначить произвольный объект ланного класса. Тем же способом можно обратиться к атрибуту каждого объекта в совокупности, получив совокупность значений атрибутов. Можно получить значение атрибута для связи или совокупность значений атрибутов для совокупности связей. ° Операции. Можно вызвать операцию для некоторого объекта или совокупности объектов. Используется следуюший синтаксис: сначала указывается имя объекта или совокупности объектов, после которого ставится точка, а затем имя операции.
За именем операции должны следовать круглые скобки, даже если у данной операции нет никаких аргументов. Это необходимо для того, чтобы иметь возможность отличать операции от атрибутов. Вы можете вызывать не только операции, определенные в вашей модели классов, но и предопределенные операции языка ОСЪ.
В ОС) имеются специальные операции, которые применяются к совокупности в целом (а не к отдельным объектам этой совокупности). Например, вы можете посчитать количество объектов совокупности илн просуммировать совокупность численных значений. Для таких операций используется следуюший синтаксис: сначала указывается имя совокупности объектов, затем ставится знак «-», после которого указывается имя операции. 68 Глава 3 ° Моделирование классов ° Простые ассоциации.
Точка используется также для прослеживания ассоциации и перехода к целевому полюсу. Целевой полюс может быть задан его именем или именем класса, если это не создает неоднозначности. В нашем примере выражение аСияотетМа!!(пйАЙ(тезз возврашает множество адресов клиента (целевой полюс обладает кратностью «много»). С другой стороны, выражение аСтег(!1Сатс(АссоипбМа!!!пдА0т(тезз возвратит один адрес (целевой полюс обладает кратностью «один»).
° Квалифицированные ассоциации. Квалификатор делает прослеживание ассоциаций более точным. Выражение аСтейсСатг(Ассоипд5гагетепг(30 №иетбет 19991 возвращает отчет по счету для кредитной карты, датированный 30 ноября 1999 года. Значение квалификатора указывается в квадратных скобках. Квалификатор можно игнорировать. При этом квалифицированная ассоциация будет прослеживаться так же, как и обычная.
Таким образом, выражение аСтейгСатИАссоипд3гагетепг возвратит все отчеты для данного счета. (Когда квалификатор не используется, кратность принимает значение «много».) ° Классы ассоциаций. По связи, представляющей собой экземпляр класса ассоциации, можно найти участвующие в этой связи объекты. И наоборот: по участвуюшему в связи объекту можно найти связи, являющиеся экземплярами класса ассоциации. ° Обобщения.
Прослеживание иерархии обобшений встроено в систему обозначений ОС(. неявным образом. ° Фильтры. Часто возникает необходимость отфильтровать объекты из некоторого множества. В ОС1. имеются фильтры нескольких типов. Наиболее широко используется операция зе!есп Эта операция применяет некоторый предикат к каждому элементу совокупности и возвращает все элементы, удовлетворяющие данному предикату. Например, выражение а5татетеппттапзаст!оп-)зе!ест(Атоипт>5100) возвращает все транзакции одного отчета, величина которых превышает 100 долларов. 3.5.2.
Построение выражений ОС~ Эффективность ОС(. обусловлена возможностью построения сложных выражений из простых конструкций. Например, выражение ОС(. может последовательно прослеживать несколько ассоциаций. В нем может быть несколько квалификаторов, фильтров, операторов и т. д. Прослеживание одной ассоциации от объекта возвращает одно- или многоэлементное множество (или мультимножество, если ассоциация является мульти- множеством или последовательностью).
В обшем случае прослеживание нескольких ассоциаций может дать в результате мультимножество (в зависимости от кратности этих ассоциаций), поэтому с выражениями ОС1. следует обрашаться аккуратно. Множество — это совокупность уникальных элементов, а мультпмножество допускает наличие дубликатов. Пример на рис. 3.28 иллюстрирует тот факт, что выражение ОС(. может возвратить мультимножество. Предположим, что компания хочет отправить по 3.5. Навигация моделей классов 69 одному письму на каждый адрес, принадлежащий какому-либо держателю акций.
Мы начинаем прослеживать ассоциации с компании ОЕ. Прослеживание ассоциации Онп)з5гос» дает нам множество из трех человек. Прослеживая ассоциацию от этих троих к их адресам, мы получаем мультимножество, в котором адрес 456 5га~е встречается дважды. диаарамма ) Ма)1)подов)евв «ласса ~ авагевв Рвгвоп Омпая)оса Согпрапу пап)е пагпе Доаараммв ооь ванов рис. 3.28. Прослеживание нескольких ассоциаций может возвратить мультимножество 3.5.3. Примеры выражений ОС~ Воспользуемся языком ОС)., чтобы ответить на поставленные выше вопросы для модели, описывающей счета для кредитных карт. ° Какие транзакции были проведены по данному счету за определенный промежуток времени? асгепггсагсО~ссоопг.ягагепепг.тгапаасггоп->аетесг(азгаггоаге <- ггапаасгзопраге апо ггапаасггопоаге <= апкпоэаге) В книге ГгЪ'аг)пег-99) ничего не говорится о пустых значениях, поскольку там обсуждаются только вопросы, связанные со спецификацией ограничений на корректно реализованную систему.
(№И — это особое значение, указывающее на то, что значение атрибута неизвестно или неприменимо.) В этой книге ничего не говорится об обработке исключений и ошибок времени выполнения. В этой главе мы хотим обсудить навигацию по классам, а не спецификацию ограничений. Пустые значения не появляются в правильных ограничениях, но при навигации по моделям они встречаются достаточно часто. Например, у человека может не быть почтового адреса. Мы расширяем определение выражений ОС)., допуская существование пустых значений. Прослеживание может возвратить пустое значение, и выражение ОСЕ возвратит вам то же значение, если объект окажется пустым. УО Глава 3 ° Моделирование классов В данном выражении осуществляется переход от объекта класса СгейгСаг(1Ассоипг к объекту 5гагетепд а затем к Тгапзасиоп, в результате чего возвращается множество транзакций.
Мы получаем именно множество, а не мультимножество, потому что обе ассоциации принадлежат к типу один-ко-многим. Затем при помощи оператора ОС). 5е1есг, применяемого к множеству в целом, мы находим транзакции, осуществлявшиеся на заданном интервале, ограниченном датами а5гаггОасе и апЕп(Маге. ° Какой объем транзакций был обработан учреждением за последний год? апгпвгггпг1оп.Сгеб1сСагбассоппг.5Сагеаепг.тгапвасггоп->зе1есс(а5СагСОаге <= сгапвассгопоасе апб сгапвасс1опоасе <= апепбоасе).ааоппс->все() В выражении осуществляется переход от объекта 1пзт(Гиг(оп к СгейгСатй Ассоипй затем к 5татетепй а затем к Тгапзас6оп.
В результате получается множество, а не мультимножество, потому что все ассоциации имеют тип один-ко-многим. Оператор зе1есг выбирает транзакции, попадающие во временной интервал между а5тагГОате и апЕпЮате. 1Мы решили сделать запрос более общим, нежели просто «за последний года.) Затем мы определяем сумму каасаой из транзакций и суммируем все полученные величины при помощи оператора ОС) зит, действующего на множество в целом. ° Какие клиенты пользовались кредитными картами для оплаты покупок в конкретном магазине? аиегсъапггсгсьаве->ве1есг(азгаггоаге <= Сгапвасггопоаге апб сгапвассгопоасе < апепбоасе).5сасееепс.сгебгссагбассоппс.