免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3738 | 回复: 8
打印 上一主题 下一主题

请教高手——关于perl对象封装的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-30 16:07 |只看该作者 |倒序浏览
本帖最后由 perlearner 于 2011-11-30 16:11 编辑

求教各位高手,小弟初学perl,最近正在看《Intermediate Perl》,到
第十二章 Getting Our Deposit Back 一节开始思路有些混乱,从这节开始好像是讲对象setter返回值和对象的封装性的,但是看了几遍之后还是一头雾水,请各位老师指点一下有关perl 对象封装具体实现 的问题,根据代码对比和说明封装是怎样实现隐藏内部数据结构的,不胜感激,小弟谢了~

论坛徽章:
0
2 [报告]
发表于 2011-11-30 16:30 |只看该作者
这一节主要讲setter更新完成后返回什么好。
作者先列出4种返回值的情况。指出每种都有优劣。
然后分别讲解一下。
最后summary:
In summary: use what you want, be consistent if you can, but document it nonetheless (and don't change it after you've already released one version).

大意为:用你所用,但尽可能保持一致性,在文档中给个说明。一旦发布就别改了。

这一节应该思路很清晰的。

论坛徽章:
0
3 [报告]
发表于 2011-11-30 16:47 |只看该作者
回复 2# x9x9


    多谢,还有一个问题,对象的封装,怎样实现?麻烦您能通过代码举例说明一下吗?

论坛徽章:
0
4 [报告]
发表于 2011-11-30 21:03 |只看该作者
回复  x9x9


    多谢,还有一个问题,对象的封装,怎样实现?麻烦您能通过代码举例说明一下吗?
perlearner 发表于 2011-11-30 16:47



    这个话题太泛。看完那本书,多练习几遍,就明白了。

论坛徽章:
0
5 [报告]
发表于 2011-12-01 10:05 |只看该作者
Person.pm
  1. package Person;

  2. sub new
  3. {
  4.         my $class = shift;
  5.         my $self = {
  6.                 NAME => 'CU_fans',
  7.                 AGE  => 28
  8.                 };
  9.         bless $self, $class;
  10.        
  11.         return $self;
  12. }

  13. sub name
  14. {
  15.         my $self = shift;
  16.         if (@_)
  17.         {
  18.                 $self->{NAME} = shift;
  19.         }
  20.         return $self->{NAME};
  21. }

  22. sub age
  23. {
  24.         my $self = shift;
  25.         if (@_)
  26.         {
  27.                 $self->{AGE} = shift;
  28.         }
  29.         return $self->{AGE};
  30. }

  31. sub set_name
  32. {
  33.         my $self = shift;
  34.         $self->{NAME} = shift if (@_);
  35.        
  36.         return $self->{NAME};
  37. }

  38. 1;
复制代码
test.pl
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Person;

  5. my $person = Person->new();
  6. my $name = $person->name();
  7. print $name,"\n";

  8. my $age = $person->age();
  9. print $age,"\n";

  10. $person->set_name("test");
  11. my $name1 = $person->name();
  12. print $name1,"\n";
复制代码
简单演示的例子

论坛徽章:
0
6 [报告]
发表于 2011-12-01 10:27 |只看该作者
如果刚学 perl 的 OO,不如直接学 Moose 算了,结合 5.14 的 package block,很好
  1. #!/usr/bin/perl

  2. use 5.014;

  3. package Person {
  4.         use Moose;

  5.         has name => (is => 'rw', isa => 'Str');
  6.         has age  => (is => 'rw', isa => 'Int');
  7. }

  8. my $p = Person->new(name => 'Perl 5', age => '20');

  9. say $p->name;
  10. say $p->age;

  11. $p->name('Perl 6');
  12. $p->age('15');

  13. say $p->name;
  14. say $p->age;
复制代码

论坛徽章:
0
7 [报告]
发表于 2011-12-01 16:29 |只看该作者
回复 6# cobrawgl


    非常感谢cobrawgl,Cu_fans和仙子,小弟现在正在学习perl,到面向对象的部分的时候一直一头雾水,请问在perl中关于OO的部分应该怎样学习?请给位指点迷津,谢谢~

论坛徽章:
0
8 [报告]
发表于 2011-12-01 17:03 |只看该作者
回复 7# perlearner


   
有一篇最新的Perlootut翻译
http://wiki.perlchina.org/index.php?title=Perlootut

如果发现翻译的不好,和我联系吧
我正好需要点反馈

论坛徽章:
0
9 [报告]
发表于 2011-12-01 17:12 |只看该作者
回复 8# redicaps


    感谢楼上老师,我在研究一下。有问题请您不吝赐教~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP