В программе, в которой применяются объекты описанного класса, мы увидим вполне знакомую нотацию, когда подпрограммы вызываются при помощи ссылочных переменных и операции ->. В объектной терминологии это называется обращением к методам объектов (или отправка сообщения объекту). Приведем пример создания двух объектов одного класса, каждый из которых обладает собственными значениями свойств:
# способ обращения к методам через ссылки на объекты
use Person; # будем использовать этот класс
# создать объект класса,
my $hobbit = Person->new(); # вызвав его конструктор
# задать значение свойства, обратившись к методу объекта
$hobbit->give_name('Фродо Бэггинс');
# создать другой объект
my $dwarf = Person->new; # () не обязательны
$dwarf->give_name('Гимли'); # задать значение свойства
# запросить значения свойств, обратившись к методам
print $hobbit->say_name(), ' ', $dwarf->say_name, "\n";
Взаимодействие с объектом строится на обращении к его методам. Обращение к методу происходит при помощи ссылки на экземпляр конкретного объекта, и при этом первым аргументом в метод автоматически передается ссылка на этот объект. Например:
$hobbit->give_name('Бильбо Бэггинс'); # соответствует вызову:
Person::give_name($hobbit, 'Бильбо Бэггинс');
Внутри метода ссылка на экземпляр объекта используется для доступа к данным этого экземпляра и обращения к другим методам. Для обращения к конструктору используется имя класса, так как во время работы конструктора уже существует класс, а экземпляр объекта только должен быть создан конструктором.
Если к ссылке на объект класса Person применить функцию
print "Класс объекта: '", ref($hobbit), "'\n"; # 'Person'
Кроме нотации с оператором "стрелка" ->, традиционно используемой при работе со ссылками, для доступа к методам применяются синтаксические конструкции с использованием косвенных объектов. При использовании этого стиля имя метода стоит перед именем класса или ссылкой на объект, после которой идет список аргументов, иногда заключаемый в круглые скобки. Использование косвенных объектов может сделать текст программы более наглядным и понятным. Приведем пример обращения к объектам в новом стиле:
# способ обращения к методам через косвенные объекты
use Person; # используем класс Person
my $magician = new Person; # "этот маг - новая личность"
give_name $magician 'Гэндальф'; # "назовем мага 'Гэндальф'"
my $name = say_name $magician; # "назови себя, маг"
print $name, "\n";
В качестве иллюстрации к сказанному на рис. 14.1 изображены языковые конструкции, применяемые при работе с объектами, и их взаимосвязи.
Рис. 14.1. Конструкции объектного программирования в Perl
Наследование - это мощный механизм конструирования нового класса, позволяющий уточнить существующий класс, изменить его поведение родительского класса или добавить к нему новые свойства. В Perl это делается легко и просто: нужно упомянуть имя родительского класса в специальном массиве
package Wizard; # класс "Маг"
our @ISA = qw(Person); # является подклассом Person
use Person; # и использует пакет Person
# ... описание методов класса Wizard...
1; # вернуть истину для use
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии