Современное проектирование на C++: Обобщенное программирование и прикладные шаблоны проектирования

Free Download

Authors:

ISBN: 0-201-77581-6, 5-8459-0351-3

Size: 3 MB (3475240 bytes)

Pages: 335/335

File format:

Language:

Publishing Year:

Category:

Андрей Александреску0-201-77581-6, 5-8459-0351-3

В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно-ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.

Книга может быть использована как документация к библиотеке Loki. На оф. сайте доступны как последняя версия, так и версия написанная вместе с книгой. На сайте Александреску можно прочитать (в оригинале) статьи и избранные места из книг этого автора. Страничка Александреску – здесь.

Без сомнения ? это самая глубокая книга по C++ из изданных на русском языке, и должна занять место на рабочем столе разработчика рядом с классическим трудом Страуструпа.

Книга здесь уже была, но в PDF, без навигации и текстового слоя. Я переделал в DjVu, добавил OCR, дополнил содержание и алфавитный указатель гиперссылками, сделал боковую панель навигации (+ слегка уменьшил размер).

Метки темы:
С++


Table of contents :
Предисловие Скотта Мейерса……Page 11
Предисловие Джона Влиссидеса……Page 15
Предисловие……Page 17
Аудитория……Page 18
Библиотека Loki……Page 19
Структура книги……Page 20
Благодарности……Page 21
Часть I. Методы……Page 23
1.1. Разнообразие методов разработки программного обеспечения……Page 25
1.2. Недостатки универсального интерфейса……Page 26
1.3. Опасно ли множественное наследование?……Page 28
1.4. Преимущества шаблонов……Page 29
1.5. Стратегии и классы стратегий……Page 30
1.5.1. Реализация классов стратегий с помощью шаблонных параметров……Page 32
1.6. Расширенные стратегии……Page 34
1.7. Деструкторы классов стратегий……Page 35
1.8. Факультативные возможности, предоставляемые неполной конкретизацией……Page 36
1.9. Комбинирование классов стратегий……Page 37
1.11. Совместимые и несовместимые стратегии……Page 39
1.12. Разложение классов на стратегии……Page 41
1.13. Резюме……Page 43
Глава 2. Приемы программирования……Page 45
2.1. Статическая проверка диагностических утверждений……Page 46
2.2. Частичная специализация шаблонов……Page 48
2.3. Локальные классы……Page 50
2.4. Отображение целочисленных констант в типы……Page 51
2.5. Отображение одного типа в другой……Page 53
2.6. Выбор типа……Page 54
2.7. Распознавание конвертируемости и наследования на этапе компиляции……Page 56
2.8. Оболочка вокруг класса type_info……Page 59
2.10. Характеристики типов……Page 61
2.10.1. Реализация характеристик указателей……Page 62
2.10.2. Распознавание основных типов……Page 63
2.10.3. Оптимальные типы параметров……Page 64
2.10.4. Удаление квалификаторов……Page 65
2.10.5. Применение класса TypeTraits……Page 66
2.10.6. Заключение……Page 67
2.11. Резюме……Page 68
3.1. Зачем нужны списки типов……Page 71
3.2. Определение списков типов……Page 73
3.3. Линеаризация создания списков типов……Page 74
3.4. Вычисление длины списка……Page 75
3.5. Интермеццо……Page 76
3.6. Индексированный доступ……Page 77
3.7. Поиск элемента……Page 78
3.8. Добавление элемента……Page 79
3.9. Удаление элемента……Page 80
3.10. Удаление дубликатов……Page 81
3.11. Замена элемента……Page 82
3.12. Частично упорядоченные списки типов……Page 83
3.13.1. Генерация распределенных иерархий……Page 86
3.13.2. Генерация кортежей……Page 91
3.13.3. Генерация линейных иерархий……Page 92
3.14. Резюме……Page 95
3.15. Краткое описание класса Typelist……Page 96
Глава 4. Размещение в памяти небольших объектов……Page 99
4.2. Как работает стандартный механизм распределения динамической памяти……Page 100
4.3. Распределитель памяти для небольших объектов……Page 102
4.4. Класс Chunk……Page 103
4.5. Класс FixedAllocator……Page 106
4.6. Класс SmallObjAllocator ПО……Page 4
4.7. Трюк……Page 112
4.8. Просто, сложно и снова просто……Page 114
4.9. Применение……Page 115
4.10. Резюме……Page 116
4.11. Краткое описание механизма распределения памяти для небольших объектов……Page 117
Часть II. Компоненты……Page 119
Глава 5. Обобщенные функторы……Page 121
5.1. Шаблон Command……Page 122
5.2. Шаблон Command в реальном мире……Page 124
5.3. Вызываемые сущности в языке C++……Page 125
5.4. Скелет шаблонного класса Functor……Page 126
5.5. Реализация оператора пересылки Functor::operator()……Page 131
5.6. Работа с функторами……Page 132
5.7. Один пишем, два в уме……Page 134
5.8. Преобразование типов аргументов и возвращаемого значения……Page 136
5.9. Указатели на функции-члены……Page 137
5.10. Связывание……Page 141
5.11. Сцепление……Page 143
5.12. Первая практическая проблема: стоимость функций пересылки……Page 144
5.13. Вторая практическая проблема: распределение динамической памяти……Page 146
5.14. Реализация операций Undo и Redo с помощью класса Functor……Page 147
5.16. Краткое описание класса Functor……Page 148
Глава 6. Реализация шаблона Singleton……Page 151
6.1. Статические данные + статические функции != синглтон……Page 152
6.2. Основные идиомы языка C++ для поддержки синглтонов……Page 153
6.3. Обеспечение уникальности синглтонов……Page 154
6.4. Разрушение объектов класса Singleton……Page 155
6.5. Проблема висячей ссылки……Page 157
6.6. Проблема адресации висячей ссылки (I): феникс……Page 159
6.6.1. Проблемы, связанные с функцией atexit……Page 161
6.7. Проблема адрерации висячей ссылки A1): синглтон с заданной продолжительностью жизни……Page 162
6.8. Реализация синглтонов, имеющих заданную продолжительность жизни……Page 164
6.9. Продолжительность жизни объектов в многопоточной среде……Page 167
6.9.1. Шаблон блокировки с двойной проверкой……Page 168
6.10. Сборка……Page 170
6.10.2. Требования, предъявляемые к стратегиям класса SingletonHolder……Page 171
6.10.3. Сборка класса SingletonHolder……Page 172
6.10.4. Реализации стратегий……Page 174
6.11. Работа с классом SingletonHodler……Page 175
6.12. Резюме……Page 176
6.13. Краткое описание шаблонного класса SingletonHolder……Page 177
7.1. Сто первое описание интеллектуальных указателей……Page 179
7.2. Особенности интеллектуальных указателей……Page 180
7.3. Хранение интеллектуальных указателей……Page 182
7.4. Функции-члены интеллектуальных указателей……Page 183
7.5.1. Глубокое копирование……Page 185
7.5.2. Копирование при записи……Page 186
7.5.3. Подсчет ссылок……Page 187
7.5.4. Связывание ссылок……Page 189
7.5.5. Разрушающее копирование……Page 190
7.6. Оператор взятия адреса……Page 192
7.7. Неявное приведение к типам обычных указателей……Page 193
7.8. Равенство и неравенство……Page 195
7.9. Отношения порядка……Page 200
7.10.1. Проверка во время инициализации……Page 202
7.10.3. Сообщения об ошибках……Page 203
7.11. Интеллектуальные указатели на константные объекты и константные интеллектуальные указатели……Page 204
7.13.1. Многопоточность на уровне объектов……Page 205
7.13.2. Многопоточность на уровне регистрации данных……Page 207
7.14. Сборка……Page 209
7.14.1. Многопоточность на уровне объектов……Page 210
7.14.2. Стратегия Ownership……Page 212
7.14.4. Стратегия Checking……Page 214
7.15. Резюме……Page 215
7.16. Краткий обзор класса SmaitPtr……Page 216
Глава 8. Фабрики объектов……Page 217
8.1. Для чего нужны фабрики объектов……Page 218
8.2. Фабрики объектов в языке C++: классы и объекты……Page 220
8.3. Реализация фабрики объектов……Page 221
8.4. Идентификаторы типов……Page 225
8.5. Обобщение……Page 227
8.6. Мелкие детали……Page 230
8.7. Фабрика клонирования……Page 231
8.8. Использование фабрики объектов в сочетании с другими обобщенными компонентами……Page 234
8.10. Краткий обзор шаблонного класса Factory……Page 235
8.11. Краткий обзор шаблонного класса CloneFactory……Page 236
9.1. Архитектурная роль шаблона Abstract Factory……Page 239
9.2. Обобщенный интерфейс шаблона Abstract Factory……Page 242
9.3. Реализация класса AbstractFactory……Page 245
9.4. Реализация шаблона Abstract Factory на основе прототипов……Page 249
9.5. Резюме……Page 252
9.6. Краткий обзор классов AbstractFactory и ConcreteFactory……Page 253
10.1. Основы шаблона Visitor……Page 255
10.2. Перегрузка и функция-ловушка……Page 261
10.3. Уточнение реализации: шаблон Acyclic Visitor……Page 262
10.4. Обобщенная реализация шаблона Visitor……Page 268
10.5. Назад — к “простому” шаблону Visitor……Page 274
10.6.1. Функция-ловушка……Page 277
10.7. Резюме……Page 279
10.8. Краткий обзор обобщенных компонентов шаблона Visitor……Page 280
Глава 11. Мультиметоды……Page 281
11.2. Когда нужны мультиметоды……Page 282
11.3. Двойное переключение по типу: грубый подход……Page 284
11.4. Автоматизированный грубый подход……Page 286
11.5. Симметричность грубого подхода……Page 290
11.6. Логарифмический двойной диспетчер……Page 294
11.6.1. Логарифмический диспетчер и наследование……Page 296
11.6.2. Логарифмический диспетчер и приведение типов……Page 297
11.7. Класс FnDispatcher и симметрия……Page 299
11.8. Двойная диспетчеризация функторов……Page 300
11.9. Преобразование аргументов: static_cast или dynamic_cast?……Page 302
11.10. Мультиметоды с постоянным временем выполнения……Page 307
11.11. Классы BasicDispatcher и BasicFastDispatcher как стратегии……Page 310
11.12. Перспективы……Page 311
11.13. Резюме……Page 312
11.14. Краткий обзор двойных диспетчеров……Page 314
Приложение. Многопоточная библиотека в стиле минимализма……Page 319
.П.1. Критика многопоточности……Page 320
П.З. Атомарные операции с целочисленными типами……Page 321
П.4. Мьютексы……Page 323
П.5. Семантика блокировки в объектно-ориентированном программировании……Page 325
П.8. Резюме……Page 327
Библиография……Page 329
Предметный указатель……Page 331

Reviews

There are no reviews yet.

Be the first to review “Современное проектирование на C++: Обобщенное программирование и прикладные шаблоны проектирования”
Shopping Cart
Scroll to Top