術(shù)語匯編 Perl類概念詳解
本文和大家重點(diǎn)討論一下Perl類的概念,.要做好在Perl下的面向?qū)ο缶幊?,你不僅要簡單的用LarryWall提出Perl面向?qū)ο缶幊痰臉?biāo)準(zhǔn),同時(shí)要對(duì)Perl類的概念及應(yīng)用非常熟悉。
Perl類
大多數(shù)人其實(shí)都沒有注意到,Perl也是一種面向?qū)ο蟮木幊陶Z言,但它又和傳統(tǒng)的面向?qū)ο蟮恼Z言:如C++,Java完全不一樣.要做好在Perl下的面向?qū)ο缶幊?你只要簡單的用LarryWall提出Perl面向?qū)ο缶幊痰臉?biāo)準(zhǔn)就可以了。
這里舉一個(gè)簡單的例子:Person類代表一個(gè)人,包含一個(gè)人的一些簡單的信息:名字,社會(huì)保障號(hào)等。
包
要?jiǎng)?chuàng)建一個(gè)Perl類,首先我們先要?jiǎng)?chuàng)建一個(gè)包--package.一個(gè)package是一個(gè)自包含的單元,它包含一些用戶定義的變量和方法,類似于Java中的Package和C#中的namespace,也起到一個(gè)命名空間的作用.不同命名空間下的相同名字的變量,相互之間是不沖突的。
聲明一個(gè)Perl類:packagePerson;
Person的作用域一直到這個(gè)文件的結(jié)尾.
在類中定義一個(gè)方法:在Person類中定義一個(gè)print的打印方法:
- subprint
- {
- my($self)=@_;
- #printPersoninfo
- printf("Name:%s%s\n\n",$self->firstName,$self->lastName);
- }
要調(diào)用這個(gè)方法,類似PHP,只需要:$khurt->print();
$khurt是一個(gè)Person的實(shí)例.my($self)=@_;這句意思,是把當(dāng)前的變量賦給$self這個(gè)私有的變量.@_是Perl內(nèi)置的一個(gè)變量,代表當(dāng)前正在訪問的變量,它是一個(gè)全局變量。
構(gòu)造函數(shù)
要?jiǎng)?chuàng)建一個(gè)Perl類的實(shí)例,我們需要一個(gè)構(gòu)造函數(shù).當(dāng)然,這個(gè)構(gòu)造函數(shù)肯定要在相應(yīng)的package中定義.大多數(shù)的Perl程序員把構(gòu)造函數(shù)命
名為new,其實(shí)無論這個(gè)函數(shù)叫什么名字,Perl都能接受.
每個(gè)Perl對(duì)象的實(shí)例說到底都是一個(gè)數(shù)據(jù)類型,或者是數(shù)組型,或者是Hash列表型等等.這就象C++中的ADT(AbstractDataType)一樣.
Person的構(gòu)造函數(shù)如下,我們用的是一個(gè)Hash的引用作為一個(gè)類的實(shí)例:
- #constructor
- subnew{
- my$self={
- _firstName=>undef,
- _lastName=>undef,
- _ssn=>undef,
- _address=>undef
- };
- bless$self,'Person';
- return$self;
- }
這里,我們?cè)赑erson包中創(chuàng)建了一個(gè)叫new的方法,實(shí)際上也就是在Persong類中創(chuàng)建了一個(gè)構(gòu)造函數(shù).這個(gè)對(duì)象的屬性全部都在$self變量中了.bless$self'Person'這句比較重要.bless函數(shù)的第一個(gè)參數(shù)是一個(gè)變量的引用,第二參數(shù)是一個(gè)Perl類名.這個(gè)函數(shù)的作用是說明$self變量是屬于Person類的。
要?jiǎng)?chuàng)建一個(gè)Person的實(shí)例:
my$khurt=Person->new();
我們還沒有創(chuàng)建任何的訪問方法和錯(cuò)誤檢查方法.為了讓構(gòu)造函數(shù)更加的可靠和可繼承,將構(gòu)造函數(shù)重寫:
- subnew{
- my($class)=@_;
- my$self={
- _firstName=>undef,
- _lastName=>undef,
- _ssn=>undef,
- _address=>undef
- };
- bless$self,$class;
- return$self;
- }
其它的面向?qū)ο笳Z言有私有變量,保護(hù)變量這些概念,控制了變量的訪問權(quán)限,防止變量被直接改變.Perl沒有私有變量,但是還是可以通過訪問函數(shù)來控制變量的訪問權(quán)限。
【編輯推薦】