Открытая коллекция знаний

OpenU.Ru

Объектно-ориентированное проектирование информационных систем


Глава3. Определение обязанностей объектов предметной области.






Каждый объект должен реализовывать следующие виды обязанностей и функций в соответствии с обязанностями всей системы:

1 вид: "Что я знаю?"
2 вид: "Кого я знаю?"
3 вид: "Что я делаю?"

3.1. Обязанности актёров и участников.

Стратегия №52. "Определение атрибутов актёра и участника".
Определение обязанностей: "Что я знаю?".
  • для актёра рассмотрите: имя, адрес, телефон;
  • для участника рассмотрите: №, пароль, дату/время (возможно конечную дату/время).




Стратегия №89. "Основные службы".
Определение обязанностей: "Что я делаю?".
  • основные службы: получить; установить; добавить; исключить связанный объект; создать; инициировать; удалить то, за что отвечает класс;
  • атрибуты являются собственностью объекта (никто не вправе их трогать, кроме самого объекта). Поэтому необходимо определить службы с какими-нибудь названиями: получить <имя атрибута> ; установить <имя атрибута> ;
  • основными службами объектов DM является поиск, загрузка и сохранение данных.

Замечание:

основные службы объектов показывают только в особых случаях, в которых они применяются.



Стратегия №94. "Определение служб актёра и участника".
Определение обязанностей: "Что я делаю?".
  • для актёра или участника нужны службы: сделать <действие>, в <состоянии> (например, в состоянии работы или нет), является значение или вид (например, является старшим кассиром; является покупателем);
  • для актёра как множества участников нужны службы: СделатьПоВсем (выполнить действие по всем актерам; Вычислить по всем кассирам; или, например, найти максимальный номер; удалить всех); СделатьПо Виду, Значению и т.п. (например, сделать по всем кассирам некоторую операцию);
  • для участника нужны службы: СделатьПоВсемТранзакциям (по всем транзакциям вычислить - на какую сумму продано); СделатьПоТранзакциям Вида, Значения и т.п. (сделать по транзакциям текущего сеанса выручку сегодня).



Стратегия №50. "Выбор атрибутов из реальных".
Определение обязанностей: "Что я знаю?", "Кого я знаю?".
  • выбирать атрибуты, которые можно приписать соответствующему объекту реального мира;
  • исследуйте их с точки зрения обязанностей данной системы и оставьте необходимые;
  • исследуйте связи объектов с другими объектами системы на предмет необходимости знания о них; при необходимости добавьте соответствующие атрибуты.

Кассир имеет связи с магазином и терминалом. Кассиру не обязательно знать, в каком магазине он находится. Информация о терминале не нужна, однако необходима ссылка на сеанс работы. В качестве атрибута надо добавить сеанс (сейчас у кассира атрибуты: N, пароль, сеанс текущий).

Стратегия №86. "Сделай сам".
Определение обязанностей: "Что я делаю?".
  • в моделирующей системе объект имитирует действие реального объекта. Однако не производится полная имитация: объекты системы делают то, что обязана делать система, по отношению к объекту реального мира.
  • "Сделай сам" включает в себя службы, работающие с атрибутами объекта, что приводит к ослаблению соединения и усилению связности.


Стратегия №90. "Служба как вопрос".
Определение обязанностей: "Что я делаю?".
  • выясните, на какие вопросы может ответить объект. Полезные слова: имеет, сколько включает в себя, является.

Введём службу: ЯВСеансе (да - если кассир в сеансе; нет, если кассир не связан с сеансом).


Стратегия №91. "Служба как глагол".
Определение обязанностей: "Что я делаю?".
Список полезных имён служб:
  1. активизировать, запустить, инициировать, открыть, начать;
  2. ответить;
  3. оценить, испытать, определить значение;
  4. вычислить, подсчитать;
  5. закрыть, закончить, выключить, прекратить;
  6. определить, решить, выяснить, разрешить;
  7. найти, получить, указать место;
  8. измерить, установить границы;
  9. контролировать, направлять, управлять, наблюдать, руководить, следить;
  10. квалифицировать, помечать, различать;
  11. выбирать, извлекать, отбирать;
  12. к службам, относящимся к разным интервалам времени добавляйте слова: "За интервал времени".


Выручку переименовываем в службу: "ПодсчитатьВыручкуЗаИнтервал".

Объект кассир выглядит следующим образом:


3.2. Обязанности мест.

Стратегия №53. "Определение атрибутов места".
Определение обязанностей: "Что я знаю?".
  • для места рассмотрите атрибуты: №, имя, адрес (координаты).

Магазин: имя.

