Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Практическая программная инженерия на основе учебного примера

Покупка
Артикул: 629850.02.99
Рассмотрены вопросы современных методов создания сложного программного обеспечения, использующего информацию, хранимую в базе данных. Подчеркнуты особенности создания такого программного обеспечения коллективом разработчиков: итеративный характер разработки, использование стандартных средств создания программ (стандартные компоненты, паттерны, Bean-компоненты и т. д.). Большое внимание уделено разработке структуры программного обеспечения, позволяющей наиболее просто организовать все стадии его жизненного цикла. Весь материал проиллюстрирован на одном достаточно сложном примере. Для разработчиков сложного программного обеспечения, а также для студентов вузов, специализирующихся в вопросах создания современного ПО.
Мацяшек, Л. А. Практическая программная инженерия на основе учебного примера : монография / Л. А. Мацяшек, Б. Л. Лионг. - 4-е изд. - Москва : Лаборатория знаний, 2020. - 959 с. - (Программисту). - ISBN 978-5-00101-783-7. - Текст : электронный. - URL: https://znanium.com/catalog/product/1201955 (дата обращения: 24.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
ПРАКТИЧЕСКАЯ
программная инженерия

на основе учебного примера

PRACTICAL
software 
engineering
A Case Study Approach

Harlow, England • London • New York • Boston • San Francisco • Toronto • Sydney • Singapore • Hong Kong
Tokyo • Seoul • Taipei • New Delhi • Cape Town • Madrid • Mexico City • Amsterdam • Munich • Paris • Milan

Leszek A. Maciaszek, Bruc Lee Liong
With contributions from Stephen Bills

Л. А. Мацяшек, Б. Л. Лионг
Л. А. 
, 
Мацяшек Б. Л. Лионг

ПРАКТИЧЕСКАЯ
программная
инженерия

на основе учебного примера

Перевод с английского
А. М. Епанешникова и В. А. Епанешникова

4-е издание (электронное)

Москва
Лаборатория знаний
2020

П Р О Г Р А М М И С Т У
....................................

УДК 681.1.06
ББК 32.973-018.2

М36

С е р и я о с н о в а н а в 2005 г.

Мацяшек Л. А.

М36
Практическая программная инженерия на основе
учебного
примера
/
Л. А. Мацяшек,
Б. Л. Лионг
;
пер. с англ. — 4-е изд., электрон. — М. : Лаборатория
знаний,
2020. — 959 с. — (Программисту). — Систем.
требования:
Adobe
Reader
XI
;
экран 10". — Загл.
с титул. экрана. — Текст : электронный.
ISBN 978-5-00101-783-7
Рассмотрены
вопросы
современных
методов
создания
сложного программного обеспечения, использующего информацию, хранимую в базе данных. Подчеркнуты особенности
создания
такого
программного
обеспечения
коллективом
разработчиков: итеративный характер разработки, использование стандартных средств создания программ (стандартные
компоненты, паттерны, Bean-компоненты и т. д.). Большое
внимание уделено разработке структуры программного обеспечения, позволяющей наиболее просто организовать все стадии его жизненного цикла. Весь материал проиллюстрирован
на одном достаточно сложном примере.
Для разработчиков сложного программного обеспечения,
а также для студентов вузов, специализирующихся в вопросах создания современного ПО.
УДК 681.1.06
ББК 32.973-018.2

Деривативное издание на основе печатного аналога: Практическая программная инженерия на основе учебного примера /
Л. А. Мацяшек, Б. Л. Лионг ; пер. с англ. — М. : БИНОМ. Лаборатория знаний, 2009. — 956 с. : ил. — (Программисту). —
ISBN 978-5-94774-488-0.

В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений,
установленных
техническими
средствами
защиты
авторских
прав,
правообладатель вправе требовать от нарушителя возмещения убытков или
выплаты компенсации

ISBN 978-5-00101-783-7

c○
Copyright
Pearson Education Limited 2005.
This translation of PRACTICAL
SOFTWARE ENGINEERING:
A CASE-STUDY APPROACH,
First Edition is published
by arrangement with Pearson
Education Limited.

c○ Лаборатория знаний, 2015

4

ДЕВИЗ

Делайте все настолько просто, насколько возможно, но не проще.

Альберт Эйнштейн

ПОСВЯЩЕНИЯ

Диане, Доминике и Томашу

Лешек А. Мацяшек

Моим родителям, Эдисону и Тине

Брюс Ли Лионг

Экскурс в структуру книги. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Часть 1. Проектирование программного обеспечения .
.
.
.
.
.
.
.
33

Глава 1. Жизненный цикл разработки программного обеспечения. . . . . . . . . 36

1.1. Сущность программной инженерии . . . . . . . . . . . . . . . . . . . . . . 37

1.1.1. Система ПО меньше, чем информационная система предприятия . . . . . . 38
1.1.2. Процесс создания и эксплуатации ПО является частью бизнес-процесса . . 39
1.1.3. Программная инженерия отличается от традиционной инженерии . . . . . 41
1.1.4. Программная инженерия больше, чем программирование . . . . . . . . . . 43
1.1.5. Программная инженерия напоминает моделирование . . . . . . . . . . . . 44
1.1.6. Система ПО сложна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

1.2. Стадии жизненного цикла . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

1.2.1. Анализ требований . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1.2.2. Проектирование системы . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
1.2.3. Реализация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
1.2.4. Интеграция и внедрение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
1.2.5. Процесс функционирования и сопровождения. . . . . . . . . . . . . . . . . 54

1.3. Модели жизненного цикла . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

1.3.1. Жизненный цикл «водопад с обратной связью»
. . . . . . . . . . . . . . . 56

1.3.2. Итеративный пошаговый жизненный цикл. . . . . . . . . . . . . . . . . . . 59

Спиральная модель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60

