Понятия «объект» и «компонент»
В конце 60-х годов кому-то пришло в голову объединить такие понятия как тип данных, процедура, функция, запись и то, что получилось, назвать объектом. Рассмотрение данных в неразрывной связи с методами их обработки позволило вывести формулу объекта:
Объект = Данные + Операции
На основании этой формулы была разработана методология объектно - ориентированного программирования (ООП).
В общем случае каждый объект "помнит" необходимую информацию, "умеет" выполнять некоторый набор действий и характеризуется набором свойств.
Например, объект "кнопка" имеет свойство "цвет". Значение цвета, кнопка запоминает в одном из своих полей. При изменении значения свойства "цвет" вызывается метод, который перерисовывает кнопку.
Но на этом дело не остановилось. Когда прикладные программы были консольно-ориентированными, а пользовательский интерфейс был простым, объекты казались пределом развития программирования, поскольку были идеальным средством разбиения сложных задач на простые подзадачи. Однако с появлением графических систем, программирование пользовательского интерфейса резко усложнилось. Программист в какой-то мере стал дизайнером, а визуальная компоновка и увязка элементов пользовательского интерфейса (кнопок, меток, строк редактора) начали отнимать основную часть времени. И тогда программистам пришла в голову идея визуализировать объекты, объединив программную часть объекта с его видимым представлением на экране дисплея в одно целое. То, что получилось в результате, было названо компонентом.
Компоненты в среде Delphi — это особые объекты, которые являются строительными элементами визуальной среды разработки и приспособлены к визуальной установке свойств. Чтобы превратить объект в компонент, первый разрабатывается по определенным правилам, а затем помещается в палитру компонентов. Конструируя приложение, вы берете компоненты из палитры компонентов, располагаете на форме и устанавливаете их свойства в окне инспектора объектов. Внешне все выглядит просто, но чтобы достичь такой простоты, потребовалось создать механизмы, обеспечивающие функционирование объектов-компонентов уже на этапе проектирования приложения! Таким образом, компонентный подход значительно упростил создание приложений с графическим пользовательским интерфейсом и дал толчок развитию новой индустрии компонентов.
Описание класса
А теперь самое время вспомнить, что язык Objectpascal является типизированным, значит, объекты будут являться переменными, но они должны принадлежать какому-то типу. Этот новый тип данных назвали классом. Каждый объект всегда принадлежит некоторому классу объектов. Класс объектов — это обобщенное (абстрактное) описание множества однотипных объектов. Объекты являются конкретными представителями своего класса, их принято называть экземплярами класса. Например, класс «мебель» — понятие абстрактное, а экземпляр этого класса «письменный стол» — понятие конкретное.
Классы объектов определяются в секции type глобального блока. Описание класса начинается с ключевого слова class и заканчивается ключевым словом end. По форме объявления классы похожи на обычные записи, но помимо полей, данных могут содержать объявления пользовательских процедур и функций. Такие процедуры и функции обобщенно называют методами, они предназначены для выполнения над объектами различных операций:
Type<имя_класса> = class[(имя_родительского_класса)]
Список членов класса
end;
Имя родительского класса указывается, если новый класс должен наследовать все его характеристики. Исключать какие-то члены родительского класса нельзя. Если родительский класс не указан, то по умолчанию будет наследование характеристик класса TObject, который содержит конструктор, деструктор и общие свойства и методы классов в среде Delphi, предназначенные для создания объектов. Рекомендуется всегда явно указывать базовый родительский класс TObject.
Описание классов бывает двух типов: упреждающее и реальное. Использование первого обусловлено особенностью языка object pascal и заключается в том, что нельзя использовать класс (переменную, тип данных, константу) предварительно не описав его. Иногда случается так, что один класс должен быть включен во второй, но его описание расположено ниже и поэтому не может быть использовано. Тогда поступают следующим образом: дают упреждающее описание класса1, затем реальное описание класса2 с включенным в него полем класса1 и только затем реальное описание класса1. Упреждающее описание имеет вид:
Type<имя_класса> = class;
Т.е. такое описание определяет только заголовок класса. Список членов класса здесь отсутствует. Его наличие означает реальное описание класса. Пример:
Листинг 1.3
Type
TMyClass1=class; //упреждающее объявление
TMyClass2 = class(TObjecj) //реальноеобъявление
Simp:TMyClass1;
End;
TMyClass1 = class(TObject); //реальное объявление
Последняя строчка примера означает, что класс TMyClass1 будет равен TObject и может использоваться для его замещения.
В качестве членов класса выступают поля, методы, а так же некоторые их модификации. Поля хранят данные и фактически являются переменными, объявленными внутри класса. Методы необходимы для того чтобы можно было оперировать полями. Их модификации расматриваются далее.
Листинг 1.4. Пример простого класса
//объявляемновыйкласс
Type TSimpleClass = class (TObject)
fv:integer; //поле 1
fFileMy:string; //поле 2
fF:text; //поле 3
procedure Draw(); //метод 1
function GetCount(): integer; //метод 2
procedure SetActive(AActive: Boolean); //метод 3
end;
…
varMyClass: TSimpleClass; //объявляемновыйобъект