物件導向程式簡述

Oop 2

物件導向程式設計 Object Oriented Programming第一次聽到的時候覺得好可怕,現在稍微理解一些,跟各位剛接觸 Progaming的朋友分享一下我的認知邏輯。

 

在圖片中我們看到三個大方塊,等於是三個層級的 Class,用一個容易理解的例子來看

動物  >  靈長類  >  人類

就可以看到上一層的 Class有許多特性,下一層的會有,例如在人類那一層可能會有其他的 class如大金剛。

 

為什麼寫程式的時候會想要這樣分層級呢?最大的好處是可以少寫很多程式碼。怎麼說呢?

各位可以看到圖片中的 Class後面,有functions跟 properties,先從properties來說..

動物、靈長類、人類有些共同的特點,例如,早晚會死掉。我在跟電腦定義這三個物件的時候,用物件導向的邏輯來規劃,只需要寫在動物那一個層級,這樣電腦就知道下面的物件,不論是靈長類、猴子或人類,早晚都會死掉。

 

所以在規劃的時候將每個物件的層級規劃好,我們可以把每個物件都共同會用到的公開資料、共同特性(限制、反映),還有共同可以做的事情(Function/Methods根據不同的語言定義有些不同,在此先不管)。就可以用來模擬許多現實生活中的資料互動規則,例如讀者都可以借書,然而我們看到每一個層級比較低的物件都可以另外定義自己專用的功能與屬性,拿讀者這個分類來說,我們可以往下建立一個教授身份的讀者,他們可以借書的數量就可以設置比較多,借閱時間比較長。

 

一般來說會將這種由上往下傳的屬性叫做繼承(inheritance),意思是上一層的屬性,下面會有,下面的屬性,不會往上傳。繼承的架構,有"一對一"與"一對多"兩種,我們用一個例子來重新瞭解"一對多"還有屬性不會往上傳的概念,馬跟驢他們兩種層級所產生的下一代“騾”的屬性繼承,就是“一對多”的一種表現,馬跟驢的某些特性都傳給了“騾”,而“騾”的屬性並不一定會往上傳遞。

 

各位可能會想,如果馬的屬性有一條“斑點 = 很多“,而我們需要定義“騾”沒有斑點怎麼辦?物件導向程式設計的邏輯是,我們這時候在“騾”的屬性定義好”斑點 = 沒有“就可以覆蓋掉上一層的包袱。用這樣的方式來規劃,我們可以從上層既成許多已經寫好的程式碼,在必要的時候加以修改下層物件的特殊屬性與功能即可。

然而對於如 Ruby這樣 1 to 1的程式語言,使用的方式則是用 mixin將其他的class的methods跟 property整合進來,或者用 require把其他原本屬於封閉的 module內容拉進去。許多人喜歡將一個大的系統給 abstract為很多很多 layer,就跟photoshops一樣,這樣往後需要抽換、刪除、修改、整合各個 layer中的程式碼,比較容易,而且不會造成系統太大的影響。

 

以上,報告完畢:)

留言