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

         

Описание классов


Класс описывается в виде одноименного пакета, в котором размещаются определения методов, реализующих поведение объектов этого класса. Описания одного или нескольких классов сохраняются в виде модуля. Как минимум один из методов класса отвечает за создание объектов класса. Такой метод называется конструктором (constructor) и обычно носит имя new (или его имя совпадает с именем класса). Для хранения атрибутов объекта очень часто применяется анонимный хэш, ключи которого задают имена атрибутов. Первым аргументом конструктор получает имя класса, которое он использует для преобразования ссылки на анонимный хэш в ссылку на объект указанного класса. Это "магическое" превращение выполняется с помощью встроенной функции bless ("благословить"), благодаря которой каждый созданный объект помечается принадлежащим к определенному классу. После этого при обращении к методам объекта они отыскиваются в пакете с таким же именем. Вот как происходит превращение объекта "ссылка" в объект определенного класса:

my $class = 'Hobbit'; # имя класса в виде строки my $object = { }; # ссылка на анонимный хэш, # где будут храниться данные объекта, bless($object, $class); # "благословляется" указывать # на объект класса $class

Для примера опишем класс "Личность" (Person), сохранив его в файле Person.pm. Начало описания класса будет выглядеть так:

package Person; # класс - это пакет

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

Затем в описании класса обычно определяются методы для доступа к атрибутам объекта. Для примера определим метод для доступа (accessor) к атрибуту 'name' ("имя") и метод для изменения его значения (modifier).

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


sub give_name { # метод изменения (modifier) атрибута name my $self = $_[0]; # 1- й аргумент: ссылка на объект $self->{name} = $_[1]; # 2-й аргумент: новое значение } 1; # истинное значение требуется для use __END__ # конец описания класса
В классе описываются методы для работы с атрибутами объектов класса, причем часто один метод используется для чтения и для изменения значения атрибута. В примере опишем метод для чтения и записи (mutator) свойства 'height' ("рост"):
sub height { # метод чтения и записи атрибута height my $self = shift; # извлечь ссылку на объект $self->{height} = shift # присвоить новое значение, if @_; # если передан аргумент return $self->{height}; # вернуть значение атрибута }
Обратите внимание, что описание класса значительно проще, чем описание традиционного модуля. Для работы с классом не требуется никаких списков экспортирования имен. Вместо этого описываются методы, которые можно рассматривать как сервисы, предоставляемые классом для взаимодействия с каждым из конкретных экземпляров класса. Набор методов для управления поведением объекта называют его интерфейсом. Для работы с объектами класса достаточно знать этот интерфейс, не вдаваясь в детали реализации поведения объектов.

Содержание раздела







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий