Лекция 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
Тема:Компоненты и их свойства и методы.
Вопросы: