【給程式新手】陰魂不散的物件導向?
物件導向是啥?為啥哪裡都是?一定要用嗎?
我用Java寫程式,是不是就是會用"物件導向"?
我們換個方式釐清一下,
當我們說"Java是物件導向語言"的時候,指的是"程式語言Java"支援"物件導向"的寫法。
我們把上面那句翻成白話文來類比一下:
"程式語言Java"支援"物件導向"的寫法 -> 寫中文的文章,可以用"順序法"來表達。
了解了?
"物件導向"指的是一種表達的方式,就像寫文章可以用"倒敘法"寫,也可以用"條列式"表達,
你也可以採用不一樣的Style,像:
Protocol Programing, Promise Programming, Functional Programming 等等,
你還可以邊用Object-Oriented Programming寫邏輯,加上Promise Programming接API再用Reactive Programming處理UI組成Combo技!
那為什麼大家都推薦用"物件導向"呢?
我的理由是,因為這種寫法表達的含義,跟我們的生活息息相關,是一種比較讓人容易理解的描述方式。
舉個例子:
我們要去原物料賣場,找一顆螺絲,我們可以怎麼做?
1. 從第一個開始找,直到找到我們要的螺絲。
我想幾乎所有語言都可以這樣寫,只是表達需要語法不一樣:
Cargo weWant = null; for cargo in storageList { if (cargo.name.equal(name)) { weWant = cargo; break; } }
你會說,笨啊,哪有人進賣場找東西自己要慢慢找的,不會叫工作人員幫你找啊?
所以我們有第二種方案:
2. 把我們要的"螺絲資訊"給"工作人員",讓他幫我們找。
物件導向的表達:
class Staff { public Cargo findStock(String name) { for (Cargo cargo in storageList) { if (cargo.name.equal(name)) { return cargo; } } return null; } } ... Cargo weWant = staff.findStock("螺絲")
我們有兩種方案了,哪個好?
對機器而言,方案1好,省記憶體執行快速,但建議要"表達"成方案2,為啥?
我們把程式碼換成比較"難看"的表達方式:
方案1:
Cargo cg = null; for a in arr { if (a.name.equal(name)) { cg = a; break; } }
方案2:
class Staff { public Cargo findStock(String name) { for (Cargo cg in storageList) { if (cg.name.equal(name)) { return cg; } } return null; } } ... Cargo cg = staff.findStock("螺絲")
上面很清楚可以看到,方案1如果不是"Cargo"跟"a.name"幫你了解,會完全看不出來作者想做啥,要不要砍掉也是種困擾,方案2至少大致瞭解他要表達的意思,知道staff是獨立的可分開,砍掉還可以換新的組成上去。
重新看兩個方案,三個原因你要用方案2:
1. 清楚明瞭,命名好的情況下,你想表達的事情,可以被判讀出來。
2. 職責分清,好維護,至少東西拿錯,
3. 你隨時可以把"工作人員"這個角色換成其他概念,只需要把角色建好,換置就可以了,如:自動販賣機。
所以我們為啥要用"物件導向"的方式寫程式,也推薦一開始就使用?
1. 可以貼近你的生活經驗,容易表達。
2. 職責分工明確,便於維護。
3. 讓你容易理解,加速學習實作。
不覺得用"物件導向"很像在寫SOP流程嗎?
當然,你可以換另外一種表達方式,就像一開始說得,"物件導向"是一種表達方式,
回歸到寫作程式的基本問題,程式語言是給誰看的?
就知道你會說"是給機器看的",絕對是"給人看的",人看不懂,程式沒辦法維護,除了砍掉重練,沒有第二個方法了,
更何況不可能只有你會看到這段程式,敢保證未來的你不會看到?
就像我常會大喊:
"X,這誰寫的?寫得這麼...."
偷瞄一下作者署名.....
"寫得這麼辛苦....該給他拍拍手.... :P"
留言
張貼留言