Введение

Часть I. Объектно-ориентированно программирование

Глава 1. Объектно-ориентированный анализ и проектирование
Построение моделей
Разработка программ: язык моделирования
Разработка программ: процессы
Замысел
Анализ требований
Примеры использования
Анализ приложения
Анализ систем
Планирование выпуска документов
Иллюстративный материал
Артефакты
Проектирование
Что такое классы
Преобразования
Статическая модель
Динамическая модель
Резюме

Глава 2. Проектирование классов С++
Перевод диаграмм классов в C++
Стандартные классы
Шаблонные классы
Служебные классы
Ассоциации
Агрегации
Обобщение
Перевод диаграмм взаимодействия в C++
Реализация диаграмм совместных работ и диаграмм последовательности действий в С++
Перевод диаграмм состояний в C++
Перевод диаграмм активности в С++
Резюме

Глава 3. Наследование, полиморфизм и повторное использование программных кодов
Преимущества наследования
Объектно-ориентированные связанные списки
Разработка связанного списка
Реализация связанного списка
Абстрактные классы
Перекрытие чисто виртуальных методов
Виртуальные деструкторы
Полиморфизм, реализованный путем перегрузка методов класса
Управление памятью
Проблемы, сопровождающие перегрузку других операторов
Оператор присваивания
Перегрузка операторов увеличения
Виртуальный конструктор копий
Множественное наследование
Проблемы множественного наследования
Множественное наследование и включение
Резюме


Часть II. Вопросы реализации


Глава 4. Управление памятью
Управление памятью и указатели
Расход памяти
Распределение массивов
Паразитные, болтающиеся и дикие указатели
Указатели const
Указатели const и функции-члены const
Передача по ссылке
Передача указателя const
Возврат ссылки на объект, который не находится в области видимости
Указатель, указатель, указатель
Указатели и исключения
Использование автоуказателей
Подсчет ссылок
Резюме

Глава 5. Использование каркасов приложений
Microsoft Foundation Classes
Приступая к изучению
Другие мастера
В перспективе
Архитектура приложения
Многопоточность
Кооперативная многопоточность против вытесняющей
Проблемы вытесняющей многопоточности
Пример для изучения
Создание потоков
Пример
Служебные классы
Классы манипулирования строками
Классы времени
Документы и представления
Представления
Резюме

Глава 6. Контейнерные классы библиотеки STL
Определение и реализация шаблонов
Определение и реализация шаблонов функций
Определение и реализация шаблонов классов
Последовательные контейнеры
Контейнер-вектор
Контейнер-список
Контейнер-дека
Стеки
Очереди
Приоритетные очереди
Связанные контейнеры
Контейнер-запись
Множественные записи
Контейнер-набор
Множественные наборы
Вопросы производительности
Использование стандартной библиотеки C++
Конструирование типов элементов
Резюме

Глава 7. Итераторы и алгоритмы STL
Классы итераторов
Позиция внутри контейнера
Типы итераторов контейнеров
Базовый класс итераторов
Вводные итераторы
Выводные итераторы
Пересылаемые итераторы
Двунаправленные итераторы
Итераторы произвольного доступа
Итераторные операции
Классы стандартных итераторов
Объекты-функции
Предикаты
Арифметические функции
Алгоритмы STL
Операции немутирующих последовательностей
Алгоритмы мутирующих последовательностей
Операции сортировки и связности последовательностей
Стандартные функции
Резюме

Глава 8. Исключение конфликтов имен
Функции и классы, разрешаемые по именам
Создание пространства имен
Использование пространства имен
Ключевое слово using
Объявление using
Псевдоним пространства имен
Неименованное пространство имен
Стандартное пространство имен
Резюме

Глава 9. Манипулирование типами объектов
Оператор typeid ()
Класс type_info
Конструктор для класса type_info
Операторы сравнения
Функция-член name ()
Функция-член before ()
Оператор typeid () в конструкторах и деструкторах
Неправильное использование typeid ()
Динамическое приведение объектов
Оператор dynanic_cast ()
Операторы typeid() и dynamic_cast
Другие операторы приведения
Оператор static_cast()
Оператор reinterpret_cast ()
Когда использовать операторы dynaaiic_cast(), static_cast () или reinterpret_cast ()
Оператор const_cast()
Новые приведения против старых
Резюме

Глава 10. Настройка производительности приложения
Функции inline вне определений классов
Как избежать раскрытия программного кода реализации в распространяемых header-файлах
Анализ стоимости виртуальных функций и виртуальных базовых классов
Виртуальные функции
Виртуальные базовые классы
Компромиссы RTTI
Управление памятью для временных объектов
Резюме


Часть III. Обработка данных


Глава 11. Рекурсия и рекурсивные структуры данных
Что такое рекурсия
Числа Фибоначчи: рекурсивное определение
Остановка рекурсии
Рекурсивные структуры
Обход рекурсивной структуры с помощью рекурсивной функции
Цикл и хвостовая рекурсия
Хвостовая рекурсия
Непрямая рекурсия
Рекурсия и стек
Отладка рекурсивных функций
Резюме

Глава 12. Использование методов сортировки
Анализ производительности алгоритмов
Сравнение среднего, худшего и лучшего случаев
Стабильность сортировки
Использование дополнительных способов хранения во время сортировки
Пузырьковая сортировка
Анализ пузырьковой сортировки
Сортировка вставками
Анализ сортировки вставками
Сортировка выбором
Анализ сортировки выбором
Быстрая сортировка
Анализ быстрой сортировки
Сортировка слиянием
Анализ сортировки слиянием
Сортировка по методу Шелла
Анализ сортировки по методу Шелла
Пирамидальная сортировка
Анализ пирамидальной сортировки
Выбор метода сортировки
Генерирование тестовых данных
Резюме

Глава 13. Алгоритмы поиска данных
Линейный поиск
Анализ линейного поиска
Поиск в отсортированном массиве
Сопоставление с образцом
Грубый алгоритм
Представление образца
Построение конечных автоматов
Алгоритмы поиска на графе
Поиск в глубину
Поиск в ширину
Сравнение поиска в глубину и поиска в ширину
Поиск по первому наилучшему совпадению
Реализация объектов графов
Представление игры Tic-Tac-Toe
Применение альфа-бета-отсечений
Задача коммивояжера
Внешний поиск
Индексированный последовательный доступ
Двоичные деревья
Деревья 2-3-4
Резюме

Глава 14. Хеширование и синтаксический анализ
Сравнение поиска и хеширования
Функции хеширования
Разрешение конфликтов
Линейное повторное хеширование
Нелинейное повторное хеширование
Коэффициент загрузки (альфа)
Связывание в цепочку
Адресация областей памяти
Синтаксический разбор
Синтаксический разбор числовых выражений
Синтаксический разбор строковых выражений
Контекстно-свободная грамматика и синтаксический анализ
Выполнение нисходящего синтаксического разбора для проверки правильности регулярных выражений
Резюме


Часть IV. Живучесть объектов и шифрование

Глава 15. Живучесть объектов
Создание хранимых объектов
Что такое В-дерево
Запись В-дерева на диск
Кэширование
Определение размера страниц
Определение количества страниц, которые могут одновременно находиться в памяти
Подкачка данных на жесткий диск
Реализация В-дерева
Как это работает
Прогулка по программному коду
Поиск
Резюме

Глава 16. Реляционные базы данных и живучесть
Основные концепции реляционных баз данных
Архитектура реляционной базы данных
Ограничения и соображения
Язык структурированных запросов SQL
Нормирование
Соединения
Живучесть для реляционной базы данных
Перемещения с идентификаторами объектов
Использование пятен
Скрытие деталей
Непосредственное сохранение объектов
Использование API БД
Доступ к источникам данных ODBC
Использование MFC
Операторы SQL
Установка характеристик БД
Резюме

