Смысл наследования - в создании подклассов, изменяющих поведение базового класса. Для этого в дочерних классах описываются новые методы или переопределяются существующие. В качестве примера опишем для класса
sub magic { # магия - вот что отличает волшебника
my $self = shift; # извлечь ссылку на объект
$self->{magic} = shift if @_; # изменить значение
return $self->{magic}; # вернуть значение
}
Кроме того, переопределим конструктор объектов класса
sub new { # конструктор объектов
my $class = $_[0]; # имя класса в 1-м аргументе
my $self = new Person; # маг - это личность
$self->{name} = $_[1]; # задать имя из 2-го аргумента
$self->{magic} = $_[2]; # и тип магии из 3-го
bless($self, $class); # "благословить" мага
return $self; # вернуть ссылку на объект
}
Вызывающая программа, использующая производный класс, будет выглядеть следующим образом:
use Wizard; # подключить производный класс
# создать нового черного мага - Сарумана
my $wizard = new Wizard('Саруман', 'black');
my $name = say_name $wizard; # "назови себя, маг"
print $name, ' ', $wizard->magic(); # 'Саруман black'
print ref($wizard); # тип объекта ссылки - 'Wizard'
Естественно, что у объекта класса
В классе может быть описан специальный метод, автоматически вызываемый исполняющей системой при уничтожении каждого объекта. Такой метод называется деструктор (destructor), и он должен иметь зарезервированное имя -
sub DESTROY {
warn('Прощайте, я ухожу... ' . shift->say_name);
}
Деструктор может использоваться, если при окончании работы с объектом нужно выполнить какие-то завершающие действия: например, удалить динамически созданные структуры или сохранить данные объекта в файле. Конструктор в этом случае может считывать сохраненные значения из файла, чтобы присвоить объектам начальные значения.
Анонимные хэши - это самый распространенный, но не единственный способ хранить значения атрибутов объекта. Для этого может применяться массив или даже скалярная переменная, лишь бы при создании объекта в конструкторе это хранилище значений было связано с именем класса функцией
$hobbit->{magic} = 'пёстрая'; # добавлен ошибочный атрибут
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии