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

Экземпляр строки продажи

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

В общем случае экземпляр строки транзакции знает:

— дату и время (при необходимости для каждого экземпляра строки);

— количество;

— налоговый статус (регулярный, не облагаемый налогом и т.п.). В данном случае экземпляр строки продажи знает:

— количество;

— налоговый статус.

Б. Определение обязанностей: "кого я знаю".

В общем случае экземпляр строки транзакции знает:

— экземпляр товара (или другой реальный предмет), количество которого известно данному экземпляру строки транзакции;

— следующий экземпляр строки. В данном случае экземпляр строки продажи знает:

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

Экземпляр строки продажи может также знать экземпляр строки возврата. Эту возможность мы рассмотрим позднее, а сейчас остановимся на том, что экземпляр строки продажи знает:

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

— продажу.

(Каждая продажа и каждый экземпляр товара знают некоторое количество экземпляров строки продажи.)

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

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

Добавим обязанности экземпляра строки продажи к объектной модели (рис.1. 33).

Рис.1. 33. Экземпляр строки продажи: «что я знаю, кого о знаю, что я делаю»

Описание каждой службы

Правильно выбранное имя службы весьма эффективно описывает ее сущность. В некоторых слу­чаях можно ввести описание службы, т.к. иногда нужно знать, для чего именно она предназначена.

#116. Стратегия "Описание служб с помощью шаблона"

• Опишите каждую службу с помощью шаблона: параметры ввода и вывода описание (включая псевдокод или реальный код, детализация применяемого алгоритма) коды ссылок на предшествующую документацию, если такая существует возможность просмотра: общий, защищенный, частный.

Рассмотрим, что именно нужно для описания служб "calculatetotal" для продажи и экземпляра строки продажи. Применяя структурный псевдокод, можно составить следующее описание:

sale.calcTotal (; total)

calcSubtotal (; subtotal)

calcDiscount (subtotal ; discount)

total = subtotal - discount

calcTax (total ; tax)

total = total + tax

sale.calcSubtotal (; subtotal)

subtotal = 0

for each saleLineItcm that I know:

saleLincItem. calcSubtotal (; lineltemTotal)

subtotal = subtotal + UneItemTotal.

Новый вариант экземпляра строки продажи

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

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

— Покупатель может вернуть экземпляр товара не там, где он его купил.

— Покупатель может вернуть экземпляр товара, имевший другую цену на момент его покупки.

— Покупатель может вернуть экземпляр товара, которого у Х уже нет.

— Покупатель может вернуть экземпляр товара с особой маркировкой, возможно отмечающей его мелкий дефект.

— С покупателя могла быть удержана конкретная сумма за возврат.

Экземпляр строки возврата знает экземпляр строки продажи, а также:

  • цену возврата;

  • код причины возврата;

  • дату продажи;

— цену продажи.

Похоже, что в этом случае применяется соответствующий данной области метод gen-spec. Неко­торые обязанности остаются прежними, а другие изменяются.

#67. Стратегия "Общие атрибуты"

• Рассмотрим классы, имеющие общие атрибуты.

• Если смысл и имена атрибутов совпадают и можно использовать метод gen-spec, примените класс обобщения и выделите все общее, что было обнаружено между ними.

#120. Стратегия"Общие службы"

• Изучим классы, имеющие общие службы.

• Если смысл и имена служб совпадают и можно применить метод gen-spec, примените класс обобщения и выделите все общее, что было обнаружено между ними.

Если имя службы остается прежним, но ей присущи конкретные детали, это имя нужно указать и при обобщении, и при ограничении.

Добавим к модели экземпляр строки возврата в качестве ограничения экземпляра строки прода­жи (рис.1. 34).

Рис.1. 34. Экземпляры строки продажи и экземпляры строки возврата:

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