Глава 17. Реализация живучести объектов с помощью реляционных баз данных
Объекты в Oracle8
Типы объектов
Ссылки на объекты
Коллекции
Использование внешних процедур, разработанных на языке C++
Отображение UML-диаграмм на объектно-реляционную базу данных
Проектирование базы данных
Генерирование классов на C++
Генерирование сервера
Пример: Система заказа покупок
Описание системы

Глава 18. Объектно-ориентированны базы данных
Обзор объектно-ориентированных баз данных
Стандарт ODMG
Приложение на C++ для ведения счетов
Живучесть данных
Схемы базы данных и средства захвата этой схемы
Коллекции
Итераторы
Отношения
Базы данных и транзакции
Технические вопросы объектно-ориентированных баз данных
Архитектура клиент/сервер
Хранение данных и кластеризация объектов
Передача данных
Блокирование данных
Резюме

Глава 19. Защита приложений с помощью шифрования
Краткая история шифрования
Роль Национального бюро стандартов
Понятие шифрования
Коды
Шифры
Шифр Vernam
Криптография по частному ключу
Алгоритмы частного ключа
Механизмы шифрования по секретному ключу
Использование центров распространения ключей
Криптография по общему ключу
Метод головоломки Ральфа Меркле
Многопользовательские криптографические методы Диффи-Хельмана
Метод RSA
Использование Pretty Good Privacy
Выбор простых чисел в PGP
Использование случайных чисел в криптографии
Шифрование файлов с помощью PGP
Ограничения в криптографии
Юридические ограничения на криптографию
Криптографические атаки
Атака грубой силы
Криптоанализ
Взлом файла, зашифрованного программой PGP
Цифровые подписи
Public Key Cryptography Standard (PKCS)
Digital Signature Standard (DSS)
Неотрицание
Коммерческие криптографические продукты
Безопасные Web-клиенты
Безопасные почтовые клиенты
Продукты для защиты рабочего стола
Резюме


Часть V. Распределенные вычисления

Глава 20. CORBA
Теория и обоснование
Минимальная среда CORBA
Каркас объектной технологии
IIОР: объектное склеивание
Компонентная модель
IDL: соглашение связывания
Сравнение 1DL с определением класса C++
Брокер объектных запросов
Время жизни объектов
Среды разработки
Сравнение сред CORBA
Способность ORB к взаимодействию
Создание клиента С+
Генерирование заглушки
Связь с ORB
Вызовы методов
Завершенное клиентское приложение C++
Создание сервера C++
Генерирование скелета
Реализация методов сервера
Подсоединение класса сервера
Загрузка ВОД в ORB
Клиент Java
Генерирование заглушки
Запуск и программный код вызова метода
Стратегии тестирования
Трассировка
Службы мониторинга и регистрации
Обработка исключений
Удаленная отладка
Служба имен и способность к взаимодействию
Interoperable Object Reference (IOR)
Именование контекстов
Проблемы взаимодействия
Производительность
Перерасход памяти со стороны ORB
Степень детализации интерфейса
Ссылки на передаваемый объект
Резюме

Глава 21. СОМ
Основы СОМ
Архитектура СОМ
Интерфейсы
Интерфейс IUnknown
СОМ-объекты
Библиотеки типов
Другие СОМ-технологии
Использование СОМ-объектов в C++
Использование интерфейсов Raw
Использование интеллектуальных указателей
Использование библиотек типов
Создание СОМ-объектов в C++
Множественное наследование
Вложенные классы
Использование классов tear off
Резюме
Дополнительная литература

Глава 22. Java и C++
Общие черты C++ и Java
Комментарии
Типы данных
Операторы
Операторы управления потоком
Различия между C++ и Java
Управление памятью
Отсутствие указателей
Отсутствие препроцессора
Отсутствие деструктора
Спецификаторы доступа
Параметры метода
Внешние функции
Перечислители
Строки
Массивы
Объектно-ориентированные возможности Java
Классы
Наследование
Множественное наследование
Обработка исключений
Резюме