Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Литература / Дж. Либерти - С++. ЭнциклопедиПользовател

.Pdf
Скачиваний:
72
Добавлен:
16.04.2013
Размер:
37.16 Mб
Скачать

Дж.Либерти

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