2. Структуры данных разделяются на те, которые характеризуются своей реализацией
(связные списки, деревья), и на те, которые определяются их предназначением
(стеки, множества). Опишите, как можно использовать ООП для упрощения
второго типа структур и маскировки деталей их реализации. Приведите в качестве
иллюстрации структуру данных с единым интерфейсом и двумя радикально
отличающимися реализациями.
3. Дайте пример разнородного контейнера, то есть контейнера значений различного
типа.
4. Подход Smalltalk к построению итераций состоит в том, чтобы сгруппировать
операции, которые надо выполнить, в блок и передать его структуре данных.
Напротив, итератор — это структура, которая передает данные одно за другим
внешней процедуре, где с ними выполняются нужные действия. Можно ли
реализовать подход Smalltalk в других языках программирования (Object Pascal,
C++)? Как при этом сказывается строгий контроль типов?
5. Приведите пример шаблонов, не связанных с контейнерными классами.
Глава 16: Пример: STL
Богатая коллекция структур данных, основанная на использовании шаблонов, недавно
была добавлена к стандартной библиотеке языка C++. Эти структуры содержат классы для
векторов, списков, множеств, карт (словарей), стеков, очередей, очередей с приоритетами.
Когда этот стандарт станет распространен повсеместно, программисты на языке C++
будут освобождены от необходимости постоянно переопределять и повторно
реализовывать один и тот же набор классов для структур данных. Более подробная
информация о библиотеке STL (STL — Standard Template Library, стандартная библиотека
шаблонов) может быть найдена в работах [Musser 1996, Glass 1996].
Создание STL является результатом многолетних исследований под руководством
Александра Степанова и Менга Ли из компании Hewlett-Packard и Дэвида Мюссера из
Rensselaer Polytechnic Institute. Создание STL вдохновлялось не только предшествующими
объектно-ориентированными библиотеками, но и многолетним опытом работы ее
создателей в области функциональных и директивных языков программирования (Scheme
и Ada).
Одна из наиболее необычных идей в STL — это обобщенные алгоритмы. Она заслуживает
отдельного рассмотрения, поскольку выглядит вызовом объектно-ориентированным
принципам, которые мы обсуждали до сих пор, и в то же время является источником
огромной мощи библиотеки STL. Обобщенные алгоритмы в STL напоминают классы-
шаблоны. Идея шаблонов применяется к отдельным функциям. Чтобы понять концепцию
обобщенных алгоритмов, мы сперва должны описать использование инкапсуляции в
большинстве объектных библиотек.
Объектно-ориентированное программирование рассматривает инкапсуляцию как главную
цель. Хорошо разработанный объект старается инкапсулировать все состояние и
поведение, необходимые для выполнения задачи, и в то же время скрывает как можно
больше деталей внутреннего устройства. Во многих предшествующих объектно-
ориентированных библиотеках этот философский подход воплощался в контейнерных
классах, обладающих широкой функциональностью и богатым интерфейсом.
Разработчики STL пошли в совершенно другом направлении. Поведение, обеспечиваемое
их стандартными компонентами, является минимальным, почти что спартанским. Вместо
этого каждый компонент предназначен для функционирования совместно с большим
PDF created with pdfFactory Pro trial version www.pdffactory.com