Chinaunix首页 | 论坛 | 博客
  • 博客访问: 836459
  • 博文数量: 61
  • 博客积分: 2315
  • 博客等级: 大尉
  • 技术积分: 2560
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-22 18:00
文章分类

全部博文(61)

文章存档

2015年(3)

2014年(3)

2013年(9)

2012年(23)

2011年(23)

分类: C/C++

2012-01-12 16:38:29

最近网友问到这一问题,但我更希望被问的是“C程序员需要学面向对象编程吗?”,那就让我先从回答这一问题开始,并做适当的扩展。

就我的成长经历来看,C程序员必须学习面向对象编程!面向对象编程语言有其天然的一个优势 — 将软件世界的一切象现实世界那样视为对象。我在《专业嵌入式软件开发》一书的《设计,质量之本》一章中指出,软件设计的一个原则是“以人为本”,在软件世界中构建现实世界就能很好地贯彻这一原则,而对象在编程语言中的引入提供了设计便利性。对象的引入使得编程语言具有更具结构化的表达能力,这有助于提高程序的可维护性。

从C程序员的角度来看,通过使用对象能让程序更具模块性,而模块化是我们所倡导的很重要的软件开发方法之一。一旦掌握面象对象编程,C程序员的设计能力通常会有较大幅度的提升。这种提升使得即便是用C语言编程也能写出更具模块化的代码。这是我主张C程序员一定要学习面向对象编程的根本原因。

然而,尽管面向对象编程这种方法有其优势,但学习起来并不那么的容易,尤其对于从C语言过渡到C++的程序员。学习的第一个难点在于,面象对象编程与面向过程编程(指C语言)具有完全不同的思维方式。其差异性类似于对于使用拼音输入法的人来说第一反应是为字拼音,而使用五笔输入法的第一反应却是将字拆成字根。象练习五笔输入法那样,学习面向对象编程需要一定的时间通过模仿和实践去掌握面向对象的思维方法。在没有掌握面向对象编程方法之前,我们会认为它比面象对象编程复杂,且觉得很绕。然而,一旦掌握,你会发现它又是那样的自然。

学习的第二个难点,在于C++语言本身上。C++编程语言应是最复杂的系统编程语言,这可从《Effective C++》、《More Effective C++》、《Exceptional C++》和《More Exceptional C++》等书加起来有近200个编程规则可以看出。语言的复杂性增加了掌握它的难度。如果不使用像pc-lint这样的静态分析工具,我们很难写出专业的C++程序。

除了C++语言本身的复杂性,C程序员在转向C++时,由于C++对C语言语法的兼容,使得我们容易犯使用C++编写面向过程程序的错误。这在某种程度上不利于我们更快地掌握面向对象编程。

优雅的编程语言有助于收敛我们的编程行为,从而写出更好的程序。但真正决定程序可读性的,是程序员的逻辑思维是否清晰和表达是否精确。再好的编程语言,逻辑混乱和表达不精确的程序员一定会将程序写成“狗皮膏药”。从这一点来看,尽管C++倍受争议,但还是值得C程序员去掌握。另外,在一个C项目上我们可以无缝地使用C++,相信这是C程序员选择C++很重要的原因。

本文出自“李云”博客,请务必保留此出处  http://blog.chinaunix.net/space.php?uid=26470037&do=blog&id=3057731 。
阅读(14696) | 评论(31) | 转发(7) |
给主人留下些什么吧!~~

lixiaoming18132012-01-17 09:44:26

别误会的意思,我说的是C程序员不一定要学C++,C的简便灵活可以轻松实现C++所具有的思想,面向对象的思想不是C++的专利,就面向对象的思想,相对来说,JAVA语言更纯粹。如果你对嵌入式软件很了解,你会发现C的无穷魅力,这个是C++无法比拟的,就嵌入式软件而言,效率和对硬件之间控制操作的简便性是很重要的,这正是C++所欠缺的。所以我认为面向对象的思想是可以学的,但不一定要学C++,看一些C语言大师们的作品也是可以学的。我无意挑起C++和JAVA之争,我没有限制他人喜欢语言的自由,我也限制不了,我之所以回复你的博文,是因为你这篇博文可能会对初学者产生错误的引导。

liupingjin2012-01-16 23:58:46

杭州李云: 我的理解是,你想以做项目的形式来学习C++,而且是没有图形界面的,对吗?如果是这样,那可以使用标准C++库和C库。

我现在正在写《C++平台与框架开发》一书,其.....
谢谢!如果可以的话,我愿意尝试一下。liuyanyin8@qq.com

杭州李云2012-01-16 22:11:27

lixiaoming1813: 那书的反馈并不能说明什么,面向对象只是一个编程思想,并不一定要学C++,C++有太多C的包袱导致其不伦不类,JAVA才是完全面向对象的,C程序员不一定需要过渡到C.....
建议再看一看我下面给Heartwork博友的回复。C++的不完美是公认的,我们不需在这里多费笔墨去讨论了,也不要掀起什么C++与Java之争。

致于你爱C也好、或是Java也好,这是你的自由,没有人会限制你。同样地,你当然也不会去限制他人,对吗?

lixiaoming18132012-01-16 17:22:14

那书的反馈并不能说明什么,面向对象只是一个编程思想,并不一定要学C++,C++有太多C的包袱导致其不伦不类,JAVA才是完全面向对象的,C程序员不一定需要过渡到C++,C++有的思想C能实现,C的简便灵活和适用范围是C++不及的,别在鼓吹学C++了。

杭州李云2012-01-16 13:15:23

rogerleeyu: C程序员必须学习面向对象编程。。。
这个很绝对的论断,我也是很不赞同的。也是一个很误导人的论断。
c++自然有他的优势,c本身也是特别有魅力的。我个人就特别.....
请看下面我对Heartwork博友的回复。

是不是误导不是谁简单一句话的问题,大家得有自己的判断力,不要人云亦云。你也不想看到没有观点的文章,对吗?

看一看现在热门的语言中有多少是支持OO的。从 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 来看,top5中有Java、C++、C#和Objective-C四种语言支持OO。
<