C++. Энциклопедия пользователя Part 001

Page 1

Дж.Либерти C++. ЭНЦИКЛОПЕДИЯ ПОЛЬЗОВАТЕЛЯ Книга C++. Энциклопедия пользователя содержит обзор актуальных тем, связанных с языком программирования C++. В книге рассматриваются вопросы объектно-ориентированного анализа и проектирования, универсального языка программирования UML и разработки объектных моделей. Достаточно подробно представлены вопросы реализации приложений, а также стандартная библиотека шаблонов STL. Особое внимание уделено обработке данных, живучести объектов и шифрованию, архитектуре CORBA и модели СОМ. Прилагаемый CD-ROM содержит исходные тексты примеров, рассмотренных в книге. Книга рассчитана на читателей, которые имеют начальные сведения и знания по программированию на языке C++. Оглавление Введение 13 Часть I. Объектно-ориентированное программирование 15 Глава 1.Объектно-ориентированный анализ и проектирование 16 Построение моделей 17 Разработка программ: язык моделирования 17 Разработка программ: процессы 18 Замысел 20 Анализ требований 20 Примеры использования 20 Анализ приложения 27 Анализ систем 27 Планирование выпуска документов 27 Иллюстративный материал 28 Артефакты 28 Проектирование 29 Что такое классы 29 Преобразования 30 Статическая модель 31 Динамическая модель 37 Резюме 39 Глава 2. Проектирование классов в C++ 40 Перевод диаграмм классов в C++ 41 Стандартные классы 41 Шаблонные классы 42 Служебные классы 42 Ассоциации 43 Агрегации 47 Обобщение 49 Перевод диаграмм взаимодействия в C++ 50


Реализация диаграмм совместных работ и диаграмм последовательности действий в C++ Перевод диаграмм состояний в C++ Перевод диаграмм активности в C++ Резюме Глава3.Наследование, полиморфизм и повторное использование программных кодов Преимущества наследования Объектно-ориентированные связанные списки Разработка связанного списка Реализация связанного списка Абстрактные классы Перекрытие чисто виртуальных методов Виртуальные деструкторы Полиморфизм, реализованный путем перегрузки методов класса Управление памятью Проблемы, сопровождающие перегрузку других операторов Оператор присваивания Перегрузка операторов увеличения Виртуальный конструктор копий Множественное наследование Проблемы множественного наследования Множественное наследование и включение Резюме Часть II. Вопросы реализации Глава 4. Управление памятью Управление памятью и указатели Расход памяти Распределение массивов Паразитные, болтающиеся и дикие указатели Указатели const Указатели const и функции-члены const Передача по ссылке Передача указателя const Возврат ссылки на объект, который не находится в области видимости Указатель, указатель, указатель Указатели и исключения Использование автоуказателей Подсчет ссылок Резюме Глава 5. Использование каркасов приложений Microsoft Foundation Classes Приступая к изучению

50 55 57 59 60 61 61 62 62 67 70 71 71 74 77 78 80 83 83 84 87 88 89 90 91 94 94 95 96 96 96 97 97 99 100 104 108 118 119 120 120


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

122 122 122 122 123 123 124 125 129 137 137 137 138 139 147 148 149 149 149 150 150 163 172 173 175 177 178 178 187 189 189 190 190 191 192 193 194 194 194 195 196 197 197 197


Итераторы произвольного доступа Итераторные операции Классы стандартных итераторов Объекты-функции Предикаты Арифметические функции Алгоритмы STL Операции немутирующих последовательностей Алгоритмы мутирующих последовательностей Операции сортировки и связности последовательностей Стандартные функции Резюме Глава 8. Исключение конфликтов имен Функции и классы, разрешаемые по именам Создание пространства имен Использование пространства имен Ключевое слово using Объявление using Псевдоним пространства имен Неименованное пространство имен Стандартное пространство имен Резюме Глава 9. Манипулирование типами объектов Оператор typeid() Класс type_info Конструктор для класса type_info Операторы сравнения Функция-член name() Функция-член before() Оператор typeid() в конструкторах и деструкторах Неправильное использование typeid() Динамическое приведение объектов Оператор dynamic_cast() Операторы typeid() и dynamic_cast Другие операторы приведения Оператор static_cast() Оператор reinterpret_cast() Когда использовать операторы dynamic_cast(), static_cast() или reinterpret_cast() Оператор const_cast() Новые приведения против старых Резюме Глава 10. Настройка производительности приложения Функции inline вне определений классов

197 197 199 200 201 202 203 203 211 221 238 243 244 245 248 250 252 254 255 255 256 257 258 259 259 260 260 261 263 264 264 265 266 269 270 270 271 271 272 272 273 274 275


