Иллюстрированный самоучитель по Perl



         

Конструкторы


Конструктор — это просто подпрограмма, возвращающая ссылку. Обычно (но не обязательно) конструктор имеет имя new. Выше мы сказали, что объект является ссылкой. Конструктор, создающий объект, то есть ссылку, тоже возвращает ссылку. О каких ссылках идет речь, на что они указывают? Рассмотрим простой пример.

package MyClass; sub new {

my $class = shift;

my $self = {} ;

bless $self, $class;

return $self; -""'

} ^

В операторе my $seif = {} создается ссылка на 7 анонимный хеш-массив, первоначально пустой, которая сохраняется в локальной переменной $seif. Функция bless о "сообщает" субъекту ссылки sseif, то есть анонимному хеш-массиву, что он отныне является объектом класса MyClass, и возвращает ссылку на этот объект. Затем ссылка на новый объект класса MyClass возвращается в качестве значения конструктора new (). Обратите внимание на следующие обстоятельства.

Во-первых, объект класса MyClass представлен анонимным хеш-массивом. Это обычный, хотя и не обязательный, способ представления объекта. Преимущество использования для этой цели хеш-массива заключается в том, что он может содержать произвольное число элементов, к которым можно обращаться по произвольно заданному ключу. Таким образом, все данные объекта сохраняются в указанном хеш-массиве. В некоторых случаях для представления объекта может использоваться другой тип данных, например массив, скаляр.

Во-вторых, обязательным для конструктора является обращение к функции bless о. Внутри подпрограммы-конструктора функцию bless о следует применять с двумя аргументами, явно указывая имя класса. В этом случае конструктор может быть наследован классом-потомком. Конструктор определяет, объект какого именно класса он создает, используя значение своего первого аргумента. Первым аргументом конструктора должно быть имя класса.

В-третьих, конструктору, создающему объект, в качестве первого аргумента передается имя класса этого объекта.

f Модуль класса Staff.pm: package Staff; require Exporter; 8ISA = qw(Exporter); SEXPORT = qw(new); sub new {




Содержание  Назад  Вперед