Rational Unified Process (RUP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Model Driven Architecture (MDA) . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Быстрая разработка ПО с короткими итерациями . . . . . . . . . . . . . . . . . 65

Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Ключевые термины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

Глава 2. Язык моделирования программного обеспечения . . . . . . . . . . . . . 72

2.1. Язык структурного моделирования . . . . . . . . . . . . . . . . . . . . . . 73

2.1.1. Моделирование потока данных . . . . . . . . . . . . . . . . . . . . . . . . . 74
2.1.2. Моделирование сущностей и отношений. . . . . . . . . . . . . . . . . . . . 77

2.2. Язык объектно-ориентированного моделирования . . . . . . . . . . . . . . 79

2.2.1. Диаграммы классов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.2.2. Диаграммы сценариев использования . . . . . . . . . . . . . . . . . . . . . 83
2.2.3. Диаграммы взаимодействия . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Диаграммы последовательности действий . . . . . . . . . . . . . . . . . . . . . 88

Оглавление

Диаграммы сотрудничества (связей) . . . . . . . . . . . . . . . . . . . . . . . . 90

2.2.4. Диаграммы состояний . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2.2.5. Диаграммы деятельности . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
2.2.6. Диаграммы выполнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Диаграммы компонентов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Диаграммы размещения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Ключевые термины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

Глава 3. Инструментальные средства программной инженерии. . . . . . . . . . 103

3.1. Инструментальные средства управления проектом . . . . . . . . . . . . . 104

3.1.1. Планирование и управление проектом . . . . . . . . . . . . . . . . . . . . 105
3.1.2. Управление проектированием и реализацией с учетом основных
показателей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

3.1.3. Унификация управления проектом с организацией совместной работы
и информационного обеспечения на основе Web-технологии. . . . . . . . 107

3.1.4. Унификация управления проектом на основе портфельной
Web-технологии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

3.1.5. Интеграция управления проектом с метриками . . . . . . . . . . . . . . . 111
3.1.6. Интеграция управления проектом с управлением рисками . . . . . . . . . 113

3.2. Инструментальные средства моделирования систем . . . . . . . . . . . . . 114

3.2.1. Управление требованиями . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
3.2.2. Визуальное UML-моделирование . . . . . . . . . . . . . . . . . . . . . . . 119
3.2.3. Формирование отчетов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
3.2.4. Моделирование БД . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

3.3. Интегрированные среды разработки . . . . . . . . . . . . . . . . . . . . . 126

3.3.1. Задачи стандартного программирования . . . . . . . . . . . . . . . . . . . 127

Написание программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Выполнение программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Отладка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
131

3.3.2. Интеграция с моделированием ПО . . . . . . . . . . . . . . . . . . . . . . 134
3.3.3. Разработка приложения предприятия . . . . . . . . . . . . . . . . . . . . . 135
3.3.4. Интеграция с бизнес-компонентами. . . . . . . . . . . . . . . . . . . . . . 137
3.3.5. Интеграция с управлением изменениями и конфигурацией . . . . . . . . . 138

3.4. Инструментальные средства управления изменениями и конфигурацией . . 140

3.4.1. Поддержка изменений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
3.4.2. Поддержка версий. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
3.4.3. Поддержка формирования системы . . . . . . . . . . . . . . . . . . . . . . 144
3.4.4. Поддержка реинжиниринга. . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Ключевые термины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

Глава 4. Планирование и отслеживание проекта программного обеспечения . . 155

4.1. Разработка плана проекта. . . . . . . . . . . . . . . . . . . . . . . . . . . 155
4.2. Планирование проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

4.2.1. Задачи, контрольные точки и подлежащие сдаче продукты. . . . . . . . . 160
4.2.2. Планирование задач в виде ленточной диаграммы. . . . . . . . . . . . . . 162

Оглавление
7

4.2.3. Ресурсы и календари ресурсов . . . . . . . . . . . . . . . . . . . . . . . . . 165
4.2.4. Планирование, определяемое трудозатратами, в виде ленточной
диаграммы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

4.2.5. Неполное и избыточное распределение ресурсов . . . . . . . . . . . . . . 168

4.3. Оценка бюджета проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

4.3.1. Оценка бюджета на основе графика выполнения. . . . . . . . . . . . . . . 172
4.3.2. Алгоритмическая оценка бюджета . . . . . . . . . . . . . . . . . . . . . . 176

Принципы алгоритмических моделей . . . . . . . . . . . . . . . . . . . . . . . 177
COCOMO 81 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
178

COCOMO II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
180

4.4. Отслеживание выполнения проекта . . . . . . . . . . . . . . . . . . . . . 184

4.4.1. Отслеживание графика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
4.4.2. Отслеживание бюджета. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

Фактические затраты, полученные из графика выполнения . . . . . . . . . . . 188
Фактические затраты, полученные из бухгалтерского учета. . . . . . . . . . . 189
Выполненная стоимость . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Ключевые термины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

Глава 5. Управление процессом создания и отслеживания программного
обеспечения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

5.1. Управление людьми
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

5.1.1. Привлечение и мотивация людей . . . . . . . . . . . . . . . . . . . . . . . 202

Формирование коллектива . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Теории мотивации. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
204

5.1.2. Организация связи в проекте. . . . . . . . . . . . . . . . . . . . . . . . . . 206

Формы связи. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
206

Линии связи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
207

Показатели связи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
208

Связь в разрешении конфликтов . . . . . . . . . . . . . . . . . . . . . . . . . . 209

5.1.3. Создание коллектива . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

5.2. Управление рисками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

5.2.1. Идентификация рисков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
5.2.2. Оценка рисков. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
5.2.3. Обработка рисков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

5.3. Управление качеством . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

5.3.1. Показатели качества программного обеспечения . . . . . . . . . . . . . . 218
5.3.2. Контроль качества. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

Тестирование ПО . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
221

Технологии тестирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Планирование испытаний . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

5.3.3. Гарантия качества. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

Контрольные списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
229

Обзоры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
230

Ревизии. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
231

5.4. Управление изменениями и конфигурацией . . . . . . . . . . . . . . . . . 232

5.4.1. Изменения требований . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
5.4.2. Версии продуктов разработки . . . . . . . . . . . . . . . . . . . . . . . . . 235
5.4.3. Дефекты и усовершенствования . . . . . . . . . . . . . . . . . . . . . . . . 237

8
Оглавление

5.4.4. Метрики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Ключевые термины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

Часть 2. От требований через структурное проектирование к готовому
программному обеспечению.
.
.
.
.
.
.
.
.
.
.
.
.
.
249

Глава 6. Модель бизнес-объектов. . . . . . . . . . . . . . . . . . . . . . . . . . . 252

6.1. Advertising Expenditure Measurement, ее бизнес . . . . . . . . . . . . . . . 253
6.2. Диаграмма бизнес-контекста . . . . . . . . . . . . . . . . . . . . . . . . . 254
6.3. Модель бизнес-сценария использования . . . . . . . . . . . . . . . . . . . 255

6.3.1. Бизнес-сценарий использования и бизнес-акторы . . . . . . . . . . . . . . 255
6.3.2. Модель бизнес-сценариев использования для AEM . . . . . . . . . . . . . 256
6.3.3. Альтернативная модель бизнес-сценариев использования для AEM . . . . 258

6.4. Бизнес-глоссарий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

6.4.1. Бизнес-глоссарий для AEM . . . . . . . . . . . . . . . . . . . . . . . . . . 261

6.5. Модель бизнес-классов . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

6.5.1. Бизнес-сущности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
6.5.2. Модель бизнес-классов для AEM . . . . . . . . . . . . . . . . . . . . . . . 262
6.5.3. Альтернативная модель бизнес-классов для AEM . . . . . . . . . . . . . . 264
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Ключевые термины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

Вопросы для обсуждения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Вопросы учебного примера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Упражнения учебного примера . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Небольшой проект — оценка расходов на рекламу . . . . . . . . . . . . . . . 267
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

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

7.1. Управление деловыми партнерами — предметная область . . . . . . . . . 272
7.2. Модель сценариев использования предметной области . . . . . . . . . . . 273

7.2.1. Сценарии использования и акторы . . . . . . . . . . . . . . . . . . . . . . 273
7.2.2. Отношения сценариев использования . . . . . . . . . . . . . . . . . . . . . 274
7.2.3. Модель сценариев использования для управления деловыми партнерами . 275
7.2.4. Альтернативная модель сценариев использования для управления
деловыми партнерами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

7.3. Глоссарий предметной области. . . . . . . . . . . . . . . . . . . . . . . . 279

7.3.1. Глоссарий предметной области для управления деловыми партнерами . . 279

7.4. Модель классов предметной области . . . . . . . . . . . . . . . . . . . . . 281

7.4.1. Классы и атрибуты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
7.4.2. Отношения классов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
7.4.3. Модель классов для управления деловыми партнерами . . . . . . . . . . . 285
7.4.4. Альтернативная модель классов для управления деловыми партнерами. . 286
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Ключевые термины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Вопросы для обсуждения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Оглавление
9

Вопросы учебного примера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

Упражнения учебного примера . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Небольшой проект — временной протокол. . . . . . . . . . . . . . . . . . . . 291

Глава 8. Итерация 1. Требования и объектная модель . . . . . . . . . . . . . . . 294

8.1. Модель сценариев использования . . . . . . . . . . . . . . . . . . . . . . 295
8.2. Документ сценария использования . . . . . . . . . . . . . . . . . . . . . . 296

8.2.1. Краткое описание, предусловия и постусловия. . . . . . . . . . . . . . . . 297
8.2.2. Основной поток . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
8.2.3. Подпотоки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
8.2.4. Потоки исключений. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

8.3. Концептуальные классы . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
8.4. Дополнительная спецификация . . . . . . . . . . . . . . . . . . . . . . . . 304

Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Ключевые термины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307

Вопросы для обсуждения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Вопросы учебного примера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

Упражнения учебного примера . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Небольшой проект — временной протокол. . . . . . . . . . . . . . . . . . . . 309

Глава 9. Структурный проект . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

9.1. Структурные уровни и управление зависимостями . . . . . . . . . . . . . 311

9.1.1. Структурные модули . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

Классы проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
312

Пакеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
312

9.1.2. Зависимости пакетов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
9.1.3. Зависимости между уровнями . . . . . . . . . . . . . . . . . . . . . . . . . 314
9.1.4. Зависимости классов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
9.1.5. Наследование зависимостей . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Наследование без полиморфизма . . . . . . . . . . . . . . . . . . . . . . . . . 321
Расширяющее и ограничивающее наследование . . . . . . . . . . . . . . . . . 321
Вызовы методов подкласса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Вызовы методов суперкласса. . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

9.1.6. Зависимости методов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Зависимости методов при наличии делегирования . . . . . . . . . . . . . . . . 325
Зависимости методов в присутствии наследования реализации. . . . . . . . . 326

9.1.7. Интерфейсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

Зависимость реализации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Зависимость использования . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Устранение циклических зависимостей с интерфейсами . . . . . . . . . . . . 331

9.1.8. Обработка событий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

Обработка событий и зависимости уровней. . . . . . . . . . . . . . . . . . . . 335
Обработка событий и интерфейсы . . . . . . . . . . . . . . . . . . . . . . . . . 336

9.1.9. Знакомство. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

Зависимости знакомства и интерфейсы . . . . . . . . . . . . . . . . . . . . . . 339
Пакет знакомств . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
340

9.2. Структурные шаблоны . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

9.2.1. Model-View-Controller (MVC) . . . . . . . . . . . . . . . . . . . . . . . . . 343
9.2.2. Presentation-Control-Mediator-Entity-Foundation. . . . . . . . . . . . . . . . 345

10
Оглавление

Уровни PCMEF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
346

Принципы PCMEF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
348

Знакомство в PCMEF+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Развертывание PCMEF-уровней . . . . . . . . . . . . . . . . . . . . . . . . . . 350

9.3. Структурные паттерны . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

9.3.1. Фасад. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
9.3.2. Абстрактная фабрика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
9.3.3. Цепочка обязанностей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
9.3.4. Наблюдатель. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
9.3.5. Посредник . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Ключевые термины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

Упражнения учебного примера . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Небольшой проект — управление информацией о партнерах . . . . . . . . . 363
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

Глава 10. Проектирование и программирование базы данных . . . . . . . . . . 371

10.1. Быстрое обучение реляционным базам данных с точки зрения
разработки программного обеспечения . . . . . . . . . . . . . . . . . . . 372
10.1.1. Таблица . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
10.1.2. Ссылочная целостность . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
10.1.3. Концептуальная модель в сравнении с логической моделью БД . . . . . 377
10.1.4. Реализация бизнес-правил . . . . . . . . . . . . . . . . . . . . . . . . . . 378
10.1.5. Программирование логики СУБД-приложения . . . . . . . . . . . . . . 381
10.1.6. Индексы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383

10.2. Отображение временных объектов в сохраняемые записи . . . . . . . . . 387

10.2.1. Объектные БД, SQL:1999 и потеря соответствия . . . . . . . . . . . . . 388
10.2.2. Объектно-реляционное отображение . . . . . . . . . . . . . . . . . . . . 389

Отображение ассоциации и агрегирования «один ко многим» . . . . . . . . 390
Отображение ассоциации «многие ко многим» . . . . . . . . . . . . . . . . 390
Отображение ассоциации «один к одному» . . . . . . . . . . . . . . . . . . 392
Отображение рекурсивной ассоциации «один ко многим» . . . . . . . . . . 393
Отображение рекурсивной ассоциации «многие ко многим»
. . . . . . . . 394

Отображение обобщения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

10.3. Проектирование и создание БД для управления электронной почтой . . . 396

10.3.1. Модель БД. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
10.3.2. Создание схемы БД. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
10.3.3. Пример содержимого БД. . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

Вопросы для обсуждения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Вопросы учебного примера . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

Упражнения учебного примера . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Небольшой проект — управление информацией о партнерах . . . . . . . . . 403

Глава 11. Проектирование классов и взаимодействия . . . . . . . . . . . . . . . 405

11.1. Определение классов из требований сценария использования . . . . . . . 406

Оглавление
11

11.1.1. Определение классов из требований сценария использования
для управления электронной почтой . . . . . . . . . . . . . . . . . . . . 408

11.1.2. Проектирование исходных классов для управления электронной
почтой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Константы в интерфейсе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414

11.2. Структурная разработка проекта классов . . . . . . . . . . . . . . . . . . 414

11.2.1. Структурная разработка проекта классов для управления
электронной почтой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

11.2.2. Проект классов для управления электронной почтой
после структурной проработки . . . . . . . . . . . . . . . . . . . . . . . 419

11.2.3. Инициализация классов . . . . . . . . . . . . . . . . . . . . . . . . . . . 419

Кто инициализирует первый объект? . . . . . . . . . . . . . . . . . . . . . . 421
Диаграмма инициализации для управления электронной почтой. . . . . . . 421

11.3. Взаимодействия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

11.3.1. Диаграммы последовательности действий . . . . . . . . . . . . . . . . . 423
11.3.2. Диаграммы связей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
11.3.3. Диаграммы просмотра взаимодействий. . . . . . . . . . . . . . . . . . . 427

11.4. Взаимодействия для управления электронной почтой . . . . . . . . . . . 427

11.4.1. Взаимодействие «Регистрационное имя» . . . . . . . . . . . . . . . . . . 429
11.4.2. Взаимодействие «Выход» . . . . . . . . . . . . . . . . . . . . . . . . . . 431
11.4.3. Взаимодействие «Просмотр непосланных сообщений» . . . . . . . . . . 431
11.4.4. Взаимодействие «Отображение текста сообщения» . . . . . . . . . . . . 433
11.4.5. Взаимодействие «Сообщение, передаваемое по электронной почте» . . 434
11.4.6. Взаимодействие «Неправильное имя пользователя или
неправильный пароль» . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436

11.4.7. Взаимодействие «Неправильная опция» . . . . . . . . . . . . . . . . . . 436
11.4.8. Взаимодействие «Слишком много сообщений» . . . . . . . . . . . . . . 437
11.4.9. Взаимодействие «Сообщение не может быть послано
по электронной почте» . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438

Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

Вопросы для обсуждения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Вопросы учебного примера . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

Упражнения учебного примера . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Небольшой проект — система использования временного протокола . . . . 442
Небольшой проект — управление информацией о деловых партнерах . . . . 443

Глава 12. Программирование и тестирование. . . . . . . . . . . . . . . . . . . . 445

12.1. Быстрое обучение языку Java с точки зрения разработки
программного обеспечения . . . . . . . . . . . . . . . . . . . . . . . . . 446
12.1.1. Класс. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
12.1.2. Ассоциации и коллекции классов . . . . . . . . . . . . . . . . . . . . . . 450

От концептуальной модели к модели проектирования классов . . . . . . . . 450
Коллекции Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
452

Ассоциации на объектах-сущностях . . . . . . . . . . . . . . . . . . . . . . 454
Параметризованные типы C++. . . . . . . . . . . . . . . . . . . . . . . . . . 455

12.1.3. Доступ к БД в Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458

Сравнение JDBC и SQLJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Установление связи с БД. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460

12
Оглавление

Выполнение SQL-операторов . . . . . . . . . . . . . . . . . . . . . . . . . . 461
Вызов хранимых процедур и функций . . . . . . . . . . . . . . . . . . . . . 464

12.2. Управляемая тестированием разработка . . . . . . . . . . . . . . . . . . 467

12.2.1. Шаблон JUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
12.2.2. Управляемая тестированием разработка в управлении
электронной почтой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472

12.3. Приемочные испытания и регрессионное тестирование . . . . . . . . . . 478

12.3.1. Сценарии тестирования в управлении электронной почтой. . . . . . . . 480
12.3.2. Испытательные входные и выходные данные и регрессионное
тестирование в управлении электронной почтой . . . . . . . . . . . . . 482

12.3.3. Реализация сценария тестирования в управлении
электронной почтой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

12.4. Итерация 1. Образы экрана времени выполнения. . . . . . . . . . . . . . 489

Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496

Обучение и упражнения учебного примера . . . . . . . . . . . . . . . . . . . 496
Небольшой проект — система использования временного протокола . . . . 498
Небольшой проект — управление информацией о деловых партнерах . . . . 499

Глава 13. Итерация 1. Аннотированный код . . . . . . . . . . . . . . . . . . . . 500

13.1. Обзор кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
13.2. Пакет Acquaintance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502

13.2.1. Интерфейс IAConstants. . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
13.2.2. Интерфейс IAEmployee. . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
13.2.3. Интерфейс IAContact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
13.2.4. Интерфейс IAOutMessage . . . . . . . . . . . . . . . . . . . . . . . . . . 506

13.3. Пакет Presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508

13.3.1. Класс PMain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
13.3.2. Класс PConsole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509

Конструирование объекта PConsole . . . . . . . . . . . . . . . . . . . . . . . 510
Отображение регистрационного имени и меню . . . . . . . . . . . . . . . . 512
Просмотр исходящих сообщений . . . . . . . . . . . . . . . . . . . . . . . . 513
Требование к передаче по электронной почте исходящего сообщения. . . . 515

13.4. Пакет Control
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517

13.4.1. Класс CActioner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517

Конструирование объекта CActioner . . . . . . . . . . . . . . . . . . . . . . 518
Инициализация регистрационного имени. . . . . . . . . . . . . . . . . . . . 519
Поиск исходящих сообщений . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Передача по электронной почте исходящего сообщения . . . . . . . . . . . 521
Использование JavaMail™ API . . . . . . . . . . . . . . . . . . . . . . . . . . 522

13.5. Пакет Entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522

13.5.1. Интерфейс IEDataSupplier . . . . . . . . . . . . . . . . . . . . . . . . . . 523

Идентификаторы объектов и паттерн Поле идентификации . . . . . . . . . 525

13.5.2. Класс EEmployee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526

Конструирование объекта EEmployee. . . . . . . . . . . . . . . . . . . . . . 527
Получение непосланных сообщений . . . . . . . . . . . . . . . . . . . . . . 527
Удаление посланных исходящих сообщений. . . . . . . . . . . . . . . . . . 528

13.5.3. Класс EContact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528

Конструирование объекта EContact . . . . . . . . . . . . . . . . . . . . . . . 529

Оглавление
13

Получение непосланных исходящих сообщений. . . . . . . . . . . . . . . . 529
Удаление посланных исходящих сообщений. . . . . . . . . . . . . . . . . . 530

13.5.4. Класс EOutMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530

Конструирование объекта EOutMessage . . . . . . . . . . . . . . . . . . . . 532
Получение и задание делового партнера для исходящего сообщения . . . . 533
Получение и задание служащего-создателя для исходящего сообщения. . . 533
Получение и задание служащего-отправителя исходящего сообщения . . . 534

13.6. Пакет Mediator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534

13.6.1. Класс MBroker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535

Конструирование объекта MBroker . . . . . . . . . . . . . . . . . . . . . . . 536
Связь для запроса регистрационного имени . . . . . . . . . . . . . . . . . . 536
Создание кэша сотрудников . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Извлечение непосланных сообщений . . . . . . . . . . . . . . . . . . . . . . 538
Создание кэша исходящих сообщений . . . . . . . . . . . . . . . . . . . . . 539
Создание кэша деловых партнеров . . . . . . . . . . . . . . . . . . . . . . . 540
Обновление исходящих сообщений после передачи
по электронной почте и восстановление кэша . . . . . . . . . . . . . . . . . 541

13.7. Пакет Foundation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542

13.7.1. Класс FConnection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542

Конструирование объекта FConnection . . . . . . . . . . . . . . . . . . . . . 543
Получение соединения с БД . . . . . . . . . . . . . . . . . . . . . . . . . . . 544

13.7.2. Класс FReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
13.7.3. Класс FWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Итерация 1. Вопросы и упражнения . . . . . . . . . . . . . . . . . . . . . . . . 547

Часть 3. Рефакторинг программного обеспечения и разработка
пользовательского интерфейса .
.
.
.
.
.
.
.
.
.
.
.
549

Глава 14. Требования к итерации 2 и объектная модель . . . . . . . . . . . . . . 551

14.1. Модель сценариев использования . . . . . . . . . . . . . . . . . . . . . . 551
14.2. Документ сценариев использования. . . . . . . . . . . . . . . . . . . . . 554

14.2.1. Краткое описание, предусловия и постусловия . . . . . . . . . . . . . . 554
14.2.2. Основной поток. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
14.2.3. Подпотоки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
14.2.4. Потоки исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561

14.3. Концептуальные классы и реляционные таблицы. . . . . . . . . . . . . . 562
14.4. Дополнительная спецификация . . . . . . . . . . . . . . . . . . . . . . . 564

Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566

Глава 15. Структурный рефакторинг . . . . . . . . . . . . . . . . . . . . . . . . 567

15.1. Цели рефакторинга . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
15.2. Методы рефакторинга . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569

15.2.1. Класс извлечения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
15.2.2. Метод подключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
15.2.3. Интерфейс извлечения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571

15.3. Паттерны рефакторинга . . . . . . . . . . . . . . . . . . . . . . . . . . . 573

15.3.1. Коллекция идентичности объектов . . . . . . . . . . . . . . . . . . . . . 575

14
Оглавление

15.3.2. Преобразователь данных. . . . . . . . . . . . . . . . . . . . . . . . . . . 577

Загрузка — импорт . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
579

Выгрузка — экспорт . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580

15.3.3. Альтернативные стратегии Преобразователя данных . . . . . . . . . . . 580

Несколько Преобразователей данных . . . . . . . . . . . . . . . . . . . . . . 581
Преобразование метаданных. . . . . . . . . . . . . . . . . . . . . . . . . . . 582

15.3.4. Загрузка по требованию . . . . . . . . . . . . . . . . . . . . . . . . . . . 585

Инициализация по требованию . . . . . . . . . . . . . . . . . . . . . . . . . 585
Виртуальный заместитель . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
Заместитель идентификатора объекта. . . . . . . . . . . . . . . . . . . . . . 589
Навигация по коллекции идентичности объектов . . . . . . . . . . . . . . . 590
Навигация по классам пакета entity . . . . . . . . . . . . . . . . . . . . . . . 592

15.3.5. Единица работы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594

15.4. Улучшенная модель классов. . . . . . . . . . . . . . . . . . . . . . . . . 595

Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600

Вопросы для обсуждения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
Вопросы учебного примера . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601

Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601

Глава 16. Проектирование и программирование пользовательского
интерфейса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602

16.1. Основные принципы проектирования пользовательского интерфейса . . . 603

16.1.1. Пользователь в управлении . . . . . . . . . . . . . . . . . . . . . . . . . 604
16.1.2. Непротиворечивость интерфейса . . . . . . . . . . . . . . . . . . . . . . 606
16.1.3. Снисходительность интерфейса . . . . . . . . . . . . . . . . . . . . . . . 606
16.1.4. Адаптируемость интерфейса. . . . . . . . . . . . . . . . . . . . . . . . . 607

16.2. Компоненты пользовательского интерфейса . . . . . . . . . . . . . . . . 608

16.2.1. Контейнеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609

Управление расположением . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Управление выбором уровней . . . . . . . . . . . . . . . . . . . . . . . . . . 614

16.2.2. Меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
16.2.3. Элементы управления . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617

16.3. Управление событиями пользовательского интерфейса . . . . . . . . . . 619
16.4. Паттерны и пользовательский интерфейс . . . . . . . . . . . . . . . . . . 623

16.4.1. Наблюдатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
16.4.2. Декоратор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
16.4.3. Цепочка обязанностей . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
16.4.4. Команда . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628

16.5. Пользовательский интерфейс для управления электронной почтой . . . . 629

Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636

Глава 17. Проектирование и программирование пользовательского
интерфейса на основе Web-технологии. . . . . . . . . . . . . . . . . . 638

17.1. Допустимые технологии для уровня Web-клиента . . . . . . . . . . . . . 640

17.1.1. Основы HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
17.1.2. Язык скриптов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643

Оглавление
15

17.1.3. Апплет: тонкий и толстый . . . . . . . . . . . . . . . . . . . . . . . . . . 645

17.2. Допустимые технологии для уровня Web-сервера . . . . . . . . . . . . . 650

17.2.1. Сервлет . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
17.2.2. JSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653

17.3. Транзакции Интернет-систем, не имеющих состояний . . . . . . . . . . . 658
17.4. Паттерны и Web-технология
. . . . . . . . . . . . . . . . . . . . . . . . 660

17.4.1. Наблюдатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
17.4.2. Компоновщик . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
17.4.3. Фабричный метод. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
17.4.4. Стратегия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
17.4.5. Декоратор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
17.4.6. Model-View-Controller (MVC) . . . . . . . . . . . . . . . . . . . . . . . . 665
17.4.7. Контроллер запросов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
17.4.8. Повторное использование тегов в JSP . . . . . . . . . . . . . . . . . . . 667
17.4.9. Несвязное управление: Struts . . . . . . . . . . . . . . . . . . . . . . . . 672

17.5. Реализация сервлета, обеспечивающего управление электронной почтой . 673

Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683

Глава 18. Итерация 2. Аннотированный код . . . . . . . . . . . . . . . . . . . . 684

18.1. Обзор кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
18.2. Пакет Acquaintance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686

18.2.1. Интерфейс IAEmployee. . . . . . . . . . . . . . . . . . . . . . . . . . . . 687

18.3. Пакет Presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687

18.3.1. Класс PWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688

Конструирование и запуск PWindow . . . . . . . . . . . . . . . . . . . . . . 689
Извлечение данных в PWindow . . . . . . . . . . . . . . . . . . . . . . . . . 691
Активизация фильтра. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694

18.3.2. Класс PMessageDetailWindow . . . . . . . . . . . . . . . . . . . . . . . . 696
18.3.3. Класс PMessageTableModel . . . . . . . . . . . . . . . . . . . . . . . . . 699
18.3.4. Класс PDisplayList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
18.3.5. Класс PDisplayList.Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . 706

18.4. Пакет Control
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708

18.4.1. Класс CAdmin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
18.4.2. Класс CMsgSeeker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708

18.5. Пакет Entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710

18.5.1. Класс Коллекция идентичности объектов . . . . . . . . . . . . . . . . . 712

18.6. Пакет Mediator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714

18.6.1. Класс MModerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
18.6.2. Класс MDataMapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716

Извлечение и загрузка исходящих сообщений . . . . . . . . . . . . . . . . . 718
Сохранение и выгрузка исходящего сообщения . . . . . . . . . . . . . . . . 721

18.7. Уровень Presentation: версия апплета . . . . . . . . . . . . . . . . . . . . 724
18.8. Уровень Presentation: версия сервлета. . . . . . . . . . . . . . . . . . . . 726

18.8.1. Класс PEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727

Регистрационное имя в сервлете . . . . . . . . . . . . . . . . . . . . . . . . 728
Изображение исходящих сообщений в сервлете . . . . . . . . . . . . . . . . 730

18.8.2. Класс PEMSEdit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735

16
Оглавление

Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
Итерация 2. Вопросы и упражнения . . . . . . . . . . . . . . . . . . . . . . . . 738

Часть 4. Разработка данных и бизнес-компоненты.
.
.
.
.
.
.
.
.
741

Глава 19. Требования к итерации 3 и объектная модель . . . . . . . . . . . . . . 744

19.1. Модель сценариев использования . . . . . . . . . . . . . . . . . . . . . . 744
19.2. Документ сценария использования . . . . . . . . . . . . . . . . . . . . . 746

19.2.1. Краткое описание, предусловия и постусловия . . . . . . . . . . . . . . 746
19.2.2. Основной поток. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747
19.2.3. Подпотоки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749
19.2.4. Потоки исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757

19.3. Концептуальные классы и реляционные таблицы. . . . . . . . . . . . . . 758
19.4. Дополнительная спецификация . . . . . . . . . . . . . . . . . . . . . . . 760
19.5. Спецификация БД . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763

Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766

Глава 20. Безопасность и целостность . . . . . . . . . . . . . . . . . . . . . . . . 767

20.1. Проектирование безопасности. . . . . . . . . . . . . . . . . . . . . . . . 768

20.1.1. Контролируемая авторизация . . . . . . . . . . . . . . . . . . . . . . . . 769

Системные и объектные полномочия . . . . . . . . . . . . . . . . . . . . . . 780
Программная контролируемая авторизация . . . . . . . . . . . . . . . . . . 772

20.1.2. Принудительная авторизация . . . . . . . . . . . . . . . . . . . . . . . . 779
20.1.3. Авторизация предприятия . . . . . . . . . . . . . . . . . . . . . . . . . . 781

20.2. Проектирование целостности . . . . . . . . . . . . . . . . . . . . . . . . 785

20.2.1. Null-ограничение и ограничение по умолчанию . . . . . . . . . . . . . . 785
20.2.2. Ограничения «домен» и «проверка» . . . . . . . . . . . . . . . . . . . . 786
20.2.3. Уникальный и первичный ключи . . . . . . . . . . . . . . . . . . . . . . 787
20.2.4. Внешние ключи. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
20.2.5. Триггеры. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790

20.3. Безопасность и целостность в управлении электронной почтой . . . . . . 795

20.3.1. Безопасность в управлении электронной почтой . . . . . . . . . . . . . 795

Явно заданная таблица авторизации . . . . . . . . . . . . . . . . . . . . . . 798
Использование индивидуальных схем, глобальной схемы
и хранимых процедур . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799
Использование индивидуальных схем, глобальной схемы,
представлений и хранимых процедур . . . . . . . . . . . . . . . . . . . . . . 800
Администрирование авторизации . . . . . . . . . . . . . . . . . . . . . . . . 803

20.3.2. Целостность управления электронной почтой . . . . . . . . . . . . . . . 805
Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 809
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810
Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811

Глава 21. Транзакции и параллелизм . . . . . . . . . . . . . . . . . . . . . . . . 812

21.1. Параллелизм в системных транзакциях . . . . . . . . . . . . . . . . . . . 813

21.1.1. ACID-свойства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
21.1.2. Уровни изоляции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
21.1.3. Способы блокировки и уровни блокировки . . . . . . . . . . . . . . . . 817

Оглавление
17

21.1.4. Модели транзакций. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
21.1.5. Схемы управления параллелизмом . . . . . . . . . . . . . . . . . . . . . 821

21.2. Параллелизм в бизнес-транзакциях . . . . . . . . . . . . . . . . . . . . . 825

21.2.1. Контексты выполнения бизнес-транзакций. . . . . . . . . . . . . . . . . 825
21.2.2. Бизнес-транзакции и технология компонентов. . . . . . . . . . . . . . . 826
21.2.3. Распределение по уровням сервисов транзакции . . . . . . . . . . . . . 826

Web-уровень . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
828

Уровень приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
Уровень БД . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
830

21.2.4. Паттерны автономного параллелизма. . . . . . . . . . . . . . . . . . . . 832

Единица работы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
832

Оптимистическая автономная блокировка . . . . . . . . . . . . . . . . . . . 835
Пессимистическая автономная блокировка. . . . . . . . . . . . . . . . . . . 836

21.3. Транзакции и параллелизм в управлении электронной почтой . . . . . . . 837

21.3.1. Модель плоской транзакции . . . . . . . . . . . . . . . . . . . . . . . . . 838
21.3.2. Единица работы и поддержка транзакций . . . . . . . . . . . . . . . . . 838
Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
Примеры задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844

Глава 22. Бизнес-компоненты . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846

22.1. Enterprise JavaBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847

22.1.1. Основные принципы EJB . . . . . . . . . . . . . . . . . . . . . . . . . . 849
22.1.2. Bean-компоненты сущностей . . . . . . . . . . . . . . . . . . . . . . . . 853
22.1.3. Bean-компоненты сеанса . . . . . . . . . . . . . . . . . . . . . . . . . . . 858

22.2. Бизнес-компоненты для Java . . . . . . . . . . . . . . . . . . . . . . . . 860

22.2.1. Создание компонентов сущностей . . . . . . . . . . . . . . . . . . . . . 860

XML для компонентов сущности . . . . . . . . . . . . . . . . . . . . . . . . 861
Java для компонентов сущности. . . . . . . . . . . . . . . . . . . . . . . . . 863

22.2.2. Создание компонентов-представлений . . . . . . . . . . . . . . . . . . . 864

XML для компонентов-представлений . . . . . . . . . . . . . . . . . . . . . 865
Java для компонентов-представлений . . . . . . . . . . . . . . . . . . . . . . 866

22.2.3. Создание модуля приложения . . . . . . . . . . . . . . . . . . . . . . . . 867
Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
Обзорные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869

Глава 23. Итерация 3. Аннотированный код . . . . . . . . . . . . . . . . . . . . 871

23.1. Обзор кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871
23.2. Пакет Acquaintance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873

23.2.1. Интерфейс IAReportEntry . . . . . . . . . . . . . . . . . . . . . . . . . . 874

23.3. Пакет Presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874

23.3.1. Класс PWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874

Заполнение списка деловых партнеров в отчете . . . . . . . . . . . . . . . . 875
Окно отчета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
876

Отчет о деятельности. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
Печать отчета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
879

Заполнение таблицы отчета . . . . . . . . . . . . . . . . . . . . . . . . . . . 879
Отображение окна авторизации . . . . . . . . . . . . . . . . . . . . . . . . . 881
Преобразование из матрицы правил в таблицу авторизации . . . . . . . . . 883
Сохранение измененных прав доступа . . . . . . . . . . . . . . . . . . . . . 884

18
Оглавление

Преобразование из таблицы авторизации в матрицу правил . . . . . . . . . 884
Удаление исходящего сообщения . . . . . . . . . . . . . . . . . . . . . . . . 886
Изменение исходящего сообщения . . . . . . . . . . . . . . . . . . . . . . . 888
Создание исходящего сообщения . . . . . . . . . . . . . . . . . . . . . . . . 889

23.3.2. Класс PTableWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889

Динамическая регистрация кнопок . . . . . . . . . . . . . . . . . . . . . . . 890
Добавление приемников к динамически сформированным кнопкам . . . . . 891
Возвращаемое состояние кнопки . . . . . . . . . . . . . . . . . . . . . . . . 892
Печать в PTableWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893

23.4. Пакет Control
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894

23.5. Пакет Entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894

23.5.1. Класс EIdentityMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894

Регистрация и удаление отчета . . . . . . . . . . . . . . . . . . . . . . . . . 896
Извлечение отчета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
896

23.6. Пакет mediator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899

23.6.1.Класс MModerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900

Права доступа. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
900

Извлечение отчета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
902

Создание исходящего сообщения . . . . . . . . . . . . . . . . . . . . . . . . 904
Корректировка исходящего сообщения . . . . . . . . . . . . . . . . . . . . . 904

23.6.2. Класс MDataMapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905

Изменения в существовавших методах . . . . . . . . . . . . . . . . . . . . . 907
Извлечение отчета в MDataMapper . . . . . . . . . . . . . . . . . . . . . . . 908
Загрузка прав доступа в MDataMapper . . . . . . . . . . . . . . . . . . . . . 910
Сохранение прав доступа в MDataMapper . . . . . . . . . . . . . . . . . . . 910

23.6.3. Класс MUnitOfWork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913

Получение MUnitOfWork . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
Регистрация новой сущности в MUnitOfWork . . . . . . . . . . . . . . . . . 915
Регистрация измененной сущности в MUnitOfWork. . . . . . . . . . . . . . 916
Удаление сущности в MUnitOfWork . . . . . . . . . . . . . . . . . . . . . . 916
Фиксация MUnitOfWork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917
Выполнение транзакции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918
Начало транзакции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
919

23.7. Пакет Foundation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920

23.7.1. Транзакции в FConnection . . . . . . . . . . . . . . . . . . . . . . . . . . 920
23.7.2. Операторы Execute в FWriter . . . . . . . . . . . . . . . . . . . . . . . . 921
23.7.3. Запрос к БД в FReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923

23.8. Код БД . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924

23.8.1. Ref Cursor для ResultSet . . . . . . . . . . . . . . . . . . . . . . . . . . . 925
23.8.2. Извлечение исходящих сообщений . . . . . . . . . . . . . . . . . . . . . 926
23.8.3. Извлечение исходящих сообщений отдела . . . . . . . . . . . . . . . . . 926
23.8.4. Удаление исходящего сообщения . . . . . . . . . . . . . . . . . . . . . . 927
23.8.5. Создание исходящего сообщения . . . . . . . . . . . . . . . . . . . . . . 928
23.8.6. Создание отчета. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
23.8.7. Триггер для таблицы OutMessage . . . . . . . . . . . . . . . . . . . . . . 932
Резюме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
Ключевые термины. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935
Итерация 3. Вопросы и упражнения . . . . . . . . . . . . . . . . . . . . . . . . 935

Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
Предметный указатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943

Оглавление
19

Широкое использование
UML-диаграмм

Экскурс в структуру книги

Начало главы задает
место для детального
обсуждения

Многочисленные
снабженные
комментариями
образы экрана
для отображения
ключевых моментов

Фактический код
показывает читателям,
как концепции
реализуются
на практике

Ключевые термины
выделены в тексте

Резюме в конце каждой
главы закрепляет знания

Общие обзорные вопросы в конце
главы
Обзорные вопросы в конце главы
характерны для текущего учебного
примера

Примеры задач в конце главы позволяют
читателям лучше понять учебный пример
Дополнительные небольшие примеры
в конце главы для проверки более глубокого
понимания

Чтобы помочь найти
ключевые термины и их
определения в тексте, они
отмечены в конце каждой
главы

История создания книги

История создания этой книги представляет собой итеративный и пошаговый
процесс. Конечно, она соответствует всем четырем основным фазам популярной модели жизненного цикла: замысел, разработка, реализация и использование. Книга явилась плодотворным результатом работы двух авторов с учетом требований пользователей, вытекающих из их практики, с широким использованием непрерывной интеграции и рефакторинга, но, к сожалению,
с достаточно длинным циклом разработки1.
Замысел создания книги датируется публикацией в 1990 г. книги Мацяшека Database Design and Implementation (Prentice Hall) — Проектирование и
создание баз данных. Многие читатели настаивали на продолжении этой книги с использованием законченных учебных примеров, маленьких и больших
упражнений и с пошаговым (то есть итеративным и возрастающим) увеличением технической трудности и сложности содержания. Деловое предложение
насчет книги было сделано, и проект вступил в стадию разработки — представление о книге было уточнено, риски устранены, требования и границы
определены. Однако чтобы завершить целевую платформу, вместо работы
над книгой пришлось заниматься… большим объемом учебной работы и консультаций в промышленности.
Десятью годами позже после работы над бесчисленными промышленными проектами количество собранного практического материала буквально
кричало относительно необходимости публикации для широкой аудитории.
Но аудитория изменилась — промышленность вступила в век Интернета.
Требовался новый учебник, чтобы дать необходимые знания для разработки
современного программного обеспечения (ПО). Таким учебником стал учебник
Мацяшека
Requirements
Analysis
and
System
Design:
Developing
Information Systems with UML (Addison-Wesley, 2001) — Анализ требований и
проектирование систем: разработка информационных систем с использованием UML, — вышедший вторым изданием одновременно с этой книгой.
Вскоре после этого книга, которую вы держите в руках, вступила в стадию
создания.

Введение

1
Под рефакторингом в программировании понимается улучшение структуры программного кода с целью
более легкого его понимания, но без изменения внешнего поведения этого кода. В данном конкретном
случае этот термин относится не к программному коду, а к самой книге, чем авторы подчеркивают некоторую схожесть процесса написания программного кода и данной книги. — Прим. перев.

Стадия реализации была ухабистой. Первоначально книга предполагалась
как дополнение к учебнику Мацяшека 2001 г. или любой подобной книге.
Позже акцент сместился в пользу самостоятельного учебника, который использует подход итеративного учебного примера к выработке навыков практической разработки ПО. Книга сконцентрирована на проектировании ПО,
программировании и администрировании. Она посвящена вопросам современной практики разработки, методам, техническим приемам и инструментальным средствам.
Стадия использования этой книги находится в ваших, читатель, руках.
Бета-тестирование (предварительное тестирование) этой книги проводилось и
в классных комнатах, и в процессе проектирования ПО. Дальнейшее расширение использования — в воле читателя. Пожалуйста, присылайте пожелания
по изменению, сведения о выявленных дефектах и предложения по совершенствованию книги в группу разработчиков.

Схема и организация книги

Отличительный характер этой книги проистекает из двух стремлений авторов. Во-первых, это книга о способе разработки ПО, проверенном на практике. Во-вторых, она о разработке ПО применительно к промышленным приложениям. Следующее описание того, что промышленные приложения включают и исключают, полностью применимо к этой книге: «Промышленные
приложения включают платежную ведомость, регистрацию пациентов, отслеживание отгрузки, стоимостный анализ, оценку кредита, страхование, цепь
поставок, бухгалтерский учет, обслуживание клиентов и международную
биржевую торговлю. Промышленные приложения не включают вопросы,
связанные с инжекцией автомобильного топлива, текстовыми процессорами,
устройствами управления подъемниками, устройствами управления химическими заводами, телефонными коммутаторами, операционными системами,
компиляторами и играми» [31].
Содержимое книги вращается вокруг одного основного учебного примера, двух небольших проектов с относящимися к ним упражнениями, большого количества сопутствующих примеров, учебных средств для рассмотрения основных концепций моделирования и программирования и примеров
задач в конце каждой главы, которые содержат главным образом упражнения, связанные с учебным примером. Организация, на которую даются
ссылки в учебном примере и в небольших проектах, а также в упражнениях,
является компанией, специализирующейся в оценке расходов на рекламу. В
книге эта организация по своей основной деятельности называется AEM
(advertising expenditure measurement — оценка расходов на рекламу). Фактически же это ACNielsen's Nielsen Media Research в Сиднее, Австралия. Учебный пример называется Email Management (EM) — управление электронной
почтой. EM является подсистемой системы Contact Management (CM) —
управление деловыми партнерами AEM.
Как показано на диаграмме Венна, AEM занимается бизнесом, CM является одной из предметных областей бизнеса, а EM является учебным примером. Упражнения и небольшие проекты взяты из срезов областей AEM-биз
Схема и организация книги
23

Введение

неса, включая CM. Некоторые примеры не связаны с AEM. Учебный пример
обогащен дополнительными примерами и упражнениями. Учебные средства
используются для того, чтобы быстро изучить вводимые темы, связанные с
UML-моделированием, Java-программированием, реляционными базами данных (БД), конструкцией GUI (graphical user interface — графический интерфейс пользователя) и работой с бизнес-компонентами.
В книге делается попытка дать широкие знания по разработке ПО и представить исходную информацию до рассмотрения решений учебного примера. Другой же акцент книги — показать, как использовать эти знания при проектировании ПО. Для обеспечения данных требований книга итеративно развивает модели проектирования и реализации. Учебный пример, небольшие проекты,
задачи и упражнения для решения задач тщательно отобраны, чтобы подчеркнуть многочисленные аспекты разработки ПО, как требуется в соответствии с
уникальным характером различных приложений и целевых решений ПО.
Книга состоит из четырех частей. В части 1 (Проектирование программного обеспечения) обсуждаются жизненный цикл разработки ПО, языки моделирования, средства разработки, планирование проекта и управление процессом. Следующие три части (2-я, 3-я и 4-я) рассматривают учебный пример,
небольшие проекты и примеры. Обсуждение в этих трех частях концентрируется на методах, технологиях, процессах и средствах разработки ПО.
Части 2, 3 и 4 соответствуют трем итерациям проекта (учебного примера).
Каждая итерация начинается со спецификаций учебного примера, соответствующих начальной модели объекта. Базовая теория и практические знания,
подкрепляющие каждую итерацию, объясняются в первую очередь демонстрацией проектирования и программных решений учебного примера. Любая
информация, важная для решений учебного примера, но не обладающая существенным базовым значением, представлена внутри этого примера, либо
как подраздел обсуждения учебного примера. Каждая итерация завершается
полным решением и заканчивается вместе с главой, которая содержит исходный код с необходимыми комментариями, аннотациями и ссылками на объяснения в предшествующих главах.
Часть 2 (От требований через структурное проектирование к готовому
программному обеспечению) начинается заданием бизнес-параметров для
учебного примера EM. Первые две главы этой части представляют модель
бизнес-объектов для AEM и модель предметной области для CM. Далее определены требования EM и последовательно разрабатывается его первая итера