首 页 ┆ 源码下载 ┆ IT学院 ┆ 字体下载 ┆ 模板下载 ┆ 源码发布 ┆ 广告合作 ┆ 网站地图 ┆ 虚拟主机 ┆ 中文域名
► 设为首页
► 加入收藏
► 联系我们
源码下载 >> ASP源码 | PHP源码 | ASP.net源码 | JSP源码 | CGI源码 | VC/C++源码 | VB源码 | Delphi源码 | Flash源码
文章学院 >> 网络编程 | 网页设计 | 图形图象 | 数据库 | 服务器 | 网络媒体 | 网络安全 | 操作系统 | 办公软件 | 软件开发 | 黑客知识
字体下载 >> 精制字体 | 非英字体 | 艺术字体 | 著名字体 | 哥特式 | 简单字体 | 手写体 | 节假日 | 图案字体 | 精度像素 | 中文字体
模板下载 >> 企业门户 | 数码网络 | 休闲娱乐 | 影视音乐 | 旅游名胜 | 文化艺术 | 电子商务 | 个性展示 | 登陆导航 | Flash模板
►►您当前的位置:源码园 → IT学院 → 网络编程 → CGI专区 → 文章内容

Perl教学(13)Perl的面向对象编程之六

作者:郁郁小蝎  来源:中国站长学院  发布时间:2007-2-6 16:37:36
十一、子类方法的重载
继承的好处在于可以获得基类输出的方法的功能,而有时需要对基类的方法重载获得更具体或不同的功能。下面在Bean.pm类中加入方法printType(),代码如下:

sub printType {
my $class = shift @_;
print "The type of Bean is $class->{'Bean'} \n";
}
然后更新其@EXPORT数组来输出:
@EXPORT = qw ( setBeanType , printType );
现在来调用函数printType(),有三种调用方法:

$cup->Coffee::printType();
$cup->printType();
$cup->Bean::printType();
输出分别如下:

The type of Bean is Mixed
The type of Bean is Mixed
The type of Bean is Mixed
为什么都一样呢?因为在子类中没有定义函数printType(),所以实际均调用了基类中的方法。如果想使子类有其自己的printType()函数,必须在Coffee.pm类中加以定义:

#
# This routine prints the type of $class->{'Coffee'}
#
sub printType {
my $class = shift @_;
print "The type of Coffee is $class->{'Coffee'} \n";
}
然后更新其@EXPORT数组:
@EXPORT = qw(setImports, declareMain, closeMain, printType);
现在输出结果变成了:

The type of Coffee is Instant
The type of Coffee is Instant
The type of Bean is Mixed
现在只有当给定了Bean::时才调用基类的方法,否则直接调用子类的方法。
那么如果不知道基类名该如何调用基类方法呢?方法是使用伪类保留字SUPER::。在类方法内使用语法如:$this->SUPER::function(...argument list...); ,它将从@ISA列表中寻找。刚才的语句用SUPER::替换Bean::可以写为$cup->SUPER::printType(); ,其结果输出相同,为:

The type of Bean is Mixed
十二、Perl类和对象的一些注释
OOP的最大好处就是代码重用。OOP用数据封装来隐藏一些复杂的代码,Perl的包和模块通过my函数提供数据封装功能,但是Perl并不保证子类一定不会直接访问基类的变量,这确实减少了数据封装的好处,虽然这种动作是可以做到的,但却是个很坏的编程风格。
注意:
1、一定要通过方法来访问类变量。
2、一定不要从模块外部直接访问类变量。
当编写包时,应该保证方法所需的条件已具备或通过参数传递给它。在包内部,应保证对全局变量的访问只用通过方法传递的引用来访问。对于方法要使用的静态或全局数据,应该在基类中用local()来定义,子类通过调用基类来获取。有时,子类可能需要改变这种数据,这时,基类可能就不知道怎样去寻找新的数据,因此,这时最好定义对该数据的引用,子类和基类都通过引用来改变该数据。
最后,你将看到如下方式来使用对象和类:
use coffee::Bean;
这句语句的含义是“在@INC数组所有目录的Coffee子目录来寻找Bean.pm”。如果把Bean.pm移到./Coffee目录,上面的例子将用这一use语句来工作。这样的好处是有条理地组织类的代码。再如,下面的语句:
use Another::Sub::Menu;
意味着如下子目录树:
./Another/Sub/Menu.pm

[] [返回上一页] [打 印]
  • 上一篇文章:Perl教学(13)Perl的面向对象编程之五
  • 下一篇文章:Perl教学(14)Perl5的包和模块之一

  • 相关文章:
  • perl
  • 利用Perl列出系统环境变量清单范例
  • [组图]IIS实现ASP,CGI,PERL和PHP+MYSQL
  • Linux下安PHP,APACHE,MYSQL,PERL方法 4
  • Linux下安PHP,APACHE,MYSQL,PERL方法3
  • Linux下安PHP,APACHE,MYSQL,PERL方法2
  • Linux下安PHP,APACHE,MYSQL,PERL方法1
  • 基于Sendmail和Perl的邮件附件过滤系统(4)
  • 基于Sendmail和Perl的邮件附件过滤系统(3)
  • 基于Sendmail和Perl的邮件附件过滤系统(2)
  • 基于Sendmail和Perl的邮件附件过滤系统
  • 基于Sendmail和Perl的邮件附件过滤系统(1)
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 源码发布
Copyright © 2003-2009 Ymyasp.Com. All Rights Reserved .
备案序号:粤ICP备07029071号