---
# System prepended metadata

title: 類別
tags: [CleanCode]

---

###### tags: `CleanCode`
<STYLE>
p,li,oi,h3{
font-family:"微軟正黑體";
}
</STYLE>
# 類別
> 1. 類別的開頭順序：
public variable→private variable→
→public function→private function放在呼叫他的函式後面
> 2. 測試程式要存取的變數通常做為protected型態
#
#### ⚠單一職責原則(Single Responsibility Principle, SRP)
一個類別應該只有一個職責，只能有一個修改的理由。
* 類別的命名應足以描述其職責，如果無法取個簡明的名稱，可能代表此class職責過大。
* 確認類別的職責可以助於在程式中找出或建立抽象概念
#
#### ⚠開放-閉合原則(Open-Closed Principke, OCP)
類別應對於擴充(ex:增加新功能)具有開放性，但對修改則具有封閉性(修改子類別，不影響其他類別)。
#
####  ⚠相依性反向原則(Dependnecy Inversion Principle, DIP)
類別應要相依於抽象概念(abstract或interface類別)，而非在具體類別的細節上(也就是類別的實現細節)。因為當細節進行變動時，易使相依於具體類別的細節之類別產生風險。
#
#### ⚠凝聚性
* 類別中的每個函式，應該使用一個或多個類別中宣告的變數。
* 若遇到某些類別的實體變數，僅有少數被某些少數函式所用，此時就要**考慮將其自成新的類別**，保持類別的凝聚性。
