Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Евгений / идз1 / Пособие_Об_анал.doc
Скачиваний:
19
Добавлен:
31.03.2015
Размер:
1.44 Mб
Скачать

1.7.3. Обязанности реальных вещей

Определим обязанности реальных вещей в магазине:

— экземпляра товара:

— регистрирующего устройства;

  • кассира;

а также

— категории налога.

Экземпляр товара

А. Определение обязанностей; "что я знаю".

Реальный экземпляр товара характеризуется его номером, описанием, универсальным торговым ко­дом (UPC), сроком годности, ценой и указанием, облагается ли он налогом.

Объект item (экземпляр товара) "знает" значения своих атрибутов (рис. 1.25):

— номера;

— описания;

— универсальных кодов товара (UPC);

— цен;

— обложения налогом (облагается или нет).

Рис. 1.25. Экземпляр товара: "что я знаю'

Некоторые из этих атрибутов имеют повторяющиеся значения. Это хороший повод для поиска дополнительных объектов.

Универсальный код товара upc

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

#64. Стратегия"Атрибуты с повторяющимися значениями"

• Атрибут может иметь несколько значений.

• Добавьте к модели новый класс и связь между объектами. Найдите дополнительные атрибуты, которые можно применять.

Добавьте новый класс, даже если в настоящий момент он имеет всего один атрибут.

Это позволит провести разбиение большей части проблемной области и облегчить будущие изменения.

• Пример: экземпляр товара с атрибутом UPC. Добавьте к модели класс UPC и связь между этим экземпляром и его UPC.

Если есть возможность иметь атрибуты для каждого повторяющегося значения, следует расще­пить то, что описывается как другой класс модели (применить относящееся к данной области раз­биение). Добавьте новый класс, даже если в настоящий момент он имеет всего один атрибут. Проведенное в модели разбиение окажется полезным, если возникнет необходимость в дополните­льных атрибутах и службах.

В данном случае повторяющимся значением является UPC. Экземпляр товара в магазине X может соответствовать множеству определенных производителем кодов UPC. Стоит ли иметь по­тенциальное множество атрибутов для каждого UPC? Несомненно. UPC можно описать его кодом, изображением, именем автора и датой первого применения.

Предположим, что интересен только сам UPC. Тогда добавим к модели класс UPC с атрибу­том "upc".

Нужна также связь между объектами. Экземпляр товара знает свои объекты UPC, а объект UPC знает свои экземпляры товара. Соедините item и UPC связью между объектами (рис. 1.26).

Рис. 1.26. Обнаружение дополнительных объектов и обязанностей

Цена

Объект itemзнает множество цен. Не верите? Проверим вместе сX.

А. Расскажите мне о ценах экземпляра товара.

X. Экземпляр товара имеет регулярную цену. Начиная с даты появления товара, мы сле­дим за прошлыми, настоящими и будущими регулярными ценами. Кроме того, экземпляр товара иногда имеет отпускную цену, действительную с даты появления товара до истечения срока его год­ности, и за этими ценами мы также следим. Для наших покупателей мы устанавливаем лучшую на момент покупки цену.

A. Планируете ли вы цены заранее? Когда вы хотите добавить их к системе?

X. Да, мы планируем их заранее и вводить их в систему тоже нужно заранее.

Что это все значит для объектной модели? Экземпляр товара знает объекты своей цены. Экземпляр товара знает свои регулярные цены (цену и дату появления)

Экземпляр товара знает свои отпускные цены (цену, дату появления и дату истечения срока годности).

К модели нужно добавить класс price с атрибутами:

— цена;

— дата появления;

а также класс ограничения promo price с атрибутами:

— цена;

— дата появления;

— дата истечения срока годности.

Класс ограничения наследует атрибуты, связи, службы и сообщения, относящиеся к его классу обобщения. Структура типа gen- specпоказывает, что совпадает, а что отличается.

Одинаковы:

— цена;

  • дата появления.

  • Отличаются:

— даты истечения срока годности.

Дату истечения срока годности нужно добавить к модели. Экземпляр товара знает свои объекты price, а объект price знает свой экземпляр товара, поэтому объекты item и price нужно соединить связью (рис. 1.26).

Соседние файлы в папке идз1