[物件導向]基礎篇:高內聚低耦合、單一職責原則、開放封閉原則 (投影片分享)
前言
前兩篇分別介紹了:
- 物件導向的三特性:封裝、繼承、多型。
- 兩種抽象:interface, abstract。
- 意圖導向設計(top-down)方式。
在物件導向的基礎中,其實許多特性、原則以及設計方向都是環環相扣的,就像 design patterns 很多是一體多面,只是以不同角度當切入點,用來描述如何有彈性的解決需求。
在本次課程中,則是介紹什麼是內聚(Cohesion)、什麼是耦合(Coupling)。還有 SOLID 原則中,很重要的兩項原則:單一職責原則(Single Responsibility Principle)、開放封閉原則(Open Closed Principle)。
投影片
作業題目
Selenium Test Cases 下載:SeleniumTestCases.zip
題目程式下載:Homework3.zip
題目說明:
- 請重構原本程式,將每個職責分開到專屬的 class 中,並將其職責記錄於 class API document。並將這些 class 不屬於 UI layer 職責的放到 Library 中。
- 請依照 3 layer 的方式,將各職責 class 放到專屬的 layer 中。
- 重構前後都要能通過 Selenium Test Cases。(Test Cases中有一個 step 可能導致錯誤,請挑出來了解原因並修正)
- 便利商店種類的決定,未來可能不是由 config 來決定,請將此列入設計要點。
- 各便利商店相關資料來源,未來可能改變。
- 未來可能新增其他便利商店種類。
請符合單一職責原則、開放封閉原則,以及前面兩次課程所列出的特性、設計原則與注意事項。
作業整理與回顧
結論
開放封閉原則,稱得上是 SOLID 原則中的總綱,當所有設計可以滿足開放封閉原則,基本上就代表耦合度夠低,就代表新增或需求異動(非bug或行為內容異動),都可以透過新增類別、切換多型的執行個體就能滿足新的需求,而可以使得使用場景端(context 端)對這樣的異動無感,不受影響。
而單一職責原則,可以稱得上物件導向原則中,最難解釋清楚、最難定義的一項原則,當物件職責夠單一,就能達到高內聚力,就能達到關注點分離,就能達到職責分離,就能達到降低程式碼重複的情況發生。
上述的內聚與耦合的評斷,則可以透過單元測試程式來進行辨別物件的職責與耦合,是否還有改善的空間。
而高內聚、低耦合,可以說是我們在物件導向中,設計的最終目的。讓物件彼此之間可以彈性組合使用,讓程式碼可以重用,讓程式碼不會重複,讓關注點分離。
所以請各位學員與剛開始學習物件導向的朋友,一定要去了解這些物件導向中,最基本的基本功。
參考
- 91之ASP.NET由淺入深 不負責講座 Day16 – 高內聚、低耦合
- 91之ASP.NET由淺入深 不負責講座 Day17 – 單一職責原則
- 91之ASP.NET由淺入深 不負責講座 Day18 – 開放封閉原則
blog 與課程更新內容,請前往新站位置:http://tdd.best/