Часть 2. Объектно-ориеитироваииое программирование
11.8. Практикум. Создание контейнеров
Контейнером в ООП называют структуру, объединяющую объекты раз личных типов (классов). Контейнерный класс - это класс, реализующий кон тейнер. Как правило, такой класс включает массив или некую динамическую структуру (например, список или дерево), содержащую указатели на объек ты базового класса. Все классы, объекты которых мы собираемся помещать в контейнер, должны наследоваться от данного базового класса. По правилам Borland Pascal указателям на объекты базового класса можно присваивать ад реса объектов производных классов, соответственно контейнер может хра нить объекты производных классов и манипулировать ими.
Вфункции контейнеров обычно входит создание объектов разных клас сов, их последовательная обработка и уничтожение.
Впроцессе создания объектов под них отводят память и выполняют инициализацию полей.
Для выполнения последовательной обработки обычно классы объектов строят таким образом, чтобы они включали методы с одинаковыми именами (полиморфные), возможно выполняющие различные действия для объектов различных классов. Однако при последовательной обработке возможна и проверка типа (класса) конкретного объекта (см. параграф 11.5), и выполне ние для него специфических действий.
Уничтожение объектов требует освобождения выделенной памяти, раз мер которой при использовании виртуальных методов искусственно увели чивается на размер ссылки на ТВМ. Следовательно, базовый класс обяза тельно должен включать деструктор, возможно переопределяемый в произ водных классах. Причем с учетом возможного переопределения деструктор обязательно должен объявляться виртуальным.
Пример 11.11. Разработать программу, которая осуществляет движение строк по экрану: по горизонтали, по вертикали и по окружности.
В результате объектной декомпозиции получаем объекты четырех ти пов: управляющий объект и три объекта-строки, различающиеся законами движения (рис. 11.21).
Управляющий объект можно реализовать как основную программу, не строя соответствующий класс.
Чтобы реализовать заданные законы движения, необходимо каждую строку рассматривать как совокупность символов, перемещающихся по одной^траектории, но с некоторым смещением. В примере, рассмотренном в параграфе 11.6, уже были разработаны классы, реализующие заданные зако ны перемещения символов. Используем эти классы для реализации объек тов-символов, входящих в объекты-строки. Тогда каждая строка будет пред ставлять собой контейнер, который управляет движением своих символов (рис. 11.22), вызывая их методы Move.