Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции - Часть 9.doc
Скачиваний:
35
Добавлен:
02.05.2014
Размер:
5.57 Mб
Скачать

9.3. Классы абстрагирования данных

Каждый сущностный класс из аналитической модели, который инкапсулиру­ет данные, проектируется как класс абстрагирования данных. Сущностный класс хранит данные и предоставляет операции для доступа к ним – операции чтения и записи. Класс абстрагирования данных используется для инкапсуляции струк­туры данных, то есть сокрытия деталей ее внутреннего представления. Операции проектируются как процедуры иди функции доступа, внутреннее устройство ко­торых также скрыто.

Информация об атрибутах класса абстрагирования данных должна уже при­сутствовать в статической модели предметной области. Операции такого класса определяются путем рассмотрения тех сервисов, которые нужны клиентским объектам для опосредованного доступа к данным. Это можно сделать, проанализировав способы использования объекта абстрагирования данных в мо­дели кооперации.

9.3.1. Пример класса абстрагирования данных. Для знакомства с классами абстрагирования данных рассмотрим диаграмму кооперации из аналитической модели (рис.9.2а), состоящую из двух объектов, которым нужен доступ к объекту Наличные Банкомата. Атрибуты данного объекта приведены в статической модели: это количество пяти-, десяти- и двадца­тидолларовых купюр в устройстве выдачи наличных. Таким образом, в объекте должны быть внутренние переменные, содержащие соответствующие счетчики купюр. Таким образом, мы проектируем класс Наличные Банкомата с четырьмя атрибутами: имеющаясяСумма, пятидолларовыеКупюры, десятидол-ларовые Купюры, двадцатидолларовыеКупюры. Начальное значение всех атрибутов установлено в ноль.

Необходимы сведения о том, какие сообщения посылаются объекту Налич­ные Банкомата и какова последовательность их отправки. Так, из аналитичес­кой модели явствует, что, когда объект Наличные Банкомата получает сообще­ние Снимаемая со Счета Сумма от объекта Интерфейс Устройства Выдачи Наличных, он должен вычислить, сколько купюр каждого достоинства выдать. В аналитической модели эта информация посылается в ответном сообщении От­вет о Выдаче Наличных.

Объект Наличные Банкомата получает также сообщение от объекта Интер­фейс Оператора. Человек-оператор пополняет запас наличных в банкомате ку­пюрами разного достоинства, а соответствующая информация передается объек­ту Наличные Банкомата. Добавив наличные, оператор уведомляет банкомат с помощью объекта Интерфейс Оператора, который посылает сообщение До­бавлены Наличные объекту Наличные Банкомата (рис.9.2а).

Рис.9.2. Пример класса абстрагирования данных:

а – аналитическая модель (диаграмма кооперации); б – проектная модель (диаграмма кооперации); в – проектная модель (диаграмма классов)

Теперь мы можем специфицировать операции класса Наличные Банкомата так, как показано на диаграмме кооперации проектной модели на рис.9.26. Нужны две операции: добавитьНаличные и выдатьНаличные. У операции выдатьНаличные один входной параметр: суммаКВыдаче – и три выходных: выдатьПяти-долларовыхКупюр, выдатьДесятидолларовыхКупюр, вы-датьДвадцатидолларовыхКупюр. У операции добавитьНа-личные три входных параметра: добавленоПятидолларовых Купюр, добавленоДесятидолларовыхКупюр и добавлено ДвадцатидолларовыхКупюр. Вот как специфицируются операции:

выдатьНаличные(in суммаКВыдаче,

out выдать ПятидолларовыхКупюр,

out выдатьДесятидолларовыхКупюр,

out выдатьДвадцатидолларовыхКупюр)

добавитьНаличные(in добавлено

ПятидолларовыхКупюр,

in добавленоДесятидолларовыхКупюр,

in добавленоДвадцатидолларовыхКупюр)

Диаграмма классов изображена на рис.9.2в.

Объекты этого класса поддерживают инвариант: общая сумма наличных в банкомате должна равняться суммарному значению достоинств всех купюр:

имеющаясяСумма = 5 * пятидолларовыеКупюры + . + 10 * десятидолларовыеКупюры + 20 * двадцати-долларовыеКупюры

Недостаток наличных – это ошибка, которую нужно распознавать. Обычно такие ошибки обрабатываются как исключения.

Соседние файлы в предмете Системы реального времени