Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie__prezent_Babalovoy_4_06.doc
Скачиваний:
3
Добавлен:
21.09.2019
Размер:
545 Кб
Скачать

t

Type My_class = class

Interface

<поля данных>

<Наименование методов класса>;

<Свойства полей данных>;

Implementation

<Описание всех методов класса>

End;

Var m_cl_1 : My_class; - Это бъект

ype
date = class

private

dd, mm, yy: integer;

public

procedure init (d, m, y: integer);

function month: integer;

function day: integer;

function year: integer;

end;

procedure date.init (d, m, y: integer);

begin

dd := d; mm := m; yy := y;

end;

function date.day: integer;

begin

result := dd;

end;

program ObjectPascalExample;

type

THelloWorld = class { определение класса }

procedure Put;

end;

procedure THelloWorld.Put; {описание процедуры метода Put }

begin

Writeln('Hello, World!');

end;

var

HelloWorld: THelloWorld; { определение переменной-

begin указателя на экземпляр класса }

HelloWorld := THelloWorld.Create; { конструктор }

HelloWorld.Put;

HelloWorld.Free; { деструктор }

end.

В состав классов входят:

1. Поля – типизированные данные для хранения внутр. состояния объекта.

2. Методы – это действия, выполняемые над полями объекта.

3. Свойства обеспечивают реализацию механизма доступа к полям класса. Доступ к ним осуществляется только через промежуточный код. Зарезервированные слова: property, read, write. Свойство обязательно соотносится с конкретным полем класса и определяет те методы класса, которые должны использоваться при записи в это поле или при чтении из него конкретных значений параметров.

Связывание метода с объектом – это механизм поиска метода объектом

  1. способа связывания: 1). Статическое, 2). Динамическое, 3). Виртуальное

При обращении к виртуальным и динамическим методам вызываемая процедура или функция определяется только в момент обращения. Такой механизм называется поздним связыванием. Виртуальные и динамические методы определяются по типу фактической объектной переменной. Именно виртуальные и динамические методы позволяют в полной мере реализовать концепцию полиморфизма. При объявлении виртуальных и динамических методов используются директивы virtual и dynamic соответственно. Виртуальные и динамические методы различаются только внутренней реализацией. Кратко опишем их внутренние различия:

При вызове метода адрес метода определяется из таблиц VMT (Virtual Method Table) – для виртуальных или DMT (Dynamic Method Table) – для динамических. Таблицы VMT охватывают виртуальные методы всей иерархии классов, а DMT содержит информацию только о динамических методах текущего класса, следовательно, таблица VMT больше чем DMT. Так как адреса всех виртуальных методов содержаться в одной таблице VMT, то поиск адреса требуемого метода выполняется быстро. При вызове динамического метода адрес кода его реализации сначала ищется в DMT экземпляра и если адрес не найден, то в таблицах DMT всех классов-предков в порядке иерархии, что значительно медленней, чем у виртуальных методов. Следовательно, виртуальные методы выполняются быстрее, чем динамические, но требуют значительно больше памяти.

Для того чтобы изменить поведение виртуальных или динамических методов у потомка (переопределить метод или перекрыть) используется служебное слово override.

Virtual

Procedure Name_x ( var y:string); virtual;

Dynamic

Function Gauss(var x,y:real):Boolean; dynamic;

Метод аналогичен Virtual с меньшими затратами памяти

Методы – это процедуры и функции для обработки данных, которые принадлежат классу.

Особые методы - конструктор и деструктор. Первый выделяет адрес в памяти для класса и его методов, производит связывание виртуальных методов, а второй выгружает из памяти объекты класса. Деструктор освобождает память.

Constructor Create() - Создание экземпляра класса

Destructor Destroy() - Уничтожение экземпляра класса

Любой созданный класс может наследовать свои свойства другим классам.

Type Heir_Class = class (My_Class)

<Поля данных наследника>;

<Методы наследника> ;

<свойства данных наследника>

end;

В ООП разрешается наследовать несколько дочерних классов от одного родительского, но запрещено наследование одного класса от нескольких. Если класс B наследуется от класса А, тогда А называется базовым, родительским классом для класса B – производного, дочернего. В нашем примере CPixel есть дочерний класс класса CPoint.

В

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

{ Private declarations }

public

{ Public declarations }

end;

потомке указываются только те правила, которые отсутствуют в классе-родителе. Наследование помогает строить программы поэтапно - от простых методов переходить к более сложным методам.

Так реализуется механизм инкапсуляции в классах