Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 53
Текст из файла (страница 53)
Квалификатор ЬапЬСог!е (кодБанка) позволяет отличать друг от друга банки, входящие в состав консорциума. Каждая карта должна иметь банковский код, чтобы транзакции можно было направлять в выдавший ее банк. ° Кратность. Этот параметр ассоциаций указывать нужно, но не старайтесь определить его точно на первом этапе моделирования. Кратность часто изменяется в процессе анализа, Проверяйте ассоциации с кратностью «один».
Например, ассоциация опе Мапаяег тапайез тапу етр(оуеех (один Менеджер руководит множеством сотрудников) не позволит создать матричную систему управления или описать сотрудника, отвечающего перед несколькими начальниками. Подумайте о необходимости введения квалификаторов для ассоциаций с кратностью «много», а также об упорядоченности объектов. ° Недостающие ассоциации. Добавьте все пропущенные ассоциации, которые вам удастся обнаружить. Пример с банкоматом. Мы пропустили Тгапхасбоп епгегег! оп сазЬ|ег хгайоп (Транзакция вводится на кассе), Сизготегз Ьаие ассоипт (Клиенты имеют счета) и Тгапзасйоп аигЬогаег! Ьу сазЬ сагг! (Транзакция авторизуется картой). 12.2.
Модель классов предметной области 231 ° Агрегация. Агрегация важна для некоторых видов приложений, в частности для описания деталей механизмов н спецификаций материалов. Для других приложений важность агрегации не столь велика, и не всегда бывает понятно, следует ли ее использовать вместо обычной ассоциации. Не тратьте слишком много времени на определение типа ассоциации. Выберите то, что сразу покажется вам более правильным, и двигайтесь дальше. Пример с банкоматом. Мы считаем Ви~й (Банк) частью СотоПгцт (Консорциума) и обозначаем отношение между ними как агрегацию. Пример с банкоматом. На рис.
12.9 приведена диаграмма классов с нанесенными на нее ассоциациями. Мы указали имена только для наиболее важных ассоциаций. Обратите внимание, что мы разделили Тгапзисйоп на КетогеТгалзасгюп н Сазй1егТганзасгюп, чтобы создать разные ассоциации с их участием. На диаграмме указаны значения кратности. Некоторые решения были произвольными.
Не стоит беспокоиться об этом: сушествует множество корректных моделей задачи. Мы разбираем процесс анализа с точностью до мелочей. Когда вы приобретете достаточный опыт, вы будете выполнять сразу несколько этапов в уме. Рмс. 12.9. Исходная диаграмма классов для банкомата 12.2.6. Выделение атрибутов Теперь пришло время заняться выделением атрибутов.
Атрибуты — это свойства объектов, такие как вес, скорость илн цвет. Значения атрибутов не должны быть объектами; чтобы показать отношение между объектами, следует использовать ассоциации. Атрибуты обычно присутствуют в описании задачи в виде сушествительных, участвуюших в притяжательных оборотах, наподобие ацвет машины» или 232 Глава 12 ° Анализ предметной области «положение курсора». Прилагательные часто соответствуют конкретным значениям атрибутов-перечислений (например, «красный», «включен», «устарел»).
В отличие от классов и ассоциаций атрибуты вряд ли будут полностью перечислены в описании задачи. Вам придется опираться на свое знание области задачи и реального мира, чтобы выделить их все. Атрибуты также присутствуют в артефактах родственных систем. К счастью, атрибуты редко влияют на базовую структуру задачи. Не доводите процесс выделения атрибутов до абсурда. Рассматривайте только те из них, которые имеют непосредственное отношение к приложению. Сначала займитесь наиболее важными атрибутами, мелкие детали можно будет добавить в модель позже. В процессе анализа не тратьте время на детали реализации. Обязательно давайте всем атрибутам значашие имена.
Обычно производные атрибуты включать в модель на этом этапе не следует. Например, возраст можно определить по дате рождения и текущей дате (последняя является свойством окружения). Не выражайте производные атрибуты через операции (например, вычислитьВозраст), пусть даже реализация их этим способом вполне допустима. Ищите атрибуты и для ассоциаций. Эти атрибуты являются свойствами связей между объектами, а не свойствами индивидуальных объектов. Например, ассоциация «многие-ко-многим» между 5гос)гйоЫег (ДержательАкций) и Сатрапу (Компания) имеет атрибут питЬегО/5Ьагез (количествоАкций).
12.2.7. Удаление лишних атрибутов Исключите ненужные и некорректные атрибуты, руководствуясь следующими критериями. ° Объекты. Если важной чертой элемента является независимое существование, то этот элемент — объект (а не атрибут). Например, босс — это класс, а зарплата — атрибут. Разница часто зависит от приложения. Например, в списке рассылки город может быть атрибутом, тогда как в Переписи населения Город будет классом с множеством атрибутов и отношений.
Элемент, обладаюший собственными чертами в рамках данного приложения, должен моделироваться как класс. ° Квалификаторы. Если значение атрибута зависит от конкретного контекста, его можно попробовать переформулировать в виде квалификатора. Например, номерСотрудника — это не уникальная характеристика человека, занятого на двух работах, это, скорее, квалификатор ассоциации «Компания нанимает сотрудника». ° Имена. Имена лучше моделировать как квалификаторы, а не как атрибуты.
Ответьте на следуюшие вопросы: служит ли имя для выбора уникального объекта из множества? Может ли объект, принадлежаший множеству, иметь более одного имени? Если ответ положительный, имя служит квалификатором ассоциации. Если имя кажется уникальным, возможно, вы забыли добавить в модель класс, для которого оно служит квалификатором. 12.2. Модель классов предметной области 233 Например, названиеОтдела может быть уникально в рамках компании, но когда-нибудь вам придется работать с несколькими компаниями. Лучше сразу использовать соответствующую квалифицированную ассоциацию.
Имя является атрибутом в том случае, если его использование не зависит от контекста, в особенности если оно не уникально в некотором множестве. Имена людей, в отличие от названий компаний, могут повторяться, а потому являются атрибутами. ° Идентификаторы.
Объектно-ориентированные языки используют понятие идентификатора объекта для обозначения однозначной ссылки на объект. Не следует включать в модель атрибут, единственным назначением которого является идентификация, потому что идентификаторы присутствуют в моделях классов неявным образом. Перечисляйте только те атрибуты, которые присутствуют в области приложения. Например, кодСчета — это настоящий атрибут, потому что банк назначает каждому счету свой код, а клиент видит этот код. Напротив, внутренний идентификаторТранзакции не является атрибутом, хотя на этапе реализации его использование может быть выгодно. ° Атрибуты ассоциаций.
Если существование значения требует сушествования связи, соответствуюшее свойство является атрибутом ассоциации, а не одного из связанных ею классов. Атрибуты обычно достаточно ясно выделяются из ассоциаций «многие-ко-многимго их нельзя прикрепить нн к одному из классов из-за их кратности. Например, атрибут датаВступления принадлежит ассоциации между Человеком и Клубом, потому что человек может принадлежать к нескольким клубам, а клуб может иметь несколько членов.
Ассоциации «один-ко-многим» детализировать сложнее, потому что тут можно прикрепить атрибут к одному из классов без потери информации. Сопротивляйтесь этому желанию, потому что если кратность изменится, модель станет некорректной. Те же проблемы возникают и с ассоциациями типа «один-к-одному». ° Внутренние значения. Если атрибут описывает внутреннее состояние объекта, невидимое снаружи, его следует исключить из аналитической модели. ° Лишние детали.
Исключите незначительные атрибуты, не влияющие на большинство операций. ° Нетипичные атрибуты. Атрибут, полностью отличаюшийся от всех остальных и не связанный с ними, может указывать на то, что класс, к которому он относится, следует разделить на два разных класса. Класс должен быть простым и цельным. Смешивание разных классов — одна из основных причин появления ненадежных моделей. Нечетко определенные классы часто бывают результатом слишком раннего принятия решений, касаюшихся реализации.
° Логические атрибуты. Рассмотрите все логические атрибуты еше раз. Часто логический атрибут можно расширить и переформулировать в виде перечисления [Соа«1-951. 234 Глава 12 ° Анализ предметной области ° ЬалЬСог2е (кодБанка) и сагггСогге (кодКарты) хранятся на карте.
Их формат зависит от реализации, но мы обязаны, по крайней мере, создать ассоциацию ВалЬ мзиез СазЬСапУ (Банк выдает КредитнуюКарту). Код карты становится квалификатором атой ассоциации, а код банка — квалификатором банка по отношению к консорпиуму. ° Состояние компьютеров не имеет отношения к нашей задаче. Включенное или выключенное состояние компьютера — это атрибут, являющийся частью реализации. ° Нам пришлось справиться с искушением исключить из модели Солзогггит (Консорциум), несмотря на то, что он присутствует в ней в единственном числе.
Этот класс обеспечивает контекст для квалнфикатора ЬалзСойе (кодБанка) и может быть полезен для дальнейшего расширения. Не забывайте о том, что наш пример с банкоматом — это всего лишь пример. В реальных приложениях после завершения построения модели количество атрибутов у каждого класса значительно больше, чем в нашем случае (см.
рис. ! 2.10). !ззиез 1 сап! 0 Л Соде Вапх 1 пате в1аеоп Соде 1 ассонп! Соде етр!оуее Соде 1 О. 1 1 Сив!отег пате аббгевв Сопвогвнт Ьап!г Соде ! Ассоип! Ьа!апсе сгедамт!! !уре Етргоуз 0..1 Соттип!са!еь 1 ИФЙ Вапх ьапх Соде 1 Сеп!га! Сотрщег Савв |ег 0 1 Сотри!ег пате в1а!юп Соде Соттилгсагез 1 ИЗГЬ 0 1 вга!!Оп Соде Елгегебву 0..1 СаввпегТгапвасвоп Савп|егв!аноп ЕпгегебОп Соттип!сагез ИЗГп Мпб да!еТ!те апюнп! 0.,1 ЕпгегедОп АТМ СавЬСагд !зете!етгапвас!!оп Лтлолхедву 1 раввпогд Ыпб ба!еТ!те агпонп! саьЬОпнапб Рис.
12.10. Модель классов банкомата с атрибутами Пример с банкоматом. Прилгеним зти критерии к нашему примеру, чтобы получить список атрибутов для каждого класса (рис. 12.10). Некоторые потенциальные атрибуты стали квалификаторами ассоциаций. Мы рассматриваем несколько аспектов модели. 12.2. Модель классов предметной области 235 12.2.8.