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