

 
Глава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
 
 
 
 
 
 

