本書是美國AddisonWesley公司出版的對象技術(最新2003年)叢書之一,旨在用面向對象技術開發(fā)實時和嵌入式系統(tǒng)軟件。<br>眾所周知,實時和嵌入式系統(tǒng)軟件由于其開發(fā)層次較低,直接在硬件上開發(fā)時間緊要、安全緊要、高可靠性的系統(tǒng),傳統(tǒng)上是C語言和匯編語言的天下。傳統(tǒng)的軟件工程技術著重軟件的可移植、可復用、可伸縮,易維護、低成本,借助于一個良好的平臺,快速交付,支持業(yè)務過程的快速變革的高適應性系統(tǒng)。軟件工程使平臺以上的系統(tǒng)日臻完善,發(fā)展了面向對象技術、構件技術乃至于直接使用軟件服務?!跋嘈拧睂崿F(xiàn)服務的構件、支持構件實現(xiàn)的平臺(操作系統(tǒng)、網絡軟件及數(shù)據庫軟件)都是最優(yōu)或較優(yōu)的。顯然,與實時嵌入式系統(tǒng)要處處操心每個軟件元件的性能、可靠性、安全性走的是兩條路,他們“不相信”臃腫的通用平臺能解決他們在有限資源下做出高性能系統(tǒng)所遇到的各種問題。所以,實時和嵌入式系統(tǒng)的業(yè)者一般不關心軟件工程技術的最新進展,也很少在他們的工作中采用軟件工程新技術,停留在提供完善的模塊和子系統(tǒng)層次上,強耦合的過程式模塊開發(fā)還是主流。<br>從系統(tǒng)的觀點來看,實時嵌入式系統(tǒng)也是系統(tǒng),特別是硬件技術的快速發(fā)展,實時嵌入式軟件也有快速適應硬件型號升級問題,也有業(yè)務快速變更要求可伸縮、可修改(例如,軍用導彈、飛機型號升級,民用產品換代)可復用問題。1975年,美國國防部開發(fā)的Ada語言系統(tǒng)就是為了在主機上開發(fā)適應變化的系統(tǒng)。通過交叉編譯生成機載、彈載的目標系統(tǒng)嵌入到應用環(huán)境中,一切系統(tǒng)維護、伸縮均在Ada源代碼級軟件上完成。在某種意義上,今日的面向對象技術得益于Ada的數(shù)據抽象和模塊封裝。由于Ada為保證軍用軟件可移植性管得過嚴,面向對象技術蓬勃發(fā)展在C++上得以體現(xiàn)。于是實時嵌入式系統(tǒng)自然轉向底層是C的C++。但對象化對實時性、可靠性并沒有直接的好處,所以在小型實時嵌入式應用中,面向對象依然不占上風,仍然是過程式開發(fā)方法最后穿上C++外衣。盡管如此,有了C++這個橋,為實時嵌入式系統(tǒng)再一次和當前軟件工程技術合流打下了良好的基礎。<br>面向對象封裝帶來的松耦合,使它成為分布式可伸縮系統(tǒng)的首選技術,且隨著當今網絡的普及,對象成了應用的第一類公民,網絡是對象交互和通信的世界。打包也好,請代理也好,不是對象只能窩在本機上做點實際工作。<br>為了參與網絡上提供實時服務,為了支持應用系統(tǒng)的快速變更,快速提供嵌入式產品,大幅度降低成本提供標準化、構件化產品,實時嵌入式系統(tǒng)的對象化、構件化勢在必行!當然,也應該看到,CPU速度大幅提高,減緩這類系統(tǒng)的開發(fā)者因實時對標準化、構件化的抵制,使他們樂于參加現(xiàn)代技術大合奏。<br>重新認識軟件是有體系結構的。軟件開發(fā)是一個軟件過程,是近十年軟件技術最重要的成就。過去的開發(fā)著眼于功能性能,無形中完成了一個軟件過程,得到一個有體系結構的產品。當時并不在意過程好壞,體系結構是什么樣的。通過驗收能夠滿足使用的就是好產品。但情況并非如此順利,“樹欲靜而風不止”,使用中不斷發(fā)現(xiàn)新bug,用戶一再要求改進(受其他新技術影響或總結出使用經驗)。過程和體系結構在軟件可適應、易維護性上顯現(xiàn)出極大的威脅力。不良的體系結構使此處bug消除,彼處新bug又冒出,甚至導致整個系統(tǒng)崩潰。不良的過程找不到資以分析的文檔、數(shù)據,一個不大的改進每步都從頭試起,遲遲調不出來,大量窩工,成本飚升。于是,人們把軟件開發(fā)從以功能性能為中心轉而為以軟件體系結構為中心,精心改進軟件過程,從而軟件在改變之中依然能保證符合需求的功能,并能保證高質量和低成本。<br>體系結構從總體上決定了軟件可能達到的各項質量指標。例如,別墅、板樓、塔樓,在通風、抗震、舒適程度、方便性、成本方面各不相同,一經確定則影響終身。例如樓層太矮、電梯過少、沒有綠地等。軟件過程通過精心安排軟件制作的各項活動切實保證軟件質量。該有的活動沒有或不能即時到位都會造成低質量、高成本,甚至項目失敗。過程是產品質量最直接的保證。所以ISO9000系列就是所有人工制品的(過程)質量標準。美國CMM標準化更是以過程成熟度來衡量軟件企業(yè)有無資質承擔軟件開發(fā)。軟件體系結構和軟件過程相輔相成,一為軟件內在質量保證,一為過程質量保證。所以,以體系結構為中心的最優(yōu)過程開發(fā)已為世界廣泛接受。<br>過程是以時間為進程的各項軟件活動。開發(fā)活動完成都凝聚成有體系結構的軟件,即它的后果(體系結構)是可分析、可測試度量的。優(yōu)秀的體系結構如前所述,正是軟件設計的目標。于是人們研究分析體系結構并尋找設計實現(xiàn)的途徑。<br>體系結構不外乎是實現(xiàn)各項功能、性能的元構件有機組合的集合。在面向對象的背景下,它們都是類對象,為了設計(有機組合)方便,把對象組成慣用的、不易出錯的、可靠的、接近標準化的形式,則為模式(pattern)。最小的模式是幾個類對象組成的構件,最大的模式是若干構件組成的子系統(tǒng)。<br>最早也是最基礎的設計模式是Liskov提出的七種基本模式,并提出對象構成模式的五條基本準則,為面向對象設計模式奠定了理論基礎。隨后是“四人幫”(Gamma等四人)提出了常用的25種設計模式,為以模式設計軟件體系結構提供了工程實踐的基礎。不過,“四人幫”討論的模式作用域是局部的,我們把它們叫做機制式的設計模式(mechanisticdesignpattern),因為它們?yōu)閷ο蟮膮f(xié)作定義了各種機制。這種模式有較大的局限,只在單個的協(xié)作內。本書并不討論機制式的設計模式,本書討論的是體系結構設計模式(architecturedesignpattern)。<br>當然,各軟件應用領域也都有本領域的模式,如果總結出來作為準規(guī)劃,則本領域軟件開發(fā)速度會成倍提高,而軟件質量也較容易得到保證。本書就為實時嵌入式領域總結出了54種模式。<br>本書作者BrucePowelDouglass博士在實時嵌入式系統(tǒng)領域工作已有26年,是世界公認的領袖人物,目前是本書推薦的ROPES(嵌入式系統(tǒng)的快速面向對象過程)的創(chuàng)始人。他也即時轉入到面向對象領域,成為ILogix公司的首席技術指導,實時系統(tǒng)開發(fā)工具的領導者,也是UML規(guī)范嵌入系統(tǒng)會議顧問委員會的成員。Douglass博士為多個公司和組織做過咨詢,包括NASA。他還是OMG的RTDA(RealTimeAnalysisandDesignWorkingGroup)的副主席和面向對象雜志的專欄作家。<br>本書可以作為實時嵌入式系統(tǒng)的設計人員和開發(fā)人員的技術參考書,也可以作為計算機、自動化、機電一體化等專業(yè)的大學高年級學生學習操作系統(tǒng)、計算機控制系統(tǒng)等課程輔助教材。同時,本書對正在學習UML建模的設計人員也是一個很好的范例。此外,本書可以作為軟件開發(fā)組織知識共享的模板,參考本書描述模式的方式把技術人員解決問題的經驗抽象化、形式化,在組織范圍內共享。<br>譯者積極翻譯并向業(yè)界推薦本書還有一個原因,這就是本書以對象模式的觀點把計算機最底層的操作功能實現(xiàn)整個演示了一遍,如并發(fā)進程、內存管理、資源鎖定、進程分布、安全性和可靠性。這對于欲深入理解計算實現(xiàn)本質的讀者(不一定去做實時嵌入式應用),是一本很好的教材。在翻譯過程中為減少混亂,我們厘定某些術語的譯法,也算對業(yè)界的建議,如有不妥之處,歡迎指正。<br>實時設計模式〖〗<br>Broker譯為“中介”,當前Broker、Proxy、Agent、Delegation均為“代理”,而Broker、Proxy在本書中也常出現(xiàn)在一頁上,故Broker為“中介”(無授權),Proxy為“代理”(有授權),而Delegation干脆是“委派”,Agent在本書中出現(xiàn)極少,且不易沖突仍沿用“代理者”。<br>本書的前言、序和第1章至第3章由麥中凡教授翻譯,第4章至第9章和附錄由陶偉翻譯。在成書過程中,呂慶中、程勇、胡斌、李曄參與了部分工作。麥中凡教授對全書做了細致的審校。<br>最后,我們感謝北航出版社在本書的成書過程中提供的大力幫助。<br>我們的電子郵件地址是:<br>mids@buaa.edu.cn<br>譯者于北航<br>2003年6月