وبلاگ بلیان

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

معرفی کتاب «Современное проектирование на C++: Обобщенное программирование и прикладные шаблоны проектирования» نوشتهٔ Андрей Александреску; [Пер. с англ. и ред. Д.А. Клюшина; Предисл.: Скотта Мейерса, Джона Влиссидеса]، منتشرشده توسط نشر Вильямс در سال 2004. این کتاب در فرمت djvu، زبان ru ارائه شده است.

В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно-ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++. Книга может быть использована как документация к библиотеке Loki. На оф. сайте доступны как последняя версия, так и версия написанная вместе с книгой. На сайте Александреску можно прочитать (в оригинале) статьи и избранные места из книг этого автора. Страничка Александреску - здесь. Без сомнения ? это самая глубокая книга по C++ из изданных на русском языке, и должна занять место на рабочем столе разработчика рядом с классическим трудом Страуструпа. Книга здесь уже была, но в PDF, без навигации и текстового слоя. Я переделал в DjVu, добавил OCR, дополнил содержание и алфавитный указатель гиперссылками, сделал боковую панель навигации (+ слегка уменьшил размер). Метки темы: С++ Предисловие Скотта Мейерса......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 Want to learn how to program in C++ immediately? Want to start writing better, more powerful C++ programs today? Accelerated C++'s uniquely modern approach will help you learn faster and more fluently than you ever believed possible. Based on the authors' intensive summer C++ courses at Stanford University, Accelerated C++ covers virtually every concept that most professional C++ programmers will ever use -- but it turns the "traditional" C++ curriculum upside down, starting with the high-level C++ data structures and algorithms that let you write robust programs immediately. Once you're getting results, Accelerated C++ takes you "under the hood", introducing complex language features such as memory management in context, and explaining exactly how and when to use them. From start to finish, the book concentrates on solving problems, rather than learning language and library features for their own sake. The result: You'll be writing real-world programs in no time -- and outstanding code faster than you ever imagined. A boxed-set of five volumes on C++ programming. The books are: Modern C++ Design; Accelerated C++; Essential C++; Exceptional C++; and More Exceptional C++. This boxed-set of five volumes on C++ programming includes: Modern C++ Design; Accelerated C++; Essential C++; Exceptional C++; and More Exceptional C++.
دانلود کتاب Современное проектирование на C++: Обобщенное программирование и прикладные шаблоны проектирования