
        *****************************************************
        *           GENERATED FILE, DO NOT EDIT             * 
        * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
        *****************************************************

This file was generated by po4a(7). Do not store it (in VCS, for example),
but store the PO file used as source file by po4a-translate. 

In fact, consider this as a binary, and the PO file as a regular .c file:
If the PO get lost, keeping this translation up-to-date will be harder.

=encoding UTF-8

=pod

=head1 NAME

Moose::Manual - 什么是 Moose？

=head1 VERSION

version 2.0401

=head1 什么是 Moose?

Moose 是 Perl 5 中的一个完整的对象系统。和大多数面向对象的语言相同（ Perl5 不是严格面向对象的)， Moose
提供关键字去声明属性、构造对象、继承等等。这些关键字可能是语言的一部分，不过你不需要关心它们是怎么实现的。

实际上我们不能随意创建新的关键字，但是我们可以提供类似于"语法糖"的方式来使它们用起来更像是关键字。使用
Moose，你便可以自如地进行面向对象的编程，而不需要知道 Perl 中复杂的绑定引用、访问方法等知识。

Moose 可以让你把更多的精力集中在结构的逻辑实现上，而不是语言实现上。Moose 式的类定义更像是非常简明的英语句子。

Moose 是基于 C<Class::MOP> 构建的，MOP 是一种元对象协议。通过
MOP，我们可以通过一种简单明了的方式去访问对象的属性、父类、子类以及方法等。MOP 抽象了符号表，类似 C<@ISA>等符号，MOP
也抽象了我们所擅长的一些 Perl 的技巧。(The MOP abstracts away the symbol table, looking at
C<@ISA> vars, and all the other crufty Perl tricks we know and
love(?). 这里不会翻译。)

Moose 以 大部分 Perl 6 的面向对象为基础，并且借鉴了 CLOS、Smalltalk等许多面向对象的语言优秀想法。

=head1 为什么用 Moose?

Moose 使你在 Perl 5 既简单又强大的使用面向对象的技术。它封装了 Perl 5中复杂的高级 API，使得你可以方便的使用。

如果你想要拓展 Moose 的话，它内置的强大的自省 API 和扩展供你使用。

=head1 一个例子

  package Person;

  use Moose;

  has 'first_name' => (
      is  => 'rw',
      isa => 'Str',
  );

  has 'last_name' => (
      is  => 'rw',
      isa => 'Str',
  );

  no Moose;
  __PACKAGE__->meta->make_immutable;

这是一个完整的可用的类定义。

  package User;

  use DateTime;
  use Moose;

  extends 'Person';

  has 'password' => (
      is  => 'rw',
      isa => 'Str',
  );

  has 'last_login' => (
      is      => 'rw',
      isa     => 'DateTime',
      handles => { 'date_of_last_login' => 'date' },
  );

  sub login {
      my $self = shift;
      my $pw   = shift;

      return 0 if $pw ne $self->password;

      $self->last_login( DateTime->now() );

      return 1;
  }

  no Moose;
  __PACKAGE__->meta->make_immutable;

我们将在其他文档中看到具体的代码注释。通过上面的代码，我们可以初步领略到 Moose 面向对象编程的简单与强大。

=head1 目录

本手册包含如下文档。

=over 4

=item L<Moose::Manual::Concepts>

介绍 Moose 的一些概念，并且与旧式的 Perl 5 OO 进行了对比。

=item L<Moose::Manual::Unsweetened>

通过两个例子来对比 Perl 5 旧式 OO 的实现与 Moose 式实现。

=item L<Moose::Manual::Classes>

如何在自己的类中使用 Moose 以及如何继承 Moose 类。

=item L<Moose::Manual::Attributes>

介绍 Moose 面向对象系统中的一个核心部分 -----属性，以及 Moose 中与属性相关的一些特性。

=item L<Moose::Manual::Delegation>

介绍委托属性以及如何使用委托属性。

=item L<Moose::Manual::Construction>

介绍如何在 Moose 中构造对象以及销毁对象。

=item L<Moose::Manual::MethodModifiers>

介绍方法修饰符，可以让你在执行某个方法前先执行某段特定的代码，或者包装一个方法。

=item L<Moose::Manual::Roles>

介绍 Moose 中的角色。Moose 的角色是一种正交继承类的行为方式。

=item L<Moose::Manual::Types>

Moose 中的类型系统，让你严格的定义各个属性中可以包含什么类型的值。

=item L<Moose::Manual::MOP>

Moose 的元 API 系统，可以让你访问类的父类、子类、方法和属性等。

=item L<Moose::Manual::MooseX>

这个文档介绍几个很有用的 Moose 拓展。这些拓展可以在 CPAN 上得到。

=item L<Moose::Manual::BestPractices>

Moose 有很多特性，并且每个事情不只只有一个实现方式。不过我们认为，选取一些简单的例子以帮助用户更好的学习和使用 Moose。

=item L<Moose::Manual::FAQ>

Moose 常见的问题与回答。

=item L<Moose::Manual::Contributing>

Interested in hacking on Moose? Read this.

=item L<Moose::Manual::Delta>

这个文档详细的介绍了具体的向后不兼容性以及其他重要的变化。

=back

=head1 还是不明白为什么要用 Moose？

如果你仍然不明白“为什么我要用 Moose？“，那么这个章节是为你准备的。

=over 4

=item 另一个面向对象的系统？

是的，我们知道有非常多非常多的方式在 Perl 5中实现面向对象的技术，它们有着各种各样的实现。Moose 与它们不同的是，Moose 不是 Perl
5 的新的一个面向对象系统，相反的，它拓展了现有的 Perl 5 面向对象系统。

Moose 是以 Perl 5 的元类系统 L<Class::Mop>为基础构建的。这表明，Moose
不仅可以更好的实现面向对象，而且更能提供强大的元类编程。

=item 这是认真的吗，还是只是一个实验用品？

Moose 是B<基于> Stevan 的 Perl 6 meta-model
的实验测试，但是，MooseB<不是>一个实验用品，是可以供正常的生产使用的。

=item Moose 可以应用在生产环境中吗？

是的，完全没有问题。

Moose 已经被很多人、很多公司应用在很多成功的案例中。Moose 在生产环境中很少出现或者根本不出现问题。我们认为 Moose
是高度稳定的而且我们会一直致力于保持它的稳定。

当然，这一切需要你来实现。如果你有任何问题或疑虑，欢迎发送邮件给 Stevan、moose@perl.org 邮件列表，或者到
irc.perl.org#moose 询问。

=item Perl 5 中的 Moose 和 Perl 6 的面向对象是一样的吗？

不是。虽然 Moose 是收到 Perl 6 的启发，但是它本身并不在 Perl 6 中。相反，它是一个 Perl 5 中的面向对象的系统。Stevan
厌倦了在 Perl 5 中写枯燥复杂的旧式代码以及对 Perl 6 的面向对象非常感兴趣，所以他写了 Moose 而不是转向 Ruby 阵营。

=item Wait, I<post> modern, I thought it was just I<modern>?

Larry Wall 1999年的题为“Perl, the first postmodern computer
language“的演讲中说过他认为很酷的东西便把它加到 Perl 中，而没有用的东西就坚决不引入到 Perl 中。 Stevan 认同这个观点，所以
Moose 借来了 Perl 6 的面向对象系统，并且从
CLOS(LISP)，Smalltalk，Java，BETA，OCaml，Ruby等语言中借来了许多很酷的东西，而不是很喜欢的部分却一点都没有引入到
Moose 中。因此，有了现在的 Moose。

 

=back

=head1 作者

Moose 是由许多志愿者共同努力的结果。具体的请参看 L<Moose/CABAL>和L<Moose/CONTRIBUTORS>。
译者：xiaomo (wxm4ever@gmail.com)。

=head1 版权和许可

This software is copyright (c) 2011 by Infinity Interactive, Inc..

这是自由软件，您可以重新分配或者根据 Perl 5 的编程语言系统本身相同的条款进行修改。

