GrandM-Patterns_in_Java
.pdfГлава 3. Жизненный цикл программного обеспечения - 45
Используемая система учета времени предоставляет данные по количеству от работанных часов только в виде распечатанного отчета. В настоящее время эту
работу в течение всего рабочего дня выполняет один человек, который вводит количество отработанных служащими часов в систему платежных ведомостей
и$ просматривает введенную информацию. Этот работник «стоит» компании
24 000 в год. Если компания$ продолжит использование этой системы, она должна будет платить 24 000 в год еще одному человеку, который будет вво
дить данные рабочего времени служащих.
Стоимость найма человека, частично занятого в должности регистратора в каж |
|
дом магазине, составляет $ 9000 на 1 работника в год. Текущая стои ость со |
|
держания штата регистраторов |
$ 63 000 в год. |
Полная текущая стоимость затрат- |
на поддержание системы учета времени со |
ставляет $ 87 000 в год. Через два года, после расширения компании, стоимость |
|
этой работы возрастет до $ 237 000. |
Будущий проект должен создать новую систему учета рабочего времени, кото рая позволит и после расширения сети оставить на прежнем или более низком уровне стоимость работ по поддержанию системы учета времени. Ожидается, что эта система окупит себя в течение 18 месяцев и на ее развертывание потре буется 6 месяцев с момента начала проекта.
Определение спецификации требований
Как минимум, спецификация требований должна задавать необходимые функ ции и атрибуты всего, что присутствует в проекте. Необходимые функции - это все действия, которые система должна делать (например, регистрация времени начала работы служащих). Необходимые атрибуты - это характеристики систе мы, не являющиеся функциями (например, условие, в соответствии с которым
терминалами регистрации могут пользоваться люди, получившие хотя бы базо вое образование). Существуют также некоторые другие вещи, которые могут
присутствовать в спецификации требований, но не упоминаются в этой книге.
Предnоложення. Это перечень справедливых утверждений, таких как требова ние минимального образовательного уровня служащих или то, что компания не
будет объединена.
Риски. Представляют собой перечень вероятных ошибочных процессов, кото
рые приводят к задержке или несостоятельности работы проекта. Такой список Может содержать сомнительные технические аспекты (например, доступность устройств, пригодных для использования в качестве терминалов учета време ни). Крометого, список может включать пункты, не связанные с техникой (на при ер, предполагаемые изменения в законе о труде).
Зависимости. Представляют собой перечень ресурсов, от которых может зави сеть данный проект (например, существование локальной сети).
Требования, указанные в спецификаuии, лучше пронумеровать. Тогда основан-
46 • Глава 3. Жизненный цикл программного обеспечения
использования, документах проекта и даже исходном тексте программы. Если позднее обнаружатся несоответствия, то несложно отследить их в обратном на
правлении и установить связь с определенными требованиями. Обычно требо
вания нумеруются в иерархическом порядке с использованием функций. Опи шем некоторые функции, необходимые для системы учета времени.
Rl. Система должна документировать время, когда служащие начинают ра
боту, идут на перерыв, возвращаются с перерыва и уходят с работы.
Rl.l. При использовании терминала учета рабочего времени служащие должны идентифицировать себя, помещая свою идентификаци онную карточку в устройство для считывания на терминале.
Rl.2. После идентификации с помощьютерминалаучета рабочего вре мени служащий может нажать ююпку, которая отмечаетлибо нача ло рабочей смены, либо уход на перерыв, либо возвращение с пе
рерыва, либо конец смены. Система учета времени долговремен но хранитзапись каждого такого события в форме, позволяющей помещать ее в отчет, документирующий рабочие часы служащих.
R2. Контролеры должны иметь возможность просматривать рабочее время подчиненных на терминале, не распечатывая эти данные.
R2.1. Терминал учета времени позволяет контролеру просматривать и видоизменять зарегистрированные рабочие часы служащего.
R2.1.1. Все выполненные ревизии записи учета рабочего време ни служащих отражаются в контрольном журнале, где
сохраняются также исходные записи и в каждом случае указывается имя контролера, проводившего ревизию.
R2.2. Пользовательский интерфейс терминала для работников, не яв ляющихся контролерами, не должен содержать меню, связанные
с функциями контролеров.
R2.3. Контролеры могут изменять записи учета рабочего времени толь
ко своих подчиненных.
Ю. По завершении каждого платежного периода система учета рабочего времени должна автоматически передавать данные о рабочих часах с()
трудника системе платежных ведомостей.
По мере разработки некоторых ситуаций использования возможно появление
новых полезных функций. |
|
|
|
|
|
|
|
||||
BhIcoKoro уровня |
вых с |
и |
|
ций и |
сп |
ользов |
ан |
ия |
|||
Раз |
раб |
о |
ключ |
ту |
|||||||
|
тка |
|
е |
|
а |
|
|
|
При разработке ситуаций использования сначала, как правило, Основное внима ние уделяется наиболее распространенным случаям, а затем разрабатываются менее используемые ситуации. Широко распространенные ситуации использо-
Глава 3. |
Жизненный цикл программного обеспечения |
_47
вания называются основными ситуациями использования. Реже встречающиеся
ситуации называются второстепенными ситуациями использования. Опишем си
туацию использования для часто встречающегося случая применения системы учета рабочего времени.
Ситуация использования: Сотрудник использует терминал учета времени.
Участник: |
Сотрудник. |
Uель: |
Ввод информации об уходе и приходе сотрудника |
|
в систему учета рабочего времени. |
Синопсис:
Тип:
Перекрестные ссылки:
Сотрудник собирается начать работу, уйти на пере рыв, вернуться с перерыва или закончить рабочую смену. Он идентифицирует себя в системе учета времени и дает ей знать, какой из четырех вариан тов он собирается осуществить.
Основной и ключевой.
Требования RI , Rl. l, Rl .2, Rl.3 и R2.2.
Ход событий
Сотрудник |
|
Система |
|
|
|
1 . Сотрудник проводит своей идентифи- |
2. Терминал учета времени считывает |
|
кационной карточкой через считываю- |
|
идентификационный номер сотрудни- |
щее устройство терминала |
|
ка с карточки и проверяет правиль |
|
|
ность этого номера. Затем терминал |
|
|
учета «напоминаеТ» сотруднику, что он |
|
|
должен указать: или начало работы, или |
з. Сотрудник указывает на терминале, что |
4. |
уход на перерыв, или возвращение с пе |
рерыва, или конец рабочей смены |
||
Терминал учета рабочего времени делает |
||
он либо начинает работу, либо уходит |
|
долгосрочную запись данных сотруд |
на перерыв, либо приходит с перерыва, |
|
ника. Затем подтверждается правиль |
либо заканчивает рабочую смену |
|
ность данных и отображается текущее |
|
|
время. Это свидетельствует о готовно |
сти приема данных от следующего со трудника
Рассмотрим менее детализированную ситуацию использования.
Ситуация использования:
Участник:
Цель:
Сотрудник использует несколько терминалов учета времени для отслеживания рабочих часов.
Сотрудник.
Ввод в систему учета информации об уходе и при ходе сотрудника в течение всей рабочей смены.
48 •
Глава 3. |
г |
мм |
ного обеспечения |
Жизненный цикл пра ра |
|
Синопсис:
Тип:
Перекрестные ссылки:
Сотрудник может выбрать любой терминал учета времени, чтобы сообщить системе: начинает он ра боту, уходит на перерыв, возвращается с перерыва или заканчивает рабочую смену.
Основной и ключевой. Требования RI и RI .2.
Ход событий
1. |
Сотрудник |
|
Система |
|
Сотрудник испо |
2. |
Система записывает время начал |
а рабо- |
|
|
льзует терминал учета |
|
|
|
|
рабочеro времени, чтобы проинфор- |
4. |
чей смены служащеro |
|
|
мировать систему о начале работы |
|
|
|
3. |
Сотрудник использует терминал для |
Система записывает время ухода служа- |
||
|
информирования системы о том, что |
|
щего на перерыв |
|
|
он идет на перерыв |
|
|
|
5. |
Сотрудник использует терминал для |
6. |
Система записывает время возвращения |
|
|
ИНфОРМИРОlJания системы о том , что |
|
служащего с псрсрыва |
|
7. |
он возвращается с перерыва |
|
|
|
Сотрудник использует терминал для |
8. |
Система записывает время окончания |
||
|
информирования системы об окон |
|
сотрудником рабочей смены |
|
|
чании работы |
|
|
|
|
|
|
|
|
При анализе менее детализированной ситуации использования может возник нуть проблема. Не существует условия, которое бы гласило, что все терминалы учета рабочего времени должны показывать точное время. Скорее всего, со трудники заметят неодинаковое отображение времени на разных терминалах.
Им захочется начинать свою рабочую смену с терминала, показывающего более
раннее время, и, заканчивая работу, проходить через терминал, показывающий
более позднее время. Чтобы сотрудники не имели такой возможности обмана
компании, необходимо добавить еще одно требование:
Rl.З. Разность показаний времени, отображаемых и записываемых раз ными терминалами, не должна превышать пять секунд.
Как только будут разработаны ключевые случаи ситуации использования, будут
найдены новые уточнения требований.
Объектн о - о р и ентированный анализ
Объектно-ориентированный анализ занимается построением модели пробле
мы, подлежащей решению. Он отвечает на вопрос, что будет делать программ-
Глава 3. Жизненный цикл программного обеспечения - 49
ОСНОВНЫМ результатом объектно-ориентированного анализа является концеп-
1Уальная модель проблемы, описывающая предлагаемую систему и объекты реаль ного мира, с которыми система будет взаимодействовать. Кроме того, концеп
туальная модель рассматривает отношения и взаимодействия между объектами
проблемной области, а также между объектами и системой.
Как правило, концептуальные модели создаются в два этапа:
1 . Идентификация объектов, охватываемых проблемоЙ. Очень важно обозна чить все относящиеся к проблеме объекты. Если есть сомнения, то лучше включить объект в модель. Если объект не нужен для последующего проек тирования, это становится очевидным во время разработки проекта. С дру гой стороны, если нужный объект отсутствует при анализе, то его отсутст вие может быть не обнаружено позднее в проекте.
2.Создание концептуальной модели для идентификации отношений между
объектами.
Для описания объектов и отношений концептуальной модели UML использует
ту же символику, которую он применяет при описании классов и ассоциаций в модели классов. На рис. 3.2 изображена диаграмма, содержащая (в произ
вольном порядке) только те объекты, присутствие которых оБУСЛОRЛено требо ваниями и ситуациями использования. Изображенная на рис. 3.3 диаграмма со держит наиболее очевидные отношения.
PayPeriod
[
[
[
[
|
|
Тimekeeper |
Employee |
|
Break |
||
|
|
|
|
Timekeeping |
|
|
|
|
|
|
|
|
|
||
|
|
Supervisor |
|
Shift |
|||
|
|
Event |
|
||||
|
|
|
|
|
|
||
|
EmployeeBadge |
|
|
|
|
||
|
Timekeepinglog |
TimekeepingSystem |
|||||
|
|
|
|
|
|
|
|
|
|
EmployeelD |
|
|
|
|
|
|
|
TimekeepingReport |
|
PayrolLSystem |
|||
|
|
|
|
|
|
|
|
Рис. 3.2. концептуальная модель, содержащая только объекты
При внимательном рассмотрении рис. 3.3 можно обнаружить два объекта, ко
торые не участвуют ни в одном из указанных отношений, это объекты
TimekeepingSystem и EmployeeID.
50 |
• |
Глава 3. Жизненный цикл программного обеспечения
Владеет
11
1 |
EmpLoyeeBadge 1 |
I |
|
I |
|
собственность |
|
I ТimеkеерiпgSуstеm I |
|||
|
|
EmpLoyeeID |
|||
|
|
|
I |
1 владелец |
создающий создаваемый |
|
|
1 |
«- Это часть• • •» |
|
|
|
|||||||
|
1 1 (оздает |
|
|
|
|
|
2 |
|
. • |
|
1 |
0 |
|
часть |
||
|
0• •- |
|
часть |
|
|
|
|
|||||||||
|
EmpLoyee |
|
1 |
Timekeeping Event |
|
0 |
|
1 |
1 |
|
Break |
|||||
|
|
|
|
|
|
|
часть |
целое |
|
|
• • * |
|
||||
|
|
|
0• • - |
|
0• •- |
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
«Это•••»1
«Это• • •» ...
1Supervisor
использующий
... |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Timekeeper |
1 |
|
|
|||
1 |
..... |
|
|
||||
Изменяет |
|||||||
11 Измен |
яет |
|
11 1 |
|
|||
|
|
|
1 |
( |
. |
|
т1· |
одерж |
теkеер1П |
|
1 |
|
ит'" gLog
исполЬзует.....
используемый
I TimekeepingReport I
Принадлежит
1 1 PayPerfod
|
«- Это часть•••» 1 1 |
1 |
|
целое |
|||||||
|
Shift |
|
|||||||||
|
|
|
|
|
|
||||||
|
|
|
* |
|
|
|
целое |
|
|
|
|
1 |
и |
•• |
|
- |
|
|
|
|
|
||
|
|
|
|
|
|
|
|||||
|
спользуе |
мыи |
|
|
|
|
|
||||
LO |
|
|
|
|
1 |
|
|
||||
|
|
|
|
|
|
|
|
|
Использует'" |
||
|
|
|
|
использующий |
|
|
|
||||
I |
|
|
|
|
I |
PayroLLSystem |
|
||||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 3.3. Концептуальная модель, представленная вместе с ассоциациями
1
1
Данная диаграмма считается конuептуальной моделью искомой проблемы. Как
оказалось, объект TimekeepingSystem в рамках проблемы ни с чем не связан, поэтому делаем вывод, что он является частью решения, а не проблемы. Зна чит, его можно удалить из модели.
Объект EmployeeID очень тесно связан с объектом Employee. В таком случае его лучше представлять в виде атрибута. На рис. 3.4 представлена конuептуаль ная модель, в которую добавлены атрибуты.
Эта диаграмма отражает всю глубину проведенного нами анализа данной про
блемы.
Объектн о - ор ие нтированное п р о е ктирование
Объектно-ориентированное проектирование занимается разработкой внутрен
ней логики программы - в данном случае рассматривается внутренняя логика
системы учета рабочего времени. Проект не учитывает ни то, как пользователь-
Владеет
Глава 3. Жизненный цикл программного обеспечения
предм |
|
1 |
L |
Е |
mp |
LоуееВаd |
ge |
|
ет обл |
|
|
|
|
|
|
• |
51 |
1 |
владеющий |
|
||
|
Emp[oyee |
создающий |
||
Emp[oyeeID |
1 |
(оздает |
||
|
|
"' «- Это.. .» |
I TimekeeperJ
"' «- Это. . .» Изменяет
Supervisor ! |
Изменяет |
|
использующий
Использует
используемый
ТimekeepingReport
|
|
О |
. • * |
I |
создаваемый |
.; 0..1 |
I |
|
|
|
I |
|||||||
|
|
|
|
|
|
2 «- Это часТl,. . |
|
|
|
|||||||||
ТimekeepingEvent |
часть |
целое |
|
Break |
||||||||||||||
when:time |
|
|
|
|
|
|
|
I |
0..* |
|
||||||||
0..* |
|
часть |
|
0.. * |
«- Это часть. . .; |
1 |
|
|
1 |
|
|
|||||||
|
|
|
|
|
|
|||||||||||||
|
r- |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
целое II |
Shift |
I |
||||||||
1 |
|
Принадлежит ему |
||||||||||||||||
|
|
|
|
|
|
0..* |
|
|
|
|
|
|
|
|
|
|
|
|
!TimekeepingLog: |
|
|
|
|
|
|
|
|
|
|
|
|||||||
используемыи |
|
|
|
|
|
|
|
|
||||||||||
J |
|
|
|
1 |
|
|
|
_ |
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
Принадлежит ему |
|
|
|
"'Использует |
||||||||||
|
|
|
|
|
|
|
|
использующий |
1 |
|
|
|
|
|||||
|
|
|
PayPeriod |
|
|
I |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
PayroLLSystem |
|
|
|||||||||||
|
|
start:time |
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|||||||||||
|
|
end:time |
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 3.4. Концептуальная модель с атрибутами
данных. Конечной целью объектно-ориентированного проектирования является
создание детального проекта классов, обеспечивающих эту внугреннюю логику.
Существуют различные стратегии использования результатов анализа при соз
дании проекта. Стратегия, используемая в данной книге, заключается в созда
нии диаграммы классов, моделирующей структуру отношений в концептуальной
МОдели. Затем разрабатываются диаграммы взаимодействия с целью моделирова
ния поведенческих отношений в рамках концептуальной модели. Далее уточня ются диаграммы классов с учетом информации, предоставляемой диаграммами взаимодействия. И наконец, диаграммы классов и диаграммы взаимодействия
дополняются требованиями, которые не были охвачены концептуальной моде
лью. В течение всего процесса используются шаблоны проектирования, спо
СОбствующие достижению цели.
Создадим первую диаграмму классов, предполагая, что существует класс для
Представления каждого объекта концептуальной модели (рис. 3.5). Даннаяа диа
грамма не представляет атрибутов объектов концептуальной модели, описы-
54 |
• |
Глава 3. |
о обеспечения |
Жизненный цикл программног |
з. |
|
|
|
|
|
|
Сотрудник |
|
|
|
|
4 |
. |
|
|
|
|
|
С стема |
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
и |
|
|
|
|
|
|
|
|
|
|||||||
С |
|
Н |
|
|
ука ывает на терминале, |
Т |
|
|
нал |
|
б |
|
|
|
|
|
производит |
||||||||||||||
|
ОТРУД |
|
ИК |
|
з |
|
|
|
|
|
|
|
|
|
и |
|
уч |
|
|
|
ы |
бо |
|
|
|
|
При |
||||
|
|
|
|
|
|
б |
|
|
|
|
б |
|
|
|
|
|
а |
|
ись отражающу |
в |
СОТРУДНИка. |
||||||||||
|
что он ли |
о начинает ра |
очую сме |
|
|
з |
п |
|
, |
|
ю |
|
|
|
|||||||||||||||||
|
ну, |
либо уходит на перерыв, либо |
|
|
этом подтвеРЖ!lается завершение операции уче |
||||||||||||||||||||||||||
|
|
о |
вращается с |
|
ерерыва |
|
ибо |
|
|
|
та |
|
б |
|
времени, |
|
о |
чем |
сви |
етельствует |
|||||||||||
|
в |
п |
, л |
за |
|
|
ра |
очего |
|
||||||||||||||||||||||
|
з |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
д |
|
|
|
|
||||
|
|
|
|
|
|
|
б |
оту |
|
|
|
|
|
|
отображение текуще о |
|
в |
ремени и |
ото |
в |
ность |
||||||||||
|
канчивает ра |
|
|
|
|
|
|
|
|
|
|
|
г |
|
|
|
|
г |
|
|
кработе со следующим служащим
вданной ситуации использования участвуют классы, которых нет на рис. 3.6.
Вэтой ситуации использования говорится, что терминал учета рабочего време ни взаимодействует с пользователем, поэтому необходимо включить в наш
проект класс пользовательского интерфейса.
В ситуации использования говорится также о создании постоянной записи со бытий системы учета рабочего времени. Чтобы управлять этими данными, а также информацией о служащих, которую должен искать терминал учета ра бочего времени, необходимо иметь базу данных. И опять мы оставляем за со бой право вносить дополнительные уточнения позднее.
Нужно свести к минимуму количество зависимостей между пользовательским интерфейсом и классами, реализующими внутреннюю логику терминала учета рабочего времени. Поддерживая слабую связьпо. между интерфейсом и внутрен ней логикой, мы повышаем надежность Достижению этой цели служит шаблон Facade. Он предназначен для поддержания слабой связи между функцио нально связанным набором классов и соответствующими клиентскими класса ми, поэтому между набором классов и соответствующими клиентскими класса ми вводится дополнительный класс. Почти весь или даже весь доступ клиентов к набору классов происходит через этот класс. Кроме того, в дополнительном классе инкапсулирована общая логика, которая нужна для использования это го набора классов.
Вводимый в проект класс-фасад называется TimekeepingController. Он от вечает за управление последовательностью событий во время взаимодействия терминала учета времени с пользователем.
На основании предыдущих ситуаций использования можно создать диаграмму взаимодействия (рис. 3.7).
Опишем взаимодействия, показанные на данной диаграмме.
1.Объект UserInterface начинает взаимодействие с передачи иден
тификационного номера служащего методу doTransaction объекта
TimekeepingController.
1.1.Объект TimekeepingController получает информацию о со труднике, имеющем данный идентификатор, передавая иденти
фикационный номер служащего методу LookupEmployee объекта Database. Метод LookupEmployee возвращает объект Employee,