大型程序一定要面向对象吗?

不同视角、不同观点、深度探讨,禁止人品和道德攻击
回复
头像
bearscafe
帖子: 694
注册时间: 2007-05-05 23:11
送出感谢: 2 次
接收感谢: 0

大型程序一定要面向对象吗?

#1

帖子 bearscafe » 2010-11-12 10:39

见过的大型程序的源码有:
1. 面向对象的,C++实现(如Audacity等大多数程序)
2. 面向对象的,纯C实现(如Gimp等GTK+程序)
3. 非面向对象的,由巨多的C函数构成(如语音软件Sphinx3 [http://en.wikipedia.org/wiki/CMU_Sphinx])。

我自己的经验,写稍微有点规模的程序,使用面向对象的方法都要比基于过程的方法方便得太多了。
不使用面向对象方法,相当于抛弃了设计模式等各种有效的可复用设计。

有些大型软件选择完全不使用面向对象方法,难道仅仅是因为历史原因吗?

另外不太明白用纯C实现面向对象的优势何在。虽然也许提高了些执行效率和可移植性,但大大增加了开发难度。像GTK+程序,开发速度应该比效率和移植性更重要吧?
头像
leeaman
帖子: 30702
注册时间: 2007-02-02 18:14
系统: debian sid
送出感谢: 1 次
接收感谢: 23 次

Re: 大型程序一定要面向对象吗?

#2

帖子 leeaman » 2010-11-12 10:43

母鸡倒
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
头像
cjxgm
帖子: 1950
注册时间: 2010-04-23 20:40
系统: Arch Linux
来自: 浙江·杭州
送出感谢: 1 次
接收感谢: 30 次
联系:

Re: 大型程序一定要面向对象吗?

#3

帖子 cjxgm » 2010-11-14 12:10

I hate OOP
lubcat
帖子: 2061
注册时间: 2010-09-27 12:59
送出感谢: 0
接收感谢: 0

Re: 大型程序一定要面向对象吗?

#4

帖子 lubcat » 2010-11-14 12:21

不了解。
待解惑。
生活里,有很多转瞬即逝,像在车站的告别,刚刚还相互拥抱,转眼已各自天涯。很多时候,你不懂,我也不懂,就这样,说着说着就变了,听着听着就倦了,看着看着就厌了,跟着跟着就慢了,走着走着就散了,爱着爱着就淡了,想着想着就算了。
klose911
帖子: 106
注册时间: 2008-02-01 17:18
送出感谢: 0
接收感谢: 0

Re: 大型程序一定要面向对象吗?

#5

帖子 klose911 » 2010-11-14 20:20

面向对象仅仅是一种思想,就是抽象数据类型+多态,是一种从人的角度去分析问题的方法。
接近底层处理和硬件打交代的时候,就不得不从机器的角度去思考。在这些地方使用面向对象就显得不合时宜, 硬要过多的抽象分层,更会使得整个设计不直观。

面向对象与编程语言无关,用C也可以很好的实现面向对象的设计思想。
有人喜欢用C实现面向对象,可能他们觉得C++是一个实在糟糕的所谓内嵌面向对象机制的编程语言,而java速度非常不给力,object-C以及smalltalk支持的库相对少。

以上纯属个人看法,希望有人指正。
头像
ChloeRei
帖子: 1021
注册时间: 2007-11-23 9:49
送出感谢: 0
接收感谢: 1 次

Re: 大型程序一定要面向对象吗?

#6

帖子 ChloeRei » 2010-11-17 13:47

什么对象什么模式,其实就是模块化,隔离,隐藏。在OOP概念出来之前那些优秀C程序员就已经在这样做了,而C++编译器就是机器帮检查一遍。如果觉得C++提供的抽象层还不如自己的概念清晰,或者额外带来了很多缺陷,那他们就继续C了。

方法论一直层出不穷,无论看什么时代的历史都是在coding,debuging,testing中轮回……

喜欢RoR的初级魔法师撸过……
这些用户感谢了作者 ChloeRei 于这个帖子:
bearscafe (2013-06-03 1:05)
评价: 3.7%
lllvdee
帖子: 6
注册时间: 2009-11-17 13:27
送出感谢: 0
接收感谢: 0

Re: 大型程序一定要面向对象吗?

#7

帖子 lllvdee » 2010-12-05 16:31

:em11 :em11 :em11 :em11 :em11 只会简单编程的鹿过了~
头像
tangboyun
帖子: 701
注册时间: 2009-07-25 1:57
送出感谢: 5 次
接收感谢: 13 次
联系:

Re: 大型程序一定要面向对象吗?

#8

帖子 tangboyun » 2010-12-12 11:39

你这个问题相当于于在问COM组件的意义在哪里?

用c实现的好处是二进制级别的兼容性。可以更容易的在不同编程语言的模块间切换。像GTK这样的话,就很容易用其他语言来调用这个模块,因为任何语言的接口都可以比较方便的转换为C接口。像GTK这种兼容性是很重要的,你要易用性的话,完全可以再根据自己使用的高级语言,来封装gtk接口。比如php 的gtk,python的gtk接口,甚至是haskell这类的gtk接口。
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45
送出感谢: 0
接收感谢: 9 次

Re: 大型程序一定要面向对象吗?

#9

帖子 fanhe » 2010-12-16 1:32

C++本身过于复杂,对于一个工具来说,不需要太复杂的工具,只需要一个简单好用的
于是很多人偏好c,例如我

大工程一般都至少模块化的,人类的能力很有限,必须把大的东西慢慢分割成若干小的部分才能好好地干活,这个是没办法的事
而且模块化对于维护来说有着极大的吸引力
至于面向对象,这个还是要看选择,面向对象还是相当好用的,linux内核有很多的面向对象的c实现

反正,大型程序必须要符合的要求,例如可维护性,正确性啥的一堆堆是不变的,只要能达到这些要求,选择什么方法,很多时候是看leader选择
回复

回到 “深度PK版”