作者tinlans ( )
看板OOAD
标题Re: 物件导向的缺点 ??
时间Thu Jun 12 13:46:42 2008
※ 引述《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 (
[email protected])
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
1F:推 wupojung :缺点 不会的人就是不会...不熟的人会乱写 06/23 01:05
2F:推 opman :不想学的,还是不想学. 07/01 11:58
3F:推 revivalworld:@v@ 07/12 23:00
4F:推 legnaleurc :哪个东西不是这样?XD 07/14 15:57