X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FManual%2FConcepts.pod;h=e603e481508336f9a39b3487da8476bec1fca8f7;hb=31c248bf3c003492975ce3f29dbe81fc6f78f655;hp=86ad7d49261c64e9a6d61f3a9776ec3e5df00436;hpb=d68b26d154e972b359b1947f6875e4935eb4791e;p=gitmo%2FMoose.git diff --git a/lib/Moose/Manual/Concepts.pod b/lib/Moose/Manual/Concepts.pod index 86ad7d4..e603e48 100644 --- a/lib/Moose/Manual/Concepts.pod +++ b/lib/Moose/Manual/Concepts.pod @@ -1,15 +1,17 @@ +package Moose::Manual::Concepts; +# ABSTRACT: Moose OO concepts -=head1 NAME +__END__ -Moose::Manual::Concepts - Moose OO concepts +=pod =head1 MOOSE CONCEPTS (VS "OLD SCHOOL" Perl) In the past, you may not have thought too much about the difference between packages and classes, attributes and methods, constructors and -methods, etc. With Moose, these are all conceptually separate things, -even though under the hood they're implemented with plain old Perl. +methods, etc. With Moose, these are all conceptually separate, +though under the hood they're implemented with plain old Perl. Our meta-object protocol (aka MOP) provides well-defined introspection features for each of those concepts, and Moose in turn provides @@ -67,8 +69,8 @@ method names, B, a default value, and more. Attributes I methods, but defining them causes various accessor methods to be created. At a minimum, a normal attribute will -always have a reader accessor method. Many attributes also have other -methods, such as a writer method, clearer method, and predicate method +have a reader accessor method. Many attributes have other +methods, such as a writer method, a clearer method, or a predicate method ("has it been set?"). An attribute may also define B, which will create @@ -99,7 +101,7 @@ example, a User can login. sub login { ... } -=head2 Roles +=head2 Role A role is something that a class I. We also say that classes I roles. For example, a Machine class might do the Breakable @@ -115,8 +117,8 @@ A role I zero or more B. A role I zero or more B. -A required method is not implemented by the role. Required methods say -"to use this Role you must implement this method". +A required method is not implemented by the role. Required methods are a way +for the role to declare "to use this role you must implement this method". A role I zero or more B. @@ -135,14 +137,14 @@ Role are somewhat like mixins or interfaces in other OO languages. use Moose::Role; - has is_broken => ( + requires 'break'; + + has 'is_broken' => ( is => 'rw', isa => 'Bool', ); - requires 'break'; - - before 'break' => { + after 'break' => sub { my $self = shift; $self->is_broken(1); @@ -172,22 +174,22 @@ that gets called before or after (or around, etc.) some named method. =head2 Type -Moose also comes with a (miniature) type system. This allows you to -define types for attributes. Moose has a set of built-in types based -on what Perl provides, such as C, C, C, C, etc. +Moose also comes with a (miniature) type system. This allows you to define +types for attributes. Moose has a set of built-in types based on the types +Perl provides in its core, such as C, C, C, C, etc. In addition, every class name in your application can also be used as a type name. -Finally, you can define your own types, either as subtypes or entirely -new types, with their own constraints. For example, you could define a -type C, a subtype of C which only allows positive numbers. +Finally, you can define your own types with their own constraints. For +example, you could define a C type, a subtype of C which only +allows positive numbers. =head2 Delegation -Moose attributes provide declarative syntax for defining -delegations. A delegation is a method which calls some method on an -attribute to do its real work. +Moose attributes provide declarative syntax for defining delegations. A +delegation is a method which in turn calls some method on an attribute to do +its real work. =head2 Constructor @@ -265,7 +267,7 @@ probably never saw this before (at least in Perl 5). Hand-written parameter checking in your C method and accessors. With Moose, you define types declaratively, and then use them by name -in your attributes. +with your attributes. =item * Delegation @@ -305,10 +307,10 @@ like object construction and so on. =head1 META WHAT? -A metaclass is a class that describes classes. With Moose, every class -you define gets a C method. It returns a L -object, which has an introspection API that can tell you about the -class it represents. +A metaclass is a class that describes classes. With Moose, every class you +define gets a C method. The C method returns a +L object, which has an introspection API that can tell you +about the class it represents. my $meta = User->meta(); @@ -370,19 +372,6 @@ basic OO features. After that, check out the Role recipes. If you're really curious, go on and read the Meta and Extending recipes, but those are mostly there -for people who want to be Moose wizards and change how Moose works. - -=head1 AUTHOR - -Dave Rolsky Eautarch@urth.orgE - -=head1 COPYRIGHT AND LICENSE - -Copyright 2008-2009 by Infinity Interactive, Inc. - -L - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. +for people who want to be Moose wizards and extend Moose itself. =cut