2008-08-11 4 views

답변

22

Moose을 꼭보아야합니다.

package Point; 
use Moose; # automatically turns on strict and warnings 

has 'x' => (is => 'rw', isa => 'Int'); 
has 'y' => (is => 'rw', isa => 'Int'); 

sub clear { 
    my $self = shift; 
    $self->x(0); 
    $self->y(0); 
} 

무스는 다른 것들 중에서도 생성자, 접근 자 메서드 및 유형 검사를 무료로 제공합니다!

그래서 당신이 할 수있는 코드에서 :

my $p = Point->new({x=>10 , y=>20}); # Free constructor 
$p->x(15);  # Free setter 
print $p->x(); # Free getter 
$p->clear(); 
$p->x(15.5); # FAILS! Free type check. 

좋은 출발점이 Moose::Manual

그냥 완전하지 않다 당신은 또한 Mouse를 사용할 수있는 기본 재료가 필요한 경우 Moose::Cookbook하지만,없이 대부분의 컴파일 타임 패널티.

+0

또는 Mouse를 입력하십시오. –

+0

무스에 완전히 새로운 초보자를위한 좋은 자습서가 있습니까? 감사합니다 – melaos

+0

@ Alexandr, 감사합니다 답변을 업데이 트되었습니다. @melaos 나는 링크를 제공하기 위해 대답을 편집했습니다 – Pat

0

여기 가이드입니다.

2

CPAN site의 공식 자습서가 좋습니다.

CodeProject에는 Camel POOP이라는 좋은 문서가 있습니다.

+1

정상적인 Perl 설치가있는 경우 명령 행에서 모든 perldoc 자습서를 사용할 수 있습니다 (perldoc perltoot). (Perl의 오브젝트에 대해 더 많은 재미를 얻으려면 perldoc perlboot를 참조하십시오.) 무스의 단순한 기능이 필요한 경우 – Telemachus

4

현재 객체를 원할 때마다 Object::InsideOut을 사용하며, 표준 축복 된 해시 객체보다 많은 기능을 제공합니다. 그런데, 내가 새 프로젝트를 시작한다면 나는 무스를 진지하게 바라 볼 것입니다.

는 공식 PERL 설명서를 참조하는 것이 좋다 동안, 나는 , 해시를 사용하여 역할에 자신의 개체 프레임 워크를 시도, 또는 건물 객체 권장하지 것입니다 그것의 훨씬 쉬운 길과 "피크"직접에 걸릴 유혹에 객체 "private"변수가 캡슐화를 완전히 깨뜨린다면 객체를 리팩토링하려는 경우 다시 물러납니다.

4

Perl 객체는 축복받은 해시가 아닙니다. 그들은 축복받은 참고서입니다. 축복 된 해시 참조가 될 수 있지만 가장 자주 축복 된 스칼라 또는 배열 참조가 될 수 있습니다.

7

Moose입니다.

package Person; 
use Moose; 
has age => (isa => Int, is => 'rw'); 
has name => (isa => Str, is => 'rw'); 
1; 

즉시 'has'로 정의한 속성에 대해 new() 메소드 및 접근 자 메소드가 있어야합니다. 그래서, 당신은 말할 수 있습니다 :

my $person = Person->new(); 
$person->age(34); 
$person->name('Mike'); 
print $person->name, "\n"; 

등등. 그뿐 아니라 접근 메소드가 무료로 유형 검사됩니다. 표준 객체뿐만 아니라 자신의 유형도 정의 할 수 있습니다. 또한 서브 클래 싱을위한 '확장', 역할/특성에 대한 '함께', 그리고 강력하고 유지 보수가 잘되는 OO 코드를 작성하는 실제 작업에 착수 할 수있는 다른 모든 멋진 것들을 얻을 수 있습니다.

TMTOWTDI,하지만이 중 하나가 작동합니다.

1

한발에 각 클래스는 패키지입니다. 패키지 변수를 @ISA으로 설정하여 (원하는 경우 다중) 상속을 설정합니다 (컴파일시 가능). bless (REFERENCE [, CLASSNAME]); 기존 데이터 조각 (종종 인스턴스 변수를 저장하는 데 사용되는 익명 해시 인 경우가 많지만 항상 그런 것은 아님)에서 개체를 만듭니다. $ obj-> methodname (@ARGS)과 같은 메소드와 "CLASSNAME"-> methodname (@ARGS)와 같은 클래스 메소드를 호출합니다. mro을 사용하여 다중 상속 방법 해결 순서를 변경할 수 있습니다.

이것은 다소 단순하고 캡슐화를 강제하지 않기 때문에 더 많거나 다른 기능을 제공하는 많은 다른 모듈이 있습니다.

2

Perl에서 OO를하고 싶다면 Moose를 사용하는 것이 좋습니다. 그러나 Perl의 객체 지향 (OO)이 무엇인지 이해하지 못한다면 그다지 유용하지는 않습니다. Perl OO가 어떻게 작동하는지 더 잘 이해하기 위해 필자는 블로그에 대한 개요를 작성했습니다. http://augustinalareina.wordpress.com/2010/06/06/an-introduction-to-object-oriented-perl/

데이터 구조 측면에서 보았을 때 객체는 몇 가지 추가 기능이있는 참조입니다. 인터프리터는 "bless"키워드로 "축복"되었기 때문에 이러한 특수 참조를 객체로 취급합니다. 축복받은 참조에는 그것이 객체임을 나타내는 플래그가 들어 있습니다. 본질적으로 이는 메소드를 정의하고 호출 할 수 있음을 의미합니다.

예를 들어, 기본 해시 참조를 만든 경우에는 작동하지 않습니다. $ hashref-> foo();

축복받은 해시 레퍼런스 (객체라고도 함)를 만들면 다음과 같이 작동합니다. $ blessed_hashref-> foo();

Moose는 시행 가능한 OO 레이어를 만들고 자동으로 접근 자 메서드를 처리하므로 getter 및 setter를 정의 할 필요가 없으므로 Perl에서 OOP를위한 훌륭한 모듈입니다. Devel :: Peak를 사용하여 Perl 인터프리터가 객체를 저장하는 방법을 확인하려면 위에 게시 한 블로그 항목에 대한 링크를 참조하십시오.

관련 문제