5.3 物件導向概論
Object Oriented:
int x; (type 變數)
person P; (類別 物件)
1 2 3 4
| person p; p.h = 180 p.w = 80; p.walk();
|
why O.O
- 可用以反應出真實世界的情況, 使程式的可讀性更佳, 日後的可維護性亦更好
- 彈性好, 但 performance 差
物件(object)
- Def:
- an object is an instance of a class => 指物件為類別的實體
- each object 是獨立的, 滿足唯一性(unique)
- 就程式而言物件是
- 參與程式執行的單位
- 為一變數會佔用 Mem.space
- dynamic: 指會隨執行而更動其狀態
類別(class)
- Def:
- 將具相同屬性及行為的 object 加以抽象化定義
- 其中:
- attribute: 靜態描述(特徵值), height, weight, 單眼皮, 雙眼皮
- behavior(operation in c++, method in java): 動態描述 => 作用在屬性上
- 就程式而言類別是:
- ADT (Abstract Data Type)
- 為靜態單位, 只佔用一份 Mem. space
- 為物件的實施藍圖
- 概念:
- 圖:
- Note: Object 之間溝通採用 “Message Passing” (因為物件間是獨立的, 無共享Mem.)
Object Oriented 四大特色
- Data Abstraction 資料抽象化
- 將物件細節排除, 擷取共通的 attribute 及 operation, 加以抽象化定義
- 在定義(抽象化)過程, 會忽略和問題無關的部分
- Encapsulation 封裝
- Def:
- 可將 class 中部分的 attribute 及 operation 隱藏, 避免外界直接取用
- 一般會用一公開的管道使外界可做間接存取, 以便管控正確性
- 優點:
- 確保私有 data 不受外界影響 => 可避免不當操作發生, 如 …heart
- 適時將製作的細節封裝, 如此可在改變時, 減少對外操作的影響 => ripple effect 低, 可維護性高(如程式碼2)
1 2 3 4 5 6
| Person 外界 setHeight(int h) height = -30; (Can't use) { setHeight(-30); if (h < 0) error; height = n; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| //今日有一客戶需一排序程式 BubbleSort(data) { ... //但由於資料愈來愈多嫌太慢 } QuickSort(data) { ... //卻發現舊系統中都是 bubble sort, 無法執行 quick sort }
// 所以當初應 Sort(data) { BubbleSort(data) // 改成 QuickSort(data) }
|
- Inheritance 繼承
- Def:
- 子類別(Child class) 可以繼承 父類別 (parent class) 的屬性及運作, 亦可加入 child class 自訂的屬性及運作
- 圖:
- 優點:
- 支援 software reuse (軟體再利用) => 省下重複開發成本
- 支援 component base software developments (以元件為基礎的軟體開發方式) => VB , 品質好, 速度快
- 缺點:
- 當繼承深且複雜的時候, 會使 compiler 的 performance 下降, 耗費時間去找尋各 data 的來源
- readable 及 maintainable 的程度下降, 因為太多層, 所以視窗太多, 要找時也困難
- 有 Naming Conflicting 的議題(命名衝突), 又稱 “ambiguous calling” (模糊呼叫)
- 重複繼承的問題
補充 Encapsulation 存取權限:
Note:
- 在 c++中額外提供 “friendly” 權限, 當 class A, B 2者設為 friend, 即可取用之
- 在 java 中若沒宣稱權限, 則為 default 權限, 此時只有 class 本身及同 package(類似目錄的概念) 下方可使用
- Polymorphism 多型
- Def: O.O 程式於 “執行期間” (Runtime 才決定呼叫的 function 之所在 -> Dynamic Binding), 不同型別之物件, 接收到同一訊息 (同名), 會有不同的行為 (異式), 反應謂之「多型」
- Note: binding
- Ex: