АнглийскийФранцузскийИспанский

Значок OnWorks

perlootut - Интернет в облаке

Запустите perlootut в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это команда perlootut, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


perlootut - Учебное пособие по объектно-ориентированному программированию в Perl

ДАТА


Этот документ был создан в феврале 2011 г., а последняя серьезная редакция была в феврале XNUMX г.
2013.

Если вы читаете это в будущем, возможно,
измененный. Мы рекомендуем начать с чтения документа perlootut в последней стабильной версии.
выпуск Perl, а не эту версию.

ОПИСАНИЕ


Этот документ представляет собой введение в объектно-ориентированное программирование на Perl. Начинается
с кратким обзором концепций объектно-ориентированного дизайна. Затем он вводит
несколько разных ОО-систем от CPANhttp://search.cpan.org> которые на чем строятся
Perl предоставляет.

По умолчанию встроенная в Perl объектно-ориентированная система очень минимальна, оставляя вам делать большую часть работы.
Этот минимализм имел большой смысл в 1994 году, но за годы, прошедшие после Perl 5.0, мы увидели
В Perl OO появляется ряд общих паттернов. К счастью, гибкость Perl позволила
богатая экосистема систем Perl OO для процветания.

Если вы хотите узнать, как Perl OO работает под капотом, документ perlobj объясняет
мельчайшие подробности.

В этом документе предполагается, что вы уже знакомы с основами синтаксиса Perl, переменная
типы, операторы и вызовы подпрограмм. Если вы еще не понимаете эти концепции, пожалуйста,
сначала прочтите perlintro. Вам также следует прочитать документы perlsyn, perlop и perlsub.

ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ОСНОВЫ


Большинство объектных систем разделяют ряд общих концепций. Вы, наверное, слышали такие термины, как
"класс", "объект", "метод" и "атрибут" перед этим. Понимание концепций сделает
гораздо проще читать и писать объектно-ориентированный код. Если вы уже знакомы с
эти термины, вам все равно следует бегло просмотреть этот раздел, поскольку он объясняет каждую концепцию в терминах
ОО реализации Perl.

ОО-система Perl основана на классах. ОО на основе классов довольно распространено. Используется Java, C ++,
C #, Python, Ruby и многие другие языки. Есть и другие парадигмы объектной ориентации
также. JavaScript - самый популярный язык для использования другой парадигмы. ОО JavaScript
система основана на прототипах.

объект
An объект представляет собой структуру данных, которая объединяет данные и подпрограммы, которые работают с
эти данные. Данные объекта называются Атрибуты, а его подпрограммы называются методы.
Объект можно рассматривать как существительное (человек, веб-сервис, компьютер).

Объект представляет собой отдельную дискретную вещь. Например, объект может представлять
файл. Атрибуты для файлового объекта могут включать его путь, содержимое и последний
время модификации. Если мы создали объект для представления / И т.д. / имя хоста на машине с именем
"foo.example.com", путь к этому объекту будет "/ И т.д. / имя хоста", его содержание будет
"foo \ n", и время последнего изменения будет 1304974868 секунд с начала
эпохи.

Методы, связанные с файлом, могут включать «rename ()» и «write ()».

В Perl большинство объектов - это хэши, но системы объектно-ориентированного программирования, которые мы рекомендуем, избавят вас от необходимости
беспокоиться об этом. На практике лучше учитывать внутреннюю структуру данных объекта.
непрозрачным.

Класс
A класс определяет поведение категории объектов. Класс - это название категории
(например, «Файл»), и класс также определяет поведение объектов в этой категории.

Все объекты относятся к определенному классу. Например, наш / И т.д. / имя хоста объект принадлежит
класс «Файл». Когда мы хотим создать конкретный объект, мы начинаем с его класса и
строить or создать экземпляр объект. Конкретный объект часто называют пример
класса.

В Perl любой пакет может быть классом. Разница между пакетом, который является классом, и
тот, который не является, зависит от того, как используется пакет. Вот наше "объявление класса" для
класс "Файл":

