Урок 59 - Классы Delphi, (часть 1/5)
Класс — это тип данных, определяемый пользователем. То, что в Delphi имеется множество предопределенных классов, не противоречит этому определению -ведь разработчики Delphi тоже пользователи Object Pascal.
Класс должен быть объявлен до того, как будет объявлена хотя бы одна переменная этого класса. Т.е. класс не может объявляться внутри объявления переменной.
В любом вашем Делфи-приложении вы можете увидеть строки:
type TForml = class(TForm) Buttonl: TButton; procedure ButtonlClick(Sender: TObject); end; var Forml: TForml;
Это объявление класса TForml вашей формы и объявление переменной Forml -объекта этого класса.
В общем случае синтаксис объявления класса следующий:
Туре <имя класса> = Class(<имя класса - родителя>) public // т.е. доступно всем <поля, методы, свойства, события> published // т.е. видны в Инспекторе Объекта и изменяемы <поля, свойства> protected // доступно только потомкам <поля, методы, свойства, события> private // доступно только в этом модуле <поля, методы, свойства, события> end;
Имя класса может быть любым допустимым идентификатором. Но принято идентификаторы большинства классов начинать с символа "Т". Имя класса - родителя может не указываться. Тогда предполагается, что данный класс является непосредственным наследником TObject - наиболее общего из предопределенных классов. Таким образом, эквивалентны следующие объявления:
type TMyClass = class end; и type TMyClass = class(TObject) end;В приведенном ранее объявлении класса формы TForml видно, что его родительским классом является класс TForm.
Класс наследует поля, методы, свойства, события от своих предков и может отменять какие-то из этих элементов класса или вводить новые. Доступ к объявляемым элементам класса определяется тем, в каком разделе они объявлены.
Раздел public (открытый) предназначен для объявлений, которые доступны для внешнего использования. Это открытый интерфейс класса. Раздел published (публикуемый) содержит открытые свойства, которые появляются в процессе проектирования на странице свойств Инспектора Объектов и которые, следовательно, пользователь может устанавливать в процессе проектирования. Раздел private (закрытый), содержит объявления полей, процедур и функций, используемых только внутри данного класса. Раздел protected (защищенный) содержит объявления, доступные только для потомков объявляемого класса. Как и в случае закрытых элементов, можно скрыть детали реализации защищенных элементов от конечного пользователя. Однако в отличие от закрытых, защищенные элементы остаются доступны для программистов, которые захотят производить от этого класса производные объекты, причем не требуется, чтобы производные объекты объявлялись в этом же модуле.
Объявления полей выглядят так же, как объявления переменных или объявления полей в записях:
<имя поля>: <тип>;
В приведенном ранее объявлении класса формы вы можете видеть строку
Buttonl: TButton;
Это объявление объекта (поля) Buttonl типа (класса) TButton.
Имеется одно очень существенное отличие объявления поля от обычного объявления переменной: в объявлении поля не разрешается его инициализация каким-то значением. Автоматически проводится стандартная инициализация: порядковым типам в качестве начального значения задается 0, указателям — nil, строки задаются пустыми. При необходимости задания других начальных значений используются конструкторы, описанные далее в 4 части.
Объявления методов в простейшем случае также не отличаются от обычных объявлений процедур и функций.
В следующем уроке мы узнаем о свойствах классов.
Удачи!
Встретимся в следующем уроке!
-
Подскажите, если поля и методы объявлены ни в одной из секций (Public, Published, Private, Protected) тогда считается как будто они добавлены в Public, правильно?