深入剖析Perl面向对象编程

开发 架构
你对Perl面向对象编程的概念是否熟悉,这里向大家简单介绍一下如何使用Perl的Perl面向对象编程(OOP)特性及如何构建对象,还包括继承、方法重载和数据封装等内容。

本文和大家重点讨论一下Perl面向对象编程(OOP)的概念,主要包括模块简介,Perl中的类,创建类,构造函数,方法,方法的输出和方法的调用等内容,相信通过本文的学习你对Perl面向对象的概念一定会有深刻的认识。

Perl面向对象编程(OOP)

介绍如何使用Perl的Perl面向对象编程(OOP)特性及如何构建对象,还包括继承、方法重载和数据封装等内容。

一、模块简介

模块(module)就是Perl包(pachage)。Perl中的对象基于对包中数据项的引用。(引用见第x章引用)。
详见http://www.nease.net/tppmsgs/msgs0.htm#28的perlmod和perlobj。
在用其他语言进行Perl面向对象编程时,先声明一个类然后创建该类的对象(实例),特定类任何对象的行为方式是相同的,由类方法确定,能够通过定义新类或从现存类继承来创建类。已熟悉Perl面向对象编程的人能够在此碰到许多熟悉的术语。Perl一直是个Perl面向对象的语言,在Perl5中,语法略有变动,更规范化了对象的使用。

下面三个定义对理解对象、类和方法在Perl中如何工作至关重要。
◆类是个Perl包,其中含提供对象方法的类。
◆方法是个Perl子程式,类名是其***个参数。
◆对象是对类中数据项的引用。.

二、Perl中的类

再强调一下,一个Perl类是仅是个包而已。当您看到Perl文档中提到“类”时,把他看作“包”就行了。Perl5的语法能够创建类,假如您已熟悉C,那么大部分语法您已掌控了。和Perl4不同的概念是用双冒号(::)来标识基本类和继承类(子类)。
Perl面向对象的一个重要特性是继承。Perl中的继承特性和其他Perl面向对象语言不完全相同,他只继承方法,您必须用自己的机制来实现数据的继承。
因为每个类是个包,所以他有自己的名字空间及自己的符号名关联数组(详见第x章关联数组),每个类因而能够使用自己的单独符号名集。和包的引用结合,能够用单引号(\\')操作符来定位类中的变量,类中成员的定位形式如:$class\\'$member。在Perl5中,可用双冒号替代单引号来获得引用,如:$class\\'$member和$class::$member相同。.

三、创建类

本节介绍创建一个新类的必要步骤。下面使用的例子是创建一个称为Cocoa的简单的类,其功能是输出一个简单的Java应用的源码的必要部分。放心,这个例子无需您有Java的知识,但也不会使您成为Java专家,其目的是讲述创建类的概念。
首先,创建一个名为Cocoa.pm的包文档(扩展名pm是包的缺省扩展名,意为PerlModule)。一个模块就是个包,一个包就是个类。在做其他事之前,先加入“1;”这样一行,当您增加其他行时,记住保留“1;”为***一行。这是Perl包的必需条件,否则该包就不会被Perl处理。.

四、构造函数

Perl面向对象中构造函数是类的子程式,他返回和类名相关的一个引用。将类名和引用相结合称为“祝福”一个对象,因为建立该结合的函数名为bless(),其语法为:
blessYeReference[,classname]
YeReference是对被“祝福”的对象的引用,classname是可选项,指定对象获取方法的包名,其缺省值为当前包名。
创建一个构建函数的方法为返回已和该类结合的内部结构的引用。如..

  1. subnew{  
  2. my$this={};#Createananonymoushash,and#selfpointstoit.  
  3. bless$this;#ConnectthehashtothepackageCocoa.  
  4. return$this;#Returnthereferencetothehash.  
  5. }  
  6.  

 五、方法

Perl类的方法只但是是个Perl子程式而已,也即通常所说的成员函数。Perl面向对象中Perl的方法定义不提供任何特别语法,但规定方法的***个参数为对象或其被引用的包。Perl有两种方法:静态方法和虚方法。
静态方法***个参数为类名,虚方法***个参数为对象的引用。方法处理***个参数的方式决定了他是静态的还是虚的。静态方法一般忽略掉***个参数,因为他们已知道自己在哪个类了,构造函数即静态方法。虚方法通常首先把***个参数shift到变量self或this中,然后将该值作普通的引用使用。.

六、方法的输出

假如您现在想引用Cocoa.pm包,将会得到编译错误说未找到方法,这是因为Cocoa.pm的方法还没有输出。输出方法需要Exporter模块,在包的开始部分加上下列两行:
requireExporter;
@ISA=qw(Exporter);
Perl面向对象中Perl类的继承是通过@ISA数组实现的。@ISA数组无需在任何包中定义,然而,一旦他被定义,Perl就把他看作目录名的特别数组。他和@INC数组类似,@INC是包含文档的寻找路径。@ISA数组含有类(包)名,当一个方法在当前包中未找到时就到@ISA中的包去寻找。@ISA中还含有当前类继承的基类名。

类中调用的任何方法必须属于同一个类或@ISA数组定义的基类。假如一个方法在@ISA数组中未找到,Perl就到AUTOLOAD()子程式中寻找,这个可选的子程式在当前包中用sub定义。若使用AUTOLOAD子程式,必须用useAutoload;语句调用autoload.pm包。AUTOLOAD子程式尝试从已安装的Perl库中装载调用的方法。假如AUTOLOAD也失败了,Perl再到UNIVERSAL类做***一次尝试,假如仍失败,Perl就生成关于该无法解析函数的错误。..

七、方法的调用

调用一个对象的方法有两种方法,一是通过该象的引用(虚方法),一是直接使用类名(静态方法)。。

【编辑推荐】

  1. Perl面向对象编程的两种实现和比较
  2. 解析三大Perl变量用法
  3. Perl语言中的五大变量类型
  4. 揭秘Perl变量中Perl纯变量用法
  5. Perl程序设计中的Perl用户函数(子程序)

 

责任编辑:佚名 来源: csdn.net
相关推荐

2010-07-20 09:33:14

Perl方法

2010-07-20 13:44:02

Perl方法

2010-07-16 17:23:57

Perl面向对象编程

2010-07-13 17:18:29

Perl面向对象编程

2010-07-20 09:23:30

Perl构造函数

2010-07-13 14:38:33

Perl面向对象编程

2011-06-28 14:11:33

JavaScript

2010-07-20 09:13:55

Perl面向对象编程

2010-06-18 10:48:05

UML面向对象软件开发

2010-07-09 13:55:53

UML面向对象建模

2010-07-13 14:54:15

Perl面向对象编程

2010-07-13 10:47:18

Perl面向对象

2023-11-02 07:55:31

Python对象编程

2010-07-14 10:59:15

Perl线程

2010-06-12 14:35:46

UML对象图

2011-07-11 17:38:42

JAVA

2024-01-03 13:38:00

C++面向对象编程OOP

2010-02-04 13:50:56

ibmdw云计算

2010-02-02 13:22:06

Python面向对象

2010-07-19 16:03:12

Perl变量类型
点赞
收藏

51CTO技术栈公众号