成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解析Perl面向對象編程的兩種實現方式

開發 架構
本文向大家簡單介紹一下Perl面向對象編程的實現方式,在Perl中兩種主流的面向對象編程的實現方式,基于匿名哈希表的實現和基于數組的實現。

本文和大家重點討論一下Perl面向對象編程的兩種實現和比較,這里比較了在Perl中兩種主流的面向對象編程的實現方式,并且深刻地剖析了兩種實現的技術內幕,并且提供了可供讀者直接使用的代碼和模塊示例。

Perl面向對象編程的兩種實現和比較

本文比較了在Perl中兩種主流的面向對象編程的實現方式,基于匿名哈希表的實現和基于數組的實現。深刻地剖析了兩種實現的技術內幕,并且提供了可供讀者直接使用的代碼和模塊示例。在文章的***作者比較了兩種實現方式的優劣,并對讀者給出了在實際工作中選擇何種方式實現面向對象編程的建議。

背景

我們常??梢詮能浖こ痰臅臀恼轮校蛘唔椖拷浝淼目谥?,聽到面向對象編程這樣的字眼。與大多數時髦的技術用詞不同,面向對象編程的確可以為我們的軟件設計和開放工作帶來本質性的變化。Perl作為一種成熟的“面向過程”的語言,同樣也提供了對于面向對象編程的支持。

一個好的“面向對象“的設計不僅是以數據為中心,它還盡力地封裝并且隱藏了實際的數據結構,而且只對外界開放有限的,具備良好文檔的接口。在下文中,我們將看到如何使用Perl語言的特性來實現這些面向對象設計的優點的。

Perl中有兩種不同地面向對象編程的實現,一是基于匿名哈希表的方式,每個對象實例的實質就是一個指向匿名哈希表的引用。在這個匿名哈希表中,存儲來所有的實例屬性。二是基于數組的方式,在定義一個類的時候,我們將為每一個實例屬性創建一個數組,而每一個對象實例的實質就是一個指向這些數組中某一行索引的引用。在這些數組中,存儲著所有的實例屬性。

Perl面向對象編程的概念

首先,我們定義幾個預備性的術語。
實例(instance):一個對象的實例化實現。
標識(identity):每個對象的實例都需要一個可以唯一標識這個實例的標記。
實例屬性(instanceattribute):一個對象就是一組屬性的集合。
實例方法(instancemethod):所有存取或者更新對象某個實例一條或者多條屬性的函數的集合。
類屬性(classattribute):屬于一個類中所有對象的屬性,不會只在某個實例上發生變化。
類方法(classmethod):那些無須特定的對性實例就能夠工作的從屬于類的函數。


基于匿名散列表的方法

首先我們來談談基于匿名散列表的面向對象實現。首先,我們需要定一個匿名散列表,并用一個引用指向這個匿名散列表。如清單1所示,我們定義了一個初始化函數來封裝這個匿名散列表的初始化過程。這個函數接受參數作為初始值,并且用這些值初始化其內部包含的匿名散列表,并且返回一個指向這個匿名散列表的引用。在這個例子當中,我們創建了一個Person模塊,并且定義了一個可以實例化模塊Person的new函數。

清單1.基于匿名哈希表的面向對象編程
 

  1. packagePerson;  
  2. subnew{  
  3. my($name,$age)=@_;  
  4. my$r_object={  
  5. “name”=>$name,  
  6. “age”=>$age  
  7. }  
  8. return$r_object;  
  9. }  
  10.  
  11. my$personA=Person->new(“Tommy”,22);  
  12. my$personB=Person->new(“Jerry”,30);  
  13. print“PersonA’sname:”.$personA->{name}.“age:”.$personA->{age}.”.\n”;  
  14. print“PersonB’sname:”.$personB->{name}.“age:”.$personB->{age}.”.\n”;  
  15.  

 

但是,現在的這個方案有一個致命的缺點,Perl的編譯器并不知道如何new函數所返回的指向匿名哈希表的引用屬于哪個類(模塊)。這樣的話,如果要使用類中的實例方法,只能直接標出方法所屬于的類(模塊)的名字,并將引用作為方法的***個參數傳遞給它,

基于匿名散列表的方法中的繼承:

Perl允許一個模塊在一個特殊的名為@ISA的數組中制定一組其他模塊的名稱。當在模塊中找不到某個實例方法時,它就為檢查那個模塊的@ISA是否被初始化。如果已經初始化了,它就為檢查其中的某個模塊是否支持這個“缺少”的函數。如果它按照深度優先的層次結構搜索@ISA數組并且發現同名的方法,它會調用***個被發現的同名方法并將控制權交給它。我們利用Perl語言的這個特性實現了繼承。

