Классы
Классы — это специальные
типы данных языка Object Pascal, которые используются для описания объектов.
В состав класса входят
поля, свойства и методы. Подробное их описание смотрите далее в этой главе.
Типичное определение нового
класса выглядит следующим образом:
type Имя класса = class (Класс-предок)
{Список состава класса} private
{опубликованные описания}
{частные описания} protected {защищенные описания} public
{общедоступные описания} published
end;где
Имя класса
— любое корректное имя (выбирается произвольно), Класс-предок
—
название класса, наследником которого является создаваемый класс, а Cписок
состава класса
содержит свойства и методы нового класса. Для каждого элемента класса
можно установить разную видимость. Для этого предназначены четыре ключевых
слова: private, protected, public и published.
Видимость элемента
класса определяет, где в программе и как будет виден данный элемент класса.
Минимальная видимость элемента класса задается ключевым словом private,
ключевое слово protected
определяет средний уровень видимости.
Наконец, public
и published
определяют наивысшую степень
доступности.
Если перед описанием элемента
класса не ставится ключевое слово, определяющее его степень видимости, то считается,
что видимость элемента такая же, как и у предыдущего элемента класса.
Рассмотрим все четыре ключевых
слова более подробно.
Private
(частные) — определяет элементы класса, которые не видны вне модуля, в котором
был объявлен класс, содержащий эти элементы. Другими словами, частные методы
не могут быть вызваны из других модулей, а частные поля или свойства не могут
быть считаны или изменены из других модулей.Protected
(защищенные) — определяет элементы класса, которые видны только внутри модуля,
где определен класс, содержащий эти элементы, а также внутри других модулей,
где присутствуют классы-потомки данного класса.Public
(общедоступные) — определяет элементы класса, которые видны в любом месте
программы и из любых модулей, в которых виден сам класс.Published
(опубликованные) — определяет элементы класса, имеющие ту же видимость, что
и public
-элементы. Единственное отличие заключается в том, что
опубликованные элементы порождают информацию о типе времени выполнения (RTTI).
Благодаря данной информации. Kylix может осуществить проверку принадлежности
элементов объекта к тому или иному классу. Kylix использует RTTI для доступа
к значениям свойств при сохранении и загрузке файлов форм, чтобы иметь возможность
отобразить свойства в инспекторе объектов и ассоциировать конкретные методы
с конкретными свойствами. Все методы классов могут быть опубликованы, за исключением
перегруженных (overload
) методов, имеющих одинаковые имена. Перегруженными называются
методы, которые имеют одинаковые имена, но используют в качестве параметров
данные различных типов. В процессе вызова такого метода компилятор решает сам,
какой из методов вызвать в зависимости от аргументов, передаваемых при вызове
метода.
В Kylix имеется понятие
абстрактного класса.
Абстрактный класс описывает
несуществующий объект. Он нужен для того, чтобы описать некоторые фундаментальные
свойства и методы объектов, которые будут созданы из абстрактного класса.
Все объекты в Kylix созданы
из абстрактного класса TObject
. Класс TObject
— предок
многих простых классов. Этот класс объединяет в себе основные функции, которые
свойственны всем объектам Kylix. TObject
обеспечивает:
Итак, все классы в Kylix
— потомки класса TObject.
Класс называется прямым
потомком класса TObject
, если он произведен непосредственно
от класса TObject.
Класс называется косвенным
потомком от класса TObject
, если он произведен от класса, являющегося
прямым или косвенным потомком класса TObject
(то есть произведен
от промежуточного класса).
Примечание
В другой литературе можно встретить названия дочерний класс и класс-потомок. Дочерний класс — это прямой потомок, а класс-потомок — это косвенный потомок в терминологии данной книги.
Если при создании нового
класса не указывается родительский класс, то считается, что родитель — класс
TObject
.