2015年11月27日 星期五

Object Oriented Programming basic concept



講到OOP

就一定要講到SOLID

S => SRP(Single Responsibility Principle) 單一職責原則O => OCP(Open Close Principle) 開放封閉原則L => LSP(Liskov Substitution Principle) 替換原則I => IAP(Interface Agreegation Principle) 介面分割原則D => DIP(Dependency Inversion Principle) 相依性反轉原則








SRP(Single Responsibility Principle): 

當一把瑞士刀太多功能時,你也不會想要用它

指每一個class 都應該只有一個職責
若一個class 作了太多事情
會導致這個class 的複雜度增加
也會造成日後的maintain cost 增加




OCP(Open Close Principle)

藉由增加新的code 來擴充系統的功能,非修改現有的程式碼來擴充系統的功能,所以新的code加進去時不會對現有的功能 造成影響。
對擴充具有開放性,對修改具有封閉性(單一理由修改)



LSP(Liskov Substitution Principle) 替換原則

子型別必需可替換父型別
玩具鴨需要電池
但野鴨不需要電池
兩者的行為也不同,
就無法用繼承的方式作實作

I => IAP(Interface Agreegation Principle) 介面分割原則

用戶不應被迫相依於他們用不到的函式,
介面屬於client site
不屬於server site
儘可能該介面單純化


想一想
如果介面為了要server 眾多的client 的需求
把介面作的越來越複雜
這樣增加的複雜度是所有的使用者共同承擔的
會造成所有使用者互相影響

D => DIP(Dependency Inversion Principle) 相依性反轉原則

高階邏輯應相依於抽像概念
而非相依於細節
也就是說所有的 new   instance
都應該由factory 來產生
讓所有的物件只相依於interface
而相依於實際上的object

寫程式如何看有沒有功力
就看他寫的code 是否有分階層
讓看的人可以比較清楚的了解程式的邏輯

插頭相依於插座
只有二頭插座侑三頭插座之分
並不會管後面到底是怎麼供電、
電從那裡來的問題


沒有留言: