天天看點

OO原則

在OO設計領域,我們知道前人總結了不少的經驗,許多的經驗在現代軟體工程過程中已經被認為是原則來遵守。下面筆者摘抄幾項下文涉及到的OO原則的定義。

OCP(開閉原則,Open-Closed

Principle):一個軟體的實體應當對擴充開放,對修改關閉。我的了解是,對于一個已有的軟體,如果需要擴充,應當在不需修改已有代碼的基礎上進行。

DIP(依賴倒轉原則,Dependence

Inversion

Principle):要針對接口程式設計,不要針對實作程式設計。我的了解是,對于不同層次的程式設計,高層次暴露給低層次的應當隻是接口,而不是它的具體類。

A. 高層子產品不應該依賴于低層子產品,二者都應該依賴于抽象

B. 抽象不應該依賴于細節,細節應該依賴于抽象

LoD(迪米特法則,Law of

Demeter):隻與你直接的朋友通信,而避免和陌生人通信。衆所周知類(或子產品)之間的通信越少,耦合度就越低,進而更有利于我們對軟體的宏觀管理。老子論“聖人之治”有相同的思想,《老子》雲:“是以聖人之治,虛其心,實其腹,弱其志,常使民無知無欲。”,又雲:“小國寡民,鄰國相望,雞犬之聲相聞,民至老死,不相往來。”。佩服我們的老祖宗,N千年前就想到了西方N千年後才想到的東西,同時也佩服《java與模式》的作者閻宏,可以用中國傳統哲學思想這麼生動的說明這一軟體設計原則。

LSP(裡氏替換原則)所有引用基類的地方必須能透明地使用其子類的對象。

SRP(單一職責原則)隻能讓一個類有且僅有一個職責。

ISP(接口分離原則)接口的設計應該遵循最小接口原則,不要把使用者不使用的方法塞進同一個接口裡。