【給程式新手】陰魂不散的物件導向?


物件導向是啥?為啥哪裡都是?一定要用嗎?
我用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"

留言

這個網誌中的熱門文章

【教學】Facebook SDK 首部曲:登入Facebook(這是我的一小步...卻是人類...咦?這麼多人啊?)

【教學】Facebook SDK 前傳:準備Social一下