见过的大型程序的源码有:
1. 面向对象的,C++实现(如Audacity等大多数程序)
2. 面向对象的,纯C实现(如Gimp等GTK+程序)
3. 非面向对象的,由巨多的C函数构成(如语音软件Sphinx3 [http://en.wikipedia.org/wiki/CMU_Sphinx])。
我自己的经验,写稍微有点规模的程序,使用面向对象的方法都要比基于过程的方法方便得太多了。
不使用面向对象方法,相当于抛弃了设计模式等各种有效的可复用设计。
有些大型软件选择完全不使用面向对象方法,难道仅仅是因为历史原因吗?
另外不太明白用纯C实现面向对象的优势何在。虽然也许提高了些执行效率和可移植性,但大大增加了开发难度。像GTK+程序,开发速度应该比效率和移植性更重要吧?
大型程序一定要面向对象吗?
- bearscafe
- 帖子: 694
- 注册时间: 2007-05-05 23:11
- leeaman
- 帖子: 30702
- 注册时间: 2007-02-02 18:14
- 系统: debian sid
- cjxgm
- 帖子: 1952
- 注册时间: 2010-04-23 20:40
- 系统: Arch Linux
- 来自: 浙江·杭州
- 联系:
-
- 帖子: 2061
- 注册时间: 2010-09-27 12:59
Re: 大型程序一定要面向对象吗?
不了解。
待解惑。
待解惑。
生活里,有很多转瞬即逝,像在车站的告别,刚刚还相互拥抱,转眼已各自天涯。很多时候,你不懂,我也不懂,就这样,说着说着就变了,听着听着就倦了,看着看着就厌了,跟着跟着就慢了,走着走着就散了,爱着爱着就淡了,想着想着就算了。
-
- 帖子: 106
- 注册时间: 2008-02-01 17:18
Re: 大型程序一定要面向对象吗?
面向对象仅仅是一种思想,就是抽象数据类型+多态,是一种从人的角度去分析问题的方法。
接近底层处理和硬件打交代的时候,就不得不从机器的角度去思考。在这些地方使用面向对象就显得不合时宜, 硬要过多的抽象分层,更会使得整个设计不直观。
面向对象与编程语言无关,用C也可以很好的实现面向对象的设计思想。
有人喜欢用C实现面向对象,可能他们觉得C++是一个实在糟糕的所谓内嵌面向对象机制的编程语言,而java速度非常不给力,object-C以及smalltalk支持的库相对少。
以上纯属个人看法,希望有人指正。
接近底层处理和硬件打交代的时候,就不得不从机器的角度去思考。在这些地方使用面向对象就显得不合时宜, 硬要过多的抽象分层,更会使得整个设计不直观。
面向对象与编程语言无关,用C也可以很好的实现面向对象的设计思想。
有人喜欢用C实现面向对象,可能他们觉得C++是一个实在糟糕的所谓内嵌面向对象机制的编程语言,而java速度非常不给力,object-C以及smalltalk支持的库相对少。
以上纯属个人看法,希望有人指正。
- ChloeRei
- 帖子: 1021
- 注册时间: 2007-11-23 9:49
Re: 大型程序一定要面向对象吗?
什么对象什么模式,其实就是模块化,隔离,隐藏。在OOP概念出来之前那些优秀C程序员就已经在这样做了,而C++编译器就是机器帮检查一遍。如果觉得C++提供的抽象层还不如自己的概念清晰,或者额外带来了很多缺陷,那他们就继续C了。
方法论一直层出不穷,无论看什么时代的历史都是在coding,debuging,testing中轮回……
喜欢RoR的初级魔法师撸过……
方法论一直层出不穷,无论看什么时代的历史都是在coding,debuging,testing中轮回……
喜欢RoR的初级魔法师撸过……
-
- 帖子: 6
- 注册时间: 2009-11-17 13:27
Re: 大型程序一定要面向对象吗?
只会简单编程的鹿过了~
- tangboyun
- 帖子: 701
- 注册时间: 2009-07-25 1:57
- 联系:
Re: 大型程序一定要面向对象吗?
你这个问题相当于于在问COM组件的意义在哪里?
用c实现的好处是二进制级别的兼容性。可以更容易的在不同编程语言的模块间切换。像GTK这样的话,就很容易用其他语言来调用这个模块,因为任何语言的接口都可以比较方便的转换为C接口。像GTK这种兼容性是很重要的,你要易用性的话,完全可以再根据自己使用的高级语言,来封装gtk接口。比如php 的gtk,python的gtk接口,甚至是haskell这类的gtk接口。
用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
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
- fanhe
- 帖子: 2357
- 注册时间: 2007-03-24 23:45
Re: 大型程序一定要面向对象吗?
C++本身过于复杂,对于一个工具来说,不需要太复杂的工具,只需要一个简单好用的
于是很多人偏好c,例如我
大工程一般都至少模块化的,人类的能力很有限,必须把大的东西慢慢分割成若干小的部分才能好好地干活,这个是没办法的事
而且模块化对于维护来说有着极大的吸引力
至于面向对象,这个还是要看选择,面向对象还是相当好用的,linux内核有很多的面向对象的c实现
反正,大型程序必须要符合的要求,例如可维护性,正确性啥的一堆堆是不变的,只要能达到这些要求,选择什么方法,很多时候是看leader选择
于是很多人偏好c,例如我
大工程一般都至少模块化的,人类的能力很有限,必须把大的东西慢慢分割成若干小的部分才能好好地干活,这个是没办法的事
而且模块化对于维护来说有着极大的吸引力
至于面向对象,这个还是要看选择,面向对象还是相当好用的,linux内核有很多的面向对象的c实现
反正,大型程序必须要符合的要求,例如可维护性,正确性啥的一堆堆是不变的,只要能达到这些要求,选择什么方法,很多时候是看leader选择