нечетко определенные классы: например, служба_ведения_записей и проверка_безопасности (эти службы входят в состав проводки), система (в нашем случае непонятно, что это такое), банковская_сеть (вся наша программная система будет обслуживать банковскую сеть);
атрибуты: данные проводки, данные счета, деньги (имеются в виду реальные деньги, выдаваемые клиенту кассиром или банкоматом, либо принимаемые кассиром), квитанция (выдается клиенту вместе с деньгами) более естественно иметь в качестве атрибутов;
реализационные конструкции: например, программное_обеспечение и доступ.
После исключения лишних имен возможных классов получаем следующий список: БМ (банкомат), Консорциум, Банк, Кассовый терминал, Центральный компьютер, Компьютер банка, Карточка, Счет, Проводка, Клиент, Кассир.
1.2.2. Подготовка словаря данных
Приведем словарь данных, содержащий определения классов, используемых в проекте.
БМ (банкомат) - терминал, который дает возможность клиенту осуществлять свою собственную проводку, используя для идентификации свою карточку. БМ (банкомат) взаимодействует с клиентом, чтобы получить необходимую информацию для проводки, посылает информацию для проводки центральному_компьютеру, чтобы он проверил ее и в дальнейшем использовал при выполнении проводки, и выдает деньги и квитанцию клиенту. БМ (банкомату) не требуется работать независимо от сети.
Банк - финансовая организация, которая содержит счета своих клиентов и выпускает карточки, санкционирующие доступ к счетам через сеть БМ (банкоматов).
Карточка - пластиковая карточка, врученная банком своему клиенту, которая санкционирует доступ к счетам через сеть БМ (банкоматов). Каждая карточка содержит код банка и номер карточки, закодированные в соответствии с национальными стандартами на банковские карточки. Код_банка однозначно идентифицирует банк внутри консорциума. Номер_карточки определяет счета, к которым карточка имеет доступ. Карточка не обязательно обеспечивает доступ ко всем счетам клиента. Каждой карточкой может владеть только один клиент, но у нее может существовать несколько копий, так что необходимо рассмотреть возможность одновременного использования одной и той же карточки с разных БМ (банкоматов).
Кассир - служащий банка, который имеет право осуществлять проводки с кассовых_ терминалов, а также принимать и выдавать деньги и чеки клиентам. Проводки, деньги и чеки, с которыми работает каждый кассир, должны протоколироваться и правильно учитываться.
Кассовый_терминал - терминал, с которого кассир осуществляет проводки для клиентов. Когда кассир принимает и выдает деньги и чеки, кассовый_терминал печатает квитанции. Кассовый_терминал взаимодействует с компьютером_банка, чтобы проверить и выполнить проводку.
Клиент - держатель одного или нескольких счетов в банке. Клиент может состоять из одного или нескольких лиц, или организаций. То же самое лицо, держащее счет и в другом банке рассматривается как другой клиент.
Компьютер_банка - компьютер, принадлежащий банку, который взаимодействует с сетью БМ (банкоматов) и собственными кассовыми_терминалами банка. Банк может иметь свою внутреннюю компьютерную сеть для обработки счетов, но здесь мы рассматриваем только тот компьютер_банка, который взаимодействует с сетью БМ.
Консорциум - объединение банков, которое обеспечивает работу сети БМ (банкоматов). Сеть передает в консорциум проводки банков.
Проводка - единичный интегрированный запрос на выполнение некоторой последовательности операций над счетами одного клиента. Было сделано предположение, что БМ (банкоматы) только выдают деньги, однако для них не следует исключать возможности печати чеков или приема денег и чеков.
Счет - единичный банковский счет, над которым выполняются проводки. Счета могут быть различных типов; клиент может иметь несколько счетов.
Центральный_компьютер - компьютер, принадлежащий консорциуму, который распределяет проводки и их результаты между БМ (банкоматами) и компьютерами_банков. Центральный_компьютер проверяет коды банков, но не выполняет проводок самостоятельно.
1.2.3. Определение зависимостей
Выделим явные и неявные глагольные обороты из предварительной постановки задачи, рассматривая их как имена возможных зависимостей.
Глагольные обороты (явные и неявные):
Банковская сеть включает кассиров и БМ
Консорциум распределяет результаты проводок по БМ
Банк владеет компьютером банка
Компьютер банка поддерживает счета
Банк владеет кассовыми терминалами
Кассовый терминал взаимодействует с компьютером банка
Кассир вводит проводку над счетом
БМ взаимодействуют с центральным компьютером во время проводки
Центральный компьютер взаимодействует с компьютером банка
БМ принимает карточку
БМ общается с пользователем
БМ выдает наличные деньги
БМ печатает квитанции
Система регулирует коллективный доступ
Банк предоставляет программное обеспечение
Консорциум состоит из банков
Консорциум владеет центральным компьютером
Система обеспечивает протоколирование
Система обеспечивает безопасность
Клиенты имеют карточки
Карточка обеспечивает доступ к счету
В банке служат кассиры
Затем исключаем ненужные или неправильные зависимости:
зависимости между исключенными классами: исключаются следующие зависимости: Банковская сеть включает кассиров и БМ (класс банковская_сеть исключен), БМ печатает квитанции (класс квитанция исключен), БМ выдает наличные деньги (класс деньги исключен), Система обеспечивает протоколирование проводок (класс служба_ведения_записей исключен), Система обеспечивает безопасность ведения счетов (класс служба_безопасности исключен), Банки предоставляют программное обеспечение (класс программное_обеспечение исключен);
нерелевантные зависимости и зависимости, связанные с реализацией: зависимость «Система регулирует коллективный доступ» исключается как связанная с реализацией;
действия описываются такими зависимостями как «БМ принимает карточку» и «БМ общается с пользователем»; мы исключаем эти зависимости;
тренарные зависимости: зависимость «Кассир вводит проводку над счетом» раскладывается на две бинарные зависимости «Кассир вводит проводку» и «Проводка относится к счету». Зависимость «БМ взаимодействуют с центральным компьютером во время проводки» раскладывается на «БМ взаимодействуют с центральным компьютером» и «Проводка начинается с БМ»;
производные зависимости: зависимость «Консорциум распределяет БМ» является следствием зависимостей «Консорциум владеет центральным компьютером» и «БМ взаимодействуют с центральным компьютером».
Удалив избыточные зависимости, получим следующий список зависимостей:
Банк владеет компьютером банка
Компьютер банка поддерживает счета
Банк владеет кассовыми терминалами
Кассовый терминал взаимодействует с компьютером банка
Кассир вводит проводку
Проводка относится к счету
БМ взаимодействуют с центральным компьютером
Проводка начинается с БМ
Центральный компьютер взаимодействует с компьютером банка
Консорциум состоит из банков
Консорциум владеет центральным компьютером
Клиенты имеют карточки
Карточка обеспечивает доступ к счету
В банке служат кассиры
Уточним семантику оставшихся зависимостей следующим образом:
переименуем неверно названные зависимости, чтобы смысл их стал более понятен; так зависимость «Компьютер_банка поддерживает счета» удобнее заменить зависимостью «Банк держит счета».
имена ролей можно не использовать, например, зависимость «БМ взаимодействуют с центральным компьютером»;
неучтенные зависимости: «Проводка начинается с кассового_терминала», «Клиенты имеют счета», «Проводка регистрируется карточкой» следует добавить в модель.
После уточнения зависимостей можно составить начальную объектную диаграмму (рис. 1.2).
Рисунок 1.2 - Первая версия объектной диаграммы для банковской сети
1.2.4. Уточнение атрибутов
Карточка содержит код_банка и код_карточки; их можно считать атрибутами объектов класса карточка, но удобнее использовать в качестве квалификаторов, так как код_банка обеспечивает выбор банка, сокращая кратность зависимости консорциум - банк; для аналогичного использования кода_карточки необходимо добавить зависимость Банк_выпускает_карточки, квалификатором которой будет код_карточки.
После внесения перечисленных изменений диаграмма примет вид, представленный на рис 1.3
1.2.5. Организация системы классов с использованием наследования
В рассматриваемом примере естественно определить суперклассы для объектов, определяющих различные терминалы: кассовый_терминал и БМ (банкомат), и для объектов, определяющих проводки: проводка_кассира и удаленная_проводка (с банкомата).
Внеся соответствующие изменения, получим объектную диаграмму, представленную на рисунке 1.4.
Рисунок 1.3 - Объектная диаграмма для банковской сети после уточнения атрибутов и добавления квалификаторов
Рисунок 1.4 - Объектная диаграмма для банковской с учетом наследования
1.2.6. Усовершенствование модели
Карточка выступает в двух сущностях: как регистрационная единица в банке (сберкнижка), обеспечивающая клиенту доступ к его счетам, и как структура данных, с которой работает БМ. Поэтому удобно расщепить класс карточка на два класса: регистрация_карточки и карточка; первый из этих классов обеспечивает клиенту доступ к его счетам в банке, а второй определяет структуру данных, с которой работает БМ.