版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第12章章 面向?qū)ο髮?shí)現(xiàn)面向?qū)ο髮?shí)現(xiàn)12.1 程序設(shè)計(jì)語言程序設(shè)計(jì)語言12.2 程序設(shè)計(jì)風(fēng)格程序設(shè)計(jì)風(fēng)格12.3 測(cè)試策略測(cè)試策略12.4 設(shè)計(jì)測(cè)試用例設(shè)計(jì)測(cè)試用例12.5 小結(jié)小結(jié)面向?qū)ο髮?shí)現(xiàn)主要包括兩項(xiàng)工作:面向?qū)ο髮?shí)現(xiàn)主要包括兩項(xiàng)工作: 把面向?qū)ο笤O(shè)把面向?qū)ο笤O(shè)計(jì)結(jié)果翻譯成用某種程序語言書寫的面向?qū)ο蟪绦颍挥?jì)結(jié)果翻譯成用某種程序語言書寫的面向?qū)ο蟪绦?;測(cè)試并調(diào)試面向?qū)ο蟮某绦颉y(cè)試并調(diào)試面向?qū)ο蟮某绦?。面向?qū)ο蟪绦虻馁|(zhì)量基本上由面向?qū)ο笤O(shè)計(jì)的質(zhì)量面向?qū)ο蟪绦虻馁|(zhì)量基本上由面向?qū)ο笤O(shè)計(jì)的質(zhì)量決定,但是,所采用的程序語言的特點(diǎn)和程序設(shè)計(jì)決定,但是,所采用的程序語言的特點(diǎn)和程序設(shè)計(jì)風(fēng)格也將對(duì)
2、程序的可靠性、可重用性及可維護(hù)性產(chǎn)風(fēng)格也將對(duì)程序的可靠性、可重用性及可維護(hù)性產(chǎn)生深遠(yuǎn)影響。生深遠(yuǎn)影響。目前,軟件測(cè)試仍然是保證軟件可靠性的主要措施,目前,軟件測(cè)試仍然是保證軟件可靠性的主要措施,對(duì)于面向?qū)ο蟮能浖碚f,情況也是如此。面向?qū)?duì)于面向?qū)ο蟮能浖碚f,情況也是如此。面向?qū)ο鬁y(cè)試的目標(biāo),也是用盡可能低的測(cè)試成本發(fā)現(xiàn)盡象測(cè)試的目標(biāo),也是用盡可能低的測(cè)試成本發(fā)現(xiàn)盡可能多的軟件錯(cuò)誤。但是,面向?qū)ο蟪绦蛑刑赜械目赡芏嗟能浖e(cuò)誤。但是,面向?qū)ο蟪绦蛑刑赜械姆庋b、繼承和多態(tài)等機(jī)制,也給面向?qū)ο鬁y(cè)試帶來封裝、繼承和多態(tài)等機(jī)制,也給面向?qū)ο鬁y(cè)試帶來一些新特點(diǎn),增加了測(cè)試和調(diào)試的難度。必須在實(shí)一些新特點(diǎn)
3、,增加了測(cè)試和調(diào)試的難度。必須在實(shí)踐中努力探索適合于面向?qū)ο筌浖母行У臏y(cè)試踐中努力探索適合于面向?qū)ο筌浖母行У臏y(cè)試方法。方法。面向?qū)ο笤O(shè)計(jì)的結(jié)果既可以用面向?qū)ο笳Z言、也可面向?qū)ο笤O(shè)計(jì)的結(jié)果既可以用面向?qū)ο笳Z言、也可以用非面向?qū)ο笳Z言實(shí)現(xiàn)。以用非面向?qū)ο笳Z言實(shí)現(xiàn)。12.1 程序設(shè)計(jì)語言程序設(shè)計(jì)語言 12.1.1 面向?qū)ο笳Z言的優(yōu)點(diǎn)面向?qū)ο笳Z言的優(yōu)點(diǎn)使用面向?qū)ο笳Z言時(shí),由于語言本身充分支持面向使用面向?qū)ο笳Z言時(shí),由于語言本身充分支持面向?qū)ο蟾拍畹膶?shí)現(xiàn),因此,編譯程序可以自動(dòng)把面向?qū)ο蟾拍畹膶?shí)現(xiàn),因此,編譯程序可以自動(dòng)把面向?qū)ο蟾拍钣成涞侥繕?biāo)程序中。使用非面向?qū)ο笳Z言對(duì)象概念映射到目標(biāo)程序中
4、。使用非面向?qū)ο笳Z言編寫面向?qū)ο蟪绦颍瑒t必須由程序員自己把面向?qū)帉懨嫦驅(qū)ο蟪绦?,則必須由程序員自己把面向?qū)ο蟾拍钣成涞侥繕?biāo)程序中。所有非面向?qū)ο笳Z言都象概念映射到目標(biāo)程序中。所有非面向?qū)ο笳Z言都不支持一般不支持一般-特殊結(jié)構(gòu)的實(shí)現(xiàn),使用這類語言編程特殊結(jié)構(gòu)的實(shí)現(xiàn),使用這類語言編程時(shí)要么完全回避繼承的概念,要么在聲明特殊化類時(shí)要么完全回避繼承的概念,要么在聲明特殊化類時(shí),把對(duì)一般化類的引用嵌套在它里面。時(shí),把對(duì)一般化類的引用嵌套在它里面。到底應(yīng)該選用面向?qū)ο笳Z言還是非面向?qū)ο笳Z言,到底應(yīng)該選用面向?qū)ο笳Z言還是非面向?qū)ο笳Z言,關(guān)鍵不在于語言功能強(qiáng)弱。從原理上說,使用任何關(guān)鍵不在于語言功能強(qiáng)弱。從
5、原理上說,使用任何一種通用語言都可以實(shí)現(xiàn)面向?qū)ο蟾拍?。?dāng)然,使一種通用語言都可以實(shí)現(xiàn)面向?qū)ο蟾拍?。?dāng)然,使用面向?qū)ο笳Z言,實(shí)現(xiàn)面向?qū)ο蟾拍?,遠(yuǎn)比使用非用面向?qū)ο笳Z言,實(shí)現(xiàn)面向?qū)ο蟾拍?,遠(yuǎn)比使用非面向?qū)ο笳Z言方便,但是,方便性也并不是決定選面向?qū)ο笳Z言方便,但是,方便性也并不是決定選擇何種語言的關(guān)鍵因素。選擇編程語言的關(guān)鍵因素,擇何種語言的關(guān)鍵因素。選擇編程語言的關(guān)鍵因素,是語言的一致的表達(dá)能力、可重用性及可維護(hù)性。是語言的一致的表達(dá)能力、可重用性及可維護(hù)性。從面向?qū)ο笥^點(diǎn)看來,能夠更完整、更準(zhǔn)確地表達(dá)從面向?qū)ο笥^點(diǎn)看來,能夠更完整、更準(zhǔn)確地表達(dá)問題域語義的面向?qū)ο笳Z言的語法是非常重要的,問題域
6、語義的面向?qū)ο笳Z言的語法是非常重要的,因?yàn)檫@會(huì)帶來下述幾個(gè)重要優(yōu)點(diǎn):因?yàn)檫@會(huì)帶來下述幾個(gè)重要優(yōu)點(diǎn):1. 一致的表示方法一致的表示方法從前面章節(jié)的講述中可以知道,面向?qū)ο箝_發(fā)基于從前面章節(jié)的講述中可以知道,面向?qū)ο箝_發(fā)基于不隨時(shí)間變化的、一致的表示方法。這種表示方法不隨時(shí)間變化的、一致的表示方法。這種表示方法應(yīng)該從問題域到應(yīng)該從問題域到OOA,從,從OOA到到OOD,最后從,最后從OOD到面向?qū)ο缶幊痰矫嫦驅(qū)ο缶幊?OOP),始終穩(wěn)定不變。一致,始終穩(wěn)定不變。一致的表示方法既有利于在軟件開發(fā)過程中始終使用統(tǒng)的表示方法既有利于在軟件開發(fā)過程中始終使用統(tǒng)一的概念,也有利于維護(hù)人員理解軟件的各種配置一
7、的概念,也有利于維護(hù)人員理解軟件的各種配置成分。成分。2. 可重用性可重用性為了能帶來可觀的商業(yè)利益,必須在更廣泛的范圍為了能帶來可觀的商業(yè)利益,必須在更廣泛的范圍中運(yùn)用重用機(jī)制,而不是僅僅在程序設(shè)計(jì)這個(gè)層次中運(yùn)用重用機(jī)制,而不是僅僅在程序設(shè)計(jì)這個(gè)層次上進(jìn)行重用。因此,在上進(jìn)行重用。因此,在OOA,OOD直到直到OOP中都中都顯式地表示問題域語義,其意義是十分深遠(yuǎn)的。隨顯式地表示問題域語義,其意義是十分深遠(yuǎn)的。隨著時(shí)間的推移,軟件開發(fā)組織既可能重用它在某個(gè)著時(shí)間的推移,軟件開發(fā)組織既可能重用它在某個(gè)問題域內(nèi)的問題域內(nèi)的OOA結(jié)果,也可能重用相應(yīng)的結(jié)果,也可能重用相應(yīng)的OOD和和OOP結(jié)果。結(jié)果
8、。3. 可維護(hù)性可維護(hù)性盡管人們反復(fù)強(qiáng)調(diào)保持文檔與源程序一致的必要性,盡管人們反復(fù)強(qiáng)調(diào)保持文檔與源程序一致的必要性,但是,在實(shí)際工作中很難做到交付兩類不同的文檔,但是,在實(shí)際工作中很難做到交付兩類不同的文檔,并使它們保持彼此完全一致。特別是考慮到進(jìn)度、并使它們保持彼此完全一致。特別是考慮到進(jìn)度、預(yù)算、能力和人員等限制因素時(shí),做到兩類文檔完預(yù)算、能力和人員等限制因素時(shí),做到兩類文檔完全一致幾乎是不可能的。因此,維護(hù)人員最終面對(duì)全一致幾乎是不可能的。因此,維護(hù)人員最終面對(duì)的往往只有源程序本身。的往往只有源程序本身。以以ATM系統(tǒng)為例,說明在程序內(nèi)部表達(dá)問題域語系統(tǒng)為例,說明在程序內(nèi)部表達(dá)問題域語義
9、對(duì)維護(hù)工作的意義。假設(shè)在維護(hù)該系統(tǒng)時(shí)沒有合義對(duì)維護(hù)工作的意義。假設(shè)在維護(hù)該系統(tǒng)時(shí)沒有合適的文檔資料可供參閱,于是維護(hù)人員人工瀏覽程適的文檔資料可供參閱,于是維護(hù)人員人工瀏覽程序或使用軟件工具掃描程序,記下或打印出程序顯序或使用軟件工具掃描程序,記下或打印出程序顯式陳述的問題域語義,維護(hù)人員看到式陳述的問題域語義,維護(hù)人員看到“ATM”、“賬戶賬戶”、“現(xiàn)金兌換卡現(xiàn)金兌換卡”等,這對(duì)維護(hù)人員理解等,這對(duì)維護(hù)人員理解所要維護(hù)的軟件將有很大幫助。所要維護(hù)的軟件將有很大幫助。因此,在選擇編程語言時(shí),應(yīng)該考慮的首要因素,因此,在選擇編程語言時(shí),應(yīng)該考慮的首要因素,是在供選擇的語言中哪個(gè)語言能最好地表達(dá)問
10、題域是在供選擇的語言中哪個(gè)語言能最好地表達(dá)問題域語義。一般說來,應(yīng)該盡量選用面向?qū)ο笳Z言來實(shí)語義。一般說來,應(yīng)該盡量選用面向?qū)ο笳Z言來實(shí)現(xiàn)面向?qū)ο蠓治?、設(shè)計(jì)的結(jié)果?,F(xiàn)面向?qū)ο蠓治?、設(shè)計(jì)的結(jié)果。面向?qū)ο笳Z言的形成借鑒了歷史上許多程序語言的面向?qū)ο笳Z言的形成借鑒了歷史上許多程序語言的特點(diǎn),從中吸取了豐富的營養(yǎng)。當(dāng)今的面向?qū)ο笳Z特點(diǎn),從中吸取了豐富的營養(yǎng)。當(dāng)今的面向?qū)ο笳Z言,從言,從20世紀(jì)世紀(jì)50年代誕生的年代誕生的LISP語言中引進(jìn)了動(dòng)語言中引進(jìn)了動(dòng)態(tài)聯(lián)編的概念和交互式開發(fā)環(huán)境的思想,從態(tài)聯(lián)編的概念和交互式開發(fā)環(huán)境的思想,從20世紀(jì)世紀(jì)60年代推出的年代推出的SIMULA語言中引進(jìn)了類的概念和繼
11、語言中引進(jìn)了類的概念和繼承機(jī)制,此外,還受到承機(jī)制,此外,還受到20世紀(jì)世紀(jì)70年代末期開發(fā)的年代末期開發(fā)的Modula_2語言和語言和Ada語言中數(shù)據(jù)抽象機(jī)制的影響。語言中數(shù)據(jù)抽象機(jī)制的影響。12.1.2 面向?qū)ο笳Z言的技術(shù)特點(diǎn)面向?qū)ο笳Z言的技術(shù)特點(diǎn)20世紀(jì)世紀(jì)80年代以來,面向?qū)ο笳Z言像雨后春筍一樣年代以來,面向?qū)ο笳Z言像雨后春筍一樣大量涌現(xiàn),形成了兩大類面向?qū)ο笳Z言。一類是純大量涌現(xiàn),形成了兩大類面向?qū)ο笳Z言。一類是純面向?qū)ο笳Z言,如面向?qū)ο笳Z言,如Smalltalk和和Eiffel等語言。另一等語言。另一類是混合型面向?qū)ο笳Z言,也就是在過程語言的基類是混合型面向?qū)ο笳Z言,也就是在過程語
12、言的基礎(chǔ)上增加面向?qū)ο髾C(jī)制,如礎(chǔ)上增加面向?qū)ο髾C(jī)制,如C+等語言。等語言。一般說來,純面向?qū)ο笳Z言著重支持面向?qū)ο蠓椒ㄒ话阏f來,純面向?qū)ο笳Z言著重支持面向?qū)ο蠓椒ㄑ芯亢涂焖僭偷膶?shí)現(xiàn),而混合型面向?qū)ο笳Z言的研究和快速原型的實(shí)現(xiàn),而混合型面向?qū)ο笳Z言的目標(biāo)則是提高運(yùn)行速度和使傳統(tǒng)程序員容易接受面目標(biāo)則是提高運(yùn)行速度和使傳統(tǒng)程序員容易接受面向?qū)ο笏枷搿3墒斓拿嫦驅(qū)ο笳Z言通常都提供豐富向?qū)ο笏枷?。成熟的面向?qū)ο笳Z言通常都提供豐富的類庫和強(qiáng)有力的開發(fā)環(huán)境。的類庫和強(qiáng)有力的開發(fā)環(huán)境。下面介紹在選擇面向?qū)ο笳Z言時(shí)應(yīng)該著重考察的一下面介紹在選擇面向?qū)ο笳Z言時(shí)應(yīng)該著重考察的一些技術(shù)特點(diǎn)。些技術(shù)特點(diǎn)。1. 支持
13、類與對(duì)象概念的機(jī)制支持類與對(duì)象概念的機(jī)制所有面向?qū)ο笳Z言都允許用戶動(dòng)態(tài)創(chuàng)建對(duì)象,并且所有面向?qū)ο笳Z言都允許用戶動(dòng)態(tài)創(chuàng)建對(duì)象,并且可以用指針引用動(dòng)態(tài)創(chuàng)建的對(duì)象。允許動(dòng)態(tài)創(chuàng)建對(duì)可以用指針引用動(dòng)態(tài)創(chuàng)建的對(duì)象。允許動(dòng)態(tài)創(chuàng)建對(duì)象,就意味著系統(tǒng)必須處理內(nèi)存管理問題,如果不象,就意味著系統(tǒng)必須處理內(nèi)存管理問題,如果不及時(shí)釋放不再需要的對(duì)象所占用的內(nèi)存,動(dòng)態(tài)存儲(chǔ)及時(shí)釋放不再需要的對(duì)象所占用的內(nèi)存,動(dòng)態(tài)存儲(chǔ)分配就有可能耗盡內(nèi)存。分配就有可能耗盡內(nèi)存。有兩種管理內(nèi)存的方法,一種是由語言的運(yùn)行機(jī)制有兩種管理內(nèi)存的方法,一種是由語言的運(yùn)行機(jī)制自動(dòng)管理內(nèi)存,即提供自動(dòng)回收自動(dòng)管理內(nèi)存,即提供自動(dòng)回收“垃圾垃圾”的機(jī)制;
14、的機(jī)制;另一種是由程序員編寫釋放內(nèi)存的代碼。自動(dòng)管理另一種是由程序員編寫釋放內(nèi)存的代碼。自動(dòng)管理內(nèi)存不僅方便而且安全,但是必須采用先進(jìn)的垃圾內(nèi)存不僅方便而且安全,但是必須采用先進(jìn)的垃圾收集算法才能減少開銷。某些面向?qū)ο蟮恼Z言允許收集算法才能減少開銷。某些面向?qū)ο蟮恼Z言允許程序員定義析構(gòu)函數(shù)程序員定義析構(gòu)函數(shù)(destructor)。每當(dāng)一個(gè)對(duì)象超。每當(dāng)一個(gè)對(duì)象超出范圍或被顯式刪除時(shí),就自動(dòng)調(diào)用析構(gòu)函數(shù)。這出范圍或被顯式刪除時(shí),就自動(dòng)調(diào)用析構(gòu)函數(shù)。這種機(jī)制使得程序員能夠方便地構(gòu)造和喚醒釋放內(nèi)存種機(jī)制使得程序員能夠方便地構(gòu)造和喚醒釋放內(nèi)存的操作,卻又不是垃圾收集機(jī)制。的操作,卻又不是垃圾收集機(jī)制。
15、2. 實(shí)現(xiàn)整體實(shí)現(xiàn)整體-部分部分(即聚集即聚集)結(jié)構(gòu)的機(jī)制結(jié)構(gòu)的機(jī)制一般說來,有兩種實(shí)現(xiàn)方法,分別使用指針和獨(dú)立一般說來,有兩種實(shí)現(xiàn)方法,分別使用指針和獨(dú)立的關(guān)聯(lián)對(duì)象實(shí)現(xiàn)整體的關(guān)聯(lián)對(duì)象實(shí)現(xiàn)整體-部分結(jié)構(gòu)。大多數(shù)現(xiàn)有的面部分結(jié)構(gòu)。大多數(shù)現(xiàn)有的面向?qū)ο笳Z言并不顯式支持獨(dú)立的關(guān)聯(lián)對(duì)象,在這種向?qū)ο笳Z言并不顯式支持獨(dú)立的關(guān)聯(lián)對(duì)象,在這種情況下,使用指針是最容易的實(shí)現(xiàn)方法,通過增加情況下,使用指針是最容易的實(shí)現(xiàn)方法,通過增加內(nèi)部指針可以方便地實(shí)現(xiàn)關(guān)聯(lián)。內(nèi)部指針可以方便地實(shí)現(xiàn)關(guān)聯(lián)。3. 實(shí)現(xiàn)一般實(shí)現(xiàn)一般-特殊特殊(即泛化即泛化)結(jié)構(gòu)的機(jī)制結(jié)構(gòu)的機(jī)制既包括實(shí)現(xiàn)繼承的機(jī)制也包括解決名字沖突的機(jī)制。既包括實(shí)現(xiàn)繼
16、承的機(jī)制也包括解決名字沖突的機(jī)制。所謂解決名字沖突,指的是處理在多個(gè)基類中可能所謂解決名字沖突,指的是處理在多個(gè)基類中可能出現(xiàn)的重名問題,這個(gè)問題僅在支持多重繼承的語出現(xiàn)的重名問題,這個(gè)問題僅在支持多重繼承的語言中才會(huì)遇到。某些語言拒絕接受有名字沖突的程言中才會(huì)遇到。某些語言拒絕接受有名字沖突的程序,另一些語言提供了解決沖突的協(xié)議。不論使用序,另一些語言提供了解決沖突的協(xié)議。不論使用何種語言,程序員都應(yīng)該盡力避免出現(xiàn)名字沖突。何種語言,程序員都應(yīng)該盡力避免出現(xiàn)名字沖突。4. 實(shí)現(xiàn)屬性和服務(wù)的機(jī)制實(shí)現(xiàn)屬性和服務(wù)的機(jī)制對(duì)于實(shí)現(xiàn)屬性的機(jī)制應(yīng)該著重考慮以下幾個(gè)方面:對(duì)于實(shí)現(xiàn)屬性的機(jī)制應(yīng)該著重考慮以下幾
17、個(gè)方面: 支持實(shí)例連接的機(jī)制;屬性的可見性控制;對(duì)屬性支持實(shí)例連接的機(jī)制;屬性的可見性控制;對(duì)屬性值的約束。對(duì)于服務(wù)來說,主要應(yīng)該考慮下列因素:值的約束。對(duì)于服務(wù)來說,主要應(yīng)該考慮下列因素: 支持消息連接支持消息連接(即表達(dá)對(duì)象交互關(guān)系即表達(dá)對(duì)象交互關(guān)系)的機(jī)制;控制的機(jī)制;控制服務(wù)可見性的機(jī)制;動(dòng)態(tài)聯(lián)編。服務(wù)可見性的機(jī)制;動(dòng)態(tài)聯(lián)編。所謂動(dòng)態(tài)聯(lián)編,是指應(yīng)用系統(tǒng)在運(yùn)行過程中,當(dāng)需所謂動(dòng)態(tài)聯(lián)編,是指應(yīng)用系統(tǒng)在運(yùn)行過程中,當(dāng)需要執(zhí)行一個(gè)特定服務(wù)的時(shí)候,選擇要執(zhí)行一個(gè)特定服務(wù)的時(shí)候,選擇(或聯(lián)編或聯(lián)編)實(shí)現(xiàn)該實(shí)現(xiàn)該服務(wù)的適當(dāng)算法的能力。動(dòng)態(tài)聯(lián)編機(jī)制使得程序員服務(wù)的適當(dāng)算法的能力。動(dòng)態(tài)聯(lián)編機(jī)制使得程序員
18、在向?qū)ο蟀l(fā)送消息時(shí)擁有較大自由,在發(fā)送消息前,在向?qū)ο蟀l(fā)送消息時(shí)擁有較大自由,在發(fā)送消息前,無須知道接受消息的對(duì)象當(dāng)時(shí)屬于哪個(gè)類。無須知道接受消息的對(duì)象當(dāng)時(shí)屬于哪個(gè)類。5. 類型檢查類型檢查程序設(shè)計(jì)語言可以按照編譯時(shí)進(jìn)行類型檢查的嚴(yán)格程序設(shè)計(jì)語言可以按照編譯時(shí)進(jìn)行類型檢查的嚴(yán)格程度來分類。如果語言僅要求每個(gè)變量或?qū)傩噪`屬程度來分類。如果語言僅要求每個(gè)變量或?qū)傩噪`屬于一個(gè)對(duì)象,則是弱類型的;如果語法規(guī)定每個(gè)變于一個(gè)對(duì)象,則是弱類型的;如果語法規(guī)定每個(gè)變量或?qū)傩员仨殰?zhǔn)確地屬于某個(gè)特定的類,則這樣的量或?qū)傩员仨殰?zhǔn)確地屬于某個(gè)特定的類,則這樣的語言是強(qiáng)類型的。面向?qū)ο笳Z言在這方面差異很大,語言是強(qiáng)類型
19、的。面向?qū)ο笳Z言在這方面差異很大,例如,例如,Smalltalk實(shí)際上是一種無類型語言實(shí)際上是一種無類型語言(所有變所有變量都是未指定類的對(duì)象量都是未指定類的對(duì)象);C+和和Eiffel則是強(qiáng)類型則是強(qiáng)類型語言?;旌闲驼Z言語言?;旌闲驼Z言(如如C+, Objective_C等等)甚至允甚至允許屬性值不是對(duì)象而是某種預(yù)定義的基本類型數(shù)據(jù)許屬性值不是對(duì)象而是某種預(yù)定義的基本類型數(shù)據(jù)(如整數(shù),浮點(diǎn)數(shù)等如整數(shù),浮點(diǎn)數(shù)等),這可以提高操作的效率。,這可以提高操作的效率。強(qiáng)類型語言主要有兩個(gè)優(yōu)點(diǎn):強(qiáng)類型語言主要有兩個(gè)優(yōu)點(diǎn): 一是有利于在編譯一是有利于在編譯時(shí)發(fā)現(xiàn)程序錯(cuò)誤,二是增加了優(yōu)化的可能性。通常時(shí)發(fā)現(xiàn)
20、程序錯(cuò)誤,二是增加了優(yōu)化的可能性。通常使用強(qiáng)類型編譯型語言開發(fā)軟件產(chǎn)品,使用弱類型使用強(qiáng)類型編譯型語言開發(fā)軟件產(chǎn)品,使用弱類型解釋型語言快速開發(fā)原型??偟恼f來,強(qiáng)類型語言解釋型語言快速開發(fā)原型??偟恼f來,強(qiáng)類型語言有助于提高軟件的可靠性和運(yùn)行效率,現(xiàn)代的程序有助于提高軟件的可靠性和運(yùn)行效率,現(xiàn)代的程序語言理論支持強(qiáng)類型檢查,大多數(shù)新語言都是強(qiáng)類語言理論支持強(qiáng)類型檢查,大多數(shù)新語言都是強(qiáng)類型的。型的。6. 類庫類庫大多數(shù)面向?qū)ο笳Z言都提供一個(gè)實(shí)用的類庫。某些大多數(shù)面向?qū)ο笳Z言都提供一個(gè)實(shí)用的類庫。某些語言本身并沒有規(guī)定提供什么樣的類庫,而是由實(shí)語言本身并沒有規(guī)定提供什么樣的類庫,而是由實(shí)現(xiàn)這種語
21、言的編譯系統(tǒng)自行提供類庫。存在類庫,現(xiàn)這種語言的編譯系統(tǒng)自行提供類庫。存在類庫,許多軟構(gòu)件就不必由程序員重頭編寫了,這為實(shí)現(xiàn)許多軟構(gòu)件就不必由程序員重頭編寫了,這為實(shí)現(xiàn)軟件重用帶來很大方便。軟件重用帶來很大方便。類庫中往往包含實(shí)現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)類庫中往往包含實(shí)現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)(例如,動(dòng)態(tài)數(shù)例如,動(dòng)態(tài)數(shù)組、表、隊(duì)列、棧、樹等等組、表、隊(duì)列、棧、樹等等)的類,通常把這些類的類,通常把這些類稱為包容類。在類庫中還可以找到實(shí)現(xiàn)各種關(guān)聯(lián)的稱為包容類。在類庫中還可以找到實(shí)現(xiàn)各種關(guān)聯(lián)的類。類。更完整的類庫通常還提供獨(dú)立于具體設(shè)備的接口類更完整的類庫通常還提供獨(dú)立于具體設(shè)備的接口類(例如,輸入輸出流例如,輸入輸出
22、流),此外,用于實(shí)現(xiàn)窗口系統(tǒng)的,此外,用于實(shí)現(xiàn)窗口系統(tǒng)的用戶界面類也非常有用,它們構(gòu)成一個(gè)相對(duì)獨(dú)立的用戶界面類也非常有用,它們構(gòu)成一個(gè)相對(duì)獨(dú)立的圖形庫。圖形庫。7. 效率效率許多人認(rèn)為面向?qū)ο笳Z言的主要缺點(diǎn)是效率低。產(chǎn)許多人認(rèn)為面向?qū)ο笳Z言的主要缺點(diǎn)是效率低。產(chǎn)生這種印象的一個(gè)原因是,某些早期的面向?qū)ο笳Z生這種印象的一個(gè)原因是,某些早期的面向?qū)ο笳Z言是解釋型的而不是編譯型的。事實(shí)上,使用擁有言是解釋型的而不是編譯型的。事實(shí)上,使用擁有完整類庫的面向?qū)ο笳Z言,有時(shí)能比使用非面向?qū)ν暾悗斓拿嫦驅(qū)ο笳Z言,有時(shí)能比使用非面向?qū)ο笳Z言得到運(yùn)行更快的代碼。這是因?yàn)轭悗熘刑峁┫笳Z言得到運(yùn)行更快的代碼。這是
23、因?yàn)轭悗熘刑峁┝烁咝У乃惴ê透玫臄?shù)據(jù)結(jié)構(gòu),例如,程序員了更高效的算法和更好的數(shù)據(jù)結(jié)構(gòu),例如,程序員已經(jīng)無須編寫實(shí)現(xiàn)哈希表或平衡樹算法的代碼了,已經(jīng)無須編寫實(shí)現(xiàn)哈希表或平衡樹算法的代碼了,類庫中已經(jīng)提供了這類數(shù)據(jù)結(jié)構(gòu),而且算法先進(jìn)、類庫中已經(jīng)提供了這類數(shù)據(jù)結(jié)構(gòu),而且算法先進(jìn)、代碼精巧可靠。代碼精巧可靠。認(rèn)為面向?qū)ο笳Z言效率低的另一個(gè)理由是,這種語認(rèn)為面向?qū)ο笳Z言效率低的另一個(gè)理由是,這種語言在運(yùn)行時(shí)使用動(dòng)態(tài)聯(lián)編實(shí)現(xiàn)多態(tài)性,這似乎需要言在運(yùn)行時(shí)使用動(dòng)態(tài)聯(lián)編實(shí)現(xiàn)多態(tài)性,這似乎需要在運(yùn)行時(shí)查找繼承樹,以得到定義給定操作的類。在運(yùn)行時(shí)查找繼承樹,以得到定義給定操作的類。事實(shí)上,絕大多數(shù)面向?qū)ο笳Z言都
24、優(yōu)化了這個(gè)查找事實(shí)上,絕大多數(shù)面向?qū)ο笳Z言都優(yōu)化了這個(gè)查找過程,從而實(shí)現(xiàn)了高效率查找。只要在程序運(yùn)行時(shí)過程,從而實(shí)現(xiàn)了高效率查找。只要在程序運(yùn)行時(shí)始終保持類結(jié)構(gòu)不變,就能在子類中存儲(chǔ)各個(gè)操作始終保持類結(jié)構(gòu)不變,就能在子類中存儲(chǔ)各個(gè)操作的正確入口點(diǎn),從而使得動(dòng)態(tài)聯(lián)編成為查找哈希表的正確入口點(diǎn),從而使得動(dòng)態(tài)聯(lián)編成為查找哈希表的高效過程,不會(huì)由于繼承樹深度加大或類中定義的高效過程,不會(huì)由于繼承樹深度加大或類中定義的操作數(shù)增加而降低效率。的操作數(shù)增加而降低效率。8. 持久保存對(duì)象持久保存對(duì)象任何應(yīng)用程序都對(duì)數(shù)據(jù)進(jìn)行處理,如果希望數(shù)據(jù)能任何應(yīng)用程序都對(duì)數(shù)據(jù)進(jìn)行處理,如果希望數(shù)據(jù)能夠不依賴于程序執(zhí)行的生命
25、期而長(zhǎng)時(shí)間保存下來,夠不依賴于程序執(zhí)行的生命期而長(zhǎng)時(shí)間保存下來,則需要提供某種保存數(shù)據(jù)的方法。希望長(zhǎng)期保存數(shù)則需要提供某種保存數(shù)據(jù)的方法。希望長(zhǎng)期保存數(shù)據(jù)主要出于以下兩個(gè)原因:據(jù)主要出于以下兩個(gè)原因: (1) 為實(shí)現(xiàn)在不同程序之間傳遞數(shù)據(jù),需要保存數(shù)為實(shí)現(xiàn)在不同程序之間傳遞數(shù)據(jù),需要保存數(shù)據(jù);據(jù);(2) 為恢復(fù)被中斷了的程序的運(yùn)行,首先需要保存為恢復(fù)被中斷了的程序的運(yùn)行,首先需要保存數(shù)據(jù)。數(shù)據(jù)。一些面向?qū)ο笳Z言,沒有提供直接存儲(chǔ)對(duì)象的機(jī)制。一些面向?qū)ο笳Z言,沒有提供直接存儲(chǔ)對(duì)象的機(jī)制。這些語言的用戶必須自己管理對(duì)象的輸入輸出,或這些語言的用戶必須自己管理對(duì)象的輸入輸出,或者購買面向?qū)ο蟮臄?shù)據(jù)庫
26、管理系統(tǒng)。者購買面向?qū)ο蟮臄?shù)據(jù)庫管理系統(tǒng)。另外一些面向?qū)ο笳Z言另外一些面向?qū)ο笳Z言(例如,例如,Smalltalk),把當(dāng)前,把當(dāng)前的執(zhí)行狀態(tài)完整地保存在磁盤上。還有一些面向?qū)Φ膱?zhí)行狀態(tài)完整地保存在磁盤上。還有一些面向?qū)ο笳Z言,提供了訪問磁盤對(duì)象的輸入輸出操作。象語言,提供了訪問磁盤對(duì)象的輸入輸出操作。通過在類庫中增加對(duì)象存儲(chǔ)管理功能,可以在不改通過在類庫中增加對(duì)象存儲(chǔ)管理功能,可以在不改變語言定義或不增加關(guān)鍵字的情況下,就在開發(fā)環(huán)變語言定義或不增加關(guān)鍵字的情況下,就在開發(fā)環(huán)境中提供這種功能。然后,可以從境中提供這種功能。然后,可以從“可存儲(chǔ)的類可存儲(chǔ)的類”中派生出需要持久保存的對(duì)象,該對(duì)象自
27、然繼承了中派生出需要持久保存的對(duì)象,該對(duì)象自然繼承了對(duì)象存儲(chǔ)管理功能。這就是對(duì)象存儲(chǔ)管理功能。這就是Eiffel語言采用的策略。語言采用的策略。理想情況下,應(yīng)該使程序設(shè)計(jì)語言語法與對(duì)象存儲(chǔ)理想情況下,應(yīng)該使程序設(shè)計(jì)語言語法與對(duì)象存儲(chǔ)管理語法實(shí)現(xiàn)無縫集成。管理語法實(shí)現(xiàn)無縫集成。9. 參數(shù)化類參數(shù)化類在實(shí)際的應(yīng)用程序中,常??吹竭@樣一些軟件元素在實(shí)際的應(yīng)用程序中,常??吹竭@樣一些軟件元素(即函數(shù)、類等軟件成分即函數(shù)、類等軟件成分),從它們的邏輯功能看,從它們的邏輯功能看,彼此是相同的,所不同的主要是處理的對(duì)象彼此是相同的,所不同的主要是處理的對(duì)象(數(shù)據(jù)數(shù)據(jù))類型不同。例如,對(duì)于一個(gè)向量類型不同。例
28、如,對(duì)于一個(gè)向量(一維數(shù)組一維數(shù)組)類來說,類來說,不論是整型向量,浮點(diǎn)型向量,還是其他任何類型不論是整型向量,浮點(diǎn)型向量,還是其他任何類型的向量,針對(duì)它的數(shù)據(jù)元素所進(jìn)行的基本操作都是的向量,針對(duì)它的數(shù)據(jù)元素所進(jìn)行的基本操作都是相同的相同的(例如,插入、刪除、檢索等例如,插入、刪除、檢索等),當(dāng)然,不同,當(dāng)然,不同向量的數(shù)據(jù)元素的類型是不同的。如果程序語言提向量的數(shù)據(jù)元素的類型是不同的。如果程序語言提供一種能抽象出這類共性的機(jī)制,則對(duì)減少冗余和供一種能抽象出這類共性的機(jī)制,則對(duì)減少冗余和提高可重用性是大有好處的。提高可重用性是大有好處的。所謂參數(shù)化類,就是使用一個(gè)或多個(gè)類型去參數(shù)化所謂參數(shù)化類
29、,就是使用一個(gè)或多個(gè)類型去參數(shù)化一個(gè)類的機(jī)制,有了這種機(jī)制,程序員就可以先定一個(gè)類的機(jī)制,有了這種機(jī)制,程序員就可以先定義一個(gè)參數(shù)化的類模板義一個(gè)參數(shù)化的類模板(即在類定義中包含以參數(shù)即在類定義中包含以參數(shù)形式出現(xiàn)的一個(gè)或多個(gè)類型形式出現(xiàn)的一個(gè)或多個(gè)類型),然后把數(shù)據(jù)類型作,然后把數(shù)據(jù)類型作為參數(shù)傳遞進(jìn)來,從而把這個(gè)類模板應(yīng)用在不同的為參數(shù)傳遞進(jìn)來,從而把這個(gè)類模板應(yīng)用在不同的應(yīng)用程序中,或用在同一應(yīng)用程序的不同部分。應(yīng)用程序中,或用在同一應(yīng)用程序的不同部分。Eiffel語言中就有參數(shù)化類,語言中就有參數(shù)化類,C+語言也提供了類語言也提供了類模板。模板。10. 開發(fā)環(huán)境開發(fā)環(huán)境軟件工具和軟件工
30、程環(huán)境對(duì)軟件生產(chǎn)率有很大影響。軟件工具和軟件工程環(huán)境對(duì)軟件生產(chǎn)率有很大影響。由于面向?qū)ο蟪绦蛑欣^承關(guān)系和動(dòng)態(tài)聯(lián)編等引入的由于面向?qū)ο蟪绦蛑欣^承關(guān)系和動(dòng)態(tài)聯(lián)編等引入的特殊復(fù)雜性,面向?qū)ο笳Z言所提供的軟件工具或開特殊復(fù)雜性,面向?qū)ο笳Z言所提供的軟件工具或開發(fā)環(huán)境就顯得尤其重要了。至少應(yīng)該包括下列一些發(fā)環(huán)境就顯得尤其重要了。至少應(yīng)該包括下列一些最基本的軟件工具:最基本的軟件工具: 編輯程序,編譯程序或解釋編輯程序,編譯程序或解釋程序,瀏覽工具,調(diào)試器程序,瀏覽工具,調(diào)試器(debugger)等。等。編譯程序或解釋程序是最基本、最重要的軟件工具。編譯程序或解釋程序是最基本、最重要的軟件工具。編譯與解釋
31、的差別主要是速度和效率不同。利用解編譯與解釋的差別主要是速度和效率不同。利用解釋程序解釋執(zhí)行用戶的源程序,雖然速度慢、效率釋程序解釋執(zhí)行用戶的源程序,雖然速度慢、效率低,但卻可以更方便更靈活地進(jìn)行調(diào)試。編譯型語低,但卻可以更方便更靈活地進(jìn)行調(diào)試。編譯型語言適于用來開發(fā)正式的軟件產(chǎn)品,優(yōu)化工作做得好言適于用來開發(fā)正式的軟件產(chǎn)品,優(yōu)化工作做得好的編譯程序能生成效率很高的目標(biāo)代碼。有些面向的編譯程序能生成效率很高的目標(biāo)代碼。有些面向?qū)ο笳Z言對(duì)象語言(例如例如Objective_C)除提供編譯程序外,還除提供編譯程序外,還提供一個(gè)解釋工具,從而給用戶帶來很大方便。提供一個(gè)解釋工具,從而給用戶帶來很大方
32、便。某些面向?qū)ο笳Z言的編譯程序,先把用戶源程序翻某些面向?qū)ο笳Z言的編譯程序,先把用戶源程序翻譯成一種中間語言程序,然后再把中間語言程序翻譯成一種中間語言程序,然后再把中間語言程序翻譯成目標(biāo)代碼。這樣做可能會(huì)使得調(diào)試器不能理解譯成目標(biāo)代碼。這樣做可能會(huì)使得調(diào)試器不能理解原始的源程序。在評(píng)價(jià)調(diào)試器時(shí),首先應(yīng)該弄清楚原始的源程序。在評(píng)價(jià)調(diào)試器時(shí),首先應(yīng)該弄清楚它是針對(duì)原始的面向?qū)ο笤闯绦?,還是針對(duì)中間代它是針對(duì)原始的面向?qū)ο笤闯绦颍€是針對(duì)中間代碼進(jìn)行調(diào)試。如果是針對(duì)中間代碼進(jìn)行調(diào)試,則會(huì)碼進(jìn)行調(diào)試。如果是針對(duì)中間代碼進(jìn)行調(diào)試,則會(huì)給調(diào)試人員帶來許多不便。此外,面向?qū)ο蟮恼{(diào)試給調(diào)試人員帶來許多不便。
33、此外,面向?qū)ο蟮恼{(diào)試器,應(yīng)該能夠查看屬性值和分析消息連接的后果。器,應(yīng)該能夠查看屬性值和分析消息連接的后果。在開發(fā)大型系統(tǒng)的時(shí)候,需要有系統(tǒng)構(gòu)造工具和變?cè)陂_發(fā)大型系統(tǒng)的時(shí)候,需要有系統(tǒng)構(gòu)造工具和變動(dòng)控制工具。因此應(yīng)該考慮語言本身是否提供了這動(dòng)控制工具。因此應(yīng)該考慮語言本身是否提供了這種工具,或者該語言能否與現(xiàn)有的這類工具很好地種工具,或者該語言能否與現(xiàn)有的這類工具很好地集成起來。經(jīng)驗(yàn)表明,傳統(tǒng)的系統(tǒng)構(gòu)造工具集成起來。經(jīng)驗(yàn)表明,傳統(tǒng)的系統(tǒng)構(gòu)造工具(例如,例如,UNIX的的Make)目前對(duì)許多應(yīng)用系統(tǒng)來說都已經(jīng)太目前對(duì)許多應(yīng)用系統(tǒng)來說都已經(jīng)太原始了。原始了。開發(fā)人員在選擇面向?qū)ο笳Z言時(shí),還應(yīng)該著重
34、考慮開發(fā)人員在選擇面向?qū)ο笳Z言時(shí),還應(yīng)該著重考慮以下一些實(shí)際因素。以下一些實(shí)際因素。1. 將來能否占主導(dǎo)地位將來能否占主導(dǎo)地位在若干年以后,哪種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言將占在若干年以后,哪種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言將占主導(dǎo)地位呢主導(dǎo)地位呢?為了使自己的產(chǎn)品在若干年后仍然具為了使自己的產(chǎn)品在若干年后仍然具有很強(qiáng)的生命力,人們可能希望采用將來占主導(dǎo)地有很強(qiáng)的生命力,人們可能希望采用將來占主導(dǎo)地位的語言編程。位的語言編程。12.1.3 選擇面向?qū)ο笳Z言選擇面向?qū)ο笳Z言根據(jù)目前占有的市場(chǎng)份額,以及專業(yè)書刊和學(xué)術(shù)會(huì)根據(jù)目前占有的市場(chǎng)份額,以及專業(yè)書刊和學(xué)術(shù)會(huì)議上所做的分析、評(píng)價(jià),人們往往能夠?qū)ξ磥砟姆N議上所
35、做的分析、評(píng)價(jià),人們往往能夠?qū)ξ磥砟姆N面向?qū)ο笳Z言將占據(jù)主導(dǎo)地位做出預(yù)測(cè)。面向?qū)ο笳Z言將占據(jù)主導(dǎo)地位做出預(yù)測(cè)。但是,最終決定選用哪種面向?qū)ο笳Z言的實(shí)際因素,但是,最終決定選用哪種面向?qū)ο笳Z言的實(shí)際因素,往往是諸如成本之類的經(jīng)濟(jì)因素而不是技術(shù)因素。往往是諸如成本之類的經(jīng)濟(jì)因素而不是技術(shù)因素。2. 可重用性可重用性采用面向?qū)ο蠓椒ㄩ_發(fā)軟件的基本目的和主要優(yōu)點(diǎn),采用面向?qū)ο蠓椒ㄩ_發(fā)軟件的基本目的和主要優(yōu)點(diǎn),是通過重用提高軟件生產(chǎn)率。因此,應(yīng)該優(yōu)先選用是通過重用提高軟件生產(chǎn)率。因此,應(yīng)該優(yōu)先選用能夠最完整、最準(zhǔn)確地表達(dá)問題域語義的面向?qū)ο竽軌蜃钔暾?、最?zhǔn)確地表達(dá)問題域語義的面向?qū)ο笳Z言。語言。3. 類
36、庫和開發(fā)環(huán)境類庫和開發(fā)環(huán)境決定可重用性的因素,不僅僅是面向?qū)ο蟪绦蛘Z言決定可重用性的因素,不僅僅是面向?qū)ο蟪绦蛘Z言本身,開發(fā)環(huán)境和類庫也是非常重要的因素。事實(shí)本身,開發(fā)環(huán)境和類庫也是非常重要的因素。事實(shí)上,語言、開發(fā)環(huán)境和類庫這上,語言、開發(fā)環(huán)境和類庫這3個(gè)因素綜合起來,個(gè)因素綜合起來,共同決定了可重用性。共同決定了可重用性??紤]類庫的時(shí)候,不僅應(yīng)該考慮是否提供了類庫,考慮類庫的時(shí)候,不僅應(yīng)該考慮是否提供了類庫,還應(yīng)該考慮類庫中提供了哪些有價(jià)值的類。隨著類還應(yīng)該考慮類庫中提供了哪些有價(jià)值的類。隨著類庫的日益成熟和豐富,在開發(fā)新應(yīng)用系統(tǒng)時(shí),需要庫的日益成熟和豐富,在開發(fā)新應(yīng)用系統(tǒng)時(shí),需要開發(fā)人員
37、自己編寫的代碼將越來越少。開發(fā)人員自己編寫的代碼將越來越少。為便于積累可重用的類和重用已有的類,在開發(fā)環(huán)為便于積累可重用的類和重用已有的類,在開發(fā)環(huán)境中,除了提供前述的基本軟件工具外,還應(yīng)該提境中,除了提供前述的基本軟件工具外,還應(yīng)該提供使用方便的類庫編輯工具和瀏覽工具。其中的類供使用方便的類庫編輯工具和瀏覽工具。其中的類庫瀏覽工具應(yīng)該具有強(qiáng)大的聯(lián)想功能。庫瀏覽工具應(yīng)該具有強(qiáng)大的聯(lián)想功能。4. 其他因素其他因素在選擇編程語言時(shí),應(yīng)該考慮的其他因素還有:在選擇編程語言時(shí),應(yīng)該考慮的其他因素還有: 對(duì)用戶學(xué)習(xí)面向?qū)ο蠓治觥⒃O(shè)計(jì)和編碼技術(shù)所能提對(duì)用戶學(xué)習(xí)面向?qū)ο蠓治?、設(shè)計(jì)和編碼技術(shù)所能提供的培訓(xùn)服務(wù)
38、;在使用這個(gè)面向?qū)ο笳Z言期間能提供的培訓(xùn)服務(wù);在使用這個(gè)面向?qū)ο笳Z言期間能提供的技術(shù)支持;能提供給開發(fā)人員使用的開發(fā)工具、供的技術(shù)支持;能提供給開發(fā)人員使用的開發(fā)工具、開發(fā)平臺(tái)、發(fā)行平臺(tái);對(duì)機(jī)器性能和內(nèi)存的需求;開發(fā)平臺(tái)、發(fā)行平臺(tái);對(duì)機(jī)器性能和內(nèi)存的需求;集成已有軟件的容易程度等。集成已有軟件的容易程度等。在本書第在本書第7章已經(jīng)強(qiáng)調(diào)指出,良好的程序設(shè)計(jì)風(fēng)格章已經(jīng)強(qiáng)調(diào)指出,良好的程序設(shè)計(jì)風(fēng)格對(duì)保證程序質(zhì)量的重要性。良好的程序設(shè)計(jì)風(fēng)格對(duì)對(duì)保證程序質(zhì)量的重要性。良好的程序設(shè)計(jì)風(fēng)格對(duì)面向?qū)ο髮?shí)現(xiàn)來說尤其重要,不僅能明顯減少維護(hù)面向?qū)ο髮?shí)現(xiàn)來說尤其重要,不僅能明顯減少維護(hù)或擴(kuò)充的開銷,而且有助于在新項(xiàng)
39、目中重用已有的或擴(kuò)充的開銷,而且有助于在新項(xiàng)目中重用已有的程序代碼。程序代碼。良好的面向?qū)ο蟪绦蛟O(shè)計(jì)風(fēng)格,既包括傳統(tǒng)的程序良好的面向?qū)ο蟪绦蛟O(shè)計(jì)風(fēng)格,既包括傳統(tǒng)的程序設(shè)計(jì)風(fēng)格準(zhǔn)則,也包括為適應(yīng)面向?qū)ο蠓椒ㄋ赜性O(shè)計(jì)風(fēng)格準(zhǔn)則,也包括為適應(yīng)面向?qū)ο蠓椒ㄋ赜械母拍畹母拍?例如,繼承性例如,繼承性)而必須遵循的一些新準(zhǔn)則。而必須遵循的一些新準(zhǔn)則。12.2 程序設(shè)計(jì)風(fēng)格程序設(shè)計(jì)風(fēng)格面向?qū)ο蠓椒ǖ囊粋€(gè)主要目標(biāo),就是提高軟件的可面向?qū)ο蠓椒ǖ囊粋€(gè)主要目標(biāo),就是提高軟件的可重用性。軟件重用有多個(gè)層次,在編碼階段主要涉重用性。軟件重用有多個(gè)層次,在編碼階段主要涉及代碼重用問題。一般說來,代碼重用有兩種:及代碼
40、重用問題。一般說來,代碼重用有兩種: 一種是本項(xiàng)目?jī)?nèi)的代碼重用,另一種是新項(xiàng)目重用一種是本項(xiàng)目?jī)?nèi)的代碼重用,另一種是新項(xiàng)目重用舊項(xiàng)目的代碼。內(nèi)部重用主要是找出設(shè)計(jì)中相同或舊項(xiàng)目的代碼。內(nèi)部重用主要是找出設(shè)計(jì)中相同或相似的部分,然后利用繼承機(jī)制共享它們。為做到相似的部分,然后利用繼承機(jī)制共享它們。為做到外部重用,則必須有長(zhǎng)遠(yuǎn)眼光,需要反復(fù)考慮精心外部重用,則必須有長(zhǎng)遠(yuǎn)眼光,需要反復(fù)考慮精心設(shè)計(jì)。雖然為實(shí)現(xiàn)外部重用而需要考慮的面,比為設(shè)計(jì)。雖然為實(shí)現(xiàn)外部重用而需要考慮的面,比為實(shí)現(xiàn)內(nèi)部重用而需要考慮的面更廣,但是,有助于實(shí)現(xiàn)內(nèi)部重用而需要考慮的面更廣,但是,有助于實(shí)現(xiàn)這兩類重用的程序設(shè)計(jì)準(zhǔn)則卻是相
41、同的。下面實(shí)現(xiàn)這兩類重用的程序設(shè)計(jì)準(zhǔn)則卻是相同的。下面講述主要的準(zhǔn)則:講述主要的準(zhǔn)則:12.2.1 提高可重用性提高可重用性1. 提高方法的內(nèi)聚提高方法的內(nèi)聚一個(gè)方法一個(gè)方法(即服務(wù)即服務(wù))應(yīng)該只完成單個(gè)功能。如果某個(gè)應(yīng)該只完成單個(gè)功能。如果某個(gè)方法涉及兩個(gè)或多個(gè)不相關(guān)的功能,則應(yīng)該把它分方法涉及兩個(gè)或多個(gè)不相關(guān)的功能,則應(yīng)該把它分解成幾個(gè)更小的方法。解成幾個(gè)更小的方法。2. 減小方法的規(guī)模減小方法的規(guī)模應(yīng)該減小方法的規(guī)模,如果某個(gè)方法規(guī)模過大應(yīng)該減小方法的規(guī)模,如果某個(gè)方法規(guī)模過大(代代碼長(zhǎng)度超過一頁紙可能就太大了碼長(zhǎng)度超過一頁紙可能就太大了),則應(yīng)該把它分,則應(yīng)該把它分解成幾個(gè)更小的方法。
42、解成幾個(gè)更小的方法。3. 保持方法的一致性保持方法的一致性保持方法的一致性,有助于實(shí)現(xiàn)代碼重用。一般說保持方法的一致性,有助于實(shí)現(xiàn)代碼重用。一般說來,功能相似的方法應(yīng)該有一致的名字、參數(shù)特征來,功能相似的方法應(yīng)該有一致的名字、參數(shù)特征(包括參數(shù)個(gè)數(shù)、類型和次序包括參數(shù)個(gè)數(shù)、類型和次序)、返回值類型、使用、返回值類型、使用條件及出錯(cuò)條件等。條件及出錯(cuò)條件等。4. 把策略與實(shí)現(xiàn)分開把策略與實(shí)現(xiàn)分開從所完成的功能看,有兩種不同類型的方法。一類從所完成的功能看,有兩種不同類型的方法。一類方法負(fù)責(zé)做出決策,提供變?cè)?,并且管理全局資源,方法負(fù)責(zé)做出決策,提供變?cè)?,并且管理全局資源,可稱為策略方法。另一類方
43、法負(fù)責(zé)完成具體的操作,可稱為策略方法。另一類方法負(fù)責(zé)完成具體的操作,但卻并不做出是否執(zhí)行這個(gè)操作的決定,也不知道但卻并不做出是否執(zhí)行這個(gè)操作的決定,也不知道為什么執(zhí)行這個(gè)操作,可稱為實(shí)現(xiàn)方法。為什么執(zhí)行這個(gè)操作,可稱為實(shí)現(xiàn)方法。策略方法應(yīng)該檢查系統(tǒng)運(yùn)行狀態(tài),并處理出錯(cuò)情況,策略方法應(yīng)該檢查系統(tǒng)運(yùn)行狀態(tài),并處理出錯(cuò)情況,它們并不直接完成計(jì)算或?qū)崿F(xiàn)復(fù)雜的算法。策略方它們并不直接完成計(jì)算或?qū)崿F(xiàn)復(fù)雜的算法。策略方法通常緊密依賴于具體應(yīng)用,這類方法比較容易編法通常緊密依賴于具體應(yīng)用,這類方法比較容易編寫,也比較容易理解。寫,也比較容易理解。實(shí)現(xiàn)方法僅僅針對(duì)具體數(shù)據(jù)完成特定處理,通常用實(shí)現(xiàn)方法僅僅針對(duì)具體
44、數(shù)據(jù)完成特定處理,通常用于實(shí)現(xiàn)復(fù)雜的算法。實(shí)現(xiàn)方法并不制定決策,也不于實(shí)現(xiàn)復(fù)雜的算法。實(shí)現(xiàn)方法并不制定決策,也不管理全局資源,如果在執(zhí)行過程中發(fā)現(xiàn)錯(cuò)誤,它們管理全局資源,如果在執(zhí)行過程中發(fā)現(xiàn)錯(cuò)誤,它們應(yīng)該只返回執(zhí)行狀態(tài)而不對(duì)錯(cuò)誤采取行動(dòng)。由于實(shí)應(yīng)該只返回執(zhí)行狀態(tài)而不對(duì)錯(cuò)誤采取行動(dòng)。由于實(shí)現(xiàn)方法是自含式算法,相對(duì)獨(dú)立于具體應(yīng)用,因此,現(xiàn)方法是自含式算法,相對(duì)獨(dú)立于具體應(yīng)用,因此,在其他應(yīng)用系統(tǒng)中也可能重用它們。在其他應(yīng)用系統(tǒng)中也可能重用它們。為提高可重用性,在編程時(shí)不要把策略和實(shí)現(xiàn)放在為提高可重用性,在編程時(shí)不要把策略和實(shí)現(xiàn)放在同一個(gè)方法中,應(yīng)該把算法的核心部分放在一個(gè)單同一個(gè)方法中,應(yīng)該把算法
45、的核心部分放在一個(gè)單獨(dú)的具體實(shí)現(xiàn)方法中。為此需要從策略方法中提取獨(dú)的具體實(shí)現(xiàn)方法中。為此需要從策略方法中提取出具體參數(shù),作為調(diào)用實(shí)現(xiàn)方法的變?cè)?。出具體參數(shù),作為調(diào)用實(shí)現(xiàn)方法的變?cè)?. 全面覆蓋全面覆蓋如果輸入條件的各種組合都可能出現(xiàn),則應(yīng)該針對(duì)如果輸入條件的各種組合都可能出現(xiàn),則應(yīng)該針對(duì)所有組合寫出方法,而不能僅僅針對(duì)當(dāng)前用到的組所有組合寫出方法,而不能僅僅針對(duì)當(dāng)前用到的組合情況寫方法。例如,如果在當(dāng)前應(yīng)用中需要寫一合情況寫方法。例如,如果在當(dāng)前應(yīng)用中需要寫一個(gè)方法,以獲取表中第一個(gè)元素,則至少還應(yīng)該為個(gè)方法,以獲取表中第一個(gè)元素,則至少還應(yīng)該為獲取表中最后一個(gè)元素再寫一個(gè)方法。獲取表中最后
46、一個(gè)元素再寫一個(gè)方法。此外,一個(gè)方法不應(yīng)該只能處理正常值,對(duì)空值、此外,一個(gè)方法不應(yīng)該只能處理正常值,對(duì)空值、極限值及界外值等異常情況也應(yīng)該能夠作出有意義極限值及界外值等異常情況也應(yīng)該能夠作出有意義的響應(yīng)。的響應(yīng)。6. 盡量不使用全局信息盡量不使用全局信息應(yīng)該盡量降低方法與外界的耦合程度,不使用全局應(yīng)該盡量降低方法與外界的耦合程度,不使用全局信息是降低耦合度的一項(xiàng)主要措施。信息是降低耦合度的一項(xiàng)主要措施。7. 利用繼承機(jī)制利用繼承機(jī)制在面向?qū)ο蟪绦蛑?,使用繼承機(jī)制是實(shí)現(xiàn)共享和提在面向?qū)ο蟪绦蛑校褂美^承機(jī)制是實(shí)現(xiàn)共享和提高重用程度的主要途徑。高重用程度的主要途徑。(1) 調(diào)用子過程。最簡(jiǎn)單的做
47、法是把公共的代碼分調(diào)用子過程。最簡(jiǎn)單的做法是把公共的代碼分離出來,構(gòu)成一個(gè)被其他方法調(diào)用的公用方法??呻x出來,構(gòu)成一個(gè)被其他方法調(diào)用的公用方法。可以在基類中定義這個(gè)公用方法,供派生類中的方法以在基類中定義這個(gè)公用方法,供派生類中的方法調(diào)用,如圖調(diào)用,如圖12.1所示。所示。圖圖12.1 通過調(diào)用公用方法實(shí)現(xiàn)代碼重用通過調(diào)用公用方法實(shí)現(xiàn)代碼重用(2) 分解因子。有時(shí)提高相似類代碼可重用性的一分解因子。有時(shí)提高相似類代碼可重用性的一個(gè)有效途徑,是從不同類的相似方法中分解出不同個(gè)有效途徑,是從不同類的相似方法中分解出不同的的“因子因子”(即不同的代碼即不同的代碼),把余下的代碼作為公,把余下的代碼作
48、為公用方法中的公共代碼,把分解出的因子作為名字相用方法中的公共代碼,把分解出的因子作為名字相同算法不同的方法,放在不同類中定義,并被這個(gè)同算法不同的方法,放在不同類中定義,并被這個(gè)公用方法調(diào)用,如圖公用方法調(diào)用,如圖12.2所示。使用這種途徑通常所示。使用這種途徑通常額外定義一個(gè)抽象基類,并在這個(gè)抽象基類中定義額外定義一個(gè)抽象基類,并在這個(gè)抽象基類中定義公用方法。把這種途徑與面向?qū)ο笳Z言提供的多態(tài)公用方法。把這種途徑與面向?qū)ο笳Z言提供的多態(tài)性機(jī)制結(jié)合起來,讓派生類繼承抽象基類中定義的性機(jī)制結(jié)合起來,讓派生類繼承抽象基類中定義的公用方法,可以明顯降低為增添新子類而需付出的公用方法,可以明顯降低為
49、增添新子類而需付出的工作量,因?yàn)橹恍柙谛伦宇愔芯帉懫涮赜械拇a。工作量,因?yàn)橹恍柙谛伦宇愔芯帉懫涮赜械拇a。圖圖12.2 通過因子分解實(shí)現(xiàn)代碼重用通過因子分解實(shí)現(xiàn)代碼重用(3) 使用委托。繼承關(guān)系的存在意味著子類使用委托。繼承關(guān)系的存在意味著子類“即是即是”父類,因此,父類的所有方法和屬性應(yīng)該都適用于父類,因此,父類的所有方法和屬性應(yīng)該都適用于子類。僅當(dāng)確實(shí)存在一般子類。僅當(dāng)確實(shí)存在一般-特殊關(guān)系時(shí),使用繼承特殊關(guān)系時(shí),使用繼承才是恰當(dāng)?shù)?。繼承機(jī)制使用不當(dāng)將造成程序難于理才是恰當(dāng)?shù)?。繼承機(jī)制使用不當(dāng)將造成程序難于理解、修改和擴(kuò)充。解、修改和擴(kuò)充。當(dāng)邏輯上不存在一般當(dāng)邏輯上不存在一般-特殊關(guān)系時(shí)
50、,為重用已有的特殊關(guān)系時(shí),為重用已有的代碼,可以利用委托機(jī)制,如本書代碼,可以利用委托機(jī)制,如本書11.11.3小節(jié)所述。小節(jié)所述。(4) 把代碼封裝在類中。程序員往往希望重用用其把代碼封裝在類中。程序員往往希望重用用其他方法編寫的、解決同一類應(yīng)用問題的程序代碼。他方法編寫的、解決同一類應(yīng)用問題的程序代碼。重用這類代碼的一個(gè)比較安全的途徑,是把被重用重用這類代碼的一個(gè)比較安全的途徑,是把被重用的代碼封裝在類中。的代碼封裝在類中。例如,在開發(fā)一個(gè)數(shù)學(xué)分析應(yīng)用系統(tǒng)的過程中,已例如,在開發(fā)一個(gè)數(shù)學(xué)分析應(yīng)用系統(tǒng)的過程中,已知有現(xiàn)成的實(shí)現(xiàn)矩陣變換的商品軟件包,程序員不知有現(xiàn)成的實(shí)現(xiàn)矩陣變換的商品軟件包,
51、程序員不想用想用C+語言重寫這個(gè)算法,于是他定義一個(gè)矩陣語言重寫這個(gè)算法,于是他定義一個(gè)矩陣類把這個(gè)商品軟件包的功能封裝在該類中。類把這個(gè)商品軟件包的功能封裝在該類中。上一小節(jié)所述的提高可重用性的準(zhǔn)則,也能提高程上一小節(jié)所述的提高可重用性的準(zhǔn)則,也能提高程序的可擴(kuò)充性。此外,下列的面向?qū)ο蟪绦蛟O(shè)計(jì)準(zhǔn)序的可擴(kuò)充性。此外,下列的面向?qū)ο蟪绦蛟O(shè)計(jì)準(zhǔn)則也有助于提高可擴(kuò)充性:則也有助于提高可擴(kuò)充性: 1. 封裝實(shí)現(xiàn)策略封裝實(shí)現(xiàn)策略應(yīng)該把類的實(shí)現(xiàn)策略應(yīng)該把類的實(shí)現(xiàn)策略(包括描述屬性的數(shù)據(jù)結(jié)構(gòu)、包括描述屬性的數(shù)據(jù)結(jié)構(gòu)、修改屬性的算法等修改屬性的算法等)封裝起來,對(duì)外只提供公有的封裝起來,對(duì)外只提供公有的接口
52、,否則將降低今后修改數(shù)據(jù)結(jié)構(gòu)或算法的自由接口,否則將降低今后修改數(shù)據(jù)結(jié)構(gòu)或算法的自由度。度。12.2.2 提高可擴(kuò)充性提高可擴(kuò)充性2. 不要用一個(gè)方法遍歷多條關(guān)聯(lián)鏈不要用一個(gè)方法遍歷多條關(guān)聯(lián)鏈一個(gè)方法應(yīng)該只包含對(duì)象模型中的有限內(nèi)容。違反一個(gè)方法應(yīng)該只包含對(duì)象模型中的有限內(nèi)容。違反這條準(zhǔn)則將導(dǎo)致方法過分復(fù)雜,既不易理解,也不這條準(zhǔn)則將導(dǎo)致方法過分復(fù)雜,既不易理解,也不易修改擴(kuò)充。易修改擴(kuò)充。3. 避免使用多分支語句避免使用多分支語句一般說來,可以利用一般說來,可以利用DO_CASE語句測(cè)試對(duì)象的內(nèi)語句測(cè)試對(duì)象的內(nèi)部狀態(tài),而不要用來根據(jù)對(duì)象類型選擇應(yīng)有的行為,部狀態(tài),而不要用來根據(jù)對(duì)象類型選擇應(yīng)有
53、的行為,否則在增添新類時(shí)將不得不修改原有的代碼。應(yīng)該否則在增添新類時(shí)將不得不修改原有的代碼。應(yīng)該合理地利用多態(tài)性機(jī)制,根據(jù)對(duì)象當(dāng)前類型,自動(dòng)合理地利用多態(tài)性機(jī)制,根據(jù)對(duì)象當(dāng)前類型,自動(dòng)決定應(yīng)有的行為。決定應(yīng)有的行為。4. 精心確定公有方法精心確定公有方法公有方法是向公眾公布的接口。對(duì)這類方法的修改公有方法是向公眾公布的接口。對(duì)這類方法的修改往往會(huì)涉及許多其他類,因此,修改公有方法的代往往會(huì)涉及許多其他類,因此,修改公有方法的代價(jià)通常都比較高。為提高可修改性,降低維護(hù)成本,價(jià)通常都比較高。為提高可修改性,降低維護(hù)成本,必須精心選擇和定義公有方法。私有方法是僅在類必須精心選擇和定義公有方法。私有方
54、法是僅在類內(nèi)使用的方法,通常利用私有方法來實(shí)現(xiàn)公有方法。內(nèi)使用的方法,通常利用私有方法來實(shí)現(xiàn)公有方法。刪除、增加或修改私有方法所涉及的面要窄得多,刪除、增加或修改私有方法所涉及的面要窄得多,因此代價(jià)也比較低。因此代價(jià)也比較低。程序員在編寫實(shí)現(xiàn)方法的代碼時(shí),既應(yīng)該考慮效率,程序員在編寫實(shí)現(xiàn)方法的代碼時(shí),既應(yīng)該考慮效率,也應(yīng)該考慮健壯性。通常需要在健壯性與效率之間也應(yīng)該考慮健壯性。通常需要在健壯性與效率之間做出適當(dāng)?shù)恼壑?。必須認(rèn)識(shí)到,對(duì)于任何一個(gè)實(shí)用做出適當(dāng)?shù)恼壑浴1仨氄J(rèn)識(shí)到,對(duì)于任何一個(gè)實(shí)用軟件來說,健壯性都是不可忽略的質(zhì)量指標(biāo)。為提軟件來說,健壯性都是不可忽略的質(zhì)量指標(biāo)。為提高健壯性應(yīng)該遵守以
55、下幾條準(zhǔn)則。高健壯性應(yīng)該遵守以下幾條準(zhǔn)則。12.2.3 提高健壯性提高健壯性1. 預(yù)防用戶的操作錯(cuò)誤預(yù)防用戶的操作錯(cuò)誤軟件系統(tǒng)必須具有處理用戶操作錯(cuò)誤的能力。當(dāng)用軟件系統(tǒng)必須具有處理用戶操作錯(cuò)誤的能力。當(dāng)用戶在輸入數(shù)據(jù)時(shí)發(fā)生錯(cuò)誤,不應(yīng)該引起程序運(yùn)行中戶在輸入數(shù)據(jù)時(shí)發(fā)生錯(cuò)誤,不應(yīng)該引起程序運(yùn)行中斷,更不應(yīng)該造成斷,更不應(yīng)該造成“死機(jī)死機(jī)”。任何一個(gè)接收用戶輸。任何一個(gè)接收用戶輸入數(shù)據(jù)的方法,對(duì)其接收到的數(shù)據(jù)都必須進(jìn)行檢查,入數(shù)據(jù)的方法,對(duì)其接收到的數(shù)據(jù)都必須進(jìn)行檢查,即使發(fā)現(xiàn)了非常嚴(yán)重的錯(cuò)誤,也應(yīng)該給出恰當(dāng)?shù)奶峒词拱l(fā)現(xiàn)了非常嚴(yán)重的錯(cuò)誤,也應(yīng)該給出恰當(dāng)?shù)奶崾拘畔ⅲ?zhǔn)備再次接收用戶的輸入。示信息,
56、并準(zhǔn)備再次接收用戶的輸入。2. 檢查參數(shù)的合法性檢查參數(shù)的合法性對(duì)公有方法,尤其應(yīng)該著重檢查其參數(shù)的合法性,對(duì)公有方法,尤其應(yīng)該著重檢查其參數(shù)的合法性,因?yàn)橛脩粼谑褂霉蟹椒〞r(shí)可能違反參數(shù)的約束條因?yàn)橛脩粼谑褂霉蟹椒〞r(shí)可能違反參數(shù)的約束條件。件。3. 不要預(yù)先確定限制條件不要預(yù)先確定限制條件在設(shè)計(jì)階段,往往很難準(zhǔn)確地預(yù)測(cè)出應(yīng)用系統(tǒng)中使在設(shè)計(jì)階段,往往很難準(zhǔn)確地預(yù)測(cè)出應(yīng)用系統(tǒng)中使用的數(shù)據(jù)結(jié)構(gòu)的最大容量需求。因此不應(yīng)該預(yù)先設(shè)用的數(shù)據(jù)結(jié)構(gòu)的最大容量需求。因此不應(yīng)該預(yù)先設(shè)定限制條件。如果有必要和可能,則應(yīng)該使用動(dòng)態(tài)定限制條件。如果有必要和可能,則應(yīng)該使用動(dòng)態(tài)內(nèi)存分配機(jī)制,創(chuàng)建未預(yù)先設(shè)定限制條件的數(shù)據(jù)
57、結(jié)內(nèi)存分配機(jī)制,創(chuàng)建未預(yù)先設(shè)定限制條件的數(shù)據(jù)結(jié)構(gòu)。構(gòu)。4. 先測(cè)試后優(yōu)化先測(cè)試后優(yōu)化為在效率與健壯性之間做出合理的折衷,應(yīng)該在為為在效率與健壯性之間做出合理的折衷,應(yīng)該在為提高效率而進(jìn)行優(yōu)化之前,先測(cè)試程序的性能,人提高效率而進(jìn)行優(yōu)化之前,先測(cè)試程序的性能,人們常常驚奇地發(fā)現(xiàn),事實(shí)上大部分程序代碼所消耗們常常驚奇地發(fā)現(xiàn),事實(shí)上大部分程序代碼所消耗的運(yùn)行時(shí)間并不多。應(yīng)該仔細(xì)研究應(yīng)用程序的特點(diǎn),的運(yùn)行時(shí)間并不多。應(yīng)該仔細(xì)研究應(yīng)用程序的特點(diǎn),以確定哪些部分需要著重測(cè)試以確定哪些部分需要著重測(cè)試(例如,最壞情況出例如,最壞情況出現(xiàn)的次數(shù)及處理時(shí)間,可能需要著重測(cè)試現(xiàn)的次數(shù)及處理時(shí)間,可能需要著重測(cè)試)
58、。經(jīng)過。經(jīng)過測(cè)試,合理地確定為提高性能應(yīng)該著重優(yōu)化的關(guān)鍵測(cè)試,合理地確定為提高性能應(yīng)該著重優(yōu)化的關(guān)鍵部分。如果實(shí)現(xiàn)某個(gè)操作的算法有許多種,則應(yīng)該部分。如果實(shí)現(xiàn)某個(gè)操作的算法有許多種,則應(yīng)該綜合考慮內(nèi)存需求、速度及實(shí)現(xiàn)的簡(jiǎn)易程度等因素,綜合考慮內(nèi)存需求、速度及實(shí)現(xiàn)的簡(jiǎn)易程度等因素,經(jīng)合理折衷選定適當(dāng)?shù)乃惴?。?jīng)合理折衷選定適當(dāng)?shù)乃惴?。測(cè)試軟件的經(jīng)典策略是,從測(cè)試軟件的經(jīng)典策略是,從“小型測(cè)試小型測(cè)試”開始,逐開始,逐步過渡到步過渡到“大型測(cè)試大型測(cè)試”。用軟件測(cè)試的專業(yè)術(shù)語描。用軟件測(cè)試的專業(yè)術(shù)語描述,就是從單元測(cè)試開始,逐步進(jìn)入集成測(cè)試,最述,就是從單元測(cè)試開始,逐步進(jìn)入集成測(cè)試,最后進(jìn)行確認(rèn)測(cè)
59、試和系統(tǒng)測(cè)試。對(duì)于傳統(tǒng)的軟件系統(tǒng)后進(jìn)行確認(rèn)測(cè)試和系統(tǒng)測(cè)試。對(duì)于傳統(tǒng)的軟件系統(tǒng)來說,單元測(cè)試集中測(cè)試最小的可編譯的程序單元來說,單元測(cè)試集中測(cè)試最小的可編譯的程序單元(過程模塊),一旦把這些單元都測(cè)試完之后,就(過程模塊),一旦把這些單元都測(cè)試完之后,就把它們集成到程序結(jié)構(gòu)中去;在集成過程中還應(yīng)該把它們集成到程序結(jié)構(gòu)中去;在集成過程中還應(yīng)該進(jìn)行一系列的回歸測(cè)試,以發(fā)現(xiàn)模塊接口錯(cuò)誤和新進(jìn)行一系列的回歸測(cè)試,以發(fā)現(xiàn)模塊接口錯(cuò)誤和新單元加入到程序中所帶來的副作用;最后,把軟件單元加入到程序中所帶來的副作用;最后,把軟件系統(tǒng)作為一個(gè)整體來測(cè)試,以發(fā)現(xiàn)軟件需求錯(cuò)誤。系統(tǒng)作為一個(gè)整體來測(cè)試,以發(fā)現(xiàn)軟件需求錯(cuò)
60、誤。測(cè)試面向?qū)ο筌浖牟呗耘c上述策略基本相同,但測(cè)試面向?qū)ο筌浖牟呗耘c上述策略基本相同,但也有許多新特點(diǎn)。也有許多新特點(diǎn)。12.3 測(cè)試策略測(cè)試策略當(dāng)考慮面向?qū)ο蟮能浖r(shí),單元的概念改變了。當(dāng)考慮面向?qū)ο蟮能浖r(shí),單元的概念改變了?!胺庋b封裝”導(dǎo)致了類和對(duì)象的定義,這意味著類和類導(dǎo)致了類和對(duì)象的定義,這意味著類和類的實(shí)例(對(duì)象)包裝了屬性(數(shù)據(jù))和處理這些數(shù)的實(shí)例(對(duì)象)包裝了屬性(數(shù)據(jù))和處理這些數(shù)據(jù)的操作(也稱為方法或服務(wù))?,F(xiàn)在,最小的可據(jù)的操作(也稱為方法或服務(wù))?,F(xiàn)在,最小的可測(cè)試單元是封裝起來的類和對(duì)象。一個(gè)類可以包含測(cè)試單元是封裝起來的類和對(duì)象。一個(gè)類可以包含一組不同的操作,而
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度預(yù)埋件在虛擬現(xiàn)實(shí)設(shè)備中的應(yīng)用合同3篇
- 2025版寵物店寵物醫(yī)療保健服務(wù)合作協(xié)議3篇
- 2024購物廣場(chǎng)飾品品牌形象授權(quán)合同
- 二零二五年度離婚財(cái)產(chǎn)分割與債務(wù)承擔(dān)明確合同3篇
- 專業(yè)廣告服務(wù)物資采購協(xié)議2024版B版
- 2024年適用三方物資捐贈(zèng)協(xié)議版B版
- 專項(xiàng)房地產(chǎn)項(xiàng)目分析2024咨詢協(xié)議
- 2025年度金融軟件銷售與風(fēng)險(xiǎn)控制合同模板2篇
- 2025年度新型大米加工技術(shù)合作開發(fā)合同范本3篇
- 初中生宿舍安全班會(huì)
- 《機(jī)械設(shè)備維護(hù)與保養(yǎng)》課程標(biāo)準(zhǔn)
- 圓管鋼立柱柱吊裝施工方案
- 河南省對(duì)口升學(xué)文秘類專業(yè)課試題卷
- 醫(yī)療器械經(jīng)營質(zhì)量管理體系文件(全套)
- 磷酸鐵鋰電池工商業(yè)儲(chǔ)能項(xiàng)目施工組織設(shè)計(jì)方案
- 建筑節(jié)能分部工程質(zhì)量驗(yàn)收?qǐng)?bào)告(樣本)
- 泌尿外科護(hù)理疑難病例討論
- 危大工程安全管理措施方案
- 英格索蘭空壓機(jī)操作規(guī)程
- 簡(jiǎn)單通用利潤(rùn)表
- PFA管道安裝工藝簡(jiǎn)述
評(píng)論
0/150
提交評(píng)論