2009-09-02 4 views

ответ

16

Вы можете создать чистый виртуальный класс (или роль, если вы используете Moose или MooseX::Declare):

package Foo; 

use strict; 
use Carp; 

sub new { croak "new not implemented" }; 
sub do_x { croak "do_x not implemented" }; 
sub do_y { croak "do_y not implemented" }; 

Но принудительное исполнение будет во время выполнения. В общем, интерфейсы необходимы, потому что язык не поддерживает множественное наследование и строго типизирован. Perl поддерживает множественное наследование и (используя Moose) нечто вроде множественного наследования (но лучше), называемого ролями, и оно динамически типизируется. Строгая и динамическая типизация сводится к утиному набору текста (если она уклоняется(), как утка, ходит(), как утка, и плавает() как утка, то это утка). В Perl вы говорите:

if ($some_obj->can("quack") { 
    $some_obj->quack; 
} else { 
    croak "incompatible class type: ", ref $some_obj; 
} 
11

В традиционном Perl OO очень мало соблюдается. У вас есть опция $ obj-> can ('methodname') для утиного типа, что вы используете, но нет ничего похожего на интерфейс.

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

+0

+1 для лося с ролями. Особенно, если вы исходите из строгого фона OO/предпочтения, он делает то, что вам нравится. –

+0

http://stackoverflow.com/questions/1341903/c-like-usage-of-moose-with-perl-for-oop – draegtun

10

Но, конечно же! Class::Interface.

Тем не менее, я сначала посмотрю на Муз. Это фантастически.

+1

Да, у CPAN есть все. ;-) – ijw

1

интерфейсы необходимы, потому что язык не поддерживает

интерфейс является концепция ООП. Они не нужны из-за технической проблемы.

Смежные вопросы