Perl教學(13)Perl的面向對象編程之一
發表時間:2024-06-11 來源:明輝站整理相關軟件相關文章人氣:
[摘要]本章介紹如何使用Perl的面向對象編程(OOP)特性及如何構建對象,還包括繼承、方法重載和數據封裝等內容。一、模塊簡介模塊(module)就是Perl包(pachage)。Perl中的對象基于對包中數據項的引用。(引用見第x章引用)。詳見http://www.nease.net/tppmsgs/m...
本章介紹如何使用Perl的面向對象編程(OOP)特性及如何構建對象,還包括繼承、方法重載和數據封裝等內容。
一、模塊簡介
模塊(module)就是Perl包(pachage)。Perl中的對象基于對包中數據項的引用。(引用見第x章引用)。
詳見http://www.nease.net/tppmsgs/msgs0.htm#28的perlmod和perlobj。
在用其它語言進行面向對象編程時,先聲明一個類然后創建該類的對象(實例),特定類所有對象的行為方式是相同的,由類方法確定,可以通過定義新類或從現存類繼承來創建類。已熟悉面向對象編程的人可以在此遇到許多熟悉的術語。Perl一直是一個面向對象的語言,在Perl5中,語法略有變動,更規范化了對象的使用。
下面三個定義對理解對象、類和方法在Perl中如何工作至關重要。
.類是一個Perl包,其中含提供對象方法的類。
.方法是一個Perl子程序,類名是其第一個參數。
.對象是對類中數據項的引用。
二、Perl中的類
再強調一下,一個Perl類是僅是一個包而已。當你看到Perl文檔中提到“類”時,把它看作“包”就行了。Perl5的語法可以創建類,如果你已熟悉C++,那么大部分語法你已經掌握了。與Perl4不同的概念是用雙冒號(::)來標識基本類和繼承類(子類)。
面向對象的一個重要特性是繼承。Perl中的繼承特性與其它面向對象語言不完全一樣,它只繼承方法,你必須用自己的機制來實現數據的繼承。
因為每個類是一個包,所以它有自己的名字空間及自己的符號名關聯數組(詳見第x章關聯數組),每個類因而可以使用自己的獨立符號名集。與包的引用結合,可以用單引號(')操作符來定位類中的變量,類中成員的定位形式如:$class'$member。在Perl5中,可用雙冒號替代單引號來獲得引用,如:$class'$member與$class::$member相同。
三、創建類。
本節介紹創建一個新類的必要步驟。下面使用的例子是創建一個稱為Cocoa的簡單的類,其功能是輸出一個簡單的Java應用的源碼的必要部分。放心,這個例子不需要你有Java的知識,但也不會使你成為Java專家,其目的是講述創建類的概念。
首先,創建一個名為Cocoa.pm的包文件(擴展名pm是包的缺省擴展名,意為Perl Module)。一個模塊就是一個包,一個包就是一個類。在做其它事之前,先加入“1;”這樣一行,當你增加其它行時,記住保留“1;”為最后一行。這是Perl包的必需條件,否則該包就不會被Perl處理。下面是該文件的基本結構。
package Cocoa;
#
# Put "require" statements in for all required,imported packages
#
#
# Just add code here
#
1; # terminate the package with the required 1;
接下來,我們往包里添加方法使之成為一個類。第一個需添加的方法是new(),它是創建對象時必須被調用的,new()方法是對象的構造函數。
四、構造函數
構造函數是類的子程序,它返回與類名相關的一個引用。將類名與引用相結合稱為“祝福”一個對象,因為建立該結合的函數名為bless(),其語法為:
bless YeReference [,classname]
YeReference是對被“祝福”的對象的引用,classname是可選項,指定對象獲取方法的包名,其缺省值為當前包名。
創建一個構建函數的方法為返回已與該類結合的內部結構的引用,如:
sub new {
my $this = {}; # Create an anonymous hash, and #self points to it.
bless $this; # Connect the hash to the package Cocoa.
return $this; # Return the reference to the hash.
}
1;
{}創建一個對不含鍵/值對的哈希表(即關聯數組)的引用,返回值被賦給局域變量$this。函數bless()取出該引用,告訴對象它引用的是Cocoa,最后返回該引用。函數的返回值現在指向這個匿名哈希表。
從new()函數返回后,$this引用被銷毀,但調用函數保存了對該哈希表的引用,因此該哈希表的引用數不會為零,從而使Perl在內存中保存該哈希表。創建對象可如下調用:
$cup = new Cocoa;