在OO的世界中,多型就是利用dynamic binding的機制,在執行期間才動態決定所需呼叫的實際instance之函式為何,達到相同的呼叫方式而能產生不一樣的行為反應(即同名異式)。但從廣義的多型來看其實他還細分成兩大類,且各自可以在往下細分,下面將針對廣義的多型加以描繪希望對讀者能有所助益。

 

在廣義的多型之下,函式名稱的共用及overloading,以及函式的覆寫概念overriding皆為多型。進一步說明:只要一個相同的數值有型態的變化或一個名稱可代表多整意思,甚至一個函式在執行期間能動態選擇不同的執行函式都叫做多型。依據Strachey (1967) and Cardelli/Wegner (1985)的定義下多型可以分為兩大分類:

l          universal:又可細分為parametricinclusion

l          ad hoc:又可細分為overloadingcoercion

下面就針對這幾個不同的分類加以說明:

 

parametric其概念就是目前常說的function overloading的概念。主要就是利用接收不同的參數數量或型別,來達到共用相同的函式名稱,如此可以大量簡化函式的數量。

 

Inclusion其概念就是目前常說的overriding所衍生出的多型。也就是物件導向中最常見的多型,亦即『1.利用父類別的型態、2.接收不同子類別的物件、3.做相同的動作、4.引發不同的行為』。

 

overloading其概念就是目前常說的operator overloading的概念。在前幾篇我們曾經講過operator overloading就是運算子覆載,概念主要就是利用接收的運算元不同來區別底層應該分配到哪一個運算函式執行,以求共用相同的運算子。有興趣的可以回頭去看overridingoverloading此文章的介紹。

 

Coercion其概念就是目前常說的強制轉型(casting)例如在C語言中的(float)5,意思就是將5此一整數型態強制轉型為float的型態。這種型態的轉換也算是廣義的多型之一。

 

現實世界中多型就是相同的稱呼方式以不同的形式存在著,試想一句想同的話以不同的音調呈現,就會變成不一樣的意思存在著。舉例來說,光一個『哈!』有可能是乾笑、嘲笑、會心一笑諸多的意思存在,這其實就是很好的多型概念,一個相同的訊息在不同的時空環境跟語調配合下,就會產生出讓人感覺不一樣的意思存在,這不就是『同名異式』。而『哈!』的實際意思總是要到實際發生的時間點視情況而定,才知道當下的意思,而當下不就是runtime的概念,而runtime才決定意思,不就是dyanmic binding的概念~~想通了嗎?...現實生活中本來就存在了多型的概念,而程式的語法設計上只是將實際存在的概念加以抽象化成語法形式來表現,其目的都是為了將真正的行為,用程式來加以反應。

 

記得,所有程式開發的理念跟想法,必定有其對應到實際上的意義,否則無中生有的技術將變成只是空談,而不切實際。面對一個無論是任何領域的專業名詞,請從原理思考,去想清楚背後的含意,想通了其實就沒有覺得那麼玄了…XD

 

arrow
arrow
    全站熱搜

    劉逸 發表在 痞客邦 留言(1) 人氣()