- •1. Основные понятия объектно-ориентированного программирования
- •2. Определение класса. Инкапсуляция. Синтаксис и программирование свойств
- •2.1. Поля
- •2.2. Свойства
- •3. Методы
- •4. Наследование
- •5. Полиморфизм
- •6. Создание и уничтожение объектов. Конструкторы. Деструкторы
- •7. Области видимости
- •8. Динамическая информация о типе. Оператор Is и оператор As
2.1. Поля
Поля объекта аналогичны полям записи. Это данные, уникальные для каждого экземпляра класса. Поле объявляется как обычная переменная и может быть любого типа, например, integer, Char, String.
Пример объявления полей:
Type TnewClass = class (TObject);
Private
FCode : integer;
FSimv : char;
FStroka : string;
End;
В примере новый класс создается на основе базового класса TObject и получает 3 новых поля: FCode, FSimv, FStroka. Для защиты полей целесообразно объявлять их в защищенном разделе (например, в Private). В Delphi принято имена полей именовать начиная с буквы F (от Field - поле).
При создании новых классов на базе ранее созданных класс-потомок наследует все поля класса-родителя. Удаление и переопределение полей невозможно. Допускается добавление новых полей.
Поля и методы у разных объектов одного класса одни и те же. Методы - это процедуры и функции, определенные внутри класса и предназначенные для операций над полями и свойствами. В состав класса входит указатель на специальную таблицу, в которой содержится вся информация, необходимая для вызова методов.
Основное правило ООП для надежности программирования: нежелателен прямой доступ к полям объекта. Чтение и обновление их содержимого должно производиться вызовом соответствующих методов.
В Delphi у всех стандартных классов все поля недоступны и заменены базирующимися на них свойствами. Свойства компонентов Delphi определяют их внешний вид и поведение.
2.2. Свойства
Свойства - это высокоуровневые атрибуты компонентов класса.
В объектах Delphi пользователь полностью отгорожен от полей объекта с помощью свойств. Внешне свойства (property) напоминают поля, но внутри содержат методы, обеспечивающие доступ к свойствам. При каждом обращении к такому методу выполняются соответствующие действия, т.е. к свойствам класса доступ возможен только через методы.
Каждому свойству соответствует поле, содержащее значение свойства, и 2 метода, обеспечивающих доступ к значению поля. Описание свойства начинается словом property. Ключевые слова read и write зарезервированы в объявлении свойства и служат для указания методов класса, с помощью которых осуществляется чтение и запись значения в поле.
Пример объявления свойств:
Type TnewClass = class (TObject);
Private
FCode : integer;
FSimv : char;
FStroka : string;
Publiched
Poperty Code : integer read FCode write FCode;
Poperty Simv : char read FSimv write FSimv;
Property Stroka : string read FStroka write FStroka;
End;
Для доступа к полям FCode, FSimv, FStroka используются свойства Code, Simv и Stroka.
3. Методы
Метод - это подпрограмма (процедура или функция), которая определена как элемент класса. Описание метода аналогично описанию обычной подпрограммы модуля. Внутри одного класса можно объявить столько методов, сколько надо. Структура объявления метода:
procedure имя-метода (<список параметров>);
Для того чтобы вызвать метод объекта, надо иметь доступ к экземпляру этого объекта. Вызов методов и использование в них параметра Self аналогичны таковым в языке Pascal. Форма вызова методов:
Имя-экземпляра-класса.имя-метода (список фактических параметров);
Примеры вызова методов:
Formt.Create; Forml. Close; ListBoxt.Clear;
Application.CreateForm(TForm1, Forml);'
Object Pascal Delphi поддерживает 4 типа методов: переопределяемые (override), виртуальные (virtual), динамические (dynamic) и абстрактные (abstract). По умолчанию все методы класса являются статическими и вызываются как обычные подпрограммы. Они допускают переопределение в классах-потомках.
Виртуальные методы имеют при описании слово virtual. Для виртуальных методов обязателен конструктор, с помощью которого формируется VMT (Virtual Method Table - таблица виртуальных методов). VMT - это массив указателей, по одному указателю на каждый из объявленных в классе виртуальных методов. Вызов виртуальных методов формируется с помощью VMT во время выполнения программы. Это несколько замедляет выполнение программы.
Динамические методы - это разновидность виртуальных методов, которая функционально эквивалентна виртуальным методам, но отличается реализацией. При использовании динамических методов формируется и используется DMT (Dynamic Method Table - таблица динамических методов). Она эффективнее использует ОП и содержит для каждого динамического метода указатель и индекс (номер метода в классе). Динамические методы вызываются еще медленнее, но позволяют более экономно расходовать ОП.
Абстрактные методы определены в классе с помощью директивы abstract; они не содержат никаких действий, для них не надо писать текст подпрограммы, эти методы никогда не вызываются и должны быть переопределены в потомках класса. Абстрактными могут быть только виртуальные и динамические методы. Вызов абстрактного метода приведет к ошибке на этапе выполнения программы.