Chinaunix首页 | 论坛 | 博客
  • 博客访问: 900683
  • 博文数量: 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 。
阅读(15828) | 评论(31) | 转发(7) |
给主人留下些什么吧!~~

杭州李云2012-01-16 12:59:32

lixiaoming1813: 楼主的水平也就只能停留在这个水平了,没有将C和C++彻底弄清楚就人云亦云,你敢豪言自己完全理解C++了吗?你敢说自己对C有过深入理解吗?
没整明白就不要乱说。.....
敢!

从读者对我的《专业嵌入式软件开发—全面走向高质高效编程》一书的反馈来看,这本书的内容不是忽悠,没有完全掌握C还敢说专业嵌入式软件开发?

至于C++,我正在写《C++平台与框架开发》一书,到时请赐教!

杭州李云2012-01-16 12:56:50

liupingjin: 你好,李云:
      首先感谢你的51博客,从那上面我学到了很多!后来也买了你的书(虽然其中有些内容你的博客上已经发表)。
      我是一名c程序员,工作的开发.....
我的理解是,你想以做项目的形式来学习C++,而且是没有图形界面的,对吗?如果是这样,那可以使用标准C++库和C库。

我现在正在写《C++平台与框架开发》一书,其中聚焦于套接字和状态机编程。能不能我给你找一件事做做,比如,让你用C++设计一个套接字通讯的库?试试看!

rogerleeyu2012-01-16 09:55:05

C程序员必须学习面向对象编程。。。
这个很绝对的论断,我也是很不赞同的。也是一个很误导人的论断。
c++自然有他的优势,c本身也是特别有魅力的。我个人就特别喜欢c,但是不太喜欢c++,虽然我也知道接触点c++会蛮好,但是比起perl。lua. lpc ,我为什么好花时间精力去学习c++呢。
虽然是在天朝,我们也可以最大限度的去做一个快乐的coder.自己喜欢的,适合自己的就是最好的,没什么一定不一定必须的。

lixiaoming18132012-01-16 09:33:43

楼主的水平也就只能停留在这个水平了,没有将C和C++彻底弄清楚就人云亦云,你敢豪言自己完全理解C++了吗?你敢说自己对C有过深入理解吗?
没整明白就不要乱说。

liupingjin2012-01-16 01:32:38

你好,李云:
      首先感谢你的51博客,从那上面我学到了很多!后来也买了你的书(虽然其中有些内容你的博客上已经发表)。
      我是一名c程序员,工作的开发都是用c来完成的。我也想学习C++,也买了一些C++不错的书籍来看,但是总觉得没有一个平台去实践(先不要急于批评我!)。我大学的时候有用过MFC,但是慢慢发现那些只是皮毛的东西(就是拖拖控件,写写控件函数等等)。再加上我的工作都是在linux下开发的。所以对window下的这种太上层的工具型的开发不是很感兴趣。在linux下,用QT吧,但我的工作很少涉及到UI方面;有人说一般开发游戏都是用C++,但是我对游戏开发不感兴趣,工作的行业也不着边。
       很多人看到这里会觉得我前面讲的很多东西都漏洞百出,随便都可以挑出一句来进行批判,没关系,我本身并不是一个经验丰富的人物,我只是刚毕业一两年的工作者。但言归正传,我想请教的是:有什么样的支撑平台或者库,我可以在