2016年4月11日 星期一

物件導向(3)依賴倒置原則(Dependency inversion principle)


  • 抽象介面不應該依賴於具體實作,而具體實作則應該依賴於抽象介面。(是說要針對介面程式設計?這裏的抽象,指的是c++裏的純虛擬函數、較底層的抽象類別、java的interface、swift的protocol等)
  • 高層模組不應依賴低層模組,兩者皆應依賴抽象。(意思是說,別針對某個特定類別去設計,而是將介面定好,大家都照都介面設計,不必管日後彼此溝通的是原始類別或是繼承自原始類別的新類別)
  • Liskov替換原則:子類型必須能夠替換它們的父類型。(只有當子類別可以替換父類別而軟體的單位功能不受到影響,父類別才「能」真正被複用。這是指才「算」是真正被複用?)當然子類別在父類別的基礎上增加新的行為則是一種好的擴充形式。
  • 當程式設計是針對介面設計時,是物件導向的特色。而針對細節設計時是傳統程式設計。為什麼?當針對介面設計,則不同的物件都可以符合功能,而且可以替代及擴展。如果是針對細節設計,那麼維護、擴展、再利用都不易,當然靈活度也就不夠好。

沒有留言:

張貼留言