2.23.2013

[OO概念]封裝,繼承,多型

最近發現最基本的問題,好像大家反而忽略了,想說來分享一下我對基本OO的封裝,繼承,多型見解。

封裝(Encapsulation):就是把不必要的資訊隱藏(Information Hiding)起來,只把必要的操作開放出去。譬如開車加速,我們只要知道踩油門就好,不需知道細節(內部零件間怎麼協同完成這件事),這樣的好處是物件間或模組間的藕合力(Coupling)低,若今天要完成一件事的細節變了,呼叫者可以完全不受影響,藕合力愈低,單元測試愈好寫啊...當你呼叫一個物件的get,就要小心也許你正在破壞他的封裝!

繼承(Inheritance):我們都知道就是父子關係(IS-A relationship),子類別會繼承父類的方法和屬性,繼承本身並沒有問題,但常會見到誤用的情形!就是開發者忘了IS-A的概念,為了reuse,造成了功能型的繼承!若要reuse且非IS-A關係,應用Composition來達成,把共同的部份移至composed class,把要做的事delegate另一個物件完成!

多型(Polymorphism):延申自繼承(Inheritance)或介面(Interface),指的就是不同型態的物件,定義相同的操作介面,由於被呼叫者(Callee)有著相同介面,呼叫者並不用指定特定型別,只需針對介面進行操作,實際執行的物件則在runtime決定,藉此增加程式碼的彈性。
你可能對下面主題有興趣:
  1. [Java 概念]Interface and abstract class
  2. Java的十個物件導向設計原則

No comments: