Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 52
Текст из файла (страница 52)
Рис. 12.6. Словарь данных для задачи о банкомате 12.2. модель классов предметной области 227 Пример с банкоматом. Мы можем исключить ассоциации ВапЫпВ пегтпой тс(иг)ез сазМегзгаггопз аль А ТМз (банковская сеть содержит кассиров и банкоматы), А ТМ йрепзез сай (банкомат выдает наличные), А ТМ рпптз гесегртз (банкомат печатает чеки), ВапЬ ргоиггуе ю/гтгаге (банки предоставляют программное обеспечение), Созг арроггюпегу го ЬапЬ (стоимость распределяется между банками), 5узгет ргоглггез гесо~Яеертд (система обеспечивает ведение записей) и 5узгет ргоиЫез зесилгу (система обеспечивает безопасность). ° Несущественные, или относящиеся к реализации ассоциации. Выбросьте все ассоциации, лежащие за пределами области задачи или описывающие конструкции, относящиеся к реализации.
Пример с банкоматом. Ассоциация 5узгет Аапг((ез сопсипепг ассезт (система обрабатывает параллельные обращения) описывает понятие, относящееся к реализации. Объекты реального мира изначально характеризуются параллелизмом. Требование, указанное в постановке задачи, относится именно к реализации алгоритма доступа. Глагольные фразы Банковская сеть включает в себя кассовые терминалы и банкоматы Консорциум совместно использует банкоматы Банк предоставляет банковский компьютер Банковский компьютер ведет учет счетов Банковский компьютер обрабатывает транзакции, совершаемые со счетами Банк владеет кассовым терминалом Кассовый терминал связан с банковским компьютером Кассир вводит транзакцию для данного счета Банкоматы связываются с центральным компьютером для проведения транзакции Центральный компьютер проверяет транзакцию, связываясь с банком Банкомат принимает кредитную карту Банкомат взаимодействует с пользователем Банкомат выдает наличные деньги Банкомат печатает квитанции Система поддерживает параллельный доступ Банки предоставляют программное обеспечение Издержки берут на себя банки Имплицитные глагольные фразы Консорциум состоит из банков Банк имеет свой счет Консорциум владеет центральным компьютером Система обеспечивает учет Система обеспечивает безопасность Клиенты имеют кредитные карты Знания о предметной области С помощью кредитной карты можно получить доступ к счетам В банке работают кассиры Рис.
12.7. Ассоциации, выделенные из описания задачи о банкомате Глава 12 ° Анализ предметной области Действия. Ассоциация должна описывать структурное свойство области приложения, а не кратковременное событие. В некоторых случаях требование выражается в виде действия, однако подразумевает некоторое структурное отношение. Такое утверждение нужно переформулировать. Пример с банкоматом. Ассоциация АТМ ассергз сай сап1 (банкомат принимает банковскую карту) описывает часть цикла взаимодействия банкомата с клиентом, а не постоянное отношение банкомата и карты.
По той же причине можно исключить ассоциацию АТМ тгегасгз т(гЬ изег (банкомат взаимодействует с пользователем). Сепгга1 сотригег с1еагз ггапзасг1оп ипТЬ ЬапЬ (Центральный компьютер подтверждает транзакцию в банке) описывает действие, подразумевающее структурное отношение Сепгга1 сотригег соттип(сагез ипй ЬапЬ (Центральный компьютер взаимодействует с банком). Тернарные ассоциации. Большинство и-арных ассоциаций можно выразить через бинарные, добавив соответствующие квалификаторы. Если термин в тернарной ассоциации является описательным и не имеет собственной индивидуальности, он является атрибутом бинарной ассоциации. Например, ассоциацию сатрапу раух за1агу го регьап (Компания платит сотруднику зарплату) можно переформулировать в виде бинарной ассоциации сатрапу етр1оуз ретоп (Компания нанимает сотрудника), причем каждая связь Сатрапу-Рег1оп будет характеризоваться своим значением ха1агу (зарплата).
Иногда в приложении действительно требуется тернарная ассоциация. Например, структуру Рго1еззог Геасйез соигзе т гоот (Профессор читает курс лекций в аудитории) нельзя разбить на бинарные ассоциации без утраты информации. Однако учтите, что нам ни разу не попадались ассоциации с четырьмя и более классами за все время нашей работы. Пример с банкоматом. Ассоциацию ВапЬ сотригег ргосеззез ггатасг1оп ада1пзг ассоипг (Банковский компьютер обрабатывает транзакцию по счету) можно разбить на ВапЬ сотригег ргосеззез ггапзасйоп (Банковский компьютер обрабатьвает транзакцию) и ТгапзасВоп сопсегпз ассоипг (Транзакция связана со счетом).
Аналогичным образом нужно поступить с транзакцией СаеЬ1ег епгет ггапзасг(оп )ог ассоипг (Кассир вводит транзакцию по счету). Ассоциация А ТМз соттитсаге т(й сепгга1 сотригег аЬоиг ггапзасг1оп (Банкоматы взаимодействуют с центральным компьютером касательно транзакции) на самом деле представляет собой две бинарные ассоциации А ТМз соттитсаге жй сепгга1 сотригег (Банкоматы взаимодействуют с центральным компьютером) и Тгапзасгюп епгегег1 оп АТМ(Транзакция начинается банкоматом).
Производные ассоциации. Отбросьте ассоциации, которые могут быть выражены через другие ассоциации. Например, Сгапг1рагепГО1 (Дедушка) можно выразить через пару ассоциаций РагепЮ~(родитель). Выбрасывайте и ассоциации, выражаемые как ограничения на атрибуты.
Например, уоипйегТЬап (моложе) выражает условие, касающееся дат рождения двоих человек, а не какую-то дополнительную информацию. 12.2. Модель классов предметной области 229 Классы, атрибуты и ассоциации модели классов должны отражать максимально независимую информацию. Наличие множества маршрутов между классами часто указывает на производные ассоциации, которые могут быть выражены через некоторые примитивные ассоциации. Сопзогг(ит злагез АТМз (Консорциум совместно владеет банкоматами) — это композиция ассоциаций Сопла»6ит отпз сепгга1 сотригег (Консорциум владеет центральным компьютером) и Сепгга1 сотригег соттитсагез ипгй А ТМз (Центральный компьютер взаимодействует с банкоматами). Не все ассоциации, образующие множественные маршруты между классами, являются избыточными.
Иногда существование ассоциации можно вывести из нескольких примитивных ассоциаций, а вот ее кратность таким путем определить нельзя. В подобной ситуации ассоциацию следует сохранить, при условии, что ограничение на кратность важно для модели. Например, на рис. 128 компания нанимает множество сотрудников и владеет множеством компьютеров. Каждому сотруднику предоставляется нуль и более компьютеров для персонального использования. Некоторые компьютеры предназначены для общего пользования и не приписаны ни к какому сотруднику. Кратность ассоциации Азз18пеИТо (Приписан) не может быть выведена из кратности ассоциаций Етр1оуз (Нанимает) и Оипз (Владеет). ваго Рис.
12.8. Кажущаяся избыточность ассоциации Хотя производные ассоциации не вносят дополнительной информации в модель, они могут быть полезны в реальном мире и при проектировании. Например, отношения родства типа «дядя», «теша» и «кузен» имеют собственные названия, потому что они описывают типичные отношения, которые считаются достаточно важными в нашем обществе. Если отношения такого рода особенно важны для модели, их можно оставить на диаграмме классов, указав перед именем символ косой черты (/), означающий зависимый статус и позволяющий отличать их от фундаментальных ассоциаций. Дальше следует проанализировать семантику ассоциаций.
° Неправильно названные ассоциации. Название должно говорить не о том, как или почему возникла некоторая ситуация, а о том, в чем зта ситуация состоит. Названия важны для понимания модели в целом, а потому выбирать их следует очень осторожно. Пример с банкоматом. Вап1« сотригег та1пга1пз ассоипсз (Банковский компьютер обслуживает счета) — это утверждение, описывающее действие. 230 Глава 12 ° Анализ предметной области Название ассоциации правильнее будет переформулировать как ВапЬ Ьо!Из ассоипг (Банк управляет счетом).
° Названия полюсов ассоциаций. Названия полюсов нужно указывать везде, где они имеют смысл. Например, в ассоциации йгогЬхрог (РаботаетНа) класс Сатрапу (Компания) по отношению к классу Регзоп (Человек) является работодателем (ешр!оуег), а Ретоп ло отношению к Сатрапу представляет собой сотрудника (ешр!оуее). Если пару классов связывает только одна ассоциация и ее смысл очевиден, названия полюсов можно не указывать. Например, смысл ассоциации А ТМз соттип!саге ипгЬ сепгга! сотригег (Банкоматы взаимодействуют с центральным компьютером) ясен из названий классов. Ассоциация между двумя экземплярами одного и того же класса требует наличия имен полюсов, с помощью которых можно было бы отличать эти экземпляры. Например, в ассоциации Регзоп тапаяез регзоп (Человек руководит человеком) полюса будут называться Ьозз (начальник) и гаогЬег (нодчиненный). ° Квалифицированные ассоциации. Обычно название идентифицирует объект в рамках некоторого контекста.
Большинство названий не являются уникальными в масштабах всей системы (глобально). Контекст вместе с именем позволяют уникально идентифицировать объект. Например, название компании должно быть уникально в том штате, где она расположена, но может повторяться в других штатах (был момент, когда в каждом из штатов Огайо, Индиана, Калифорния и Нью-Джерси работала своя компания «Стандард Ойл»). Название компании квалифицирует ассоциацию 5гаге сЬаггегз сатрапу (Штат разрешает создание компании); 5гаге (Штат) и название компании уникально идентифицируют Сатрапу (Компанию). Квалификатор позволяет отличать друг от друга объекты, находящиеся у полюса ассоциации с кратностью «много». Пример с банкоматом.