Цель работы: научиться разрабатывать программы с использованием компонентов библиотеки VCL
Теоретические сведения:
Компоненты библиотеки VCL позволяют значительно упростить процесс создания иерархии объектов. При создании иерархии объектов для исключения повторяющегося кода часто бывает логично выделить их общие свойства в один родительский класс. При этом может оказаться, что создавать экземпляры такого класса не имеет смысла, потому что никакие реальные объекты им не соответствуют. Такие классы называют абстрактными. Абстрактные классы служат только для порождения потомков. Как правило, каждый метод, который будет реализовываться в разных потомках по-разному, объявляется в абстрактном классе как виртуальный и имеет пустое тело. Таким образом, абстрактный класс определяет интерфейс для всей иерархии. Абстрактные классы и указатели на них используются в качестве параметров подпрограмм и при работе со структурами данных, предназначенных для хранения объектов одной иерархии.
Альтернативой наследованию при проектировании объектов служит вложение, когда один объект включает в себя поля, являющиеся объектами или указателями на объекты. Например, если есть объект «двигатель», а требуется описать объект «самолет», логично сделать двигатель полем этого объекта, а не его предком.
Вид вложения, когда в классе описано поле объектного типа, называют композицией. Если в классе описан указатель на поле объектного типа, это обычно называют агрегацией. При композиции время жизни всех объектов — и объемлющего, и его полей — одинаково. Агрегация представляет собой более слабую связь между объектами, потому что объекты, на которые ссылаются поля-указатели, могут появляться и исчезать в течение жизни содержащего их объекта; кроме того, один и тот же указатель может ссылаться на объекты разных классов в пределах одной иерархии. Поле-указатель может также ссылаться не на один объект, а на неопределенное количество объектов, например, быть указателем на начало линейного списка. Если объект предназначается для хранения друтих объектов, он называется контейнером. Объекты в контейнере могут храниться в виде массива, списка, стека или другой динамической структуры. Методы контейнера обычно включают его создание, дополнение, просмотр, а также поиск и удаление элементов.
В качестве примера контейнера рассмотрим объект list, предназначенный для работы со связным списком объектов класса monstr и его потомков.
type
list = object
constructor init;
procedure add(pm : pmonstr);
procedure draw;
destructor done; private
beg : pnode; end;
В объекте одно поле beg — указатель на начало списка элементов типа node:
type
pnode = ^node;
node = record
pm : pmonstr; { указатель на объект pmonstr }
next : pnode; { указатель на следующий элемент списка }
end;
Ход работы:
Задание 1. Наберите и проанализируйте программу. Определите в данной программе все объекты, методы, а также принципы наследования и полиморфизма, применяемые к этим объектам с использованием библиотеки VCL. Объясните результаты выполнения программы.