`Overload`
利用class建構式進行處理。簡單說在類別中定義與「類別相同」名稱,但是帶入「引數個數不同」
如:
public function Man() {}
public function Man($age) {}
public function Man($age, $company) {}
`Override`
「子類別」繼承「父類別」,同時必須「引數個數相同」、「method相同」、「傳回資料型態相同」等條件
`Overload`與`Override`參考說明網址
http://yensrule.blogspot.tw/2010/10/overloading-vs-overriding.html
============================================================
物件導向原則
系統抽象程度看interface,重用程度看abstract
SOLID 六項原則
單一職責原則SRP(Single Responsibility Principle)
- 一個類別處理一個職責的內容,
- 一個class如果要負責多個職責,其內容應該只是組合多個class,而每個被組合的class只負責單一職責,且通常這樣的組合都是透過接口(interface/abstract)。
- 好處:
class複雜性降低,因為實現什麼職責都有很清楚的定義
可讀性提高
可維護性提高
變更引起的風險降低,變更範圍降低,擴展性提高 - 參考網址:https://dotblogs.com.tw/hatelove/2010/10/16/single-responsibility-principle
開放封閉原則OCP(Open Closed Principle)
- 對擴充開放,對修改封閉
- 參考網址:https://dotblogs.com.tw/hatelove/2010/10/16/open-close-principle
里氏替換原則LSP(Liskov Substitution Principle)
- 子類別應該可以使用其基礎類別替代 。使用父類的地方,必須可以使用子類別代替,而不需要任何改變。
- 參考網址:https://dotblogs.com.tw/hatelove/archive/2010/10/18/liskov-substitution-principle.aspx
介面隔離原則ISP(Interface Segregation Principle)
- Class與外部的關係,應只依賴它需要的最小介面,所以介面不能太肥,應該要細化,不然會強迫中獎。每一個interface的方法數目應該盡可能地降到最低。
- 參考網址:https://dotblogs.com.tw/hatelove/archive/2010/10/17/interface-segregation-principle.aspx
依賴反轉原則DIP(Dependency Inversion Principle)
- 要依賴於抽象,而不要依賴於具體 。
1. 也就是class之間的耦合關係,要多墊一層interface/abstract來隔開。
2. 高層要用低層的方法,就都透過interface來表述抽象的行為,而不用管實體的concrete class是什麼。(滿足多型與Liskov substitution principle)。 - 參考網址:https://dotblogs.com.tw/hatelove/archive/2010/10/21/dependency-inversion-principle.aspx
============================================================
Design Patterns
- 三大特性:封裝、繼承、多型
- 兩種抽象:interfact, abstract
- 目的:高內聚、低耦合(http://ppt.cc/314ot、https://dotblogs.com.tw/hatelove/2010/10/16/oo-loosely-coupling)
- SOLID 原則:單一職責原則、開放封閉原則、里氏替換原則、最小知識原則、介面隔離原則、依賴反轉原則
- 基本設計原則:DRY, KISS, YAGNI
- 基本設計方式:interface-driven, intention-driven, 生成物件與使用物件分開
意圖導向設計intention-driven design
參考網址:
- http://ppt.cc/U9j6
- http://ppt.cc/RJq8l
- http://irw.ncut.edu.tw/peterju/se.html
沒有留言:
張貼留言