Стратегия №75. "Определение связей между объектами для места".
Определение обязанностей: "Кого я знаю?".
  • для места рассмотрите связи с объектами, которые на нём находятся или которые оно содержит;
  • для места рассмотрите связи с транзакциями, которые оно выполняет или в которых участвует.

Необходимо добавить связь в схему:


Стратегия №102. "Служба на всём множестве".
Определение обязанностей: "Что я делаю?".
  • Добавьте к объекту - множеству службы, действующие на всём этом множестве. При этом каждый внутренний объект должен реализовывать все свои возможности максимально.

Магазин: эти службы на множестве кассиров:
 НайтиКассираПоN
 ыручкаЗаИнт
 СколькоКассировВСеансе.

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

Товар. "Что я знаю?":N, имя, штрих-код, количество (имеющееся в магазине), цена (?). Оказывается, цена будет отдельным объектом:

Товар. "Кого я знаю?": цена.
Товар. "Что я делаю?": ЦенаПоДате.
Терминал. "Что я знаю?": N.
Терминал. "Кого я знаю?": кассир, сеанс, ящик для денег (магазин уберём).
Терминал. "Что я делаю?": ВСеансе, НачатьСеанс, ЗакончитьСеанс, ДенегВЯщике.
Ящик. "Что я знаю?": сумма.
Ящик. "Что я делаю?": ДобавитьСумму.

3.4. Обязанности транзакций.

Стратегия №54. "Определение атрибутов транзакции".
Определение обязанностей: "Что я знаю?".
  • для транзакции рассмотрите атрибуты: N, дату/время;
  • для экземпляра строки транзакций: количество.


Замечание.
Иногда для транзакции необходимо указывать дату/время окончания. Тогда для строки возможны атрибуты: дата/время. Например, для сеанса работы важно: дата/время начала и конца; для продажи важно: дата/время начала.

Рассмотрим:
Продажа. "Что я знаю?": дата/время.
Строка продажи. "Что я знаю?": количество.

Стратегия №66. "Вычисляемые результаты".
Определение обязанностей: "Что я знаю?".
  • необходимо определить службу: Вычислить <Имя> для вычисляемых значений;
  • не добавляйте в модель атрибут, выражающий вычисляемый результат;
  • в случае необходимости его можно добавить следующим образом: службу Получить <…> для этого атрибута определите так, чтобы она возвращала значение из атрибута, если оно там есть, а в противном случае вызывала бы службу - Вычислить <…> и записывала бы результат в этот атрибут.


Строка продажи. "Что я делаю?": ВычислитьСумму.
Продажа. "Что я делаю?" (стратегия №102): ВычислитьСумму.

Стратегия №76. "Определение связей транзакции".
Определение обязанностей: "Кого я знаю?".
  • для транзакции определите её связи с участниками; объектом - контейнером; объектами, участвующими в ней; инициировавшими её, а также с экземплярами её строк;
  • для экземпляра строки транзакции установите связи с самой транзакцией и объектами, которые участвуют в данной строке непосредственно.


Продажа. "Кого я знаю?": сеанс (оплату уберём).
Строка продажи. "Кого я знаю?": продажа, товар.

Стратегия №96. "Определение служб транзакции".
Определение обязанностей: "Что я делаю?".
  • для экземпляров строки транзакций рассмотрите службы: Вычислить <…>;
  • для транзакции рассмотрите службы: Вычислить, Завершить, Отменить, Количество Строк.


Продажа. "Что я делаю?": Завершить, Отменить.

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

Стратегия №116. "Описание служб".
Определение обязанностей: "Что я делаю?".
  • опишите каждую службу по шаблону: имя, параметры, их типы (в том числе результат функции); описание (в том числе псевдокод или реальный код на языке программирования), ссылки на предыдущую документацию, область видимости: частный, защищённый, общий.


СтрокаПродажи. ВычислитьСумму: денежный {результат=количество * товар.цена. цена}.

Возврат.

Нюансы возврата: товар в момент покупки имел другую цену, товар не бракованный, то он возвращается на полку; товар в силу каких-либо причин (например, из-за брака) не возвращается в торговый зал. С покупателя может быть удержана определённая сумма за возврат.



Если имена служб совпадают, но их реализация различна, то имя службы следует приписывать каждому объекту.

Оплата наличными и по карте:


Сеанс.
Сеанс. "Что я знаю?": дата/ время начала, дата/ время окончания.
Сеанс. "Кого я знаю?": кассир, терминал.
Сеанс. "Что я делаю?": ПринятьНаличными, Продать, ВыручкаЗаИнт, ПродажаЗаИнт.

Теперь построим общую схему:

Объекты PD







Содержание