Язык программирования Perl


Приемы работы с объектами


В заключение рассмотрим несколько распространенных приемов для работы с классами и объектами.

Функции bless() не обязательно передавать имя класса: если второго аргумента нет, она помечает объект ссылки именем текущего пакета. Поскольку bless() возвращает значение своего первого аргумента, а подпрограмма возвращает последнее вычисленное значение, то минимальный конструктор может выглядеть так:

sub new { # конструктор экземпляров класса my $self = {}; # контейнер для атрибутов объекта bless($self); # "благословить" объект ссылки } # и вернуть ссылку (1-й аргумент bless)

При создании объекта удобно сразу задавать начальные значения его атрибутов, передавая аргументы конструктору. Если для инициализации атрибутов использовать хэш, то атрибуты можно задавать в любом порядке, а в конструкторе можно определить значения по умолчанию для незаданных атрибутов. Например, так:

my $language = Programming::Language->new( NAME => 'Perl', # имя VERSION => '5.8.7', # версия AUTHOR = 'Larry Wall' # автор );

Весьма полезно иметь в классе метод, который преобразовывает значения атрибутов объекта в строку. Такой метод обычно называется as_string() или to_string() и может применяться для отладочной печати состояния объекта. А если его определить в классе-"прародителе", то его можно будет применять к объектам всех унаследованных классов. Если использовать анонимный хэш для хранения значений атрибутов, то такой метод может выглядеть так:

sub to_string { # преобразование значений атрибутов в строку my $self = shift; my $string = '{ '; foreach (keys %{$self}) { $string .= "$_: '$self->{$_}' "; } $string .= '}'; return $string; }

Благодаря тому, что Perl - это динамический язык, в нем легко создать класс, в котором свойства объектов добавляются во время выполнения программы. Для этого в классе описываются универсальные методы для работы со свойствами объекта, а затем в ходе выполнения задаются нужные свойства. Например, так:

package Human; # класс "Человек" our @ISA = qw(Person); # это подкласс класса Person use Person;

sub set { # универсальный метод доступа к атрибутам объекта my ($self, $name, $new_value) = @_; my $old_value = $self->{$name}; $self->{$name} = $new_value; return $old_value; }

sub get { # универсальный метод изменения атрибутов объекта my ($self, $name) = @_; return $self->{$name}; } 1;

package main; # главная программа use Human; # подключить класс my $hero = Human->new; # создать героя-человека $hero->set ('имя', 'Арагорн'); # дать ему имя $hero->set ('оружие', 'меч'); # и вооружить

В этой лекции мы научились работать с объектами. Объектный подход реализован в Perl весьма своеобразно, но понятно и эффективно. Использование этой технологии дает программисту возможность создавать приложения, соответствующие современным требованиям. А сочетание объектного программирования с динамической природой языка позволяет реализовывать оригинальные и эффективные решения.




Начало  Назад  Вперед