Система Orphus

Стандартная библиотека C++ на примерах

Автор: Пабло Халперн
Издательство: Издательский дом "Вильямс", 2001
336 страницы

Материал предоставил: Валерий Лаптев
Найти в магазинах
Купить в Озоне (119 руб.)

Аннотация

Содержание
Комментарии

Аннотация

В большинстве книг, посвященных программированию, основное внимание уделяется изучению синтаксиса языка, средств и приемов написания программ, а в качестве примеров приводятся довольно простые проекты. Эта книга построена совсем иначе. В ходе работы над проектом TinyPIM автор шаг за шагом проведет вас через все фазы разработки объектно-ориентированного приложения на основе классов и функций стандартной библиотеки С++. Будут рассмотрены вопросы постановки задач, анализа, выбора оптимальных стандартных средств программирования и реализации проекта с проверкой работоспособности приложения. Цель книги состоит не только в том, чтобы познакомить вас с большинством средств стандартной библиотеки С++, но и в том, чтобы объяснить основные концепции, положенные в основу разработки стандартных шаблонов классов и функций, а также научить правильно выбирать необходимые средства для достижения максимальной эффективности и ошибкоустойчивости создаваемых приложений.
Книга рассчитана главным образом на начинающих программистов, желающих познакомиться со стандартной библиотекой С++, но она также будет интересна и профессиональным программистам, которые перешли к С++ от С или других языков программирования.

Содержание

Вступление
Что особенного в этой книге
В изучении стандартной библиотеки C++ нет ничего сложного
Научитесь выбирать наиболее подходящие средства программирования
Для чего нужна стандартная библиотека С++
Что представляет собой стандартная библиотека С++
Какова разница между стандартной библиотекой С++ и стандартной библиотекой шаблонов
Наш рабочий набор инструментов
Какой компилятор вам подойдет
Где можно достать стандартную библиотеку
Соглашения, используемые в книге

Глава 1. Знакомство с TinyPIM
Объектно-ориентированный анализ проекта
Формулирование требований к проекту
Анализ ситуаций использования
Планирование классов
Двухуровневый логический анализ
Краткий вводный курс в UML
Функциональное ядро TinyPM
Блок текстового пользовательского интерфейса
Блок функций сохранения
Можно ли уже приступать к написанию кода

Глава 2. Реализация класса Address для работы с текстовыми строками
Использование строк с фиксированной длиной
Объявление класса Address
Использование массивов в буффере динамического распределения памяти
Использование указателей на динамически распределяемую память
Утечка памяти и повторное удаление
Самоприсвоение
Конструктор-копировщик и оператор присваивания
Обобщение: использование динамически выделяемых строк
Упрощение реализации класса Address с помощью библиотечного класса string
Общее представление о классе string
Естественный интерфейс
Автоматическое управление памятью
Использование программы тестирования с новым интерфейсом класса Address
От строковых объектов назад к строкам с нулевыми окончаниями
Резюме

Глава 3. Создание адресной книги с помощью контейнера vector
Добавление в класс Address целочисленных идентификационных номеров
Класс AddressBook
Реализация класса AddressBook с помощью вектора
Реализация свойств простейшего контейнера с помощью массива
Объявление вектора объектов Address
Использование вектора как расширяемого массива
Доступ к элементам вектора
Удаление записей адресов
Завершение реализации класса AddressBook
Проверка работы программы
Резюме

Глава 4. Альтернативная реализация адресной книги с помощью контейнера list
Общие представления о контейнере list
Реализация класса AddressBook с использованием списка
Перемещение по списку с использованием итераторов
Удаление элементов с помощью итераторов
Редактирование элементов с помощью итераторов
Использование итераторов в константных контейнерах
Поддержание списка в алфавитном порядке
Добавление в класс Address операторов отношений
Ввод объектов Address в алфавитном порядке
Резюме

Глава 5. Редактирование записей адресов с помощью функций класса String и операторов ввода-вывода
Определение требований к редактору
Базовый класс редактора
Вывод приглашений пользователю
Прием данных, вводимых пользователем, и контроль за ошибками
Добавление и замена отдельных строк в многострочной записи
Редактирование объекта Address с помощью интегрированного редактора
Новое требование к программе: форматированный номер телефона
Анализ набора символов
Вычленение и подсчет цифр
Форматирование номера
Теперь мы довольны
Резюме

Глава 6. Усовершенствование адресной книги с использованием алгоритмов и сортированных контейнеров
Требования к интерфейсу адресной книги
Идиоматическое решение предоставления доступа к закрытому контейнеру
Недостатки использования обычных функций доступа
Использование интерфейса в стиле STL с классом AddressBook
Выявление дубликатов записей с помощью алгоритма count
Поиск точных совпадений
Совпадение значений
Воспользуйтесь алгоритмом count_if и объектами функций
Поиск с помощью lower_bound и find_if
Поиск по имени
Поиск строк
Поиск по идентификационному номеру
Эффективная сортировка объектов Address с помощью колнтейнера set
Хранение объектов Address в контейнере multiset
Добавление, удаление и возвращение записей адресов
Поиск в multiset
Двойное идексирование в контейнере с установкой соответствий
Вторичное индексирование записей путем установки соответствий
Поддержание соответствия между двумя контейнерами
Резюме

Глава 7. Прокручивание экранных списков с помощью двухсторонних очередей и потоков ввода-вывода
Требования к экранному списку
Разработка экранного списка
Класс DisplayList
Прокручивание списка
Отслеживание ошибок с помощью макроса assert
Заполнение контейнера deque с помощью алгоритмов copy и back_inserter
Добавление записей в начало буфера с помощью обратных итераторов
Форматирование с помощью манипуляторов ввода-вывода
Реализация дополнительных функций класса DisplayList
Избегайте появления бессмысленных итераторов
Считывание вводимых чисел и отслеживание ошибок
Определение класса AddressDisplayList
Резюме

Глава 8. Простая система меню
Требования к системе меню
Конструирование системы меню
Создание иерархии меню с помощью шаблона stack
Семантика поддержания взаимодействия с пользователем
Считывание данных, введенных пользователем
Класс AddressBookMenu
Соберем части вместе
Исполняемая программа
Функция генерирования данных с помощью потоков строк
Нет предела совершенству: выполнение поиска независимо от регистра букв
Создание объекта функции сравнения, нечуствительной к регистру
Написание нового алгоритма
Резюме

Глава 9. Классы даты и времени с пользовательской системой ввода-вывода
Реализация классов даты и времени
Использование типа time_t
Компоновка и извлечение значений типа time_t
Реализация функций ввода и вывода времени
Базовый ввод и вывод
Устранение недостатков ввода-вывода
Использование вспомогательных строк для большей гибкости программирования
Использование класса DateTime в книге контактов
Резюме

Глава 10. Сборка блоков программы
Написание главной программы
Реализация класса PIMDate с использованием шаблона auto_ptr
Классы Appointment и DateBook
Функция generateAppointment
Главное меню
Создание меню книги контактов
Класс DateBookMenuCatalog
Класс MonthlyDateBookMenu
Реализация класса DateBook
Показ календаря для текущего месяца
Переходы между видами
Экранные списки книги контактов
Классы, производные от ListBasedDateBookMenu
Создание записи контакта
Редактирование записи контакта
Завершение работы приложения
Резюме

Глава 11. Научитесь профессионально работать со стандартной библиотекой C++
Полезные советы
Достижение максимальной эффективности работы
Управление памятью
Устойчивость к ошибкам
О чем вы еще не знаете
Библиотеки языковой поддержки, средств диагностики и специальных утилит
Библиотека региональных установок
Библиотека чисел
Где можно узнать больше
Источники в Internet
Техническая документация компилятора
Стандартная документация ISO
От автора

Предметный указатель

Комментарии

Валерий Лаптев

Книга построена совершенно не так, как большинство книг по С++, STL и программированию вообще. Автор изначально декларирует тезис, что научиться использовать некоторый инструмент программирования можно, если применять его в реальных программах. Поэтому, чтобы научиться использовать стандартную библиотеку, надо разработать реальное, достаточно сложное приложение. В этой книге на практическом примере программирования записной книжки автор показывает преимущества использования средств STL. Все делается постепенно: сначала формулируются требования к проекту, затем делается набросок проекта с использованием диаграмм классов UML. Только потом начинается программирование. Чтобы на практике продемонстрировать преимущества STL, автор сначала реализует класс Adress с помощью символьных массивов, затем динамических символьных массивов, и наконец, с помощью строк.

В книге последовательно разрабатываются все необходимые составные части записной книги с использованием STL. Текстов программ много, и они разбираются достаточно подробно. Программирование каждой подсистемы тоже начинается с изложения требований и наброска схемы классов UML. Потом начинается программирование. По ходу дела автор делает небольшие отступления, в которых разъясняет тот или иной не совсем тривиальный вопрос, например, почему функция pop не возвращает значение.

Некоторые решения достаточно оригинальны. Попробуйте написать систему вложенных меню без использования GUI. В книге такая система является составной частью записной книжки. В главе 9 приводятся довольно хорошие классы даты и времени.

В общем, книжка неплохая, если читать ее последовательно, и при этом выполнять ту работу, которая там описана. В конце у вас появится работающий проект записной книжки, который можно будет развивать дальше. Кроме того, вы получите опыт использования С++ и STL для написания довольно большой программы. Советовал бы ее прочитать программистам, уже "понюхавшим пороху", и начинающим осваивать С++ всерьез. Квалифицированным программистам-профессионалам на С++ книга уже не нужна, поскольку как справочник ее использовать невозможно.

Не всегда переводные термины соответствуют уже устоявшимся названиям. Например, вместо слова "привязка" используется "подшивка". Иногда это сбивает с толку.