Г.Буч
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОЕКТИРОВАНИЕ
С ПРИМЕРАМИ ПРИМЕНЕНИЯ
Книга американского специалиста представляет собой первое полное
изложение объектно-ориентированной методологии: анализ, проектирование,
программирование. В книге рассмотрены фундаментальные вопросы объектного
подхода, практические аспекты конструирования программных систем.
Отдельный раздел книги посвящен примерам использования различных
объектно-ориентированных языков программирования в реальных системах. В
книге содержится обширная библиография по предметной области. Книга
рассчитана на профессиональных программистов, руководителей больших
программных проектов и студентов, будущая профессия которых связана с
разработкой сложных программных систем.
ОГЛАВЛЕНИЕ
ПРЕДИСЛОВИЕ РЕДАКТОРА ПЕРЕВОДА
5
ВВЕДЕНИЕ
7
Часть I. КОНЦЕПЦИИ
10
Глава 1. СЛОЖНОСТЬ
10
1.1. СЛОЖНОСТЬ, ПРИСУЩАЯ ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ
10
1.2. СТРУКТУРА СЛОЖНЫХ СИСТЕМ
16
1.3. ВНЕСЕНИЕ ПОРЯДКА В ХАОС
22
1.4. ПРОЕКТИРОВАНИЕ СЛОЖНЫХ СИСТЕМ
27
Глава 2. ОБЪЕКТНЫЙ ПОДХОД
31
2.1. СТАНОВЛЕНИЕ ОБЪЕКТНОГО ПОДХОДА
31
2.2. КОМПОНЕНТЫ ОБЪЕКТНОГО ПОДХОДА
42
2.3. ПРИМЕНЕНИЯ ОБЪЕКТНОГО ПОДХОДА
73
Глава 3. КЛАССЫ И ОБЪЕКТЫ
77
3.1. ОБЪЕКТ
77
3.2. ОТНОШЕНИЯ МЕЖДУ ОБЪЕКТАМИ
89
3.3. СУЩНОСТЬ «КЛАСС»
93
3.4. ОТНОШЕНИЯ МЕЖДУ КЛАССАМИ
95
3.5. ВЗАИМОСВЯЗЬ КЛАССОВ И ОБЪЕКТОВ
121
3.6. ВОПРОСЫ КАЧЕСТВА ПРИ СОЗДАНИИ КЛАССОВ
И ОБЪЕКТОВ
122
Глава 4. КЛАССИФИКАЦИЯ
129
4.1. ВАЖНОСТЬ ПРАВИЛЬНОЙ КЛАССИФИКАЦИИ
129
4.2. ИДЕНТИФИКАЦИЯ КЛАССОВ И ОБЪЕКТОВ
132
4.3. КЛЮЧЕВЫЕ АБСТРАКЦИИ И МЕХАНИЗМЫ
140
Часть II. МЕТОДОЛОГИЯ
146
Глава 5. СИСТЕМА ОБОЗНАЧЕНИЙ
146
5.1. ЭЛЕМЕНТЫ СИСТЕМЫ ОБОЗНАЧЕНИЙ
146
5.2. ДИАГРАММА КЛАССОВ
149
5.3. ДИАГРАММЫ ПЕРЕХОДА СОСТОЯНИЙ
5.4. ДИАГРАММА ОБЪЕКТОВ
5.5. ВРЕМЕННАЯ ДИАГРАММА
5.6. МОДУЛЬНАЯ ДИАГРАММА
5.7. ДИАГРАММЫ ПРОЦЕССОВ
5.8. ПРИМЕНЕНИЕ СИСТЕМЫ ОБОЗНАЧЕНИЙ
Глава 6. ПРОЦЕСС
6.1. ПРОЕКТИРОВАНИЕ КАК ПОСТУПАТЕЛЬНЫЙ ИТЕРАТИВНЫЙ
ПРОЦЕСС
6.2. ИДЕНТИФИКАЦИЯ КЛАССОВ И ОБЪЕКТОВ
6.3. ИДЕНТИФИКАЦИЯ СЕМАНТИКИ КЛАССОВ И ОБЪЕКТОВ
6.4. ИДЕНТИФИКАЦИЯ СВЯЗЕЙ МЕЖДУ КЛАССАМИ И ОБЪЕКТАМИ
6.5. РЕАЛИЗАЦИЯ КЛАССОВ И ОБЪЕКТОВ
Глава 7. ТРАДИЦИОННЫЕ МЕТОДЫ
7.1. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОЕКТИРОВАНИЕ В
ЖИЗНЕННОМ ЦИКЛЕ РАЗРАБОТКИ
7.2. УПРАВЛЕНИЕ ПРОЕКТОМ
7.3. ДОСТОИНСТВА И НЕДОСТАТКИ ОБЪЕКТНООРИЕНТИРОВАННОГО ПРОЕКТИРОВАНИЯ
Часть III. ПРИМЕНЕНИЯ
Глава 8. SMALLTALK. СИСТЕМА ДОМАШНЕГО ОТОПЛЕНИЯ
8.1. АНАЛИЗ
8.2. ПРОЕКТИРОВАНИЕ
8.3. РЕАЛИЗАЦИЯ
8.4. МОДИФИКАЦИЯ
Глава 9. OBJECT PASCAL. ИНСТРУМЕНТАЛЬНОЕ СРЕДСТВО
РАЗРАБОТКИ КОНСТРУКЦИЙ ГЕОМЕТРИЧЕСКОЙ ОПТИКИ
9.1. АНАЛИЗ
9.2. ПРОЕКТИРОВАНИЕ
9.3. РАЗВИТИЕ
9.4. МОДИФИКАЦИЯ
Глава 10. C++. СИСТЕМА РЕГИСТРАЦИИ ОШИБОК В ПРОГРАММНЫХ
СРЕДСТВАХ
10.1. АНАЛИЗ
10.2. ПРОЕКТИРОВАНИЕ
10.3. РАЗВИТИЕ ПРОЕКТА
10.4. МОДИФИКАЦИЯ
Глава 11. COMMON LISP OBJECT SYSTEM. СИСТЕМА
ДЕШИФРОВАНИЯ
11.1. АНАЛИЗ
11.2. ПРОЕКТИРОВАНИЕ
11.3. ОБЪЕДИНЕНИЕ В СИСТЕМУ
11.4. МОДИФИКАЦИЯ
157
158
162
163
168
171
173
173
176
177
178
180
182
182
190
199
204
204
204
221
236
252
254
254
278
301
331
334
334
349
362
369
371
373
377
388
397
Глава 12. ADA. СИСТЕМА УПРАВЛЕНИЯ ДВИЖЕНИЕМ
12.1. АНАЛИЗ
12.2. ПРОЕКТИРОВАНИЕ
12.3. РАЗВИТИЕ
12.4. ИЗМЕНЕНИЯ
ЗАКЛЮЧЕНИЕ
ПРИЛОЖЕНИЯ
П.1. Введение
П.2. ЯЗЫК SMALLTALK
П.З. ЯЗЫК OBJECT PASCAL
П.4. Язык C++
П.5. ЯЗЫК COMMON LISP OBJECT SYSTEM (CLOS)
П.6. ЯЗЫК ADA
П.7. ДРУГИЕ ЯЗЫКИ OOP
ЛИТЕРАТУРА
БИБЛИОГРАФИЯ
АНГЛО-РУССКИЙ ТОЛКОВЫЙ СЛОВАРЬ ТЕРМИНОВ ПО ОБЪЕКТНООРИЕНТИРОВАННОМУ ПОДХОДУ
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ
400
403
408
419
423
426
427
427
428
432
436
440
442
446
447
463
508
515
Предметно-именной указатель
Абельсон 44
Даф 106
Абстракция 44, 508
Де Марко 42
— алгоритмическая 32
Действие 41, 45, 512
— ключевая 140, 510
Дейтч 62, 429
Архитектура процессов 232, 513
Декомпозиция 22
Аткинсон 72
— алгоритмическая 22, 25, 508
Бейлин 138
— объектная 22, 511
Берзинс 44
Делегирование 96
Блэк 68
Деструктор 50, 83, 509
Бобров 38, 188
Джеймс 134
Борнинг 66
Джонсон 68, 103
Бриттон 51
Диаграмма
Варда 42
— временная 148, 163, 172
Вегнер 63, 102
— класса 148, 149, 151, 157, 172, 509
Вейс 56, 127
— модульная 148, 163, 165, 172, 511
Видимость 125, 514
— объектов 148, 158, 172
— модуля 163
— процессов 148, 172
Виртуальная функция 104, 107, 514
— перехода состояний 148, 158, 172
Влисайдес 110
Защита информации 50, 55, 510
Гане 42
Зейдевиц 89
Грей 44
Зелковиц 55
Данфорт 60
Иерархия 20, 26, 58, 510
— классов 149
Ингалс 50, 66, 89, 122
Индивидуальность 78, 84, 510
Интерфейс 50, 510
Исполнитель 48, 513
Использование 114, 514
Итератор 67, 510
Иордан 26
Канал управления 68, 84, 514
Карделли 102 Категория 132
— классов 151, 163
Качество абстракции 122
Класс 93
— абстрактный 230, 277, 286, 453
— базовый 99, 508
— метакласс 96, 119, 511
— суперкласс 98, 514
Клементе 56, 127
Кокс 60
Константин 26, 123
Конструктор 50, 51, 509
Коуд 137
Лим 68
Линтон 110
Дисков 50, 54, 60
Майерс 26, 123
Мейер 58, 93
Меллор 42, 136
Метод 82, 511
Механизм 142, 511
— абстракции 32, 35
Микаллеф 109
Модификатор 67, 83, 117, HI, 511
Модуль 36
Модульная архитектура 164, 5П
Модульность 53, 56, 511
Мономорфизм 68, 102, 511
Мощность множества объектов 508
Муре 138
Наполнение объекта 510
Наследование 60, 98, 109, 510
— множественное 61, 98, 110
— простое 60, 98
Нейбор 138
Нотация 146, 147, 167
О'Брайен 124, 141
Обособленный 94, 154, 513
Общедоступный 94
— общедоступная процедура 242,
305, 509
Общность 93, 126, 509
Объект 77, 84
— активный 89, 508
— блокированный 91, 508
— воздействующий 508
— метаобъект 121
— параллельный 91, 509
— пассивный 512
— пользователь 44, 509
— транслятор 91, 513
Объектно-ориентированное
программирование 512
Объектно-ориентированный анализ
42, 137, 512
Объектный подход 20, 31, 512
Ограничение доступа 50, 509
Определитель состояния 50, 513
Пайджет 133
Параллелизм 68, 509
Парнас 51, 56, 127
Переменная объекта 95, 510
Пирбой 42
Переменная, параметр класса 67, 104,
155, 509
Поведение 81, 508
Поддержка класса 509
Подкласс 98, 514
Поле 95, 126, 509
Полиморфизм 67, 102, 513
— множественный 113
— простой 101
Посредник 89, 91
Проектирование 27
— возвратное 174, 513
— объектно-ориентированное 26, 42,
512
— структурное 22, 514
Пространство состояний 172, 513
Протокол 44, 513
Рабсон 74
Реализация 51, 510
— внутренняя 51
Робсон 119 Росс 137
Сарсон 42
Связь
— динамическая 66, 513
— статическая 66, 513
Сейдвиц 44
Семантические сети 99, 172
Синхронизация 91, 125, 160, 514
Слот 53, 95, 513
Смешение 112, 511
Смит 77
Снайдер 93
Сообщение 81, 511
Состояние 78, 513
Стайн 25
Старк 44
Стефик 188
Стивене 123
Страустрап 39, 53, 107, 118, 129, 141
Структура 58, 109, 514
— классов 58, 81, 94, 509
— объектов 58, 512
Суссман 44
Теслер 66
Тип 33, 39, 62, 514
Типизация 62 514
— нестрогая 63
— строгая 63, 514
Токей 77
Томлисон 60
Уинстон 108
Устойчивость 73 512
Фрагмент объекта 95, 511
Функция 510
— обобщенная 38, 121, 510
— элемент 45, 82, 511
Хальберт 124, 141
Хатли 42
Хендлер 113
Хоаре 26
Хорн 108
Шклаер 136
Шоу 44, 131
Эббот 138
Экземпляр объекта 47, 64, 510