Смекни!
smekni.com

Объектно-ориентированный подход к программированию (стр. 3 из 3)

Type

TmyDateClass=class(TObject)

private

Adate: TdateTime;

Public

Procedure SetDate(Val: TDateTime); overload; virtual; // Объявляемвозможностьперегрузки

end;

TmySecondDateClass=class(TmyDateClass)

private

Adate: TdateTime;

Public

Procedure SetDate(Val: string); reintroduce; overload; // Объявляемвозможностьперегрузки

End;Вы можете использовать перегрузку и для процедур и функций необязательно при наследовании, и даже процедур и функций не классового типа, например:

Function Myfunction(Val: string): string; overload;

Begin

Result:=Val+' Ok!'

End;

Function Myfunction(Val: Extended): extended; overload;

Begin

Result:=Val/2;

End;

Или

TmyDateClass=class(Tobject)

private

Adate: TdateTime;

Public

Procedure SetDate(Val: TDateTime); overload; // Объявляемвозможностьперегрузки

Procedure SetDate(Val: string); overload; // Объявляемвозможностьперегрузки

End;

Параметры по умолчанию

Если Вам нужно создать функцию, которая в качестве параметров почти всегда получает одно и то же значение, но все-таки иногда оно может меняться, то Вам нужно объявить параметры по умолчанию в качестве формальных параметров, например:

Procedure MyProcedure(Val1: Extended; Val2: Integer = 2);

Begin

End;

Тогда Вы сможете вызывать ее такими способами:

MyProcedure(42.33); // аналогично MyProcedure(42.33, 2);

MyProcedure(15.6, 8);

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

Делегирование

Событие - это свойства процедурного типа, предназначенные для создания пользовательской реакции на внешние воздействия. События в Delphi реализуется за счет создания поля процедурного типа и объявления соответствующего свойства класса, например:

Type

TmyEvent = procedure(Sender: Tcomponent); of object; // определениепроцедурноготипа

TmyClass=class(Tcomponent)

Private

FmyEvent: TmyEvent;

Protected

Procedure DoMyEvent;

published

property OnMyEvent: TmyEvent read FmyEvent write FmyEvent;

end;

Допустим, Вы определили функцию function MyProcedure(Sender: Tcomponent) для обработки события с помощью инспектора объектов или написали вручную и налету присвоили объекту: MyClass.OnMyEvent:=MyProcedure. При наступлении определенных условий Ваш класс может вызвать процедуру DoMyEvent, где будет вызвана Ваша процедура MyProcedure так:

Procedure TmyClass .DoMyEvent;

Begin

If Assigned(FmyEvent) then FmyEvent(Self);

End;Мы видим, что был проверен указатель на пользовательскую процедуру обработки события, и если он действителен, то вызывается пользовательская процедура - это и есть делегирование. Обратите внимание, что я разместил свойство OnMyEvent в секции published для того, чтобы программист мог воспользоваться инспектором объектов для написания процедуры обработки события.

Список литературы

Банников. Н.А. Объектно-ориентированный подход к программированию.