Perl에는 OOP 기능이 있지만 다소 사용되는 경우는 거의 없습니다. 메소드와 속성을 사용하여 Perl 객체를 만들고 사용하는 방법은 무엇입니까? http://www.tutorialspoint.com/perl/perl_oo_perl.htm어떻게 펄에서 객체를 만드나요?
편집 : 좋은 지적, 내가 복사 한 코드를 제거하고 있습니다
Perl에는 OOP 기능이 있지만 다소 사용되는 경우는 거의 없습니다. 메소드와 속성을 사용하여 Perl 객체를 만들고 사용하는 방법은 무엇입니까? http://www.tutorialspoint.com/perl/perl_oo_perl.htm어떻게 펄에서 객체를 만드나요?
편집 : 좋은 지적, 내가 복사 한 코드를 제거하고 있습니다
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
하지만,없이 대부분의 컴파일 타임 패널티.
여기 가이드입니다.
CPAN site의 공식 자습서가 좋습니다.
CodeProject에는 Camel POOP이라는 좋은 문서가 있습니다.
정상적인 Perl 설치가있는 경우 명령 행에서 모든 perldoc 자습서를 사용할 수 있습니다 (perldoc perltoot). (Perl의 오브젝트에 대해 더 많은 재미를 얻으려면 perldoc perlboot를 참조하십시오.) 무스의 단순한 기능이 필요한 경우 – Telemachus
현재 객체를 원할 때마다 Object::InsideOut을 사용하며, 표준 축복 된 해시 객체보다 많은 기능을 제공합니다. 그런데, 내가 새 프로젝트를 시작한다면 나는 무스를 진지하게 바라 볼 것입니다.
는 공식 PERL 설명서를 참조하는 것이 좋다 동안, 나는 , 해시를 사용하여 역할에 자신의 개체 프레임 워크를 시도, 또는 건물 객체 권장하지 것입니다 그것의 훨씬 쉬운 길과 "피크"직접에 걸릴 유혹에 객체 "private"변수가 캡슐화를 완전히 깨뜨린다면 객체를 리팩토링하려는 경우 다시 물러납니다.
Perl 객체는 축복받은 해시가 아닙니다. 그들은 축복받은 참고서입니다. 축복 된 해시 참조가 될 수 있지만 가장 자주 축복 된 스칼라 또는 배열 참조가 될 수 있습니다.
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,하지만이 중 하나가 작동합니다.
한발에 각 클래스는 패키지입니다. 패키지 변수를 @ISA으로 설정하여 (원하는 경우 다중) 상속을 설정합니다 (컴파일시 가능). bless (REFERENCE [, CLASSNAME]); 기존 데이터 조각 (종종 인스턴스 변수를 저장하는 데 사용되는 익명 해시 인 경우가 많지만 항상 그런 것은 아님)에서 개체를 만듭니다. $ obj-> methodname (@ARGS)과 같은 메소드와 "CLASSNAME"-> methodname (@ARGS)와 같은 클래스 메소드를 호출합니다. mro을 사용하여 다중 상속 방법 해결 순서를 변경할 수 있습니다.
이것은 다소 단순하고 캡슐화를 강제하지 않기 때문에 더 많거나 다른 기능을 제공하는 많은 다른 모듈이 있습니다.
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 인터프리터가 객체를 저장하는 방법을 확인하려면 위에 게시 한 블로그 항목에 대한 링크를 참조하십시오.
또는 Mouse를 입력하십시오. –
무스에 완전히 새로운 초보자를위한 좋은 자습서가 있습니까? 감사합니다 – melaos
@ Alexandr, 감사합니다 답변을 업데이 트되었습니다. @melaos 나는 링크를 제공하기 위해 대답을 편집했습니다 – Pat