Учитывая некоторый интерес к данному модулю со стороны перлистов ЛОРа, решил опубликовать здесь известие о данном событии. На новость подобное не тянет, но вот на тред — вполне.
Pony::Object — модуль для ООП программирования в perl с поддержкой
- наследования свойств (да и самих свойств) объектов;
- разделения доступа к методам, полям;
- абстрактных методов.
Обладает менее «инопланетным» синтаксисом, нежели распространённые Moose, Mouse и т.д., в разы меньшим размером, чем распространённые аналоги. Содержится в одном файле (возможно, это важно для тех, кто делает портативные версии своих продуктов).
В этой версии появилась поддержка абстрактных методов и классов, уменьшен и без того небольшой список зависимостей.
Пример использования абстрактных классов:
# Let's define simple interface for texts.
package Text::Interface;
use Pony::Object -abstract; # Use 'abstract' or '-abstract'
# params to define abstract class.
sub getText : Abstract; # Use 'Abstract' attribute to
sub setText : Abstract; # define abstract method.
1;
# Now we can define base class for texts.
# It's abstract too but now it has some code.
package Text::Base;
use Pony::Object abstract => 'Text::Interface';
protected text => '';
sub getText : Public
{
my $this = shift;
return $this->text;
}
1;
# And in the end we can write Text class.
package Text;
use Pony::Object 'Text::Base';
sub setText : Public
{
my $this = shift;
$this->text = shift;
}
1;
# Main file.
package main;
use Text;
use Text::Base;
my $text = new Text::Base; # Raises an error!
my $text = new Text;
$text->setText('some text');
print $text->getText(); # Returns 'some text';
В тред кастуются пользователи, замеченные в неравнодушии к модулю: Virtuos86, outtaspace, akinator, skam. Также к обсуждению приглашаются перлисты ЛОРа.
1;
__END__
Это не тред обсуждения плюсов и минусов языка.