基本物件導向概念

物件導向程式設計(英語:Object-oriented programming,縮寫:OOP)

物件導向程式設計推廣了程式的靈活性可維護性,在大型的專案被廣泛的應用。此外,支持者聲稱物件導向程式設計要比以往的做法更加便於學習,因為它能夠讓人們更簡單地設計並維護程式,使得程式更加便於分析、設計、理解。學習物件導向須了解幾點與幾個特性:

  • Object 是 Class 的 Instance。
  • Class 是 Object 的定義。描述 Object 的組成與功能。
  • Object 使用前必須建立 Class 的 Object(Instance) (使用New)。
  • 真正被用來處理問題的是 Object,而 Class 決定了 Object 的行為。

類別

類別(Class)定義了一件事物的抽象特點。類別定義了事物的屬性與可做到的行為。Ex:「人」包含了一切的基本特徵與行為,頭髮、樣貌等等,類別可以為程式提供模版和結構。一個類別的方法和屬性被稱為「成員」。如以下:

類別 人 : {
公有成員:
走();
講話();
吃飯()
私有成員:
頭髮顏色;
身體膚色;
}

這邊解釋了一個人的類別,其中公有(public)與私有(private)會在封裝性提到。

物件

物件 (Object)是類別的例項(instance)。Ex:「人」類別列舉出人的特點,這個類別定義了世界上所有的人。而台灣人這個物件則是一種具體的人種,他的屬性也是具體的。人有皮膚顏色,而台灣人的皮膚顏色是白-黃之間。因此,台灣人就是人這個類別的一個例項(或稱實例)。

  • 系統給物件分配記憶體空間,而不會給類別分配記憶體空間。這很好理解,類別是抽象的系統不可能給抽象的東西分配空間,而物件則是具體的。
  • 我們無法讓人這個類別去走動,但是我們可以讓物件「台灣人」去走動,正如人可以走動一樣,但沒有具體的人就無法動作。
宣告或定義:台灣人是一種人
台灣人.走();
台灣人.身體顏色() = 白;

訊息傳遞

物件通過接受訊息處理訊息傳出訊息使用其他類別的方法來實作一定功能,就叫訊息傳遞機制(Message Passing)。

如:台灣人可以通過”講話”與其他人的溝通,從而導致一系列的事發生。

繼承

繼承性(Inheritance)是指,在某種情況下,一個類別會有「子類別」。子類別會比原本的類別(稱為父類別)要更加具體化。Ex:人有分台灣人、日本人等。在這種情況柯p可能就是台灣人的例項,並包含柯p自己的特性與行為。繼承的好處在於可以將相同事情做一次歸類,便可讓子類別擁有該屬性與行為。如下:

類別 台灣人:繼承於人 {
公有成員:
早餐專吃牛排();
}

定義阿文是台灣人
阿文.講話();
阿文.早餐專吃牛排();

當一個類別從多個父類別繼承時,我們稱之為「多重繼承」。好比混血兒從分別兩個人種繼承而來。但多重繼承有時矛盾,讓人無法理解,且有些程式也不支援。

封裝性

具備封裝性(Encapsulation)的物件導向程式設計隱藏了某一方法的具體執行步驟,取而代之的是通過訊息傳遞機制傳送訊息給它。好比一個人”吃飯”,吃飯的這個人才知道具體吃下了什麼,而其他人並不知道,例如。

一個程序導向如下:

定義柯p
柯p.拆除違建();
柯p.講話()

一個物件導向如下:

定義小文是人
小文.吃飯()
小文.吃飯()
小文.吃飯()

封裝是通過限制只有特定類別的物件可以存取這一特定類別的成員,而它們通常利用介面實作訊息的傳入傳出。通常來說,成員會依它們的存取許可權被分為3種:公有成員私有成員以及保護成員

  • 公有成員(public):任何例項成員都可以被其他人使用。
  • 私有成員(private):只有類別本身可以使用。
  • 保護成員(protected):只有繼承的子類別與類別本身可以使用。

多型

多型(Polymorphism)是指由繼承而產生的相關的不同的類別,其物件對同一訊息會做出不同的響應。好比『台灣人』與『美國人』都有”講話”的行為,但實際卻用不同語言講話。如下:

類別 台灣人 : {
公有成員:
講話();
}

類別 美國人 : {
公有成員:
講話();
}

定義 歐罵馬 是美國人
定義 馬陰酒 是台灣人
歐罵馬.講話(); // 講美語
馬陰酒.講話(); // 講國語

多型性的概念也可以用在運算子過載(overload)上。
多型是建立在繼承的基礎之上的,沒有繼承,就不會有多型。繼承的目的有兩種:

  • 繼承程式碼:達到程式碼再用性(reuse)
  • 繼承介面(interface)。達到介面再用性(reuse),為多型預作準備

抽象性

抽象(Abstraction)是簡化複雜的現實問題的途徑,它可以為具體問題找到最恰當的類別定義,並且可以在最恰當的繼承級別解釋問題。Ex:柯p在一般時候都被當作一個人,但是如果想要讓他做柯p做的事,你可以呼叫柯p的方法。如果台灣人類別還有人的父類別,那麼你完全可以視柯p為一個人。

參考

Share Comments