Object Oriented Programming

介紹物件導向程式設計的核心概念,及三大支柱。

歷史:

物件導向程式設計的雛形,早在1960年的Simula語言中即可發現,當時的程式設計領域正面臨著一種危機:在軟硬體環境逐漸複雜的情況下,軟體如何得到良好的維護?

物件導向程式設計在某種程度上通過強調可重複性解決了這一問題。20世紀70年代的Smalltalk語言在物件導向方面堪稱經典——以至於30年後的今天依然將這一語言視為物件導向語言的基礎。 (copy from Wiki)

從高階語言的設計發展來看,大概可分為四個部分:

1. 非結構化程式設計 (Unstructured Programming)

非結構化程式設計把所有的敘述寫在主程式(main)中去執行,資料都設為全域(global),可想而知規模稍為大一點的程式會讓程式碼變得很凌亂,而且不易維護,同樣的動作就複製同樣的程式碼去達成目標。

2. 結構化程式設計 (Structured Programming)

結構化程式設計引入了函數(function)及回傳(return)的概念,把一些程式碼敘述包成函式讓主程式呼叫使用。一樣的動作就呼叫一樣的函數。

3. 模組化程式設計 (Modular Programming)

隨著程式的規模越來越大,結構化程式設計會有越來越多的函數,產了管理不易的問題。模組化的概念就是把功能相似的函數包成一個模組,主程式跟各模組要求資料、函數來達成所需要的功能。

4. 物件導向程式設計 (Object-Oriented Programming)

同樣的,更多的模組只會讓程式變得更複雜。而且資料在模組中是全域的,無法完整的描述現實世界的情況。物件導向程式設計以『資料』為主體構成物件,物件有其『方法』可以與別的物件進行運作。

物件導向程式設計 Object Oriented Programming (OOP)

把真實世界的事物抽象化為物件。

抽象化? Abstraction?

舉個例子,試著描述何謂電腦,底下是五個人的回答:

A:一種計算設備。

B:由滑鼠、鍵盤、螢幕、主機構成的裝置。

C:可以提供服務、解決問題的物品。

D:一種可以讓你熬夜爆肝的惡魔玩具。

E:可以快速執行指令的東西(?。

不管你的答案是什麼,你在腦海裡試著描述的這個動作就叫『抽象化 (Abstraction)』。 一般來說抽象化的越詳細,越能表述你想要描述的物體,但實務上還是要依現實需求去思考抽象化的程度。

好處? Benefits?

  1. 程式的可重複利用性 (Reusability)

    程式設計師可以重複的使用母類別(super class)的程式。

  2. 軟體原型 (Software Prototyping)

    類別的發展可以視為一顆軟體IC,使系統的開發更簡單且有效率。

三大支柱:

  1. 封裝 (Encapsulation)

  2. 繼承 (Inheritance)

  3. 多型 (Polymorphism)

接下來章節會討論OOP三大支柱。

要知道的是,物件導向只是一種『設計概念 (design concept)』,而不是一種程式語法,只是Java是純物件導向,所以要學Java一定要弄清楚物件導向。

設計類別要從『資料(data)』的觀點出發,而不是從方法的觀點。以資料為主體產生類別,再去設計其方法(method)。

設計重點要在於物件之間的互動(interaction among objects),而非流程控制(control flow)。

Last updated