Как избежать раскрытия программного кода реализации в распространяемых header-файлах Анализ стоимости виртуальных функций и виртуальных базовых классов Виртуальные функции Виртуальные базовые классы Компромиссы RTTI Управление памятью для временных объектов Резюме Часть III. Обработка данных Глава 11. Рекурсия и рекурсивные структуры данных Что такое рекурсия Числа Фибоначчи: рекурсивное определение Остановка рекурсии Рекурсивные структуры Обход рекурсивной структуры с помощью рекурсивной функции Цикл и хвостовая рекурсия Хвостовая рекурсия Непрямая рекурсия Рекурсия и стек Отладка рекурсивных функций Резюме Глава 12. Использование методов сортировки Анализ производительности алгоритмов Сравнение среднего, худшего и лучшего случаев Стабильностьсортировки Использование дополнительных способов хранения во время сортировки Пузырьковая сортировка Анализ пузырьковой сортировки Сортировка вставками Анализ сортировки вставками Сортировка выбором Анализ сортировки выбором Быстрая сортировка Анализ быстрой сортировки Сортировка слиянием Анализ сортировки слиянием Сортировка по методу Шелла Анализ сортировки по методу Шелла Пирамидальная сортировка Анализ пирамидальной сортировки Выбор метода сортировки Генерирование тестовых данных Резюме

279 280 280 283 285 287 289 291 292 293 293 294 294 296 299 301 302 302 303 304 305 306 306 307 307 308 309 309 311 311 313 313 315 315 318 318 320 320 322 322 323 325


Глава 13. Алгоритмы поиска данных Линейный поиск Анализ линейного поиска Поиск в отсортированном массиве Сопоставление с образцом Грубый алгоритм Представление образца Построение конечных автоматов Алгоритмы поиска на графе Поиск в глубину Поиск в ширину Сравнение поиска в глубину и поиска в ширину Поиск по первому наилучшему совпадению Реализация объектов графов Представление игры Tic-Tac-Toe Применение альфа-бета-отсечений Задача коммивояжера Внешний поиск Индексированный последовательный доступ Двоичные деревья Деревья 2-3-4 Резюме Глава 14. Хеширование и синтаксический анализ Сравнение поиска и хеширования Функции хеширования Разрешение конфликтов Линейное повторное хеширование Нелинейное повторное хеширование Коэффициент загрузки(альфа) Связывание в цепочку Адресация областей памяти Синтаксический разбор Синтаксический разбор числовых выражений Синтаксический разбор строковых выражений Контекстно-свободная грамматика и синтаксический анализ Выполнение нисходящего синтаксического разбора для проверки правильности регулярных выражений Резюме Часть IV. Живучесть объектов и шифрование Глава 15. Живучесть объектов Создание хранимых объектов Что такое В-дерево Запись В-дерева на диск Кэширование

326 327 328 328 330 331 331 332 333 334 335 336 336 337 340 340 341 342 342 342 343 344 345 346 346 347 347 347 348 349 349 358 359 360 361 361 362 363 364 365 372 374 375


Определение размера страниц Определение количества страниц, которые могут одновременно находиться в памяти Подкачка данных на жесткий диск Реализация В-дерева Как это работает Прогулка по программному коду Поиск Резюме Глава 16. Реляционные базы данных и живучесть Основные концепции реляционных баз данных Архитектура реляционной базы данных Ограничения и соображения Язык структурированных запросов SQL Нормирование Соединения Живучесть для реляционной базы данных Перемещения с идентификаторами объектов Использование пятен Скрытие деталей Непосредственное сохранение объектов Использование API БД Доступ к источникам данных ODBC Использование MFC Операторы SQL Установка характеристик БД Резюме Глава 17. Реализация живучести объектов с помощью реляционных баз данных Объекты в Oracle 8 Типы объектов Ссылки на объекты Коллекции Использование внешних процедур, разработанных на языке C++ Отображение UML-диаграмм на объектно-реляционную базу данных Проектирование базы данных Генерирование классов на C++ Генерирование сервера Пример: Система заказа покупок Описание системы Глава 18. Объектно-ориентированные базы данных Обзор объектно-ориентированных баз данных Стандарт ODMG Приложение на C++ для ведения счетов

375 375 375 376 401 403 414 416 417 418 419 420 420 420 421 421 422 422 423 423 423 423 425 433 434 434 435 436 436 437 438 439 442 442 443 445 448 448 451 452 453 453


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

466 468 469 471 471 475 487 487 487 488 488 489 490 491 491 492 492 493 495 497 497 498 500 500 501 501 502 502 503 504 504 506 507 507 507 508 508 509 509 509 510 510 510


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

511 512 514 515 516 517 518 518 519 520 520 521 522 522 523 523 523 524 524 525 525 526 526 527 527 528 528 530 530 530 531 531 531 531 532 532 532 533 533 533 534 534 534 534


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

535 536 537 537 541 543 545 546 549 550 551 555 558 558 560 562 563 563 564 565 565 565 567 568 568 568 568 568 568 569 569 570 570 571 571 572 572 576 578 579 579








































































































































































































































































































































































































Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.