Perl ma funkcje OOP, ale są one rzadko używane. W jaki sposób tworzysz i używasz obiektów Perla za pomocą metod i właściwości?Jak tworzyć obiekty w Perlu?
Odpowiedz
Powinieneś koniecznie spojrzeć na 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);
}
Łoś daje (między innymi) konstruktor, metody dostępu i sprawdzanie typu za darmo!
Więc w kodzie można:
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.
Dobrym punktem wyjścia jest Moose::Manual
i Moose::Cookbook
Jeśli wystarczy podstawowe rzeczy można również użyć Mouse
który nie jest tak kompletny, ale bez większość czasu kompilacji.
Oto przewodnik: http://www.tutorialspoint.com/perl/perl_oo_perl.htm
Edit: Racja, jestem usunięcie skopiowany kod.
Oficjalny tutorial na temat CPAN site jest dobry.
Istnieje również dobry artykuł o nazwie Camel POOP w CodeProject.
Należy pamiętać, że wszystkie samouczki perldoc są również dostępne w linii poleceń, jeśli masz normalną instalację Perla: perldoc perltoot dla tego. (Zobacz także perldoc perlboot, aby uzyskać więcej zabawy z obiektami w Perlu.) – Telemachus
Obecnie używam Object::InsideOut ilekroć chcę obiektów, jest całkiem niezły i daje wiele funkcji w stosunku do standardowych obiektów hash błogosławionych. Powiedziawszy to, gdybym rozpoczynał nowy projekt, poważnie spojrzałbym na Łosia.
Choć dobrze jest zapoznać się z oficjalnej dokumentacji Perl, bym NIE polecić próbuje roli własne ramy obiektu lub obiektów budowlanych za pomocą skrótów, jego daleko kuszące, aby wziąć łatwą drogę i „szczyt” bezpośrednio do zmienne "prywatne" obiektów całkowicie przerywające enkapsulację, to powróci, by ugryźć cię, gdy chcesz refaktoryzować obiekt.
Obiekty perla NIE są po prostu błogosławionymi haszami. Są błogosławieni REFERENCJE. Mogą być (i najczęściej są) pobłogosławionymi hasłami, ale równie dobrze mogą być pobłogosławione jako odniesienia skalarne lub tablicowe.
Moose, zdecydowanie.
package Person;
use Moose;
has age => (isa => Int, is => 'rw');
has name => (isa => Str, is => 'rw');
1;
Natychmiast masz za darmo nową metodę() i metody akcesorów dla atrybutów, które właśnie zdefiniowałeś z "has". Możesz więc powiedzieć:
my $person = Person->new();
$person->age(34);
$person->name('Mike');
print $person->name, "\n";
i tak dalej. Co więcej, twoje metody dostępu są sprawdzane za darmo (możesz zdefiniować własne typy, a także standardowe). Plus dostajesz "rozszerzenia" dla podklasy, "z" dla ról/cech i wszelkiego rodzaju innych świetnych rzeczy, które pozwalają ci zająć się prawdziwą pracą pisania dobrego, niezawodnie konserwowalnego kodu OO.
TMTOWTI, ale ten działa.
Na jednej nodze każda klasa to paczka; ustalasz dziedziczenie (wiele, jeśli chcesz), ustawiając zmienną pakietu @ISA (najlepiej w czasie kompilacji); tworzysz obiekt z istniejącego fragmentu danych (często, ale nie zawsze, anonimowy skrót używany do przechowywania zmiennych instancji) z bless (REFERENCE [, CLASSNAME]); możesz wywołać metody obiektowe, takie jak $ obj-> nazwa_metody (@ARGS) i metody klasy, takie jak "CLASSNAME" -> nazwa metody (@ARGS). Kolejność sortowania wielu metod dziedziczenia można zmienić przy użyciu mro.
Ponieważ jest to nieco minimalistyczne i nie wymusza enkapsulacji, istnieje wiele różnych modułów, które zapewniają więcej lub inną funkcjonalność.
Bardzo polecam rzucić okiem na Łosia, jeśli chcesz zrobić OO w Perlu. Jednak nie jest to zbyt przydatne, jeśli nie rozumiesz, co oznacza OO w Perlu. Aby lepiej zrozumieć, jak działa Perl OO pod maską, napisałem na moim blogu przegląd: http://augustinalareina.wordpress.com/2010/06/06/an-introduction-to-object-oriented-perl/
Z punktu widzenia struktury danych obiekt jest odniesieniem z kilkoma dodatkowymi funkcjami. Interpreter wie, że traktuje te specjalne odniesienia jako Obiekty, ponieważ zostały "pobłogosławione" słowem kluczowym "błogosławić". Błogosławione odniesienia zawierają flagę wskazującą, że są Obiektem. Zasadniczo oznacza to, że możesz na nich definiować i wywoływać metody.
Na przykład, jeśli utworzyłeś podstawowy element hashref, to nie zadziała: $ hashref-> foo();
Ale jeśli utworzysz błogosławiony haszysz (aka Object), działa to: $ blessed_hashref-> foo();
Łoś jest doskonałym modułem dla OOP w Perlu, ponieważ tworzy egzekwowalną warstwę OO I automagicznie obsługuje metody accessor, więc nie musisz definiować grupy pobierających i ustawiających. Jeśli jesteś zainteresowany użyciem Devel :: Peak, aby zobaczyć, jak interpreter Perl przechowuje obiekty, kliknij link do wpisu blogu, który napisałem powyżej.
- 1. Jak dynamicznie tworzyć obiekty klas?
- 2. Jak tworzyć obiekty w locie w python?
- 3. Potrafię tworzyć uchwyty plików do ciągów w Perlu 5, jak mam to zrobić w Perlu 6?
- 4. Jak tworzyć obiekty wbudowane z właściwościami w Pythonie?
- 5. Jak tworzyć obiekty customUI w Xcode 4 dla iPhone'a
- 6. Czy mogę tworzyć aplikacje dla Androida w Perlu?
- 7. Jak tworzyć obiekty za pomocą statycznej metody fabularnej?
- 8. Jak zawijać ciąg tekstowy w Perlu?
- 9. d3.js tworzyć obiekty na górze każdego innego
- 10. Jak mogę tworzyć miniatury stron internetowych przy użyciu silnika układu w Perlu?
- 11. Tworzenie tablic dynamicznie w Perlu
- 12. Jak tworzyć obiekty testowe z zagnieżdżonymi atrybutami za pomocą FactoryGirl w Ruby on Rails?
- 13. Niezmienne obiekty w PHP?
- 14. Jak tworzyć podtypy w Moose?
- 15. Jak tworzyć kategorie w Railsach
- 16. Jak tworzyć asercje w R?
- 17. Jak połączyć zmienne w Perlu?
- 18. Jak formatować daty w Perlu?
- 19. Jak zatrzymać wejście w Perlu?
- 20. Jak serializować zamknięcie w Perlu?
- 21. Jak zwolnić pamięć w Perlu?
- 22. Obiekty strukturalne w pythonie
- 23. Jak zorganizować program CGI w Perlu?
- 24. eksport vs export_ok w perlu
- 25. Jak tworzyć klejnoty?
- 26. Jak tworzyć statystyki dźwigni?
- 27. Jak klonować obiekty w NHibernate?
- 28. Jak klonować obiekty w Scali?
- 29. Jak przekazywać obiekty w EventArgs
- 30. Pisanie makro w Perlu
lub Mysz, jeśli potrzebujesz tylko prostych funkcji Moose –
czy istnieje dobry tutorial dla całkowicie początkujących na Moose? dzięki – melaos
@ Alexandr, dzięki zaktualizował odpowiedź. @melaos Redagowałem odpowiedź, aby podać linki – Pat