基礎這東西很神奇,有它沒它好像都可以。

有基礎,可以寫出很棒的程式。
沒有基礎,一樣可以寫出一個很棒的程式。
差別在於,未來維護、擴充時的痛苦層度

之前跟公司同事簡單介紹了物件導向是什麼,但了解物件導向的概念,跟寫出的物件導向程式是兩回事。
所以現在來介紹一下物件導向的SOLID概念。

1. Single Responsibility Principle 單一職責原則

一個類別,只需要負責一件事或一個方面的事情。
(同樣可以套用到函數去喔~)
該原則可以讓類別被“改變”的機會大大降低,增加穩定性。
例如:人類是個類別,設計者不會將“飛”實作在人類類別裡,而是創造一個飛機類別,將人類加進去。

2. Open-Close Principle 開閉原則

設計類別時,我們應該“開放擴充,封閉修改”。
因為有些時候我們只是打開某個文件,什麼事都沒做,然後儲存,然後程式就壞掉了!
所以我們在設計類別時,應該思考一下該類別未來可能會如何修改,然後盡量不修改主要程式碼。

3. Liskov Substitution Principle Liskov替換原則

子類別應該符合超類別的規則,這樣就可以簡單更換。
該原則主要應用物件導向的“多形”與“繼承/實作”的特性。
在設計程式時,我們應該將類別的容器類型設定為超類別的型態,當需要修改子類別時,直接替換子類別的程式就好了。

4. Interface Segregation Principle 介面隔離原則

各個類別之間應該依賴於抽象層,達成互相之間隔離的效果。(怎麼跟第三點那麼像啊0.0)
該原則與第三點的《Liskov替換原則》感覺起來好像。。。
小忠子日後再找找資料,了解一下該原則與第三原則有什麼差別。(跪)

5. Dependency Inversion Principle 依賴反轉原則

低層次類別不應該相依於高層次類別,。
高層次類別?低層次類別?這是什麼,怎麼定義的??高低是個相對的概念。
假設A類別使用到B類別,那麼B類別就是低層次類別,A類別就是高層次類別。
(看到這邊還有發現另一個概念,Dependency Injection 依賴注入,這部分日後再慢慢解說)

原則的言而總之,總而言之

program to an interface, not an implementation

總結就是以上這句話,SOLID原則有些算是對這句話的解釋。
SO原則解釋起來簡單,但對於上面總結的關聯貌似少了一些;相對LID原則是解釋起來難,但了解後可以很容易地了解關聯之處。
日後我再每一篇開一個文章來說好了。
表示老闆在催我上班了,就先這樣咯~
bye~