В п. 1.3 сформулирована задача и приведена схема сети банковского обслуживания (рис. 1.3). Анализируя эту постановку задачи, можно выделить возможные классы, сопоставив их существительным, упомянутым в её предварительной формулировке; получится следующий список возможных имён классов (в алфавитном порядке):
ATM (банкомат) | Кассир | Программное обеспечение |
банк | кассовый терминал | система |
банковская сеть | квитанция | проверка безопасности |
данные проводки | клиент | служба ведения записей |
данные счёта | компьютер банка | счёт |
деньги | консорциум | цена |
доступ | пользователь | центральный компьютер |
Исследуем этот список, исключая из него имена классов в соответствии с рекомендациями п. 2.2.1:
- избыточные классы: ясно, что клиент и пользователь означают одно и то же понятие; для банковской системы более естественно оставить класс клиент;
- нерелевантные классы: таким классом является класс цена (он не имеет непосредственного отношения к работе банковской сети);
- нечётко определённые классы: такими классами являются служба ведения записей и проверка безопасности (эти службы входят в состав проводки), система (в нашем случае непонятно, что это такое), банковская сеть (вся наша программная система будет обслуживать банковскую сеть);
- атрибуты: данные проводки, данные счёта, деньги (имеются в виду реальные деньги, выдаваемые клиенту кассиром или банкоматом, либо принимаемые кассиром), квитанция (выдаётся клиенту вместе с деньгами) более естественно иметь в качестве атрибутов;
- реализационные конструкции выражают такие имена, как программное обеспечение и доступ; их тоже следует исключить из списка имён возможных классов.
После исключения всех лишних имён возможных классов получаем следующий список классов, составляющих проектируемую систему банковского обслуживания (эти классы представлены на рисунке 2.5):
ATM (банкомат) | Кассовый терминал | Проводка |
банк | клиент | счёт |
карточка | компьютер банка | центральный компьютер |
Подготовка словаря данных
Приведём часть словаря данных, содержащую определения классов, используемых в проекте.
ATM (банкомат) – терминал, который даёт возможность клиенту осуществлять свою собственную проводку, используя для идентификации свою карточку. ATM (банкомат) взаимодействует с клиентом, чтобы получить необходимую информацию для проводки, посылает информацию для проводки центральному компьютеру, чтобы он проверил её и в дальнейшем использовал при выполнении проводки, и выдаёт деньги и квитанцию клиенту. Предполагается, что ATM (банкомату) не требуется работать независимо от сети.
Банк – финансовая организация, которая содержит счета своих клиентов и выпускает карточки, санкционирующие доступ к счетам через сеть ATM (банкоматов).
Карточка – пластиковая карточка, вручённая банком своему клиенту, которая санкционирует доступ к счетам через сеть ATM (банкоматов). Каждая карточка содержит код банка и номер карточки, закодированные в соответствии с национальными стандартами на банковские карточки. Код банка однозначно идентифицирует банк внутри консорциума. Номер карточки определяет счета, к которым карточка имеет доступ. Карточка не обязательно обеспечивает доступ ко всем счетам клиента. Каждой карточкой может владеть только один клиент, но у неё может существовать несколько копий, так что необходимо рассмотреть возможность одновременного использования одной и той же карточки с разных ATM (банкоматов).
Кассир – служащий банка, который имеет право осуществлять проводки с кассовых терминалов, а также принимать и выдавать деньги и чеки клиентам. Проводки, деньги и чеки, с которыми работает каждый кассир, должны протоколироваться и правильно учитываться.
Кассовый терминал – терминал, с которого кассир осуществляет проводки для клиентов. Когда кассир принимает и выдает деньги и чеки, кассовый терминал печатает квитанции. Кассовый терминал взаимодействует с компьютером банка, чтобы проверить и выполнить проводку.
Клиент – держатель одного или нескольких счетов в банке. Клиент может состоять из одного или нескольких лиц, или организаций. То же самое лицо, держащее счёт и в другом банке, рассматривается как другой клиент.
Компьютер банка – компьютер, принадлежащий банку, который взаимодействует с сетью ATM (банкоматов) и собственными кассовыми терминалами банка. Банк может иметь свою внутреннюю компьютерную сеть для обработки счетов, но здесь мы рассматриваем только тот компьютер банка, который взаимодействует с сетью ATM.
Консорциум – объединение банков, которое обеспечивает работу сети ATM (банкоматов). Сеть передаёт в консорциум проводки банков.
Проводка – единичный интегрированный запрос на выполнение некоторой последовательности операций над счетами одного клиента. Было сделано предположение, что ATM (банкоматы) только выдают деньги, однако для них не следует исключать возможности печати чеков или приёма денег и чеков. Хотелось бы также обеспечить гибкость системы, которая в дальнейшем обеспечит возможность одновременной обработки счетов разных клиентов, хотя пока этого не требуется. Различные операции должны быть правильно сбалансированы.
Счёт – единичный банковский счёт, над которым выполняются проводки. Счета могут быть различных типов; клиент может иметь несколько счетов.
Центральный компьютер – компьютер, принадлежащий консорциуму, который распределяет проводки и их результаты между ATM (банкоматами) и компьютерами банков. Центральный компьютер проверяет коды банков, но не выполняет проводок самостоятельно.
Определение зависимостей
Следуя рекомендациям п. 2.2.3, выделяем явные и неявные глагольные обороты из предварительной постановки задачи и рассматриваем их как имена возможных зависимостей. Из постановки задачи о банковской сети (см. п. 1.3) можно извлечь следующие обороты:
Глагольные обороты (явные и неявные):
Банковская сеть включает кассиров и ATM'ы
Консорциум распределяет результаты проводок по ATM
Банк владеет компьютером банка
Компьютер банка поддерживает счета
Банк владеет кассовыми терминалами
Кассовый терминал взаимодействует с компьютером банка
Кассир вводит проводку над счётом
ATM'ы взаимодействуют с центральным компьютером во время проводки
Центральный компьютер взаимодействует с компьютером банка
ATM принимает карточку
ATM общается с пользователем
ATM выдаёт наличные деньги
ATM печатает квитанции
Система регулирует коллективный доступ
Банк предоставляет программное обеспечение
Консорциум состоит из банков
Консорциум владеет центральным компьютером
Система обеспечивает протоколирование
Система обеспечивает безопасность
Клиенты имеют карточки
Карточка обеспечивает доступ к счёту
В банке служат кассиры
Затем исключаем ненужные или неправильные зависимости, используя критерии, сформулированные в п. 2.2.3:
- зависимости между исключёнными классами: исключаются следу-ющие зависимости: Банковская сеть включает кассиров и ATM'ы (класс банковская сеть исключён), ATM печатает квитанции (класс квитанция исключён), ATM выдаёт наличные деньги (класс деньги исключён), Система обеспечивает протоколирование проводок (класс служба ведения записей исключён), Система обеспечивает безопасность ведения счетов (класс служба безопасности исключён), Банки предоставляют программное обеспечение (класс программное обеспечение исключён);
- нерелевантные зависимости и зависимости, связанные с реализацией: зависимость «Система регулирует коллективный доступ» исключается как связанная с реализацией;
- действия описываются такими зависимостями, как «ATM принимает карточку» и «ATM общается с пользователем»; мы исключаем эти зависимости;
- тренарные зависимости: зависимость «Кассир вводит проводку над счётом» раскладывается на две бинарные зависимости «Кассир вводит проводку» и «Проводка относится к счёту». Зависимость «ATM'ы взаимодействуют с центральным компьютером во время проводки» раскладывается на «ATM'ы взаимодействуют с центральным компьютером» и «Проводка начинается с ATM»;
- производные зависимости: зависимость «Консорциум распределяет ATM'ы» является следствием зависимостей «Консорциум владеет центральным компьютером» и «ATM'ы взаимодействуют с центральным компьютером».
Удалив избыточные зависимости, получим следующий список зависимостей:
Банк владеет компьютером банка
Компьютер банка поддерживает счета
Банк владеет кассовыми терминалами
Кассовый терминал взаимодействует с компьютером банка
Кассир вводит проводку
Проводка относится к счёту
ATM'ы взаимодействуют с центральным компьютером
Проводка начинается с ATM
Центральный компьютер взаимодействует с компьютером банка
Консорциум состоит из банков
Консорциум владеет центральным компьютером
Клиенты имеют карточки
Карточка обеспечивает доступ к счёту
В банке служат кассиры
Уточним семантику оставшихся зависимостей следующим образом:
- переименуем неверно названные зависимости, чтобы смысл их стал более понятен; так, зависимость Компьютер банка поддерживает счета удобнее заменить зависимостью Банк держит счета;
- имена ролей можно не использовать, так как они ясны из имён классов, участвующих в зависимости, как, например, для зависимости ATM'ы взаимодействуют с центральным компьютером;
- неучтённые зависимости: Проводка начинается с кассового терминала, Клиенты имеют счета, Проводка регистрируется карточкой следует добавить в модель.
После уточнения зависимостей можно составить исходную версию объектной диаграммы. Для рассматриваемой задачи она будет иметь вид, представленный на рисунке 2.37.
Рис. 2.37. Первая версия объектной диаграммы для банковской сети
Уточнение атрибутов
Применяя критерии, сформулированные в п. 2.2.4, получим:
Карточка содержит код банка и код карточки; их можно считать атрибутами объектов класса карточка, но удобнее использовать в качестве квалификаторов, так как код банка обеспечивает выбор банка, сокращая кратность зависимости консорциум – банк; для аналогичного использования кода карточки необходимо добавить зависимость Банк выпускает карточки, квалификатором которой будет код карточки.
После внесения перечисленных изменений диаграмма примет вид, представленный на рисунке 2.38.
Рис. 2.38. Объектная диаграмма для банковской сети
после уточнения атрибутов и добавления квалификаторов