Современное проектирование на C++ - В книге изложена новая технология программирования, представляющая собой сплав обобщённого программирования шаблонов и объектно - ориентированного программирования на С++. Обобщённые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность В книге изложены способы реализации основных шаблонов проектирования. Разные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.
Название: Современное проектирование на C++ Автор: Андрей Александреску Издательство: Вильямс Год: 2008 Страниц: 336 Формат: PDF Размер: 10,0 МБ ISBN: 978-5-8459-0351-8 Качество: Отличное Серия или Выпуск: C++ In-Depth Язык: Русский
Содержание:
Предисловие Скотта Мейерса Предисловие Джона Вдиссндеса Предисловие Аудитория Библиотека Loki Структура книги Благодарности Часть I. Методы Глава 1. Разработка классов на основе стратегий 1.1. Разнообразие методов разработки программного обеспечения 1.2. Недостатки универсального интерфейса 1.3. Опасно ли множественное наследование? 1.4. Преимущества шаблонов 1.5. Стратегии и классы стратегий 1.5.1. Реализация классов стратегий с помощью шаблонных параметров 1.5.2. Реализация классов стратегий с помощью шаблонных функций-членов 1.6. Расширенные стратегии 1.7. Деструкторы классов стратегий 1.8. Факультативные возможности, предоставляемые неполной конкретизацией 1.9. Комбинирование классов стратегий 1.10. Настройка структур с помошью классов стратегий 1.11. Совместимые и несовместимые стратегии 1.12. Разложение классов на стратегии 1.13. Резюме Глава 2. Приемы программирования 2.1. Статическая проверка диагностических утверждений 2.2. Частичная специализация шаблонов 2.3. Локальные классы 2.4. Отображение целочисленных констант в типы 2.5. Отображение одного типа в другой 2.6. Выбор тина 2.7. Распознавание конвертируемости и наследования на этапе компиляции 2.8. Оболочка вокруг класса type_info 2.9. Классы NullTypc и EmptyTypc 2.10. Характеристики типов 2.10.1. Реализация характеристик указателей 2.10.2. Распознавание основных типов 2.10.3. Оптимальные типы параметров 2.10.4. Удаление квалификаторов 2.10.5. Применение класса TypeTraits 2.10.6. Заключение 2.11. Резюме Глава 3. Списки типов 3.1. Зачем нужны списки типов 3.2. Определение списков типов 3.3. Линеаризация создания списков типов 3.4. Вычисление длины списка 3.5. Интермеццо 3.6. Индексированный доступ 3.7. Поиск элемента 3.8. Добавление элемента 3.9. Удаление элемента 3.10. Удаление дубликатов 3.11. Замена элемента 3.12. Частично упорядоченные списки типов 3.13. Генерация класса на основе списка типов 3.13.1. Генерация распределенных иерархий 3.13.2. Генерация кортежей 3.13.3. Генерация линейных иерархий 3.14. Резюме 3.15. Краткое описание класса Typelisl Глава 4. Размещение в памяти небольших объектов 4.1. Стандартный механизм распределения динамической памяти 4.2. Как работает стандартный механизм распределения динамической памяти 4.3. Распределитель памяти для небольших объектов 4.4. Класс Chunk 4.5. Класс FixedAllocator 4.6. Класс SmallObjAllocator 4.7. Трюк 4.8. Просто, сложно и снова просто 4.9. Применение 4.10. Резюме 4.11. Краткое описание механизма распределения памяти для небольших объектов Часть II. Компоненты Глава 5. Обобщенные функторы 5.1. Шаблон Command 5.2. Шаблон Command в реальном мире 5.3. Вызываемые сущности в языке C++ 5.4. Скелет шаблонного класса Functor 5.5. Реализация оператора пересылки Functor:: operator () 5.6. Работа с функторами 5.7. Один пишем, два в уме 5.8. Преобразование типов аргументов и возвращаемою значения 5.9. Указатели на функции-члены 5.10. Связывание 5.11. Сцепление 5.12. Первая практическая проблема: стоимость функций пересылки 5.13. Вторая практическая проблема: распределение динамической памяти 5.14. Реализация операций Undo и Redo с помощью класса Functor 5.15. Резюме 5.16. Краткое описание класса Functor Глава 6. Реализация шаблона Singleton 6.1. Статические данные + статические функции != синглтон 6.2. Основные идиомы языка C++ для поддержки синглтонов 6.3. Обеспечение уникальности синглтонов 6.4. Разрушение объектов класса Singleton 6.5. Проблема висячей ссылки 6.6. Проблема адресации висячей ссылки (I): феникс 6.6.1. Проблемы, связанные с функцией atexit 6.7. Проблема висячей ссылки (II): синглтон с заданной продолжительностью жизни 6.8. Реализация синглтонов, имеющих заданную продолжительность жизни 6.9. Продолжительность жизни объектов в многопоточной среде 6.9.1. Шаблон блокировки с двойной проверкой 6.10. Сборка 6.10.1. Разложение класса Singletonllolder на стратегии 6.10.2. Требования, предъявляемые к стратегиям класса SinglctonHoldcr 6.10.3. Сборка класса SingletonHolder 6.10.4. Реализации стратегий 6.11. Работа с классом SingletonHodler 6.12. Резюме 6.13. Краткое описание шаблонного класса SingletonHolder Глава 7. Интеллектуальные указатели 7.1. Сто первое описание интеллектуальных указателей 7.2. Особенности интеллектуальных указателей 7.3. Хранение интеллектуальных указателей 7.4. Функции-члены интеллектуальных указателей 7.5. Стратегии владения 7.5.1. Глубокое копирование 7.5.2. Копирование при записи 7.5.3. Подсчет ссылок 7.5.4. Связывание ссылок 7.5.5. Разрушающее копирование 7.6. Оператор взятия адреса 7.7. Неявное приведение к типам обычных указателей 7.8. Равенство и неравенство 7.9. Отношения порядка 7.10. Обнаружение и регистрация ошибок 7.10.1. Проверка во время инициализации 7.10.2. Проверка перед разыменованием 7.10.3. Сообщения об ошибках 7.11. Интеллектуальные указатели на константные объекты и константные интеллектуальные указатели 7.12. Массивы 7.13. Интеллектуальные указатели и многопоточность 7.13.1. Многопоточность на уровне объектов 7.13.2. Многопоточность на уровне регистрации данных 7.14. Сборка 7.14.1. Многопоточность на уровне объектов 7.14.2. Стратегия Ownership 7.14.3. Стратегия Conversion 7.14.4. Стратегия Checking 7.15. Резюме 7.16. Краткий обзор класса Smart Ptr Глава 8. Фабрики объектов 8.1. Для чего нужны фабрики объектов 8.2. Фабрики объектов в языке C++: классы и объекты 8.3. Реализация фабрики объектов 8.4. Идентификаторы типов 8.5. Обобщение 8.6. Мелкие детали 8.7. Фабрика клонирования 8.8. Использование фабрики объектов в сочетании с другими обобщенными компонентами 8.9. Резюме 8.10. Краткий обзор шаблонного класса Factory 8.11. Краткий обзор шаблонного класса CloneFactory Глава 9. Шаблон Abstract Factory 9.1. Архитектурная роль шаблона Abstract Factory 9.2. Обобщенный интерфейс шаблона Abstract Factory 9.3. Реализация класса Abstract Factory 9.4. Реализация шаблона Abstract Factory на основе прототипов 9.5. Резюме 9.6. Краткий обзор классов Abstract Factory и ConcreteFactory Глава 10. Шаблон Visitor 10.1. Основы шаблона Visitor 10.2. Перегрузка и функция-ловушка 10.3. Уточнение реализации: шаблон Acyclic Visitor 10.4. Обобщенная реализация шаблона Visitor 10.5. Назад - к «простому» шаблону Visitor 10.6. Отладка вариантов 10.6.1. Функция-ловушка 10.6.2. Нестрогое инспектирование 10.7. Резюме 10.8. Краткий обзор обобщенных компонентов шаблона Visitor Глава 11. Мультиметоды 11.1. Что такое мультиметоды? 11.2. Когда нужны мультиметоды 11.3. Двойное переключение по типу: грубый подход 11.4. Автоматизированный грубый подход 11.5. Симметричность грубого подхода 11.6. Логарифмический двойной диспетчер 11.6.1. Логарифмический диспетчер и наследование 11.6.2. Логарифмический диспетчер и приведение типов 11.7. Класс FnDispatcher и симметрия 11.8. Двойная диспетчеризация функторов 11.9. Преобразование аргументов: siatic_cast или dynamic_casi? 11.10. Мультиметоды с постоянным временем выполнения 11.11. Классы BasicDispatcher и BasicFastDispatcher как стратегии 11.12. Перспективы 11.13. Резюме 11.14. Краткий обзор двойных диспетчеров Приложение. Многопоточная библиотека в стиле минимализма П.1. Критика многопоточности П.2. Подход, реализованный в библиотеке Loki П. З. Атомарные операции с целочисленными типами П.4. Мьютексы П.5. Семантика блокировки в объектно-ориентированном программировании П.6. Модификатор volatile П.7. Семафоры, события и другие полезные вещи П.8. Резюме Библиография Предметный указатель