對封裝、繼承、多態概念的個人形象理解


從前有一家IT公司,里面有很多人,每個人都有自己的年齡、身高、性別,等等。這些人在這家IT公司里從事着不同的職業,有負責接待的前台,有負責銷售的業務員,有負責招聘的HR,有負責掃地的清潔工,還有很多很多負責敲代碼的碼農。

___________________________________________________________________________

對象A:前台小妹/屬性:20歲,168cm,女/行為:吃飯、走路、說話、接待

對象B:業務員老王/屬性:30歲,175cm,男/行為:吃飯、走路、說話、銷售

對象C:人事小花/屬性:25歲,165cm,女/行為:吃飯、走路、說話、招聘

對象D:清潔工大媽/屬性:40歲,160cm,女/行為:吃飯、走路、說話、掃地

對象E:碼農阿磊/屬性:20歲,170cm,男/行為:吃飯、走路、說話、敲代碼

__________________________________________________________________________

 

封裝:

首先,屬性可用來描述同一類事物的特征,行為可描述一類事物可做的操作,封裝就是要把屬於同一類事物的共性(包括屬性與行為)歸到一個類中,以方便使用。比如人這個東西,可用下面的方式封裝:

人{

  年齡(屬性一)

  身高(屬性二)

  性別(屬性三)

 

  吃飯(行為之一)

  走路(行為之二)

  說話(行為之三)

}

 

繼承:

由於封裝,使得有共同特征的一類事物的所有描述信息都被歸於一類之中,但我們知道,這並不是萬能的,有些事物有共性,但還存在區別,比如碼農,簡單封裝起來如下:

碼農{

  年齡(屬性一)

  身高(屬性二)

  性別(屬性三)

 

  吃飯(行為之一)

  走路(行為之二)

  說話(行為之三)

 

  敲代碼(行為之四)

}

上面對“碼農”的封裝,與對“人”的封裝基本上差不多,只是多了一個特征行為:敲代碼,碼農有與人一樣的共性,但我們不能說“人敲代碼”,也就是不能把敲代碼封裝到“人”之中去,敲代碼是碼農的特征行為之一。為了省事地封裝碼農(代碼的復用,這只是繼承存在的原因之一),可以讓碼農去繼承人,如:

碼農 extends 人{

  敲代碼(行為之四)

}

這樣,我們就不用重新定義那些已經被“人”這一個類所封裝的那些屬性與行為了,而只需要使用繼承的方式,在人的基礎上拓展碼農專有的行為,即“敲代碼”即可把碼農描述出來:這樣的結果,即是碼農也同時擁有“人”之中所封裝的一切屬性與行為,還擁有自己的特征行為“敲代碼”。

 

多態:

多態的概念發展出來,是以封裝和繼承為基礎的(其實我覺得抽象也應該算是面向對象的大特征之一,要封裝,抽象是必須的)。

簡單理解一下多態,比如:

人這個類,封裝了很多人類共有的特性;

碼農是人的子類,繼承了人的屬性與行為,當然碼農有自己的特征行為,比如編程敲代碼;

前台是人的子類,繼承了人的屬性與行為,當然前台有自己的特征行為,比如接待收快遞;

現在,當我們需要去描述碼農與前台各自的行為的時候,我們可以分開來說“碼農在敲代碼”,“前台在接待”,但如果我們要站在抽象的角度,也就是從碼農與前台的父類“人”的角度,來同時描述他們各自的行為時,我們怎么描述?“人在敲代碼”?“人在接待”?這是不是怪怪的很不合適?不合適的問題就在於,對於行為主體,我們使用了抽象層次的東西“人”,而對於行為本身,我們卻使用了具體的東西“接待”與“敲代碼”。怎么解決呢? 那就需要解決抽象與具體的矛盾問題。

既然是站在抽象的角度來描述,那我們把行為抽象一下,不就能同時描述了嗎?比如“人在干活”(碼農在敲代碼與前台在接待都可以說成人在干活),這樣就解決了抽象層次與具體層次之間的矛盾。

到了這一步,我們可以把兩個描述:“碼農在干活”,“前台在干活” 兩者統一為“人在干活”,然后,我們可以在“碼農”的“干活”行為中去調用碼農自己的特征行為“敲代碼”,在“前台”的“干活”行為中去調用前台自己的特征行為“接待”,所以,當調用“人”去“干活”的時候,如果這個人是碼農,那他所做的事實際上就是“敲代碼”,如果這個人是前台,那他所做的事實際上就是“接待”。

也就是說在這里“人”是多態的,在不同的形態時,特征行為是不一樣的,這里的“人”,同時有兩種形態,一種是碼農形態,一種是前台形態,所對應的特征行為分別是“敲代碼”與“接待”。

完成上述的描述過程,其實就是多態機制的體現。

多態,就是站在抽象的層面上去實施一個統一的行為,到個體(具體)的層面上時,這個統一的行為會因為個體(具體)的形態特征而實施自己的特征行為。

比如,上班時間到了,老板喊一聲:“大家干活了!”於是所有人就各忙各的去了。如果老板不運用多態的方法,那就需要喊一句:“前台去接待了,業務員去銷售了,人事去招聘了,清潔工去掃地了,碼農去敲代碼了……”然后喊完估計就快下班了。

多態比起封裝與繼承來說要復雜很多,上面的描述很簡單,不用去死摳多態兩個字,其實只要明白:能站在抽象的角度去描述一件事,而針對這件抽象的事,對於每個個體(具體)又能找到其自身的行為去執行,這就是多態。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM