
Литература / Дж. Либерти - С++. ЭнциклопедиПользовател
.PdfДж.Либерти
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 |
Реализация диаграмм совместных работ и диаграмм последовательности |
50 |
действий в C++ |
|
Перевод диаграмм состояний в C++ |
55 |
Перевод диаграмм активности в C++ |
57 |
Резюме |
59 |
Глава3.Наследование, полиморфизм и повторное использование |
60 |
программных кодов |
|
Преимущества наследования |
61 |
Объектно-ориентированные связанные списки |
61 |
Разработка связанного списка |
62 |
Реализация связанного списка |
62 |
Абстрактные классы |
67 |
Перекрытие чисто виртуальных методов |
70 |
Виртуальные деструкторы |
71 |
Полиморфизм, реализованный путем перегрузки методов класса |
71 |
Управление памятью |
74 |
Проблемы, сопровождающие перегрузку других операторов |
77 |
Оператор присваивания |
78 |
Перегрузка операторов увеличения |
80 |
Виртуальный конструктор копий |
83 |
Множественное наследование |
83 |
Проблемы множественного наследования |
84 |
Множественное наследование и включение |
87 |
Резюме |
88 |
Часть II. Вопросы реализации |
89 |
Глава 4. Управление памятью |
90 |
Управление памятью и указатели |
91 |
Расход памяти |
94 |
Распределение массивов |
94 |
Паразитные, болтающиеся и дикие указатели |
95 |
Указатели const |
96 |
Указатели const и функции-члены const |
96 |
Передача по ссылке |
96 |
Передача указателя const |
97 |
Возврат ссылки на объект, который не находится в области |
97 |
видимости |
|
Указатель, указатель, указатель |
99 |
Указатели и исключения |
100 |
Использование автоуказателей |
104 |
Подсчет ссылок |
108 |
Резюме |
118 |
Глава 5. Использование каркасов приложений |
119 |
Microsoft Foundation Classes |
120 |
Приступая к изучению |
120 |
Другие мастера |
122 |
В перспективе |
122 |
Архитектура приложения |
122 |
Многопоточность |
122 |
Кооперативная многопоточность против вытесняющей |
123 |
Проблемы вытесняющей многопоточности |
123 |
Пример для изучения |
124 |
Создание потоков |
125 |
Пример |
129 |
Служебные классы |
137 |
Классы манипулирования строками |
137 |
Классы времени |
137 |
Документы и представления |
138 |
Представления |
139 |
Резюме |
147 |
Глава 6. Контейнерные классы библиотеки STL |
148 |
Определение и реализация шаблонов |
149 |
Определение и реализация шаблонов функций |
149 |
Определение и реализация шаблонов классов |
149 |
Последовательные контейнеры |
150 |
Контейнер-вектор |
150 |
Контейнер-список |
163 |
Контейнер-дека |
172 |
Стеки |
173 |
Очереди |
175 |
Приоритетные очереди |
177 |
Связанные контейнеры |
178 |
Контейнер-запись |
178 |
Множественные записи |
187 |
Контейнер-набор |
189 |
Множественные наборы |
189 |
Вопросы производительности |
190 |
Использование стандартной библиотеки C++ |
190 |
Конструирование типов элементов |
191 |
Резюме |
192 |
Глава 7. Итераторы и алгоритмы STL |
193 |
Классы итераторов |
194 |
Позиция внутри контейнера |
194 |
Типы итераторов контейнеров |
194 |
Базовый класс итераторов |
195 |
Вводные итераторы |
196 |
Выводные итераторы |
197 |
Пересылаемые итераторы |
197 |
Двунаправленные итераторы |
197 |
Итераторы произвольного доступа |
197 |
Итераторные операции |
197 |
Классы стандартных итераторов |
199 |
Объекты-функции |
200 |
Предикаты |
201 |
Арифметические функции |
202 |
Алгоритмы STL |
203 |
Операции немутирующих последовательностей |
203 |
Алгоритмы мутирующих последовательностей |
211 |
Операции сортировки и связности последовательностей |
221 |
Стандартные функции |
238 |
Резюме |
243 |
Глава 8. Исключение конфликтов имен |
244 |
Функции и классы, разрешаемые по именам |
245 |
Создание пространства имен |
248 |
Использование пространства имен |
250 |
Ключевое слово using |
252 |
Объявление using |
254 |
Псевдоним пространства имен |
255 |
Неименованное пространство имен |
255 |
Стандартное пространство имен |
256 |
Резюме |
257 |
Глава 9. Манипулирование типами объектов |
258 |
Оператор typeid() |
259 |
Класс type_info |
259 |
Конструктор для класса type_info |
260 |
Операторы сравнения |
260 |
Функция-член name() |
261 |
Функция-член before() |
263 |
Оператор typeid() в конструкторах и деструкторах |
264 |
Неправильное использование typeid() |
264 |
Динамическое приведение объектов |
265 |
Оператор dynamic_cast() |
266 |
Операторы typeid() и dynamic_cast |
269 |
Другие операторы приведения |
270 |
Оператор static_cast() |
270 |
Оператор reinterpret_cast() |
271 |
Когда использовать операторы dynamic_cast(), static_cast() или |
271 |
reinterpret_cast() |
|
Оператор const_cast() |
272 |
Новые приведения против старых |
272 |
Резюме |
273 |
Глава 10. Настройка производительности приложения |
274 |
Функции inline вне определений классов |
275 |
Как избежать раскрытия программного кода реализации в |
279 |
распространяемых header-файлах |
|
Анализ стоимости виртуальных функций и виртуальных базовых классов |
280 |
Виртуальные функции |
280 |
Виртуальные базовые классы |
283 |
Компромиссы RTTI |
285 |
Управление памятью для временных объектов |
287 |
Резюме |
289 |
Часть III. Обработка данных |
291 |
Глава 11. Рекурсия и рекурсивные структуры данных |
292 |
Что такое рекурсия |
293 |
Числа Фибоначчи: рекурсивное определение |
293 |
Остановка рекурсии |
294 |
Рекурсивные структуры |
294 |
Обход рекурсивной структуры с помощью рекурсивной функции |
296 |
Цикл и хвостовая рекурсия |
299 |
Хвостовая рекурсия |
301 |
Непрямая рекурсия |
302 |
Рекурсия и стек |
302 |
Отладка рекурсивных функций |
303 |
Резюме |
304 |
Глава 12. Использование методов сортировки |
305 |
Анализ производительности алгоритмов |
306 |
Сравнение среднего, худшего и лучшего случаев |
306 |
Стабильностьсортировки |
307 |
Использование дополнительных способов хранения во время |
307 |
сортировки |
|
Пузырьковая сортировка |
308 |
Анализ пузырьковой сортировки |
309 |
Сортировка вставками |
309 |
Анализ сортировки вставками |
311 |
Сортировка выбором |
311 |
Анализ сортировки выбором |
313 |
Быстрая сортировка |
313 |
Анализ быстрой сортировки |
315 |
Сортировка слиянием |
315 |
Анализ сортировки слиянием |
318 |
Сортировка по методу Шелла |
318 |
Анализ сортировки по методу Шелла |
320 |
Пирамидальная сортировка |
320 |
Анализ пирамидальной сортировки |
322 |
Выбор метода сортировки |
322 |
Генерирование тестовых данных |
323 |
Резюме |
325 |
Глава 13. Алгоритмы поиска данных |
326 |
Линейный поиск |
327 |
Анализ линейного поиска |
328 |
Поиск в отсортированном массиве |
328 |
Сопоставление с образцом |
330 |
Грубый алгоритм |
331 |
Представление образца |
331 |
Построение конечных автоматов |
332 |
Алгоритмы поиска на графе |
333 |
Поиск в глубину |
334 |
Поиск в ширину |
335 |
Сравнение поиска в глубину и поиска в ширину |
336 |
Поиск по первому наилучшему совпадению |
336 |
Реализация объектов графов |
337 |
Представление игры Tic-Tac-Toe |
340 |
Применение альфа-бета-отсечений |
340 |
Задача коммивояжера |
341 |
Внешний поиск |
342 |
Индексированный последовательный доступ |
342 |
Двоичные деревья |
342 |
Деревья 2-3-4 |
343 |
Резюме |
344 |
Глава 14. Хеширование и синтаксический анализ |
345 |
Сравнение поиска и хеширования |
346 |
Функции хеширования |
346 |
Разрешение конфликтов |
347 |
Линейное повторное хеширование |
347 |
Нелинейное повторное хеширование |
347 |
Коэффициент загрузки(альфа) |
348 |
Связывание в цепочку |
349 |
Адресация областей памяти |
349 |
Синтаксический разбор |
358 |
Синтаксический разбор числовых выражений |
359 |
Синтаксический разбор строковых выражений |
360 |
Контекстно-свободная грамматика и синтаксический анализ |
361 |
Выполнение нисходящего синтаксического разбора для проверки |
361 |
правильности регулярных выражений |
|
Резюме |
362 |
Часть IV. Живучесть объектов и шифрование |
363 |
Глава 15. Живучесть объектов |
364 |
Создание хранимых объектов |
365 |
Что такое В-дерево |
372 |
Запись В-дерева на диск |
374 |
Кэширование |
375 |
Определение размера страниц |
375 |
Определение количества страниц, которые могут одновременно |
375 |
находиться в памяти |
|
Подкачка данных на жесткий диск |
375 |
Реализация В-дерева |
376 |
Как это работает |
401 |
Прогулка по программному коду |
403 |
Поиск |
414 |
Резюме |
416 |
Глава 16. Реляционные базы данных и живучесть |
417 |
Основные концепции реляционных баз данных |
418 |
Архитектура реляционной базы данных |
419 |
Ограничения и соображения |
420 |
Язык структурированных запросов SQL |
420 |
Нормирование |
420 |
Соединения |
421 |
Живучесть для реляционной базы данных |
421 |
Перемещения с идентификаторами объектов |
422 |
Использование пятен |
422 |
Скрытие деталей |
423 |
Непосредственное сохранение объектов |
423 |
Использование API БД |
423 |
Доступ к источникам данных ODBC |
423 |
Использование MFC |
425 |
Операторы SQL |
433 |
Установка характеристик БД |
434 |
Резюме |
434 |
Глава 17. Реализация живучести объектов с помощью реляционных |
435 |
баз данных |
|
Объекты в Oracle 8 |
436 |
Типы объектов |
436 |
Ссылки на объекты |
437 |
Коллекции |
438 |
Использование внешних процедур, разработанных на языке C++ |
439 |
Отображение UML-диаграмм на объектно-реляционную базу данных |
442 |
Проектирование базы данных |
442 |
Генерирование классов на C++ |
443 |
Генерирование сервера |
445 |
Пример: Система заказа покупок |
448 |
Описание системы |
448 |
Глава 18. Объектно-ориентированные базы данных |
451 |
Обзор объектно-ориентированных баз данных |
452 |
Стандарт ODMG |
453 |
Приложение на C++ для ведения счетов |
453 |
Живучесть данных |
466 |
Схемы базы данных и средства захвата этой схемы |
468 |
Коллекции |
469 |
Итераторы |
471 |
Отношения |
471 |
Базы данных и транзакции |
475 |
Технические вопросы объектно-ориентированных баз данных |
487 |
Архитектура клиент/сервер |
487 |
Хранение данных и кластеризация объектов |
487 |
Передача данных |
488 |
Блокирование данных |
488 |
Резюме |
489 |
Глава 19. Защита приложений с помощью шифрования |
490 |
Краткая история шифрования |
491 |
Роль Национального бюро стандартов |
491 |
Понятие шифрования |
492 |
Коды |
492 |
Шифры |
493 |
Шифр Vernam |
495 |
Криптография по частному ключу |
497 |
Алгоритмы частного ключа |
497 |
Механизмы шифрования по секретному ключу |
498 |
Использование центров распространения ключей |
500 |
Криптография по общему ключу |
500 |
Метод головоломки Ральфа Меркле |
501 |
Многопользовательские криптографические методы Диффи- |
501 |
Хельмана |
|
Метод RSA |
502 |
Использование Pretty Good Privacy |
502 |
Выбор простых чисел в PGP |
503 |
Использование случайных чисел в криптографии |
504 |
Шифрование файлов с помощью PGP |
504 |
Ограничения в криптографии |
506 |
Юридические ограничения на криптографию |
507 |
Криптографические атаки |
507 |
Атака грубой силы |
507 |
Криптоанализ |
508 |
Взлом файла, зашифрованного программой PGP |
508 |
Цифровые подписи |
509 |
Public Key Cryptography Standard(PKCS) |
509 |
Digital Signature Standard(DSS) |
509 |
Неотрицание |
510 |
Коммерческие криптографические продукты |
510 |
Безопасные Web-клиенты |
510 |
Безопасные почтовые клиенты |
511 |
Продукты для защиты рабочего стола |
512 |
Резюме |
514 |
Часть V. Распределенные вычисления |
515 |
Глава 20. CORBA |
516 |
Теория и обоснование |
517 |
Минимальная среда CORBA |
518 |
Каркас объектной технологии |
518 |
IIOP: объектное склеивание |
519 |
Компонентная модель |
520 |
IDL: соглашение связывания |
520 |
Сравнение IDL с определением класса C++ |
521 |
Брокер объектных запросов |
522 |
Время жизни объектов |
522 |
Среды разработки |
523 |
Сравнение сред CORBA |
523 |
Способность ORB к взаимодействию |
523 |
Создание клиента С+ |
524 |
Генерирование заглушки |
524 |
Связь с ORB |
525 |
Вызовы методов |
525 |
Завершенное клиентское приложение C++ |
526 |
Создание сервера C++ |
526 |
Генерирование скелета |
527 |
Реализация методов сервера |
527 |
Подсоединение класса сервера |
528 |
Загрузка BOA в ORB |
528 |
Клиент Java |
530 |
Генерирование заглушки |
530 |
Запуск и программный код вызова метода |
530 |
Стратеги и тестирования |
531 |
Трассировка |
531 |
Службы мониторинга и регистрации |
531 |
Обработка исключений |
531 |
Удаленная отладка |
532 |
Служба имен и способность к взаимодействию |
532 |
Interoperable Object Reference (IOR) |
532 |
Именование контекстов |
533 |
Проблемы взаимодействия |
533 |
Производительность |
533 |
Перерасход памяти со стороны ORB |
534 |
Степень детализации интерфейса |
534 |
Ссылки на передаваемый объект |
534 |
Резюме |
534 |
Глава 21. COM |
535 |
Основы СОМ |
536 |
Архитектура СОМ |
537 |
Интерфейсы |
537 |
Интерфейс IUnknown |
541 |
СОМ-объекты |
543 |
Библиотеки типов |
545 |
Другие СОМ-технологии |
546 |
Использование СОМ-объектов в C++ |
549 |
Использование интерфейсов Raw |
550 |
Использование интеллектуальных указателей |
551 |
Использование библиотек типов |
555 |
Создание СОМ-объектов в C++ |
558 |
Множественное наследование |
558 |
Вложенные классы |
560 |
Использование классов tear off |
562 |
Резюме |
563 |
Дополнительная литература |
563 |
Глава 22. Java и C++ |
564 |
Общие черты C++ и Java |
565 |
Комментарии |
565 |
Типы данных |
565 |
Операторы |
567 |
Операторы управления потоком |
568 |
Различия между C++ и Java |
568 |
Управление памятью |
568 |
Отсутствие указателей |
568 |
Отсутствие препроцессора |
568 |
Отсутствие деструктора |
568 |
Спецификаторы доступа |
569 |
Параметры метода |
569 |
Внешние функции |
570 |
Перечислители |
570 |
Строки |
571 |
Массивы |
571 |
Объектно-ориентированные возможности Java |
572 |
Классы |
572 |
Наследование |
576 |
Множественное наследование |
578 |
Обработка исключений |
579 |
Резюме |
579 |