Найти в Дзене
Кладовая кода

ООП в Perl

ООП (объектно-ориентированное программирование) в Perl началось с версии 5.

ООП в Perl основано на пакетах (packages), которые содержат методы (sub-подпрограммы), свойства (переменные) и наследование (inheritance).

Для создания класса (class) в Perl, нужно создать пакет с именем класса. Например, класс "Person" может быть создан следующим образом:

package Person;

sub new {

my $class = shift;

my $self = {

_firstName => shift,

_lastName => shift,

_ssn => shift,

};

bless $self, $class;

return $self;

}

sub setFirstName {

my ( $self, $firstName ) = @_;

$self->{_firstName} = $firstName if defined($firstName);

return $self->{_firstName};

}

В примере выше, мы создали класс "Person" с конструктором new, который принимает аргументы "имя", "фамилия" и "ssn" (номер социального страхования) и создает объект "Person". Также мы создали метод setFirstName, который устанавливает имя объекта "Person".

Чтобы создать объект "Person", мы вызываем метод new, передавая ему необходимые аргументы:

my $person = new Person("John", "Doe", 123456789);

Далее мы можем использовать методы и свойства объекта "Person":

$person->setFirstName("Jane");

print $person->{_firstName}; # Jane

Также в Perl есть наследование. Для создания класса наследника (subclass), нужно указать родительский класс (parent class). Например, класс "Employee" может быть создан как наследник класса "Person":

package Employee;

use base qw(Person);

sub new {

my ( $class, $firstName, $lastName, $ssn, $employeeID ) = @_;

my $self = $class->SUPER::new( $firstName, $lastName, $ssn );

$self->{_employeeID} = $employeeID;

bless $self, $class;

return $self;

}

sub getEmployeeID {

my ($self) = @_;

return $self->{_employeeID};

}

В примере выше мы создали класс "Employee", который наследует свойства и методы класса "Person". Мы создали свойство "_employeeID" и метод "getEmployeeID", который возвращает это свойство.

Чтобы создать объект "Employee", мы вызываем метод new класса "Employee", передавая ему необходимые аргументы:

my $employee = new Employee("John", "Doe", 123456789, 1234);

Далее мы можем использовать методы и свойства объекта "Employee":

$employee->setFirstName("Jane");

print $employee->{_firstName}; # Jane

print $employee->getEmployeeID; # 1234

Таким образом, ООП в Perl основано на пакетах, которые содержат методы и свойства объектов. Наследование позволяет создавать классы наследники, которые наследуют свойства и методы родительского класса.

Классы

В Perl классы представляются пакетами (package). Пакет определяется с помощью ключевого слова "package" и следующего за ним идентификатора пакета. Внутрь пакета помещаются переменные, функции и методы класса. Определение класса может выглядеть следующим образом:

package MyClass;

# переменные класса

our $var1;

our $var2 = "Default value";

# методы класса

sub method1 {

my ($self, $arg) = @_;

# ...

}

sub method2 {

my ($self) = @_;

# ...

}

# экспорт методов класса

use Exporter qw(import);

our @EXPORT_OK = qw(method1 method2);

1; # обязательное наличие

В данном примере определен класс "MyClass". Внутрь пакета помещены два метода "method1" и "method2", а также две переменные "$var1" и "$var2". В конце определения класса указывается наличие пакета с помощью ключевого слова "1;".

Для использования класса его нужно импортировать с помощью функции "use". Например:

use MyClass qw(method1);

my $obj = MyClass->new();

$obj->method1($arg);

В данном примере класс "MyClass" импортируется с методом "method1". Далее создается объект класса "$obj" и вызывается метод "method1" с аргументом "$arg".

Для создания объектов в Perl используется функция bless. Пример создания объекта:

sub new {

my ($class, %args) = @_;

my $self = {

var1 => $args{var1} || "Default value",

var2 => $args{var2} || "Default value",

};

bless($self, $class);

return $self;

}

В данном примере определен конструктор "new", который создает объект класса и устанавливает его свойства. Функция "bless" присваивает объекту ссылку на свой класс.

Для доступа к свойствам объекта в методах используется специальное слово "self", которое ссылается на текущий объект. Например:

sub method1 {

my ($self, $arg) = @_;

$self->{var1} = $arg;

}

Наука
7 млн интересуются