考慮這樣一個類的層次,我們定義一個Employee類,繼承于基類Person,如清單5所示。
我們將類名Person放入包Employee的ISA數組中,這樣當調用一個在包Employee中沒有定義的函數時,Perl編譯器會自動在Person類尋找這個函數。當用戶調用new函數初始化一個Employee對象實例的時候,Employee的new函數會在內部調用它的基類的new函數,并且返回一個包含部分以初始化的基類實例屬性的匿名哈希表。接著Employee的new函數將繼續執行new函數的剩余代碼,完成屬于Employee自身的初始化工作,為Employee中剩余的實例屬性賦值。

基于數組的方法

基于匿名哈希表的面向對象編程方法中有兩個明顯的不足:一是無法為屬性提供一種訪問限制,限制外部對內部屬性的訪問和改變。二是在處理大規模的實例的情況下,系統的內存開銷頗大。100個實例意味著將創建100個散列表,這100個散列表都要為插入新紀錄的操作而分配額外的存儲空間。除了基于匿名散列表的實現,我們也可以利用數組來存儲屬性,實現面向對象的編程。

整個實現的數據結構非常簡單,我們將為每一個類的實例屬性分配一個數組(見圖一,圖中的每一列對應于類的一個實例屬性),而每一個新的實例將是跨越所有數組列的一個切片(圖中的每一個被使用的行對應于類的一個實例)。每次需要實例化一個新的對象,new函數將被調用。一個新的邏輯行將被分配,新的實例的實例屬性將以新的行偏移量插入到相應的屬性列當中去。

基于數組的方法中的繼承

基于數組的方法中的繼承與基于匿名哈希表的方法中的繼承完全一樣。我們設計的InsideOut類中利用@ISA數組提供了對繼承的支持。

總結

相比于基于匿名哈希表的方法,基于數組的方法對存取屬性的訪問提供了更好的控制和保護并且實現了對于對象的封裝,同時也提高了存儲空間的利用效率。但是基于匿名哈希表的方法也有著簡單易學,邏輯上較為直觀而且無需要第三方模塊支持的優點。具體使用哪種方式實現面向對象的設計,還要在工作中根據實際情況進行考慮才對。
 

【編輯推薦】

  1. Perl面向對象編程中方法的調用
  2. Perl foreach控制結構中的控制變量
  3. 深入剖析Perl面向對象編程
  4. 揭秘Perl變量中Perl純變量用法
  5. Perl面向對象編程的兩種實現和比較

 

 

責任編輯:佚名 來源: csdn.net
相關推薦

2010-07-13 10:47:18

Perl面向對象

2010-07-14 10:30:26

Perl多線程

2010-07-15 14:38:55

Perl eval函數

2010-07-20 09:23:30

Perl構造函數

2011-07-01 17:50:13

Python 多線程

2010-07-20 13:44:02

Perl方法

2010-07-27 15:03:37

Flex ArrayC

2010-07-16 17:23:57

Perl面向對象編程

2010-07-13 17:18:29

Perl面向對象編程

2010-07-13 13:06:41

Perl面向對象

2010-02-02 14:32:32

Python線程編程

2010-07-20 09:33:14

Perl方法

2010-07-13 14:38:33

Perl面向對象編程

2020-02-21 17:33:17

SparkKafka數據

2022-02-21 08:18:38

option編程模式

2021-12-08 10:47:35

RabbitMQ 實現延遲

2010-07-20 09:13:55

Perl面向對象編程

2009-06-15 15:02:48

Spring定時器

2010-07-19 14:07:09

Perl ->符號

2011-03-03 10:26:04

Pureftpd
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 激情网站在线 | 99亚洲精品 | 亚洲天堂中文字幕 | 亚洲最大看片网站 | 精品在线| 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 日本精品视频一区二区 | 国产精品久久久久久影院8一贰佰 | 日日干夜夜操 | 成人污污视频 | www.色53色.com| 在线成人 | 亚洲 欧美 日韩在线 | 亚洲精品久久久久久久久久吃药 | 国产精品亚洲一区 | 久久久久免费精品国产 | 超碰97av| av黄色国产 | 午夜一区 | 亚洲精品日韩欧美 | 欧洲视频一区二区 | 国产精品久久久久久久久久久免费看 | 国产精品一区二区三区久久久 | 羞羞的视频网站 | 在线播放中文字幕 | 亚洲系列第一页 | av片免费 | 国产97色| 一区二区三区在线播放 | 日韩精品免费在线观看 | 久久精品国产一区二区电影 | 欧美精品一二区 | 一区二区三区视频在线 | 欧美精品电影一区 | 国产精品成人一区二区三区吃奶 | 日韩精品视频在线播放 | 久久美女网 | 中文在线а√在线8 | 青青久视频 | 日韩中文字幕免费 | 高清色视频 |