Предисловие | 11 |
|
Структура книги | 15 |
Благодарности | 16 |
От издательства | 16 |
|
1. Введение: потребность в нескольких парадигмах | 17 |
|
1.1. Инженерия предметной области и несколько парадигм | 17 |
1.2. Проектирование, анализ, семейства, предметные области: определения | 19 |
1.2.1. Анализ | 20 |
1.2.2. Проектирование | 21 |
1.2.3. Архитектура | 21 |
1.2.4. Предметные области | 22 |
1.2.5. Семейства и анализ общности | 22 |
1.2.6. Измерения абстракции | 23 |
1.2.7. Точность абстракции | 23 |
1.2.8. Проектирование и реализация | 24 |
1.3. 3а пределы объектов | 25 |
1.4. Анализ общности и изменчивости | 26 |
1.5. Семейства программ | 26 |
1.6. Мультипарадигменное проектирование | 28 |
1.6.1. Язык: C++ | 28 |
1.6.2. Сложные семейства | 29 |
1.6.3. Включение паттернов | 30 |
1.7. Мультипарадигменная разработка и язык программирования | 31 |
1.7.1. Прикладные языки в FAST | 31 |
1.7.2. Анализ предметной области и язык C++ | 33 |
1.7.3. Полиморфизм | 34 |
1.8. Анализ общности: иная перспектива | 34 |
1.8.1. Правила и механизмы | 35 |
1.8.2. Изменчивость во времени и в пространстве | 35 |
1.8.3. Динамическое связывание | 36 |
1.9. Резюме | 37 |
|
2. Анализ общности | 39 |
|
2.1. Общность: суть абстрагирования | 39 |
2.1.1. Дедуктивная и индуктивная общность | 40 |
2.1.2. Семейства программ | 42 |
2.2. Подготовка анализа: словарь предметной области | 43 |
2.2.1. Словарь предметной области | 44 |
2.2.2. Команда разработчиков словаря | 45 |
2.3. Измерения и категории общности | 47 |
2.3.1. Структура (данных) | 50 |
2.3.2. Имя и поведение | 54 |
2.3.3. Алгоритм | 57 |
2.4. Примеры общности | 58 |
2.4.1. Структура | 58 |
2.4.2. Имя и поведение | 59 |
2.4.3. Алгоритм | 61 |
2.5. Пересмотр результатов | 62 |
2.6. Общность и развитие | 63 |
2.7. Резюме | 64 |
|
3. Анализ изменчивости | 65 |
|
3.1. Изменчивость: вкус жизни | 65 |
3.2. Общая основа | 66 |
3.3. Положительная и отрицательная изменчивость | 67 |
3.3.1. Положительная изменчивость | 67 |
3.3.2. Отрицательная изменчивость | 68 |
3.4. Предметная область и диапазон изменчивости | 69 |
3.4.1. Пример с буферами редактирования текста | 70 |
3.4.2. Удачные параметры изменения | 71 |
3.5. Время связывания | 71 |
3.5.1. Время связывания и гибкость | 71 |
3.5.2. Общее объектов и динамического связывания | 72 |
3.5.3. Эффективность и время связывания | 72 |
3.5.4. Варианты связывания | 72 |
3.5.5. Пример | 73 |
3.6. Значения по умолчанию | 74 |
3.7. Таблицы изменчивости | 75 |
3.8. Некоторые особенности изменчивости | 76 |
3.9. Пересмотр результатов | 77 |
3.10. Графы зависимости изменчивости | 77 |
3.11. Резюме | 78 |
|
4. Анализ прикладной предметной области | 79 |
|
4.1. Анализ, анализ предметной области и большее | 79 |
4.1.1. Традиционный анализ | 80 |
4.1.2. Семейства систем: анализ предметной области | 80 |
4.1.3. Анализ прикладной области и области решений | 85 |
4.1.4. Действия в анализе предметной области | 85 |
4.2. Подобласти в предметном анализе | 87 |
4.2.1. Предметный анализ и многократное использование | 89 |
4.2.2. Модульная организация подобластей | 90 |
4.2.3. Повторение и иерархия | 91 |
4.3. Структура подобласти | 92 |
4.3.1. Каркас как вариант реализации подобластей | 94 |
4.3.2. Действия в анализе подобластей | 95 |
4.4. Анализ: общая картина | 96 |
4.5. Резюме | 98 |
|
5. Объектно-ориентированный анализ | 99 |
|
5.1. О парадигмах и объектах | 99 |
5.1.1. Классы и объекты | 99 |
5.1.2. Принцип подстановки Барбары Лисков | 100 |
5.1.3. Виртуальные функции | 100 |
5.1.4. Объектно-ориентированный: ещё одно определение | 102 |
5.1.5. Применимость объектно-ориентированного проектирования | 104 |
5.2. Объектно-ориентированный анализ общности | 105 |
5.2.1. Анализ общности | 107 |
5.2.2. Анализ изменчивости | 107 |
5.3. Резюме | 108 |
|
6. Анализ области решений | 109 |
|
6.1. «Другая» предметная область | 109 |
6.1.1. Анализ и язык | 110 |
6.2. Область решений C++: обзор | 110 |
6.3. Данные | 111 |
6.4. Перегрузка | 111 |
6.5. Шаблоны классов | 112 |
6.5.1. Специализация шаблона | 113 |
6.6. Шаблоны функций | 113 |
6.7. Наследование | 114 |
6.7.1. Сопоставление предметных областей | 115 |
6.8. Виртуальные функции | 119 |
6.9. Анализ общности и полиморфизм | 120 |
6.10. Директивы препроцессора | 121 |
6.11. Отрицательная изменчивость | 122 |
6.11.1. Когда использовать отрицательную изменчивость | 122 |
6.11.2. Отрицательная изменчивость или разделение |
предметной области | 130 |
6.11.3. Отрицательная изменчивость: резюме | 132 |
6.12. Область решений C++: резюме | 134 |
|
7. Простое смешивание парадигм | 135 |
|
7.1. Объединяем знания: обзор мультипарадигменного проектирования | 135 |
7.1.1. Под одну гребёнку всё не подстричь | 135 |
7.1.2. Степени сложности | 138 |
7.2. Операции мультипарадигменного проектирования | 142 |
7.3. Пример: простой транслятор | 147 |
7.3.1. Разбиение на подобласти | 147 |
7.3.2. Определение подходящей парадигмы внутри подобласти | 149 |
7.3.3. Реализация проекта | 156 |
7.4. Проектирование, а не анализ | 157 |
7.4.1. Анализ, архитектура или проектирование? | 157 |
7.5. Другой пример: автоматическое дифференцирование | 158 |
7.5.1. Предметная область Основных операций | 160 |
7.5.2. Предметная область Степени | 161 |
7.5.3. Предметная область Величины | 161 |
7.5.4. Развитие проекта | 164 |
7.6. «Забортные» (внешние) парадигмы | 165 |
7.7. Вопросы управления | 166 |
7.7.1. «Бритва Оккама»: не усложняем | 166 |
7.7.2. Разделяй и властвуй | 167 |
7.7.3. За пределами C++ | 169 |
7.7.4. Практика в предметной области | 170 |
7.8. Резюме | 170 |
|
8. Переплетаем парадигмы | 171 |
|
8.1. Методика и проектирование | 171 |
8.2. Анализ общности: каким является измерение общности? | 172 |
8.3. Несколько измерений изменчивости при едином наборе общих |
характеристик | 173 |
8.3.1. Анализ изменчивости | 174 |
8.3.2. Выражение общности и изменчивости на C++ | 175 |
8.4. Взаимозависимые предметные области | 178 |
8.4.1. Случай первый: связывание при компиляции | 183 |
8.4.2. Случай второй: тип буфера определяется типом носителя |
во время выполнения; тип носителя определяется типом буфера |
при компиляции | 185 |
8.4.3. Случай третий: тип буфера определяется носителем во |
время выполнения; тип носителя определяется типом буфера |
во время выполнения | 190 |
8.5. Проект и структура | 192 |
8.5.1. Пара слов о моменте связывания | 195 |
8.6. Другой пример: конечный автомат | 196 |
8.7. Решения, основанные на паттернах | 201 |
8.8. Резюме | 202 |
|
9. Дополняем область решений паттернами | 203 |
|
9.1. Значение идиом и паттернов | 203 |
9.1.1. Паттерны вне языка | 204 |
9.1.2. Паттерны и мультипарадигменное проектирование | 205 |
9.1.3. Имена для конструкций области решений | 206 |
9.1.4. Конструкции более высокого уровня, |
чем в языках программирования | 206 |
9.1.5. Отрицательная изменчивость | 207 |
9.2. Общность и изменчивость в общеизвестных паттернах | 209 |
9.2.1. Паттерны вне методов инженерии предметной области | 209 |
9.2.2. Паттерн Мост | 210 |
9.2.3. Паттерн Метод шаблонов | 210 |
9.2.4. Паттерн Стратегия | 211 |
9.2.5. Паттерн Состояние | 213 |
9.2.6. Паттерн Унификация | 213 |
9.2.7. Паттерн Одиночка | 214 |
9.3. Паттерны отрицательной изменчивости | 215 |
9.3.1. Паттерн Мост | 215 |
9.3.2. Паттерн Адаптер | 217 |
9.3.3. Другие паттерны | 217 |
9.4. Средства мультипарадигменного проектирования |
как дополнение паттернов | 218 |
9.5. Резюме | 218 |
|
Список литературы | 219 |
|
Алфавитный указатель | 223 |