2009-09-02 7 views

Respuesta

16

Puede crear una clase virtual pura (o papel si está utilizando o MooseMooseX::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" }; 

Pero la ejecución será en tiempo de ejecución. En general, las interfaces son necesarias porque el lenguaje no admite herencia múltiple y está estrictamente tipado. Perl admite herencia múltiple y (usando Moose) algo así como herencia múltiple (pero mejor) llamados roles y se escribe de forma dinámica. La tipificación estricta vs dinámica se reduce a pato escribir (si grazna() como pato, camina() como un pato, y nada() como un pato, entonces es un pato). En Perl, usted dice:

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

En Perl OO tradicional, se aplica muy poco. Usted tiene la opción de $ obj-> can ('methodname') para pato-escribir lo que está usando, pero no hay nada como una interfaz.

(Pero echar un vistazo a los alces, los Roles en no puede ser lo que está buscando.)

+0

+1 para Moose with Roles. Especialmente si vienes de un fondo/preferencia estricto de OO, hace lo que te gusta. –

+0

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

10

¡Pero por supuesto! Class::Interface.

Dicho esto, primero miro a Moose. Es fantástico.

+1

Sí, claro, CPAN tiene todo. ;-) – ijw

1

las interfaces son necesarios porque el idioma no es compatible con

interfaz de programación orientada a objetos es un concepto. No son necesarios debido a un problema técnico.

Cuestiones relacionadas