пакет File;

В Perl нет специального ключевого слова для создания объекта. Однако большинство объектно-ориентированных модулей
на CPAN используйте метод с именем "new ()" для создания нового объекта:

мое $ hostname = Файл-> новый (
путь => '/ И т.д. / имя хоста',
content => "foo \ n",
last_mod_time => 1304974868,
);

(Не беспокойтесь об этом операторе "->", это будет объяснено позже.)

Благословение

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

Хотя мы настоятельно рекомендуем не создавать объекты с нуля, вы должны знать
срок благословлять, благословенный структура данных (также известная как «референт») - это объект. Мы иногда говорим
что объект был «благословлен в класс».

После того, как референт был благословлен, функция «blessed» из основного модуля Scalar :: Util
может сообщить нам название своего класса. Эта подпрограмма возвращает класс объекта при передаче
объект и false в противном случае.

используйте Scalar :: Util 'blessed';

напечатать blessed ($ hash); # undef
печать благословенного ($ hostname); # Файл

Конструктор

A конструктор создает новый объект. В Perl конструктор класса - это просто еще один метод,
в отличие от некоторых других языков, которые предоставляют синтаксис для конструкторов. Большинство классов Perl используют
«новый» в качестве имени их конструктора:

мой $ file = Файл-> новый (...);

методы
Вы уже узнали, что метод это подпрограмма, которая работает с объектом. Вы можете
думайте о методе как о вещах, которые объект может do. Если объект - существительное, то
методы - это его глаголы (сохранить, распечатать, открыть).

В Perl методы - это просто подпрограммы, которые находятся в пакете класса. Методы
всегда записываются для получения объекта в качестве первого аргумента:

суб print_info {
мой $ self = shift;

print "Этот файл находится по адресу", $ self-> path, "\ n";
}

$ file-> print_info;
# Файл находится по адресу / И т.д. / имя хоста

Что делает метод особенным, так это это это под названием. Оператор стрелки ("->") сообщает Perl, что
мы вызываем метод.

Когда мы вызываем метод, Perl организует для метода заклинатель быть переданным как
первый аргумент. Заклинатель - причудливое название предмета слева от стрелки. В
invocant может быть именем класса или объектом. Мы также можем передать дополнительные аргументы в
метод:

суб print_info {
мой $ self = shift;
my $ prefix = shift // "Этот файл находится в";

напечатать префикс $, ",", $ self-> path, "\ n";
}

$ file-> print_info ("Файл находится в");
# Файл находится по адресу / И т.д. / имя хоста

Атрибуты
Каждый класс может определять свои Атрибуты. Когда мы создаем объект, мы присваиваем значения
эти атрибуты. Например, у каждого объекта «Файл» есть путь. Атрибуты иногда
под названием свойствами.

Perl не имеет специального синтаксиса для атрибутов. Под капотом атрибуты часто хранятся как
ключи в базовом хэше объекта, но не беспокойтесь об этом.

Мы рекомендуем вам обращаться к атрибутам только через сбруя методы. Это методы, которые
может получить или установить значение каждого атрибута. Мы видели это ранее в "print_info ()"
пример, который вызывает "$ self-> path".

Вы также можете увидеть условия добытчик и сеттер. Это два типа аксессуаров. Геттер
получает значение атрибута, а установщик устанавливает его. Другой термин для сеттера: мутатор

Атрибуты обычно определяются как доступные только для чтения или для чтения-записи. Атрибуты только для чтения могут только
быть установленным при первом создании объекта, в то время как атрибуты чтения-записи могут быть изменены в любом
времени.

Само значение атрибута может быть другим объектом. Например, вместо возврата
время последней модификации в виде числа, класс «File» может возвращать объект DateTime
представляя это значение.

Возможно иметь класс, который не предоставляет никаких публично устанавливаемых атрибутов. Нет
у каждого класса есть атрибуты и методы.

Полиморфизм
Полиморфизм это причудливый способ сказать, что объекты из двух разных классов имеют общий
API. Например, у нас могут быть классы «File» и «WebPage», которые имеют
метод print_content (). Этот метод может давать разные результаты для каждого класса, но
у них общий интерфейс.

Хотя эти два класса могут различаться по-разному, когда дело доходит до "print_content ()"
метод, они такие же. Это означает, что мы можем попытаться вызвать метод print_content ().
на объекте любого класса и we не встали на сторону в знают почему класс объект принадлежит к!

Полиморфизм - одно из ключевых понятий объектно-ориентированного дизайна.

наследование
наследование позволяет создать специализированную версию существующего класса. Наследование позволяет
новый класс повторно использует методы и атрибуты другого класса.

Например, мы могли бы создать класс File :: MP3, который наследуется из файла". An
"Файл :: MP3" это больше конкретный тип «Файл». Все файлы mp3 являются файлами, но не все файлы
это файлы в формате mp3.

Мы часто называем отношения наследования Родитель-ребенок или "суперкласс / подкласс"
отношения. Иногда мы говорим, что у ребенка это отношения со своим родителем
класса.

"Файл" - это суперкласс "File :: MP3", а "File :: MP3" - это подкласс "Файла".

пакет File :: MP3;

использовать родительский файл;

Родительский модуль - это один из нескольких способов, которыми Perl позволяет вам определять наследование.
отношения.

Perl допускает множественное наследование, что означает, что класс может наследовать от нескольких
родители. Хотя это возможно, мы настоятельно не рекомендуем этого делать. Как правило, вы можете использовать
роли чтобы делать все, что вы можете делать с множественным наследованием, но более чистым способом.

Обратите внимание, что нет ничего плохого в определении нескольких подклассов данного класса. Этот
одновременно распространен и безопасен. Например, мы могли бы определить "File :: MP3 :: FixedBitrate" и
Классы "File :: MP3 :: VariableBitrate" для различения различных типов файлов mp3.

Переопределение методы и метод разрешающая способность

Наследование позволяет двум классам совместно использовать код. По умолчанию каждый метод родительского класса
также имеется у ребенка. Ребенок может явно переопределение родительский метод
обеспечить собственную реализацию. Например, если у нас есть объект «File :: MP3», он имеет
Метод print_info () из файла:

мой $ cage = Файл :: MP3-> новый (
path => 'mp3s / My-Body-Is-a-Cage.mp3',
content => $ mp3_data,
last_mod_time => 1304974868,
title => 'Мое тело - клетка',
);

$ cage-> print_info;
# Файл находится по адресу mp3s / My-Body-Is-a-Cage.mp3

Если бы мы хотели включить заголовок mp3 в приветствие, мы могли бы переопределить метод:

пакет File :: MP3;

использовать родительский файл;

суб print_info {
мой $ self = shift;

print "Этот файл находится по адресу", $ self-> path, "\ n";
print "Его заголовок", $ self-> title, "\ n";
}

$ cage-> print_info;
# Файл находится по адресу mp3s / My-Body-Is-a-Cage.mp3
# Его название - "Мое тело - клетка".

Процесс определения того, какой метод следует использовать, называется метод разрешающая способность. Что
Perl сначала смотрит на класс объекта (в данном случае "File :: MP3"). Если этот класс
определяет метод, затем вызывается версия метода этого класса. Если нет, то Perl выглядит
в каждом родительском классе по очереди. Для "File :: MP3" его единственным родительским элементом является "File". Если "Файл :: MP3"
не определяет метод, но «Файл» определяет, тогда Perl вызывает метод в «Файл».

Если «Файл» унаследован от «Источника данных», который унаследован от «Вещи», то Perl сохранит
поиск "вверх по цепочке", если необходимо.

Можно явно вызвать родительский метод из дочернего:

пакет File :: MP3;

использовать родительский файл;

суб print_info {
мой $ self = shift;

$ self-> SUPER :: print_info ();
print "Его заголовок", $ self-> title, "\ n";
}

Бит «SUPER ::» указывает Perl искать «print_info ()» в классе «File :: MP3».
цепочка наследования. Когда он находит родительский класс, реализующий этот метод, метод
называется.

Мы упоминали множественное наследование ранее. Основная проблема с множественным наследованием:
что это значительно усложняет разрешение метода. См. Perlobj для более подробной информации.

Инкапсуляция
Инкапсуляция идея непрозрачности объекта. Когда другой разработчик использует ваш
класс, им не нужно знать это это реализовано, им просто нужно знать почему оно делает.

Инкапсуляция важна по нескольким причинам. Во-первых, это позволяет отделить
публичный API из частной реализации. Это означает, что вы можете изменить эту реализацию
не нарушая API.

Во-вторых, когда классы хорошо инкапсулированы, их легче подклассифицировать. В идеале
подкласс использует те же API-интерфейсы для доступа к данным объекта, которые использует его родительский класс. В реальности,
подклассы иногда связаны с нарушением инкапсуляции, но хороший API может минимизировать
нужно сделать это.

Мы упоминали ранее, что большинство объектов Perl реализованы как хэши под капотом. В
принцип инкапсуляции говорит нам, что мы не должны полагаться на это. Вместо этого мы должны
используйте методы доступа для доступа к данным в этом хэше. Рекомендуемые нами объектные системы
ниже все автоматизируют создание методов доступа. Если вы используете один из них, вам следует
никогда не нужно обращаться к объекту как к хешу напрямую.

Состав
В объектно-ориентированном коде мы часто обнаруживаем, что один объект ссылается на другой объект. Это
под названием композицияИли имеет отношения.

Ранее мы упоминали, что метод доступа last_mod_time класса File может возвращать
DateTime объект. Это прекрасный образец композиции. Мы могли бы пойти еще дальше, и
сделать так, чтобы аксессоры path и content также возвращали объекты. Класс "Файл"
тогда быть состоящие нескольких других объектов.

роли
роли что-то, что класс приносит, а не что-то, что это is. Роли
относительно новый для Perl, но стал довольно популярным. Роли прикладной на занятия.
Иногда мы говорим, что классы потреблять роли.

Роли - это альтернатива наследованию для обеспечения полиморфизма. Предположим, у нас есть
два класса: «Радио» и «Компьютер». Обе эти вещи имеют переключатели включения / выключения. Мы хотим
модели, что в определениях наших классов.

Мы могли бы наследовать оба класса от общего родителя, например Machine, но не все
машины имеют переключатели включения / выключения. Мы могли бы создать родительский класс под названием «HasOnOffSwitch», но
это очень искусственно. Радио и компьютеры не являются специализацией этого родителя.
Этот родитель действительно довольно нелепое создание.

Вот здесь-то и появляются роли. Имеет смысл создать роль «HasOnOffSwitch» и
примените его к обоим классам. Эта роль будет определять известный API, например, "turn_on ()"
и методы Turn_off ().

Perl не имеет встроенного способа выражения ролей. В прошлом люди просто кусали
bullet и использовал множественное наследование. В настоящее время на CPAN есть несколько хороших вариантов для
используя роли.

