Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 51
Текст из файла (страница 51)
Созг (Стоимость) лежит вне области классов, относящихся к программному обеспечению банкомата. Нечеткие классы. Класс должен быть четко определен. Некоторые потенциальные классы могут иметь нечетко определенные границы или слишком широкую область охвата. Пример с банкоматом. Класс Кесопйеер(пдргогппоп (СредствоДляВеденияЗаписей) определен нечетко, а его задачи решаются классом Тгапзасг(оп (Транзакция). В других приложениях содержание этого класса может быть включено в другие классы, например 5гоо(5а!ез (ПродажиАкций), Те1ерЬопеСа1Ь (ТелефонныеЗвонки), Масй1пега1!игез (СбоиОборудования).
Атрибуты. Названия, характеризующие главным образом индивидуальные объекты, следует сделать атрибутами. Например, атрибутами обычно становятся такие потенциальные классы, как пате (имя), Ь гг!и!ате (дата рождения) и те!дат (вес). Если некоторое свойство должно существовать независимо от носителя, его следует сделать классом, а не атрибутом.
Например, номер офиса, в котором работает сотрудник, можно сделать классом в приложении, предназначенном для перераспределения офисов после реорганизации. Пример с банкоматом. Элемент АссоипгРага (ДанныеОСчете) определен нечетко, но в любом случае этот элемент, скорее всего, описывает характеристики счета, то есть является атрибутом. Банкомат выдает наличные и чеки, но, поскольку ничего другого он с ними не делает, эти сущности являются внешними по отношению к задаче, а потому правильнее будет сделать их атрибутами. Операции. Если название описывает операцию, которая применяется к объектам, и она не рассматривается сама по себе, его следует исключить из списка классов.
Например, телефонный звонок — это последовательность действий, в которых участвуют звонящий и телефонная сеть. Если мы занимаемся изготовлением телефонов, то звонок будет частью модели состояний, а не классом. 2г4 Глава 12 ° Анализ предметной области Операция, обладающая собственными чертами, должна быть представлена в модели классом. Например, в системе учета телефонных звонков Са)! (Звонок) будет важным классом с атрибутами с(аге (дата), г(те (время), ог(я(п (исходный пункт), с!езттасюп (пункт назначения).
Роли. Название класса должно отражать его внутреннюю природу, а не роль, которую он играет в ассоциации. Например, Отепег (Владелец)— плохое нмя для класса из базы данных производителя автомобилей. Что если потом придется добавлять список водителей? Или людей, которые берут машины напрокат? Правильнее создать класс Регзоп (Человек) или Сизготег (Клиент), который может играть разные роли, в том числе оитег (владелец), аг(пег (водитель),!еззее (наниматель).
Иногда одна физическая сущность соответствует нескольким классам. Например, классы Регзоп (Человек) и Етр(оуее (Сотрудник) в некоторых ситуациях могут быть отдельными классами, а в других — дублирующими друг друга. С точки зрения базы данных сотрудников предприятия эти два класса совпадают. С точки зрения федеральной налоговой базы один человек может быть занят на нескольких работах, поэтому класс Регзоп необходимо отделить от класса Етр!оуее, Каждый экземпляр класса Регзоп соответствует произвольному числу экземпляров класса Етр!оуее.
Конструкции, относящиеся к реализации. Аналитическая модель не должна содержать конструкций, не принадлежащих к реальному миру. Они могут потребоваться на этапе проектирования, но не на этапе анализа. Такие сущности, как процессор, подпрограмма, процесс, алгоритм и прерывание, являются конструкциями, относящимися к реализации. Это верно для большинства приложений, однако для операционной системы перечисленные сущности могут быть и полноправными классами. Структуры данных, такие как связные списки, деревья, массивы и таблицы, почти всегда относятся к реализации, а не к реальному миру. Пример е банкоматом. Некоторые потенциальные классы в действительности оказываются конструкциями, относящимися к реализации.
ГгапзаспопЕоЕ (ЖурналТранзакций) — это просто множество транзакций. Его конкретное представление нужно выбирать на этапе проектирования. Коммуникационные связи можно представить в виде ассоциаций, а Соттип1саг(опЕте (КоммуникационнаяЛиния) — просто физическая реализация такой связи. Производные классы. Как правило, классы, которые могут быть выведены из других классов, не следует включать в модель. Если производный класс особенно важен, его можно оставить, но поступать так можно только в исключительных случаях. Имена всех производных классов должны начинаться с символа косой черты (/).
12.2.3. Подготовка словаря данных Сами по себе слова допускают слишком много интерпретаций, поэтому для всех элементов модели необходимо подготовить словарь данных. Для каждого класса 12.2. Модель классов предметной области 225 следует придумать описание размером в один абзац. Опишите область применения класса в рамках данной задачи, укажите все предположения и ограничения, касающиеся его использования. Словарь данных должен включать описание ассоциаций, атрибутов, операций и значений перечислимых типов. На рис.
12.6 показан пример словаря данных для классов нашей задачи с банкоматом. 12.2.4. Выделение ассоциаций На следующем этапе вы должны выделить ассоциации между классами. Структурное отношение между двумя и более классами является ассоциацией. Если один класс ссылается на другой класс, это тоже ассоциация. Как мы уже писали в главе 3, для ссылок на классы не следует использовать атрибуты, их правильнее представлять в модели в виде ассоциаций. Например, в классе Регзоп (Человек) ие должно быть атрибута етрIоуег (работодатель). Правильно связать класс Регзоп с классом Сатрапу (Компания) ассоциацией )когЬРог(РаботаетНа).
Ассоциации показывают отношения между классами на том же уровне абстракции, на котором находятся сами классы, тогда как атрибуты скрывают зависимости и их двустороннюю природу. Ассоциации могут быть реализованы множеством способов, выбор которых следует отложить до последующих этапов, чтобы сохранить относительную свободу во время проектирования. Ассоциации часто соответствуют глаголам состояния или глагольным группам.
К ним относятся характеристики физического размещения (ИехгТо — РядомС, Рагго) — Часть, Сопгагпеа!п — СодержитсяВ), направленные действия (Опоез— Управляет), передача информации (Та!ЬТо — РазговариваетС), владение (Наз— Имеет, РагГО/ — Часть) и выполнение некоторого условия ()(гопЬРог — РаботаетНа, МатпеаТо — ЖенатНа, Мапаяез — Управляет). Сначала выделите все потенциальные ассоциации из описания задачи и запишите их на бумаге. Не пытайтесь слишком рано уточнять модель, но и не выписывайте все глаголы подряд.
Суть в том, чтобы выделить все отношения, в какой бы форме они ни были выражены иа естественном языке. Пример с банкоматом. На рис. 12.7 показаны ассоциации. Большинство из них соответствуют глагольным формам из описания задачи. Некоторые ассоциации присутствовали в описании задачи неявным образом. Другие были введены в модель на основании знаний о реальном мире или предположений о сути задачи. Эти ассоциации нужно обсуждать с заказчиком, потому что в постановке задачи их не было. 12.2.5. Удаление лишних ассоциаций Теперь нужно отбросить ненужные и некорректные ассоциации, руководствуясь перечисленными ниже критериями.
° Ассоциации между классами, которые были удалены на предыдущих этапах. Если один из классов, связываемых ассоциацией, был исключен, ассоциацию тоже нужно исключить или переформулировать в терминах других классов. 8 Зас 699 22Б Глава 12 ° Анализ предметной области Счет — отдельный счет в банке, с которым производятся транзакции.
Счета могут быть разных типов, например чеки и сбережения. Клиент может иметь несколько счетов. Банкомат — терминал, позволяющий клиентам совершать транзакции, используя в качестве средства идентификации свои кредитные карты. Банкомат взаимодействует с клиентом, принимая от него данные, отправляя информацию о транзакции на центральный компьютер для ее проверки и обработки, а также выдавая клиенту наличные деньги.
Предполагается, что банкомату не нужно работать вне сети. Банк — финансовое учреждение, хранящее счета клиентов и выдающее кредитные карты для доступа к счетам с помощью банкоматов. БанковскийКомпьютер — компьютер, принадлежащий банку и связанный в единую сеть с банкоматами и кассовыми терминалами банка.
У банка может быть отдельный компьютер, работающий со счетами клиентов, но нас интересует только тот, который связан с сетью банкоматов. КредитнаяКарта — карта, выданная клиенту банка и используемая для доступа к счету через банкомат. Каждая карта содержит код банка и имеет порядковый номер. Каждый банк имеет уникальный код внутри консорциума. Номер карты определяет счета, к которым открыт доступ. С помощью карты клиент может получать доступ не обязательно ко всем своим счетам.
У карты может быть только один владелец, однако может существовать несколько копий карты, поэтому надо учитывать возможность одновременной работы с одной и той же картой с разных банкоматов. Кассир — работник банка, уполномоченный вводить транзакции и принимать и выдавать наличные деныи и чеки клиентам, Все транзакции, наличные деньги и чеки, обрабатываемые кассирами, должны учитываться. КассовыйТерминал — терминал, с помощью которого кассиры вводят транзакции. Кассиры выдают и принимают наличные деньги и чеки. Терминал печатает чеки.
Кассовый терминал связывается с банковским компьютером для проверки и обработки транзакций. ЦентральныйКомпьютер — компьютер, с которым работает консорциум для осуществления транзакций между банкоматами и банковскими компьютерами. Центральный компьютер сверяет коды банков, но не занимается напрямую обработкой транзакций. Консорциум — сообщество банков, владеющих банкоматами и совершающих операции в сети банкоматов. Сеть банкоматов поддерживает транзакции только между банками, входящими в консорциум.
Клиент — владелец одного или нескольких счетов в банке. Клиента может представлять не только один человек, но и несколько человек или органиэация — для данной задачи это не имеет значения. Одного и того же человека, владеющего счетом в нескольких банках, следует рассматривать как нескольких клиентов. Транзакция — единичный цельный запрос на операции со счетами одного клиента. Мы определили только, что банкоматы должны выдавать наличные деньги, но мы не должны запрещать возможность печати чеков и приема наличных денег или чеков. Можно также улучшить гибкость системы за счет обеспечения возможности обработки счетов разных клиентов, хотя изначально этого не было среди требований.