Реферат: Объектно-ориентированный подход к программированию
Перегрузка методов, процедур и функций
Перегрузка
объявляется с помощью зарезервированного слова overload. Рассмотрим пример:
Type
TmyDateClass=class(TObject)
private
Adate: TdateTime;
…
Public
Procedure
SetDate(Val: TDateTime); overload; // Объявляем возможность перегрузки
…
end;
TmySecondDateClass=class(TmyDateClass)
private
Adate: TdateTime;
…
Public
Procedure
SetDate(Val: string); overload; // Объявляем возможность перегрузки
…
End;…
implementationProcedure
TmyDateClass .SetDate(Val: TDateTime);
Begin
Adate:=Val;
End;
Procedure
TmySecondDateClass.SetDate(Val: string);
Begin
Adate:=StrToDate(Val);
End;
Во
время работы программы, вы можете использовать во втором классе оба метода SetDate. Если Вы передадите в качестве параметра
строку, то будет вызван метод второго класса, а если TdateTime, то метод
предка. Можно перегружать и виртуальные методы, только вместо override нужно
использовать reintroduce, например:
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 для того, чтобы
программист мог воспользоваться инспектором объектов для написания процедуры
обработки события.
Список литературы
Банников.
Н.А. Объектно-ориентированный подход к программированию.
Для
подготовки данной работы были использованы материалы с сайта www.stikriz.narod.ru.
|