После появления в Используйте OO
Объектная ориентация - не лучшее решение для каждой проблемы. В Perl Лучшее Практики
(авторское право 2004 г., опубликовано O'Reilly Media, Inc.) Дамиан Конвей приводит список
критерии, которые следует использовать при принятии решения о том, подходит ли объектно-ориентированный объект для вашей проблемы:

· Проектируемая система велика или может стать большой.

· Данные можно агрегировать в очевидные структуры, особенно если есть большой
количество данных в каждом агрегате.

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

· У вас есть фрагмент данных, к которому применяется множество различных операций.

· Вам необходимо выполнить те же общие операции со связанными типами данных, но с
незначительные вариации в зависимости от конкретного типа данных, к которым применяются операции
к.

· Вполне вероятно, что позже вам придется добавить новые типы данных.

· Типичное взаимодействие между частями данных лучше всего представлено операторами.

· Внедрение отдельных компонентов системы, вероятно, изменится
времени.

· Дизайн системы уже объектно-ориентированный.

· Многие другие программисты будут использовать ваши программные модули.

PERL OO СИСТЕМЫ


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

Мы настоятельно рекомендуем вам использовать одну из этих систем. Даже самые минимальные из них
устраняет множество повторяющихся шаблонов. На самом деле нет веской причины писать свой
занятия с нуля на Perl.

Если вас интересует внутренняя часть этих систем, попробуйте perlobj.

американский лось
Moose позиционирует себя как «постмодернистскую объектную систему для Perl 5». Не бойся,
Ярлык "постмодернизм" - это отсылка к описанию Ларри Perl как "первого постмодернистского"
компьютерный язык ".

"Moose" предоставляет полную современную систему объектно-ориентированного программирования. Наибольшее влияние на него оказал Common Lisp.
Object System, но она также заимствует идеи из Smalltalk и нескольких других языков.
"Moose" был создан Стиваном Литтлом и во многом основан на его работе над Perl 6 OO.
дизайн.

Вот наш класс File, использующий Moose:

пакет File;
использовать Moose;

имеет path => (is => 'ro');
имеет content => (is => 'ro');
имеет last_mod_time => (is => 'ro');

суб print_info {
мой $ self = shift;

print "Этот файл находится по адресу", $ self-> path, "\ n";
}

«Moose» обладает рядом функций:

· Декларативный сахар

«Moose» предоставляет слой декларативного «сахара» для определения классов. Этот сахар
просто набор экспортируемых функций, которые упрощают описание работы вашего класса и
более аппетитный. Это позволяет вам описать почему ваш класс, вместо того, чтобы рассказывать
Perl это для реализации вашего класса.

Подпрограмма has () объявляет атрибут, а Moose автоматически создает
аксессоры для этих атрибутов. Он также заботится о создании метода "new ()" для
ты. Этот конструктор знает об объявленных вами атрибутах, поэтому вы можете их установить.
при создании нового «Файла».

· Встроенные роли

«Moose» позволяет вам определять роли так же, как вы определяете классы:

пакет HasOnOfSwitch;
используйте Moose :: Role;

имеет is_on => (
is => 'rw',
isa => 'Bool',
);

суб включение {
мой $ self = shift;
$ self->is_on(1);
}

субturn_off {
мой $ self = shift;
$ self->is_on(0);
}

· Система миниатюрных шрифтов

В приведенном выше примере вы можете видеть, что мы передали isa => 'Bool' в has (), когда
создание нашего атрибута is_on. Это говорит "Лося", что этот атрибут должен быть
логическое значение. Если мы попытаемся установить недопустимое значение, наш код выдаст ошибку.

· Полный самоанализ и манипуляции

Встроенные в Perl возможности самоанализа довольно минимальны. «Лось» строится на
их и создает полный слой самоанализа для ваших классов. Это позволяет вам спросить
вопросы типа "какие методы реализует класс File?" Он также позволяет вам изменять
ваши классы программно.

· Автономный и расширяемый

«Moose» описывает себя с помощью собственного API самоанализа. Помимо того, что это крутой трюк,
это означает, что вы можете расширить "Moose", используя сам "Moose".

· Богатая экосистема

На CPAN под MooseX есть богатая экосистема расширений "Moose".
<http://search.cpan.org/search? query = MooseX & mode = dist> пространство имен. Кроме того, многие
модули на CPAN уже используют "Moose", предоставляя вам множество примеров для изучения
из.

· Многие другие функции

«Moose» - очень мощный инструмент, и мы не можем здесь описать все его возможности. Мы
рекомендую вам узнать больше, прочитав документацию "Moose", начиная с
Moose :: Руководствоhttp://search.cpan.org/perldoc? Moose :: Руководство>.

Конечно, «Лось» не идеален.

"Moose" может замедлить загрузку вашего кода. Сам «Лось» не маленький, и он много
генерации кода при определении вашего класса. Эта генерация кода означает, что ваш
код времени выполнения работает настолько быстро, насколько это возможно, но вы платите за это, когда ваши модули устанавливаются первыми
загружен.

Это попадание во время загрузки может быть проблемой, когда важна скорость запуска, например, с
сценарий командной строки или обычный сценарий CGI, который необходимо загружать каждый раз, когда он
казнены.

Прежде чем паниковать, знайте, что многие люди используют "Moose" для инструментов командной строки и других
код, чувствительный к запуску. Мы рекомендуем вам сначала попробовать "Лося", прежде чем беспокоиться о
скорость запуска.

«Moose» также имеет несколько зависимостей от других модулей. Большинство из них представляют собой небольшие стенды.
только модули, ряд из которых был выделен из "Moose". Сам "лось", а некоторые
зависимостей, требуется компилятор. Если вам нужно установить программное обеспечение в системе
без компилятора или при наличии любой зависимости является проблемой, тогда "Moose" не может быть
прямо для вас.

Мычание

Если вы попробуете "Moose" и обнаружите, что одна из этих проблем мешает вам использовать "Moose",
мы рекомендуем вам в следующий раз подумать о Moo. "Moo" реализует подмножество "Moose"
функциональность в более простом пакете. Для большинства функций, которые он реализует, конец -
пользовательский API идентичный на "Moose", что означает, что вы можете довольно легко переключаться с "Moo" на "Moose"
без труда.

"Moo" не реализует большую часть API интроспекции "Moose", поэтому он часто работает быстрее, когда
загрузка ваших модулей. Кроме того, ни одна из его зависимостей не требует XS, поэтому его можно
устанавливается на машинах без компилятора.

Одна из самых привлекательных особенностей «Му» - его совместимость с «Лося». Когда кто-то
пытается использовать API самоанализа "Moose" для класса или роли "Moo", это прозрачно
раздувается до класса или роли «лося». Это упрощает включение "Му" -использование
код в базу кода "Moose" и наоборот.

Например, класс «Moose» может наследовать от класса «Moo» с помощью «extends» или потреблять «Moo».
роль с использованием «с».

Авторы "Moose" надеются, что однажды "Moo" станет устаревшим, улучшив "Moose".
Достаточно, но пока он представляет собой достойную альтернативу «Лося».

Класс :: Аксессор
Class :: Accessor - полная противоположность "Moose". Он предоставляет очень мало функций, и при этом
самостоятельный хостинг.

Однако это очень простой, чистый Perl, не имеющий дополнительных зависимостей. Это также
по запросу предоставляет API-интерфейс «похожий на лося» для поддерживаемых им функций.

Несмотря на то, что это не так много, все же предпочтительнее писать свои собственные классы из
царапина.

Вот наш класс File с Class :: Accessor:

пакет File;
используйте Class :: Accessor 'antlers';

имеет path => (is => 'ro');
имеет content => (is => 'ro');
имеет last_mod_time => (is => 'ro');

суб print_info {
мой $ self = shift;

print "Этот файл находится по адресу", $ self-> path, "\ n";
}

Флаг импорта "antlers" сообщает "Class :: Accessor", что вы хотите определить свои атрибуты.
с использованием синтаксиса, подобного лося. Единственный параметр, который вы можете передать в «has», - «is». Мы
рекомендуется использовать этот лосьоподобный синтаксис, если вы выбираете "Class :: Accessor", поскольку он
означает, что у вас будет более плавный путь обновления, если вы позже решите перейти на «Moose».

Как и Moose, Class :: Accessor генерирует методы доступа и конструктор для вашего
класса.

Класс :: Крошечный
Наконец, у нас есть Class :: Tiny. Этот модуль действительно оправдывает свое название. У него невероятно
минимальный API и абсолютно никаких зависимостей от недавних Perl. Тем не менее, мы думаем, что это много
проще в использовании, чем писать собственный объектно-ориентированный код с нуля.

Вот еще раз наш класс File:

пакет File;
используйте Class :: Tiny qw (содержимое пути last_mod_time);

суб print_info {
мой $ self = shift;

print "Этот файл находится по адресу", $ self-> path, "\ n";
}

Вот и все!

С «Class :: Tiny» все методы доступа доступны для чтения и записи. Он генерирует для вас конструктор, так как
а также средства доступа, которые вы определяете.

Вы также можете использовать Class :: Tiny :: Antlers для синтаксиса, подобного Moose.

Роль :: Крошечный
Как мы упоминали ранее, роли предоставляют альтернативу наследованию, но Perl не
иметь встроенную поддержку ролей. Если вы решите использовать Moose, он будет иметь полноценную
реализация роли. Однако, если вы используете один из других рекомендованных нами объектно-ориентированных модулей, вы можете
по-прежнему использовать роли с Role :: Tiny

"Role :: Tiny" предоставляет некоторые из тех же функций, что и система ролей Moose, но в большей степени
меньший пакет. В частности, он не поддерживает никаких объявлений атрибутов, поэтому
это нужно делать вручную. Тем не менее, он полезен и хорошо работает с Class :: Accessor.
и "Class :: Tiny"

OO Система Итого
Вот краткий обзор рассмотренных нами вариантов:

· Лось

«Лось» - это максимальный вариант. У него много функций, большая экосистема и
процветающая база пользователей. Мы также кратко рассказали о Му. «Му» - это облегченный «Лось», а
разумная альтернатива, когда Moose не работает в вашем приложении.

· Класс :: Аксессор

"Class :: Accessor" делает намного меньше, чем "Moose", и является хорошей альтернативой, если вы найдете
«Лось» подавляющее. Он существует уже давно и хорошо зарекомендовал себя. Это также
имеет минимальный режим совместимости "Moose", что позволяет переходить от "Class :: Accessor" к
«Лось» несложный.

· Класс :: Крошечный

"Class :: Tiny" - это абсолютно минимальный вариант. Не имеет зависимостей и почти не имеет
синтаксис для изучения. Это хороший вариант для супер-минимальной среды и для метания
что-то вместе быстро, не беспокоясь о деталях.

· Роль :: Крошечный

Используйте "Role :: Tiny" с "Class :: Accessor" или "Class :: Tiny", если вы обнаружите себя
учитывая множественное наследование. Если вы выберете "Moose", у него будет своя собственная роль.
реализации.

Другой OO системы
На CPAN есть буквально десятки других модулей, связанных с объектно-ориентированными объектами, помимо тех, что описаны здесь,
и вы, вероятно, столкнетесь с одним или несколькими из них, если будете работать с чужим кодом.

Кроме того, множество кодов в дикой природе выполняет все объектно-ориентированные разработки «вручную», используя только Perl.
встроенные функции объектно-ориентированного программирования. Если вам нужно поддерживать такой код, вы должны прочитать perlobj, чтобы
точно понимать, как работает объектно-ориентированный объект Perl.

Заключение


Как мы уже говорили ранее, минимальная объектно-ориентированная система Perl привела к появлению большого количества объектно-ориентированных систем на CPAN.
Хотя вы все еще можете перейти к голому железу и писать свои классы вручную, есть
на самом деле нет причин делать это с современным Perl.

Для небольших систем Class :: Tiny и Class :: Accessor предоставляют минимальные объектные системы.
которые позаботятся о базовом шаблоне за вас.

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

Мы рекомендуем вам поиграть и оценить Moose, Class :: Accessor и Class :: Tiny, чтобы увидеть
какая ОО-система подходит именно вам.

Используйте perlootut онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

Команды Linux

Ad