***************************************************** * 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 构建的,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 的一些概念,并且与旧式的 Perl 5 OO 进行了对比。 =item L 通过两个例子来对比 Perl 5 旧式 OO 的实现与 Moose 式实现。 =item L 如何在自己的类中使用 Moose 以及如何继承 Moose 类。 =item L 介绍 Moose 面向对象系统中的一个核心部分 -----属性,以及 Moose 中与属性相关的一些特性。 =item L 介绍委托属性以及如何使用委托属性。 =item L 介绍如何在 Moose 中构造对象以及销毁对象。 =item L 介绍方法修饰符,可以让你在执行某个方法前先执行某段特定的代码,或者包装一个方法。 =item L 介绍 Moose 中的角色。Moose 的角色是一种正交继承类的行为方式。 =item L Moose 中的类型系统,让你严格的定义各个属性中可以包含什么类型的值。 =item L Moose 的元 API 系统,可以让你访问类的父类、子类、方法和属性等。 =item L 这个文档介绍几个很有用的 Moose 拓展。这些拓展可以在 CPAN 上得到。 =item L Moose 有很多特性,并且每个事情不只只有一个实现方式。不过我们认为,选取一些简单的例子以帮助用户更好的学习和使用 Moose。 =item L Moose 常见的问题与回答。 =item L Interested in hacking on Moose? Read this. =item L 这个文档详细的介绍了具体的向后不兼容性以及其他重要的变化。 =back =head1 还是不明白为什么要用 Moose? 如果你仍然不明白“为什么我要用 Moose?“,那么这个章节是为你准备的。 =over 4 =item 另一个面向对象的系统? 是的,我们知道有非常多非常多的方式在 Perl 5中实现面向对象的技术,它们有着各种各样的实现。Moose 与它们不同的是,Moose 不是 Perl 5 的新的一个面向对象系统,相反的,它拓展了现有的 Perl 5 面向对象系统。 Moose 是以 Perl 5 的元类系统 L为基础构建的。这表明,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 modern, I thought it was just I? 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和L。 译者:xiaomo (wxm4ever@gmail.com)。 =head1 版权和许可 This software is copyright (c) 2011 by Infinity Interactive, Inc.. 这是自由软件,您可以重新分配或者根据 Perl 5 的编程语言系统本身相同的条款进行修改。