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

Участник: кассир

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

#50. Стратегия "Выбор атрибутов из актуальных атрибутов"

• Это аспект возникающего объекта программного обеспечения: "Я знаю другие объекты, связанные с реальным объектом, абстракцией которого я являюсь".

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

• Сначала рассмотрите все атрибуты, а затем выберите нужные. Вначале исследуйте атрибуты данной области в общем, а затем строго с точки зрения обязанностей данной системы.

О каждом cashier(кассире) нужно знать:

— номер;

— пароль;

— уровень авторизации; и атрибут, характеризующий конкретный сеанс:

  • текущий сеанс.

  • Модель cashierпоказана на рис.1.21.

Рис. 1.21. Кассир: «что я знаю»

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

Объект cashierзнает сеанс, в котором он участвует (и любой сеанс также знает своего кассира), а так­же соответствующий объектperson(рис. 1.22).

Рис. 1.22. Кассир: "кого и знаю"

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

Объект cashierимеет базовые службы:get,set,add,removeиdelete, и в качестве класса —create.

#86. Стратегия "Сделай сам"

• Это аспект возникающего объекта программного обеспечения: "Я знаю другие объекты, связанные с реальным объектом, абстракцией которого я являюсь".

• "Сделай сам" включает в себя атрибуты и службы, работающие с ними, что приводит к ослаблению соединения (coupling) и усилению связности (cohesion).

• При построении моделирующей системы объект программного обеспечения будет имитиро­вать действия реального объекта. В большинстве систем полная имитация не производится: объекты программного обеспечения делают то, что обязана делать система по отношению к конкретному объекту.

Действия по отношению к реальному кассиру:

— проверка его авторизации (для выполнения конкретного действия):

— оценка его производительности за конкретное время.

Используя персонификациюи описывая объектcashier(являющийся абстракцией реального кас­сира) от первого лица, можно представить все следующим образом:

"Я кассир."

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

"Я определяю, могу я что-то делать, или нет."

"Я оцениваю собственную производительность."

Кто-то может возразить: "Но кассиры не авторизуют самих себя и, конечно же, нельзя допускать, чтобы они сами оценивали собственную производительность."

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

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

Объект cashier"знает" и "делает" то, что нужно делать системе по отношению к реальному касси­ру. Этот объект и реальный кассир полностью соответствуют друг другу, равно как и их атрибуты.

#50. Стратегия "Выбор атрибутов из актуальных атрибутов"

• Это аспект возникающего объекта программного обеспечения: "Я знаю другие объекты, связанные с реальным объектом, абстракцией которого я являюсь".

• Выберите атрибуты для объектов программного обеспечения из множества атрибутов, кото­рые можно было бы применить для описания соответствующего актуального объекта (реаль­ного мира).

• Сначала рассмотрите все атрибуты, а затем выберите нужные. Вначале исследуйте атрибу­ты данной области в общем, а затем строго с точки зрения обязанностей данной системы.

Службы объекта cashierи реального кассира тоже соответствуют друг другу, но лишь тогда, когда строится моделирующая система. В большинстве приложений эти службы кардинально различаются,

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

Зададим вопрос: "Авторизован ли объект?" К какому автоматизированному объекту нужно при этом обратиться? А кто выполнит команду: "проверить производительность за конкретный период времени". Кто это сделает?

Работает, конечно, объект cashier. У него достаточно знаний для осуществления упомянутых служб. (В противном случае получилась бы модель с "объектами", храпящими данные и "объектами", хранящими функции.)

Позволяя объекту cashierвыполнять указанные задания, мы ослабляем соединение (coupling), укрепляем связность (cohesion), а также основанное на данной области разделение служб (а не атри­бутов).

Заметим, что персонификация— жизненно важный аспект объектного мышления, один из наи­более важных принципов размещения служб. Он позволяет разработчикам моделей создавать рас­пределенные атрибуты и службы на основе характерного для конкретной области разделения классов. Также он помогает применять "DFD-мышление" и "ERD-мышление".

(DFD — диаграммы потока данных и ERD -- диаграммы сущность-отношение являются двумя частями методов проектирования, в которых разделяются данные и функции.)

Более того, персонификация сама по себе очень эффективна. Используйте ее, особенно при раз­работке динамики системы с помощью сценариев.

Далее рассмотрим, какие службы нужны кассиру.

#90. Стратегия "Служба как вопрос"

• Выясните, на какие вопросы может ответить объект.

• Полезные исходные слова: has(имеет),how many,how much (сколько?),includes(включает в себя),is(есть).

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

Одна из полезных служб кассира отвечает на вопрос: "Авторизован ли он?" Запишите ее в следую­щем виде:

— авторизован.

#91. Стратегия "Служба как глагол"

• Список полезных глагольных имен служб:

активизировать (запустить, инициировать, открыть, начать)

ответить (дать ответ)

оценить (испытать, дать оценку, определить значение)

вычислить (подсчитать, сосчитать, составить смету, определить цену или средний процент)

дезактивиpировать (закрыть, закончить, выключить, прекратить)

определить (решить, выяснить, наблюдать, разрешить)

найти (получить, обнаружить, указать точное местонахождение)

измерить (установить рамки, определить размер, ограничить)

контролировать (проводить, направлять, управлять, наблюдать, оперировать, руководить, следить)

квалифицировать (характеризовать, отличать, дискриминировать, различать, помечать) выбирать (отбирать, проводить селекцию, делать выбор, извлекать)

• К службам, относящимся к разным интервалам времени, добавляйте слова "за интервал времени".

Задачей другой полезной службы кассира является:

— оценить производительность.

Если служба применяется на различных временных интервалах, к ее имени добавляются слова "за интервал времени" (рис. 1.23).

Рис. 1.23. Кассир: «что я делаю»

Пересмотренные службы кассира:

— авторизован;

— оценить производительность за интервал времени.

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