Re: 物件導向的缺點 ??
※ 引述《ji3g45j (pig)》之銘言:
: ※ 引述《SureWin (surewin)》之銘言:
: : 想問一下
: : 現在大家都用物件導向 的分析設計甚至
: : coding 現在很熱門
: : 我想問一下 那它有沒有缺點阿
: : 有沒有 什麼資料 是探討它的缺點的
: :
: C++比C擁有的語法多得太多了,只要對C++沒有深入了解的人是非常容易寫出
: 效率差的程式,這大概就是缺點吧。
: 為什麼要寫軟體,無非就是要創造一個現實能用的產品。既然談到現實世界,
: 物件導向就變得非常得有用,它讓你的程式設計的思考方向,很趨進現實世界
: 所需要建立的各種元件來達成功能,而且有時後元件還能夠重複使用。
物件導向的功用除了程式碼再利用,
還有 team work 和應付變化等等的優勢,
而其中最重要的就是應付變化。
要應付變化基本上就是使用繼承和多型,
多型在 C 也可以實現,
在 struct 裡利用一個 int 或 enum 欄位標示真實型別,
然後放個 union 或 void * 型別的 data member,
而 virtual function 的概念也可以用 function pointer 實作,
而這些 type 和 pointer 的切換全部由 programmer 負責,
若是 OOPL 的話可以由 compiler 幫忙產生相關的 code,
所謂的效率變差問題完全不存在,
C 要寫成彈性高到能應付多變的需求時也是需要手寫這些 code,
而這些手寫的 code 未必會比 compiler 內部產生出來的還有效率,
發生的人為失誤的機率也會提高。
如果你開發的軟體不需要應付變化,
生命週期也很短,
那麼不使用物件導向機制也可以做得很好,
效率也會比較棒,
C++ 也允許 programmer 這麼做。
彈性、效率、記憶體用量常常是難以兼得的東西,
物件導向本身偏重在彈性,
選了物件導向基本上就是選了彈性犧牲另外兩者,
當然在一個專案裡物件導向絕對不是 all or none 的東西,
你可以選擇偏向 UI 的地方使用物件導向,
以獲得最大的彈性和應變力又不失效率,
因為用 80/20 rule 來審視的話 UI module 的話,
它通常不會是影響 80% 效率的那 20% 程式。
我個人都是先用純 OO 把程式寫一遍,
真的需要效能的話再用效能分析器去查效能瓶頸在哪,
不然每寫一行就要擔心它效率好不好,
東西不知道要寫到哪天才寫得出來,
上個世紀的程式偏小所以很多 programmer 這樣做沒問題,
但那種做法在這個世紀行不通。
至於學生做研究的話方法可能會做產品不太一樣,
演算法的部分可能也會用 OO 做抽象化,
讓演算法和演算法細部的行為可以在 runtime 切換,
提升實驗的效率和數據的豐富性。
--
Ling-hua Tseng (uranus@it.muds.net)
Department of Computer Science, National Tsing-Hua University
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage: https://it.muds.net/~uranus
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.222.248
推
06/23 01:05, , 1F
06/23 01:05, 1F
推
07/01 11:58, , 2F
07/01 11:58, 2F
推
07/12 23:00, , 3F
07/12 23:00, 3F
推
07/14 15:57, , 4F
07/14 15:57, 4F
討論串 (同標題文章)
OOAD 近期熱門文章
PTT數位生活區 即時熱門文章