5. Основные особенности Perl
Понятие объектной ориентации зиждется на трех простых определениях:
- Объект это просто ссылка.
- Класс это просто пакет, который содержит методы для работы с объектными ссылками.
- Метод это просто подпрограмма, которая имеет своим первым аргументом объектную ссылку (или имя пакета для статического метода).
5.1 Объекты
В отличие от C++, Perl не имеет специального синтаксиса для описания конструкторов. Конструктор, как уже говорилось раньше, это просто подпрограмма, которая возвращает ссылку ассоциированную с классом (как правило с тем, где определена подпрограмма). Например, типичный конструктор:
package Critter;
sub new { bless {} }
{} создает ссылку на анонимный хэш.
В пределах класса методы как правило работают с обычными ссылками. Конструктор может привязать объект к другому классу, в таком случае предыдущая привязка бывает забыта, так как объект не может принадлежать одновременно нескольким классам.
5.2 Классы
В отличие от C++ , Perl не имеет специального синтаксиса для описания классов. Классом является пакет, чьи подпрограммы выступают в качестве методов. Для каждого пакета определен специальный массив @ISA , в котором перечислены пакеты, подключенные к данному пакету. Таким образом в Perl реализован механизм наследования методов. Метод, принадлежащий другому объекту, подключается как подпрограмма.
5.3 Методы
В Perl-е метод имеет синтаксис простой подпрограммы. В качестве первого аргумента метода выступает объект или пакет. Существует два типа методов: статические и виртуальные методы.
Статические методы имеют первым аргументом имя класса. Они обеспечивают функциональность для класса в целом, а не для отдельных объектов принадлежащих классу. Конструкторы являются, как правило, статическими методами. Многие статические методы просто игнорируют свой первый аргумент, так как заранее знают, какому пакету они принадлежат. Другой способ использования статических методов состоит в том, что метод работает с объектом, используя имя:
sub find {
my ($class, $name) = @_;
$objtable{$name};
}
Виртуальные методы имеют первым аргументом ссылку на объект. Обычно они помещают эту ссылку в переменную self или this и в дальнейшем используют ее как обычную ссылку.
sub display {
my $self = shift;
my @keys = @_ ? @_ : sort keys %$self;
foreach $key (@keys) {
print "\t$key => $self ->{$key}\n";
}
}
5.4 Вызов метода
Существует два способа обратиться к методу. Во-первых, можно вызвать его просто как подпрограмму. Но в таком случае не работает механизм наследования. Второй способ лучше просто проиллюстрировать примерами.
$fred = find Critter "Fred";
display $fred, 'Height', 'Weight';
Это можно записать так:
display {find Critter "Fred"} 'Height', 'Weight';
5.5 Деструкторы
Когда удаляется последняя ссылка на объект, этот объект автоматически удаляется. Это может произойти даже после завершения программы, если ссылки на объект содержались в глобальных переменных. Если необходимо контролировать процесс удаления объекта, можно определить в объекте специальный метод, называемый деструктором. Деструктор объекта (в отличие от C++ ) имеет фиксированное имя DESTROY и вызывается перед удалением объекта. В нем можно реализовать дополнительные процедуры, необходимые для корректного завершения (например, удаление временных файлов, используемых объектом).
[Назад]
[Содержание]
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|