Лекция 7

Begin

Begin

Begin

Type

N Пример.

Protected

Private

N Пример.

Begin

inherited Create(Name);

fdepartment := dep;

end;

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

Фрагмент программы, демонстрирующий указанную возможность:

Создание объекта класса

professor := TProfessor.Create(‘Петров’, ‘ММФ’);

установка значения свойства родительского класса

professor.Address := ‘ул. Ленина, 210, кв.11’;

применение метода родительского класса

professor.Show;

Директивы

protected (защищенный) и

private (закрытый)

устанавливают степень видимости элементов класса в программе.

Элементы класса, объявленные в секции protected, доступны только в классах, порожденных от данного класса.

Область видимости этих элементов не ограничивается модулем, в котором находится описание класса.

Обычно в секцию protected помещают описание методов класса.

Элементы класса, объявленные в секции private, видимы только внутри модуля.

Эти элементы не доступны за пределами модуля, даже в производных классах.

Обычно в секцию private помещают описание полей класса, а методы, обеспечивающие доступ к этим полям, – в секцию protected.

Описание класса TPerson, включающее директивы управления доступом:

TPerson = class

fname: TName;

faddress: TAddress;

constructorCreate (Name: TName);

procedure Show;

functionGetName: TName;

functionGetAddress: TAddress;

procedureSetAddress (NewAddress: TAddress);

property Name: TName

readGetName;

property Address: TAddress

readGetAddresswriteSetAddress;

end;

 

3.Полиморфизм

Полиморфизм – это возможность использовать одинаковые имена для методов, входящих в различные классы.

Концепция полиморфизма обеспечивает применение к объекту именно того метода, который соответствует классу объекта.

Если в описании родительского класса метод объявлен как виртуальный (директива virtual), то каждый класс-потомок имеет возможность заменить виртуальный метод своим собственным методом.

Эта замена выполняется с помощью директивы override.

Рассмотрим определение трех классов:

TPerson – родительский класс,

Tproffessor и TStudent – классы, порожденные от TPerson.

 

TPerson = class

fname: string;

faddress: string;

constructor Create (Name, Address: string);

function Info: string; virtual;//объявление

end;виртуальногометода

TProfessor = class(TPerson)

fdepartment: string;

constructor Create (Name, Address, Dep: string);

functionInfo: string; override; замещение метода родительского класса

end;

класс-потомок TStudent = class(TPerson)

fgroup: integer;

constructor Create (Name, Address: string: Group: Integer);

functionInfo: string; override; замещение метода родительского класса

 

end;

Определение метода Info для каждого класса (в разделе Implementation):

functionTPerson.Info: string;

result := ‘’;

end;

functionTProfessor.Info: string;

result := fname + ‘ кафедра ‘ + fdepartment;

end;

functionTStudent.Info: string;

result := fname + ‘ группа ‘ + IntToStr(fgroupe);

end;

 

 

 

 

 

Пример для закрепления

 

Type Coordinates = class x, y : byte; procedure Init (Xinit, Yinit: byte); function GetX : byte; function GetY : byte; end; Type Cursor = class (coordinates) Hidden : Boolean; end;  

Закрепление к лекции 6

Тема:Компоненты и их свойства и методы.

Вопросы: