可重複使用之原件與PME模型

 

  物件導向是解決或減化軟體複雜度的一種方法,或者說,一種哲學,她的專論已遠遠的超過我們要討論的範圍,我們將只介紹我們將用到的 PME 模型。所謂 PME 是指性質”(property)方法”(Method)事件”(Event)PME BCB 的視覺化元件程式庫 VCL (Visual Component Library) 中建立物件所用模型。

  一般物件模型為資料成員(data member),和函式成員(function member)性質可說是資料成員,但是和一般資料成員不一樣的是,性質是可以控制 讀(read,寫( write 的方法及參考對象。性質並不是標準的C++,而是 BCB C++的方言,因為 VCL 是從 Delphi 移植過來的,而 Delphi Objective Pascal,許多設計(如單線繼承)是和 C++ 不一樣的,所以 BCB 必須有這些方言才能將 VCL 移植過來,最好的證明是 BCB 中使用「虛擬建構子」(Virtual Constructor),而稍微知道 C++ 的人都知道只有虛擬解構子(Virtual Destructor),沒有所謂的"Virtual Constructor"。而這一部分,Borland 以特別的命令(directive 來達成實作。

性質的使用方法形式如下[5]

__property type name={read=name1,write=name2,default=name3};

例如:

__ property bool ReadOnly={read=FReadOnly};

  以上命令即指 ReadOnly 這個性質只能讀,不能寫;讀取時是參考到變數 FReadOnly的值。值得注意的是 FReadOnly 也可以是一沒有傳入值而傳回值為 bool 的成員函式。而方法的觀念和一般的函式成員的概念是相當的,較不一樣的地方是 VCL 中用到的特別的函式指標,稱為閉合” (closure) 。一般的指標為 32bits 長,意義為位址(address)閉合包括了該物件例的位址及方法函式的位址,共 64bits 長。事件是一種特殊的閉合性質,在於 Windows VCL 本身訊息傳遞(message dispatch)機構中,用於和訊息對應及訊息轉向用。當訊息傳到物件時,對物件而言是發生某事件,而物件由事件決定要作出何種反應,或者選定不反應。

  於是就有兩點必須考慮:(1)如何攔下某訊息並指定給某事件 (2)事件如何指定行為。對於(1)我們以 Windows 丟出訊息為例[6],我們要將她攔下並指定給某函式,並在函式中呼叫事件所指的方法” (因為事件閉合”)。於是在(2)時我們只要改事件的值可達到行為轉向。BCB 已幫我們處理大部分的訊息及反應,我們只需將要自定的部分加以修改,並選定一個適當的類別加以繼承即可,這也是物件導的目的之一。

下一頁 回首頁