Note:物件導向

oop 有3大特色 data abstraction + inheritance + polymorphism

物件導向程式設計三個重要的特性

資料封裝(Encapsulation)、

繼承(Inheritance)

多型(Polymorphism)


三個物性的觀念:

資料封裝 : 將程式碼與其所處理的資料緊密結合,並保護兩方面在外部介面的安全與防止誤用的機制

封裝可以想成是受保護的封包以防範程式碼或資料被其他定義在封包外的程式碼任意地存取。

存取封包內的程式碼和資料是由定義完整的介面來嚴格控制

對Java而言,資料封裝的基本就是類別(Class)

一個類別定義了會被一組物件所共享的結構與行為(資料與程式碼)

當你建立類別時,你將指定構成該類別的程式碼與資料。這些元素共同被稱為類別的成員

由類別所定義的資料被稱作是成員變數或是實例變數

而作用在這些資料上的程式碼則稱為成員方法或就稱為方法

在正確撰寫的Java程式中,方法定義了成員變數應該如何使用

這表示行為與類別的介面是由操控實例資料的方法所定義。

因為類別的目的在於封裝複雜性,便有了將實作複雜性隱藏在類別內的機制。每個類別中的方法或變數可能被設定為隱密的或公開的

類別公開的介面表示所有該類別的外部使用者必須,或可以知道關於它所有的事情。

隱密的方法或資料只有該類別方法的程式碼可以存取。

所以,任何其他不屬於類別方法的程式碼皆不得私入方法或變數。

因為在你其他部份的程式中,一個類別的私入成員只能經由該類別的公開方法來存取,你可以確保沒有不正確的動作會介入。

當然,這也代表公開介面應該謹慎地設計,不要洩露太多類別內部運作的細節。

資料封裝就是將資料分成私用(Private)、保護(Protected)、公用(Pubic)等,達到資料保密的目的。


繼承:一個物件得到另一個物件特性的過程。這點非常重要,因為它支援了階層式分類的觀念。大部份的知識是以階層式(也就是由上而下)的分類法而可管理。例如,獵犬在分類中屬於狗的一種,換句話說也是哺乳頹的一種,而哺乳類是隸屬於一個更大的類別動物之下。如果沒有階層,每個物件就必須明確地定義自己所有的特性。但是,利用繼承,物件只需要定義那些在它的類別中特有的屬性。它可以從它的父層繼承共有的屬性。因此,是繼承這個機制才能讓一個物件成為一個較一般性案例中的特例。

繼承也會與封裝相互作用。如果一個類別封裝了每些屬性,任何子類別就會有相同的屬性再加上另外它特有的部份。這是讓物件導向程式的複雜度成線性成長而非幾何成長的關鍵觀念。一個新的子類別繼承其所有前代的所有屬性。它不會與系統中其他大多數的程式碼有無法預期的交互影響。

有繼承的關係後,父類別 (Super class) 中的資料 (Data) 或方法 (Method) 在次子類(Subclass)就可以繼承使用,次子類別的次子類別也可以繼承使用,最後即能達到資料重覆使用的目的。

多型: 一個讓單一介面用在一般性動作的功能。特定的工作取決於狀況的實際性質。更具體的說,多型的概念常以一句話來解釋:「一個介面,多個方法」。這代表有可能可以設計一個通用的介面給一組相關動作。這因為讓相同的介面用於指定一般的分類而降低複雜度有幫助。選擇特定的動作(也就是方法)應用於各種情況是編譯器的工作。身為程式設計師的你,不需要手動去選擇。你只需要記住和應用通用的介面即可。

例如,父類別(Super Class)中有一個名叫做 show() 的方法,用來顯示學生的姓名資料,次子類別中也有一個名叫 show() 的方法,用來顯示學生的成績資料,這二個方法都稱為 show(),但作法上不同,程式碼也不同,次子類別的 show() 方法將蓋掉父類別的 show() 方法,這就是多型的運作方法。

廣告
發表留言

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: