close

很多人接觸物件導向總是因為公司需要用C++、Java來寫ap,所以就開始接觸OOP。但卻忘了,why OOP?,跳過why是一個壞習慣,總是直接進入到how to use,隨著時間久了,真的問你為什麼要用OO其實也說不出個所以然。記得OO主要就是希望更貼近真實世界,用更自然的方法描繪出程式的邏輯運作。

 

喂!馬步紮穩了沒。我總覺得學任何語言時,語法其實不是最重要的問題,先把這語言真正的精神瞭解,你才懂得他的適用性、優缺點各自為何。但現在的人越來越講求速成,只希望能趕快會用C++Java.NET寫程式,但寫了老半天我問他到底為什麼要用OO,很多人總是支支吾吾的說因為他可以支援

l          Data Abstraction

l          Encapsulation

l          Inheritance

l          Polymorphism

又來了~我不是出研究所考題,請不要一直被他有哪些特色,對每件事情如果你夠瞭解他你應該能要很白話的方式輕而易舉的把OO的核心價值描繪清楚。

 

OO只是更直觀的描繪出真實世界的運作。我常問坐在我對面的面試者,為什麼不用C、要用JavaC什麼都可以做啊,Java的好在哪裡?C速度更快耶,Java比較慢不是嗎?the answer is…?如果又要開始查google、翻書、想老半天,我想或許跟你OO還不熟勒。其實,OO的出現主要是要解決程式的易讀性、可維護性跟彈性等問題(當然OO的優點不只如此往後在細談囉!),這些多半不是再開發階段能立刻享受到的好處,但不要忘了80/20法則,百分之80%effort都是在維護期間出現的,這時候OO的優點就派上用場了。

 

舉個例子而言,如果今天出了一個題目:『你要產生一個人,設定他的身高、體重之後並且叫他走路』,你可以試著想看看在C語言中你要怎麼撰寫,我想通常會比較不直觀,並且需宣告不少變數;此外,為了日後看的懂你還會寫了不少註解。但OO中一切是非常自然的在描述上述的問題:

Person p;

p.height = 180;

p.weight = 80;

p.walk();

 

see. It looks so naturally. 我想應該不需要任何註解,你應該很好看得出來這個人叫p、身高180、體重80、之後開始走路吧!這就是OO的魅力喔…^^

 

至於為什麼可以有Person p這種宣告方式,其實也是很簡單的概念,你Person想成typep想成變數,那上面那一個跟int x,不就是同等的道理。差別只在於int是系統幫你準備好的型態,而Person則是需要我們自己抽象化描述而來(其實就是定義類別),當我們將Person抽象化定義成類別之後,就可以拿來當一般的type使用,而p就是我們所謂的物件。從這邊你應該不難想像到為何常聽到類別是靜態的、而物件是動態的;用類比的角度來看,int是靜態的型態,x是變數,然而變數是隨著執行會有所變動,當然就是動態的。又物件其實可以想成變數所以當然是動態的,每次產生時就會佔用記憶體空間。

 

上述的描繪都只是OO概念當中的冰山一腳,如果連這些你都尚未釐清,呼~請深呼吸一下誠實的面對殘酷的事實:『請務必~~砍掉重練!!』

arrow
arrow
    全站熱搜

    劉逸 發表在 痞客邦 留言(2) 人氣()