Опубликован: 17.08.2006 | Уровень: для всех | Доступ: платный
Лекция 14:

Объектное программирование

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

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

Функции 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 весьма своеобразно, но понятно и эффективно. Использование этой технологии дает программисту возможность создавать приложения, соответствующие современным требованиям. А сочетание объектного программирования с динамической природой языка позволяет реализовывать оригинальные и эффективные решения.

Сергей Крупко
Сергей Крупко

Добрый день.

Я сейчас прохожу курс  повышения квалификации  - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?

 

Галина Башкирова
Галина Башкирова

Здравствуйте, недавно закончила курс по проф веб программиованию, мне прислали методические указания с примерами тем, однако темы там для специальности 

Системный администратор информационно-коммуникационных» систем.
Мне нужно самой найти тему? или делать по высланным темам

 

Мария Кравцова
Мария Кравцова
Россия, Сочи, РГПУ им. А.И.Герцена, 1997
Екатерина Архангельская
Екатерина Архангельская
Россия, СПбГУАП