

Глава3. Определение обязанностей объектов предметной области.
Каждый объект должен реализовывать следующие виды обязанностей и функций в соответствии с обязанностями всей системы:
1 вид: "Что я знаю?"
2 вид: "Кого я знаю?"
3 вид: "Что я делаю?"
3.1. Обязанности актёров и участников.
Стратегия №52. "Определение атрибутов актёра и участника". |
Определение обязанностей: "Что я знаю?". |
- для актёра рассмотрите: имя, адрес, телефон;
- для участника рассмотрите: №, пароль, дату/время (возможно конечную дату/время).
|
Стратегия №89. "Основные службы". |
Определение обязанностей: "Что я делаю?". |
- основные службы: получить; установить; добавить; исключить связанный объект; создать; инициировать; удалить то, за что отвечает класс;
- атрибуты являются собственностью объекта (никто не вправе их трогать, кроме самого объекта). Поэтому необходимо определить службы с какими-нибудь названиями: получить
<имя атрибута>
; установить
<имя атрибута>
;
- основными службами объектов DM является поиск, загрузка и сохранение данных.
Замечание:
основные службы объектов показывают только в особых случаях, в которых они применяются. |
Стратегия №94. "Определение служб актёра и участника". |
Определение обязанностей: "Что я делаю?". |
- для актёра или участника нужны службы: сделать <действие>, в <состоянии> (например, в состоянии работы или нет), является значение или вид (например, является старшим кассиром; является покупателем);
- для актёра как множества участников нужны службы: СделатьПоВсем (выполнить действие по всем актерам; Вычислить по всем кассирам; или, например, найти максимальный номер; удалить всех); СделатьПо Виду, Значению и т.п. (например, сделать по всем кассирам некоторую операцию);
- для участника нужны службы: СделатьПоВсемТранзакциям (по всем транзакциям вычислить - на какую сумму продано); СделатьПоТранзакциям Вида, Значения и т.п. (сделать по транзакциям текущего сеанса выручку сегодня).
|
Стратегия №50. "Выбор атрибутов из реальных". |
Определение обязанностей: "Что я знаю?", "Кого я знаю?". |
- выбирать атрибуты, которые можно приписать соответствующему объекту реального мира;
- исследуйте их с точки зрения обязанностей данной системы и оставьте необходимые;
- исследуйте связи объектов с другими объектами системы на предмет необходимости знания о них; при необходимости добавьте соответствующие атрибуты.
|
Кассир имеет связи с магазином и терминалом. Кассиру не обязательно знать, в каком магазине он находится. Информация о терминале не нужна, однако необходима ссылка на сеанс работы. В качестве атрибута надо добавить сеанс (сейчас у кассира атрибуты: N, пароль, сеанс текущий).
Стратегия №86. "Сделай сам". |
Определение обязанностей: "Что я делаю?". |
- в моделирующей системе объект имитирует действие реального объекта. Однако не производится полная имитация: объекты системы делают то, что обязана делать система, по отношению к объекту реального мира.
- "Сделай сам" включает в себя службы, работающие с атрибутами объекта, что приводит к ослаблению соединения и усилению связности.
|
Стратегия №90. "Служба как вопрос". |
Определение обязанностей: "Что я делаю?". |
- выясните, на какие вопросы может ответить объект. Полезные слова: имеет, сколько включает в себя, является.
|
Введём службу: ЯВСеансе (да - если кассир в сеансе; нет, если кассир не связан с сеансом).
Стратегия №91. "Служба как глагол". |
Определение обязанностей: "Что я делаю?". |
Список полезных имён служб:
- активизировать, запустить, инициировать, открыть, начать;
- ответить;
- оценить, испытать, определить значение;
- вычислить, подсчитать;
- закрыть, закончить, выключить, прекратить;
- определить, решить, выяснить, разрешить;
- найти, получить, указать место;
- измерить, установить границы;
- контролировать, направлять, управлять, наблюдать, руководить, следить;
- квалифицировать, помечать, различать;
- выбирать, извлекать, отбирать;
- к службам, относящимся к разным интервалам времени добавляйте слова: "За интервал времени".
|
Выручку переименовываем в службу: "ПодсчитатьВыручкуЗаИнтервал".
Объект кассир выглядит следующим образом:
3.2. Обязанности мест.
Стратегия №53. "Определение атрибутов места". |
Определение обязанностей: "Что я знаю?". |
- для места рассмотрите атрибуты: №, имя, адрес (координаты).
|
Магазин: имя.
Стратегия №75. "Определение связей между объектами для места". |
Определение обязанностей: "Кого я знаю?". |
- для места рассмотрите связи с объектами, которые на нём находятся или которые оно содержит;
- для места рассмотрите связи с транзакциями, которые оно выполняет или в которых участвует.
|
Необходимо добавить связь в схему:
Стратегия №102. "Служба на всём множестве". |
Определение обязанностей: "Что я делаю?". |
- Добавьте к объекту - множеству службы, действующие на всём этом множестве. При этом каждый внутренний объект должен реализовывать все свои возможности максимально.
|
Магазин: эти службы на множестве кассиров:
НайтиКассираПоN
ыручкаЗаИнт
СколькоКассировВСеансе.
3.3. Обязанности реальных вещей.
Товар. "Что я знаю?":N, имя, штрих-код, количество (имеющееся в магазине), цена (?).
Оказывается, цена будет отдельным объектом:
Товар. "Кого я знаю?": цена.
Товар. "Что я делаю?": ЦенаПоДате.
Терминал. "Что я знаю?": N.
Терминал. "Кого я знаю?": кассир, сеанс, ящик для денег (магазин уберём).
Терминал. "Что я делаю?": ВСеансе, НачатьСеанс, ЗакончитьСеанс, ДенегВЯщике.
Ящик. "Что я знаю?": сумма.
Ящик. "Что я делаю?": ДобавитьСумму.
3.4. Обязанности транзакций.
Стратегия №54. "Определение атрибутов транзакции".
|
Определение обязанностей: "Что я знаю?". |
- для транзакции рассмотрите атрибуты: N, дату/время;
- для экземпляра строки транзакций: количество.
|
Замечание.
Иногда для транзакции необходимо указывать дату/время окончания. Тогда для строки возможны атрибуты: дата/время.
Например, для сеанса работы важно: дата/время начала и конца; для продажи важно: дата/время начала.
Рассмотрим:
Продажа. "Что я знаю?": дата/время.
Строка продажи. "Что я знаю?": количество.
Стратегия №66. "Вычисляемые результаты".
|
Определение обязанностей: "Что я знаю?". |
- необходимо определить службу: Вычислить <Имя> для вычисляемых значений;
- не добавляйте в модель атрибут, выражающий вычисляемый результат;
- в случае необходимости его можно добавить следующим образом: службу Получить <…> для этого атрибута определите так, чтобы она возвращала значение из атрибута, если оно там есть, а в противном случае вызывала бы службу - Вычислить <…> и записывала бы результат в этот атрибут.
|
Строка продажи. "Что я делаю?": ВычислитьСумму.
Продажа. "Что я делаю?" (стратегия №102): ВычислитьСумму.
Стратегия №76. "Определение связей транзакции".
|
Определение обязанностей: "Кого я знаю?". |
- для транзакции определите её связи с участниками; объектом - контейнером; объектами, участвующими в ней; инициировавшими её, а также с экземплярами её строк;
- для экземпляра строки транзакции установите связи с самой транзакцией и объектами, которые участвуют в данной строке непосредственно.
|
Продажа. "Кого я знаю?": сеанс (оплату уберём).
Строка продажи. "Кого я знаю?": продажа, товар.
Стратегия №96. "Определение служб транзакции".
|
Определение обязанностей: "Что я делаю?". |
- для экземпляров строки транзакций рассмотрите службы: Вычислить <…>;
- для транзакции рассмотрите службы: Вычислить, Завершить, Отменить, Количество Строк.
|
Продажа. "Что я делаю?": Завершить, Отменить.
3.5. Описание каждой службы.
Стратегия №116. "Описание служб".
|
Определение обязанностей: "Что я делаю?". |
- опишите каждую службу по шаблону: имя, параметры, их типы (в том числе результат функции); описание (в том числе псевдокод или реальный код на языке программирования), ссылки на предыдущую документацию, область видимости: частный, защищённый, общий.
|
СтрокаПродажи. ВычислитьСумму: денежный {результат=количество * товар.цена. цена}.
Возврат.
Нюансы возврата: товар в момент покупки имел другую цену, товар не бракованный, то он возвращается на полку; товар в силу каких-либо причин (например, из-за брака) не возвращается в торговый зал. С покупателя может быть удержана определённая сумма за возврат.
Если имена служб совпадают, но их реализация различна, то имя службы следует приписывать каждому объекту.
Оплата наличными и по карте:
Сеанс.
Сеанс. "Что я знаю?": дата/ время начала, дата/ время окончания.
Сеанс. "Кого я знаю?": кассир, терминал.
Сеанс. "Что я делаю?": ПринятьНаличными, Продать, ВыручкаЗаИнт, ПродажаЗаИнт.
Теперь построим общую схему:
Объекты PD
