2009-09-02 21 views

risposta

16

È possibile creare una classe virtuale pura (o un ruolo se si utilizza Moose o 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" }; 

Ma l'esecuzione sarà in fase di esecuzione. In generale, le interfacce sono necessarie perché la lingua non supporta l'ereditarietà multipla ed è tipizzata in modo rigoroso. Perl supporta l'ereditarietà multipla e (usando Moose) qualcosa come l'ereditarietà multipla (ma meglio) chiamata ruoli ed è digitato dinamicamente. La tipizzazione rigorosa vs dinamica si riduce alla digitazione (se cessa() come anatra, cammina() come un'anatra e nuota() come un'anatra, quindi è un'anatra). In Perl, tu dici:

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

Nel Perl OO tradizionale, viene applicato molto poco. Hai l'opzione di $ obj-> can ('methodname') per anatra-digita quello che stai usando, ma non c'è niente come un'interfaccia.

(Ma dare un'occhiata a Moose, i ruoli ci può essere quello che stai dopo.)

+0

+1 per alci con ruoli. Soprattutto se provi da una rigida OO/preferenza, fa quello che ti piace. –

+0

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

10

Ma certo! Class::Interface.

Detto questo, guarderei prima Moose. È fantastico.

+1

Sì, giusto, CPAN ha tutto. ;-) – ijw

1

interfacce sono necessari perché la lingua non supporta

Interface è un concetto OOP. Non sono necessari a causa di un problema tecnico.

Problemi correlati