本书是美国AddisonWesley公司出版的对象技术(最新2003年)丛书之一,旨在用面向对象技术开发实时和嵌入式系统软件。<br>众所周知,实时和嵌入式系统软件由于其开发层次较低,直接在硬件上开发时间紧要、安全紧要、高可靠性的系统,传统上是C语言和汇编语言的天下。传统的软件工程技术着重软件的可移植、可复用、可伸缩,易维护、低成本,借助于一个良好的平台,快速交付,支持业务过程的快速变革的高适应性系统。软件工程使平台以上的系统日臻完善,发展了面向对象技术、构件技术乃至于直接使用软件服务。“相信”实现服务的构件、支持构件实现的平台(操作系统、网络软件及数据库软件)都是最优或较优的。显然,与实时嵌入式系统要处处操心每个软件元件的性能、可靠性、安全性走的是两条路,他们“不相信”臃肿的通用平台能解决他们在有限资源下做出高性能系统所遇到的各种问题。所以,实时和嵌入式系统的业者一般不关心软件工程技术的最新进展,也很少在他们的工作中采用软件工程新技术,停留在提供完善的模块和子系统层次上,强耦合的过程式模块开发还是主流。<br>从系统的观点来看,实时嵌入式系统也是系统,特别是硬件技术的快速发展,实时嵌入式软件也有快速适应硬件型号升级问题,也有业务快速变更要求可伸缩、可修改(例如,军用导弹、飞机型号升级,民用产品换代)可复用问题。1975年,美国国防部开发的Ada语言系统就是为了在主机上开发适应变化的系统。通过交叉编译生成机载、弹载的目标系统嵌入到应用环境中,一切系统维护、伸缩均在Ada源代码级软件上完成。在某种意义上,今日的面向对象技术得益于Ada的数据抽象和模块封装。由于Ada为保证军用软件可移植性管得过严,面向对象技术蓬勃发展在C++上得以体现。于是实时嵌入式系统自然转向底层是C的C++。但对象化对实时性、可靠性并没有直接的好处,所以在小型实时嵌入式应用中,面向对象依然不占上风,仍然是过程式开发方法最后穿上C++外衣。尽管如此,有了C++这个桥,为实时嵌入式系统再一次和当前软件工程技术合流打下了良好的基础。<br>面向对象封装带来的松耦合,使它成为分布式可伸缩系统的首选技术,且随着当今网络的普及,对象成了应用的第一类公民,网络是对象交互和通信的世界。打包也好,请代理也好,不是对象只能窝在本机上做点实际工作。<br>为了参与网络上提供实时服务,为了支持应用系统的快速变更,快速提供嵌入式产品,大幅度降低成本提供标准化、构件化产品,实时嵌入式系统的对象化、构件化势在必行!当然,也应该看到,CPU速度大幅提高,减缓这类系统的开发者因实时对标准化、构件化的抵制,使他们乐于参加现代技术大合奏。<br>重新认识软件是有体系结构的。软件开发是一个软件过程,是近十年软件技术最重要的成就。过去的开发着眼于功能性能,无形中完成了一个软件过程,得到一个有体系结构的产品。当时并不在意过程好坏,体系结构是什么样的。通过验收能够满足使用的就是好产品。但情况并非如此顺利,“树欲静而风不止”,使用中不断发现新bug,用户一再要求改进(受其他新技术影响或总结出使用经验)。过程和体系结构在软件可适应、易维护性上显现出极大的威胁力。不良的体系结构使此处bug消除,彼处新bug又冒出,甚至导致整个系统崩溃。不良的过程找不到资以分析的文档、数据,一个不大的改进每步都从头试起,迟迟调不出来,大量窝工,成本飚升。于是,人们把软件开发从以功能性能为中心转而为以软件体系结构为中心,精心改进软件过程,从而软件在改变之中依然能保证符合需求的功能,并能保证高质量和低成本。<br>体系结构从总体上决定了软件可能达到的各项质量指标。例如,别墅、板楼、塔楼,在通风、抗震、舒适程度、方便性、成本方面各不相同,一经确定则影响终身。例如楼层太矮、电梯过少、没有绿地等。软件过程通过精心安排软件制作的各项活动切实保证软件质量。该有的活动没有或不能即时到位都会造成低质量、高成本,甚至项目失败。过程是产品质量最直接的保证。所以ISO9000系列就是所有人工制品的(过程)质量标准。美国CMM标准化更是以过程成熟度来衡量软件企业有无资质承担软件开发。软件体系结构和软件过程相辅相成,一为软件内在质量保证,一为过程质量保证。所以,以体系结构为中心的最优过程开发已为世界广泛接受。<br>过程是以时间为进程的各项软件活动。开发活动完成都凝聚成有体系结构的软件,即它的后果(体系结构)是可分析、可测试度量的。优秀的体系结构如前所述,正是软件设计的目标。于是人们研究分析体系结构并寻找设计实现的途径。<br>体系结构不外乎是实现各项功能、性能的元构件有机组合的集合。在面向对象的背景下,它们都是类对象,为了设计(有机组合)方便,把对象组成惯用的、不易出错的、可靠的、接近标准化的形式,则为模式(pattern)。最小的模式是几个类对象组成的构件,最大的模式是若干构件组成的子系统。<br>最早也是最基础的设计模式是Liskov提出的七种基本模式,并提出对象构成模式的五条基本准则,为面向对象设计模式奠定了理论基础。随后是“四人帮”(Gamma等四人)提出了常用的25种设计模式,为以模式设计软件体系结构提供了工程实践的基础。不过,“四人帮”讨论的模式作用域是局部的,我们把它们叫做机制式的设计模式(mechanisticdesignpattern),因为它们为对象的协作定义了各种机制。这种模式有较大的局限,只在单个的协作内。本书并不讨论机制式的设计模式,本书讨论的是体系结构设计模式(architecturedesignpattern)。<br>当然,各软件应用领域也都有本领域的模式,如果总结出来作为准规划,则本领域软件开发速度会成倍提高,而软件质量也较容易得到保证。本书就为实时嵌入式领域总结出了54种模式。<br>本书作者BrucePowelDouglass博士在实时嵌入式系统领域工作已有26年,是世界公认的领袖人物,目前是本书推荐的ROPES(嵌入式系统的快速面向对象过程)的创始人。他也即时转入到面向对象领域,成为ILogix公司的首席技术指导,实时系统开发工具的领导者,也是UML规范嵌入系统会议顾问委员会的成员。Douglass博士为多个公司和组织做过咨询,包括NASA。他还是OMG的RTDA(RealTimeAnalysisandDesignWorkingGroup)的副主席和面向对象杂志的专栏作家。<br>本书可以作为实时嵌入式系统的设计人员和开发人员的技术参考书,也可以作为计算机、自动化、机电一体化等专业的大学高年级学生学习操作系统、计算机控制系统等课程辅助教材。同时,本书对正在学习UML建模的设计人员也是一个很好的范例。此外,本书可以作为软件开发组织知识共享的模板,参考本书描述模式的方式把技术人员解决问题的经验抽象化、形式化,在组织范围内共享。<br>译者积极翻译并向业界推荐本书还有一个原因,这就是本书以对象模式的观点把计算机最底层的操作功能实现整个演示了一遍,如并发进程、内存管理、资源锁定、进程分布、安全性和可靠性。这对于欲深入理解计算实现本质的读者(不一定去做实时嵌入式应用),是一本很好的教材。在翻译过程中为减少混乱,我们厘定某些术语的译法,也算对业界的建议,如有不妥之处,欢迎指正。<br>实时设计模式〖〗<br>Broker译为“中介”,当前Broker、Proxy、Agent、Delegation均为“代理”,而Broker、Proxy在本书中也常出现在一页上,故Broker为“中介”(无授权),Proxy为“代理”(有授权),而Delegation干脆是“委派”,Agent在本书中出现极少,且不易冲突仍沿用“代理者”。<br>本书的前言、序和第1章至第3章由麦中凡教授翻译,第4章至第9章和附录由陶伟翻译。在成书过程中,吕庆中、程勇、胡斌、李晔参与了部分工作。麦中凡教授对全书做了细致的审校。<br>最后,我们感谢北航出版社在本书的成书过程中提供的大力帮助。<br>我们的电子邮件地址是:<br>mids@buaa.edu.cn<br>译者于北航<br>2003年6月