2009年10月22日 星期四

物件導向:封裝、繼承、多型

最近身邊很多人在找工作,漫多公司會有考試以及口試中會有技術問答的部分。
以不碰硬體的軟體工程師來說,技術問題我簡略的分成兩類:

偏硬的公司,比較會問記憶體位址相關的問題,如指標、參考等這些一般人比較容易搞不清楚的觀念。
偏軟的公司,比較會問物件導向相關的問題,如物件導向的優點、特性、以及實務上的一些問題。
當然除此之外一些共通的部分像是作業系統或計算機架構,這就看平常在學校有沒有好好學。

我為什麼把問題分成漲兩類呢?因為我發現身旁漫多人可能因為本身習慣的關係,兩種觀念比較無法同時記住。
通常平常很會用指標、參考的人,很可能會對物件導向比較不熟,例如c習慣使用者。
而平常慣用 oop language 的朋友,如 java、c#,則對指標參考等的觀念記憶稍微薄弱一些。

之前有寫過指標類的介紹了,不過似乎有點簡略,之後有空再補完。

今天介紹一下物件導向一些基本概念,這些同時也是找工作筆試面試常會遇到的一些問題。


封裝
我之前都是寫 c# 居多,即使如此,當面試時公司主管問我:物件導向為什麼要封裝?我卻回答的零零落落。
因為平常用的太習慣了,覺得封裝已經是在自然不過的事情,哪需要理由?
基本上這種問題你只要提到 keyword 就好了:
Information hiding, 避免程式各個物件互相干擾,降低程式的複雜度及維護上的困難度。

繼承
繼承的目的:一語概之就是為了 reuse。

多型
多型與超載 (Overloading)與重寫 (Overriding)相關,和上面的繼承更是息息相關。
一個物件如果你看待的方式不同,就可以發揮不同的功用。
這在現實生活中很合理,一個碗可以拿來當容器,也可以拿來盛土種花,當然要倒過來當蓋子也行,甚至,你要拿來砸碎當發聲的樂器也不犯法。
因此同一個物件,在不同的場合,不同的使用情境,就應該合理運作展現應有的效果,這也就是多型的精神。

參考資料:
http://www.ithome.com.tw/itadm/article.php?c=45903
http://140.134.26.7/wbemwiki/index.php/%E7%AC%AC%E4%B8%89%E7%AB%A0_%E7%89%A9%E4%BB%B6%E5%B0%8E%E5%90%91%E8%A8%AD%E8%A8%88

沒有留言:

張貼留言