解析Perl語言中Perl類的注釋和創建方法
本文和大家重點討論一下Perl類概念的相關內容,Perl5的語法可以創建Perl類,如果你已熟悉C++,那么大部分語法你已經掌握了。與Perl4不同的概念是用雙冒號(::)來標識基本Perl類和繼承Perl類(子Perl類)。
一、Perl類
再強調一下,一個Perl類是僅是一個包而已。當你看到Perl文檔中提到“Perl類”時,把它看作“包”就行了。Perl5的語法可以創建Perl類,如果你已熟悉C++,那么大部分語法你已經掌握了。與Perl4不同的概念是用雙冒號(::)來標識基本Perl類和繼承Perl類(子Perl類)。
面向對象的一個重要特性是繼承。Perl中的繼承特性與其它面向對象語言不完全一樣,它只繼承方法,你必須用自己的機制來實現數據的繼承。
因為每個Perl類是一個包,所以它有自己的名字空間及自己的符號名關聯數組(詳見第x章關聯數組),每個Perl類因而可以使用自己的獨立符號名集。與包的引用結合,可以用單引號(')操作符來定位Perl類中的變量,Perl類中成員的定位形式如:$class'$member。在Perl5中,可用雙冒號替代單引號來獲得引用,如:$class'$member與$class::$member相同。
二、創建Perl類。
本節介紹創建一個新Perl類的必要步驟。下面使用的例子是創建一個稱為Cocoa的簡單的Perl類,其功能是輸出一個簡單的Java應用的源碼的必要部分。放心,這個例子不需要你有Java的知識,但也不會使你成為Java專家,其目的是講述創建Perl類的概念。
首先,創建一個名為Cocoa.pm的包文件(擴展名pm是包的缺省擴展名,意為PerlModule)。一個模塊就是一個包,一個包就是一個Perl類。在做其它事之前,先加入“1;”這樣一行,當你增加其它行時,記住保留“1;”為最后一行。這是Perl包的必需條件,否則該包就不會被Perl處理。下面是該文件的基本結構。
- packageCocoa;
- #
- #Put"require"statementsinforallrequired,importedpackages
- #
- #
- #Justaddcodehere
- #
- 1;#terminatethepackagewiththerequired1;
接下來,我們往包里添加方法使之成為一個Perl類。第一個需添加的方法是new(),它是創建對象時必須被調用的,new()方法是對象的構造函數。
三、Perl類和對象的一些注釋
OOP的最大好處就是代碼重用。OOP用數據封裝來隱藏一些復雜的代碼,Perl的包和模塊通過my函數提供數據封裝功能,但是Perl并不保證子Perl類一定不會直接訪問基Perl類的變量,這確實減少了數據封裝的好處,雖然這種動作是可以做到的,但卻是個很壞的編程風格。
注意:
1、一定要通過方法來訪問Perl類變量。
2、一定不要從模塊外部直接訪問Perl類變量。
當編寫包時,應該保證方法所需的條件已具備或通過參數傳遞給它。在包內部,應保證對全局變量的訪問只用通過方法傳遞的引用來訪問。對于方法要使用的靜態或全局數據,應該在基Perl類中用local()來定義,子Perl類通過調用基Perl類來獲取。有時,子Perl類可能需要改變這種數據,這時,基Perl類可能就不知道怎樣去尋找新的數據,因此,這時最好定義對該數據的引用,子Perl類和基Perl類都通過引用來改變該數據。
最后,你將看到如下方式來使用對象和Perl類:
usecoffee::Bean;
這句語句的含義是“在@INC數組所有目錄的Coffee子目錄來尋找Bean.pm”。如果把Bean.pm移到./Coffee目錄,上面的例子將用這一use語句來工作。這樣的好處是有條理地組織Perl類的代碼。再如,下面的語句:
useAnother::Sub::Menu;
意味著如下子目錄樹:
./Another/Sub/Menu.pm
【編輯推薦】