- 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
- 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
- 3、此文档由网友上传,因疑似侵权的原因,本站不提供该文档下载,只提供部分内容试读。如果您是出版社/作者,看到后可认领文档,您也可以联系本站进行批量认领。
查看更多
第0章为什么要用c.doc
第0章 为什么要用C++ (11-15)
0.1 原因
为什么选择C++而不是C?或者更抽象一点,为什么选择面向对象语言,而不是面向过程语言或汇编语言?
这是一个很好的问题。有人可能心里知道一些,但说不清楚;有人可能会想到很多,并认为这是一个很泛泛的问题,说来话长。其实答案很简单:如果是一个技术人员在问这个问题,答案是“为了(更好地)复用代码”;如果是一个非技术人员在问(比如你的老板或是什么资本家),回答只需两个字“省钱”,或者让他眼睛发亮的四个字“省很多钱”。
话虽不同,其背后的道理却是一样的。软件开发己经有几十年的历史了,每个人都知道这个行业最费人力,因为从开发到测试,再到维护,基本上以人的手工为主。我们还知道,软件开发人员从来都是高薪阶层。所以,软件的成本主要源于人的成本。那么如何降低成本?代码复用成了持续不断的主题。这是因为如果代码能够复用,则相应的开发时间、测试时间,以及分析修改时间都能节省下来,而这些时间都对应于软件人员的高薪。可见,代码复用率越高,成本削减的越多。
C++语言,或者说所有面向对象语言,就是针对代码复用设计的。我们可以列举一下面向对象语言的有名的特点:
封装:把具体实现封装在类内,而类内类外的代码只靠一些公共接口联系起来,类内实现接口的功能,类外使用接口的功能。目的是什么?类内实现变化了,可以不影响类外代码(复用);类外使用代码变化了,可以不影响类内代码(也是复用)。
继承:子类可以继承父类的东西(复用),也可以扩展自己新的特性,这些新特性不会影响父类,也不会影响使用父类的代码(复用),甚至子类可以直接以父类的身份,使用所有父类可使用的代码(还是复用)。
多态:父类和子类可以为同一个接口(复用)提供不同的实现,外部代码不需任何改动(复用)就可以拥有不同的特性。
0.2 语言的发展和代码复用
一个主流语言的出现,或者说语言发展的一次质的飞跃,其背后都有代码复用的影子。C语言取代汇编而流行,源于UNIX操作系统的开发。在这之前的操作系统,基本上是用汇编写成的,而UNIX的90%是C,只有10%左右是汇编。带来的好处是,UNIX比其他操作系统更容易移植到不同的机器上,因为不必重写所有代码,90%只需重新编译(当然需要改动,现在看来改动应该还是一件艰巨的工作,但比起用汇编语言重头写要省事多了)。
C++较之C在代码复用上的能力更强。一方面,C++试图不加修改地整块〈类〉复用代码,而不像C那样需要逐行扫描修改(如同UMX移植时);另一方面,C++的复用接口(主要是类接口)更丰富、灵活、安全,而C主要依靠函数接口,包容性太窄,而函数间的联系也太弱。
我们再看看Java。它的流行不单是因为它也是一种面向对象的语言,还因为它在代码复用上有独到之处。我们基本上可以把一个网页看成一个程序,而浏览网页是将该程序从Internet上下载到本地机器上运行。但这个程序比较特殊,它要求能运行在所有平台上(尽可能)。我们很难用C++来写这样的网页,因为C中编译器只能编译出适应一种平台(CPU)的执行代码。另一种方式是用诸如HTML之类的语言,它们的特点是将源码下载到客户端,再由客户端解释执行。我们确实希望网页一次开发,能(复)用到所有平台,但有时我们不想公开源码(这实际上是不同组织间的代码复用问题,和一个组织内部的复用还不同,因为有商业利益或版权问题)。此时,Java可以帮助我们。它实际上是设计了一个虚拟平台(CPU),所有Java语言源码都会编译成可运行在这个虚拟平台上的二进制执行程序,而客户端的Java解释器负责将这个虚拟平台的程序指令解释成真正平台的指令。可见,我们共享了目标级代码。
0.3 代码复用的特点
从以上的分析和我们自己的开发经验可以得出代码复用的两个特点。一是代码复用是一个由简到繁、从局部到整体的不断发展的过程。由于软件本身的复杂性,我们不可能一下子把代码做到复用率极高的程度。复用的经验和手段是一个逐渐积累的过程。具体到我们自己的程序,不要指望它们一下子成为代码复用的经典,从复用一个类、一个函数,甚至一两个好的编程风格或想法入手,日积月累,你手边会逐渐形成一个复用代码库,它将是你经验和财富的宝库。如果你所在的部门已经有几个人拥有复用代码库,那么恭喜你的部门,它可以成立一个技术委员会,负责收集和整合不同的复用代码库,这标志着你的部门己具备较高的专业水准和开发较大规模程序的能力。
代码复用的另一个特点是:为了复用,牺牲性能、“浪费”系统资源都不在话下。我们从汇编程序、C程序、C++程序,再到Java程序可以看出,复用性越强,性能越差(成倍下降),程序尺寸越大(成倍增加),但我们还是乐此不疲。究其原因,无非是性能、系统资源可以靠突飞猛进的硬件能力弥补,而硬件的成本比起人力资源根本不值一提。由此再顺便提醒大家
您可能关注的文档
最近下载
- 施工技术管理工作主要内容.docx VIP
- 部编版四年级上册语文修改病句专项练习题及.doc VIP
- 2025初中七年级数学上册《整式及其加减》大单元整体教学设计.docx
- 2024北京四中高二(上)期中数学(含答案).pdf
- 2025年高考数学大题突破01 三角函数、三角恒等变换与解三角形(8大题型)(原卷版).docx VIP
- 《航空发动机维修技术》——课件:焊接修理工艺.pptx VIP
- 中联HIS系统门诊医生操作手册.doc VIP
- 中小企业授信调查、审查、审批的管理办法.pdf VIP
- 妊娠期肝内胆汁淤积症临床诊治和管理指南(2024版)解读课件课件.pptx VIP
- 中联HIS系统门诊医生操作手册.docx VIP
原创力文档


文档评论(0)