計算機(jī)基礎(chǔ)(第2版)課件第5章 程序設(shè)計基礎(chǔ)_第1頁
計算機(jī)基礎(chǔ)(第2版)課件第5章 程序設(shè)計基礎(chǔ)_第2頁
計算機(jī)基礎(chǔ)(第2版)課件第5章 程序設(shè)計基礎(chǔ)_第3頁
計算機(jī)基礎(chǔ)(第2版)課件第5章 程序設(shè)計基礎(chǔ)_第4頁
計算機(jī)基礎(chǔ)(第2版)課件第5章 程序設(shè)計基礎(chǔ)_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第5章程序設(shè)計基礎(chǔ)5程序設(shè)計基礎(chǔ)5.1程序設(shè)計方法與風(fēng)格5.2結(jié)構(gòu)化程序設(shè)計5.3面向?qū)ο蟮某绦蛟O(shè)計5.1

程序設(shè)計方法與風(fēng)格源程序文檔化數(shù)據(jù)說明的方法語句的結(jié)構(gòu)輸入和輸出5.1程序設(shè)計方法與風(fēng)格程序設(shè)計是一門技術(shù),需要相應(yīng)的理論、技術(shù)、方法和工具來支持。就程序設(shè)計方法和技術(shù)的發(fā)展而言,主要經(jīng)過了結(jié)構(gòu)化程序設(shè)計和面向?qū)ο蟮某绦蛟O(shè)計階段。除了好的程序設(shè)計方法和技術(shù)之外,程序設(shè)計風(fēng)格也是很重要的。因為程序設(shè)計風(fēng)格會深刻地影響軟件的質(zhì)量和可維護(hù)性,良好的程序設(shè)計風(fēng)格可以使程序結(jié)構(gòu)清晰合理,使程序代碼便于維護(hù),因此,程序設(shè)計風(fēng)格對保證程序的質(zhì)量是很重要的。5.1程序設(shè)計方法與風(fēng)格1.源程序文檔化源程序文檔化應(yīng)考慮如下幾點(diǎn)。(1)符號名的命名:符號名的命名應(yīng)具有……定的實(shí)際含義,以便于對程序功能的理解。(2)程序注釋:正確的注釋能夠幫助讀者理解程序。注釋…般分為序言性注釋和功能性注釋。序言性注釋通常位于每個程序的開頭部分,它給出程序的整體說明,主要描述內(nèi)容可以包括程序標(biāo)題、程序功能說明、主要算法、接口說明、程序位置、開發(fā)簡歷、程序設(shè)計者、復(fù)審者、復(fù)審日期、修改日期等。功能性注釋的位置一般嵌在源程序體之中,主要描述其后的語句或程序做什么。(3)視覺組織:為使程序的結(jié)構(gòu)一目了然,可以在程序中利用空格、空行、縮進(jìn)等技巧使程序?qū)哟吻逦?.1程序設(shè)計方法與風(fēng)格

2.數(shù)據(jù)說明的方法在編寫程序時,需要注意數(shù)據(jù)說明的風(fēng)格,以便使程序中的數(shù)據(jù)說明更易于理解和維護(hù),一般應(yīng)注意如下幾點(diǎn)。(1)數(shù)據(jù)說明的次序規(guī)范化。鑒于程序理解、閱讀和維護(hù)的需要,使數(shù)據(jù)說明次序闊定,可以使數(shù)據(jù)的屬性容易查找,也有利于測試、排錯和維護(hù)。(2)說明語句中變量安排有序化。當(dāng)一個說明語句說明多個變量時,變量按照學(xué)母順序排序為好。(3)使用注釋來說明復(fù)雜數(shù)據(jù)的結(jié)構(gòu)。5.1程序設(shè)計方法與風(fēng)格3.語句的結(jié)構(gòu)程序應(yīng)該簡單易懂,語句構(gòu)造應(yīng)該簡單直接,不應(yīng)該為提高效率而把語句復(fù)雜化?!銘?yīng)注意如下。(1)在一行內(nèi)只寫一條語句;(2)程序編寫應(yīng)優(yōu)先考慮清晰性;(3)除非對效率有特殊要求,程序編寫要做到清晰第…、效率第二:(4)首先要保證程序正確,然后才要求提高速度;(5)避免使用臨時變量而使程序的可讀性下降;(6)避免不必要的轉(zhuǎn)移;(7)盡可能使用庫函數(shù);(8)避免采用復(fù)雜的條件語句;(9)盡量減少使用“否定”條件的條件語句;(10)數(shù)據(jù)結(jié)構(gòu)要有利于程序的簡化;(11)要模塊化,使模塊功能盡可能單一化;(12)利用信息隱蔽,確保每一個模塊的獨(dú)立性;(13)從數(shù)據(jù)出發(fā)去構(gòu)造程序;(14)不要修補(bǔ)不好的程序,要重新編寫。5.1程序設(shè)計方法與風(fēng)格4.輸入和輸出輸入和輸出信息是用戶直接關(guān)心的,輸人和輸出方式和格式應(yīng)盡可能方便用戶的使用,因為系統(tǒng)能否被用戶接受,往往取決于輸入和輸出的風(fēng)格。無論是批處理的輸入和輸出方式,還是交互式的輸入和輸出方式,在設(shè)計和編程時都應(yīng)該考慮如下原則。(1)對所有的輸人數(shù)據(jù)都要檢驗數(shù)據(jù)的合法性;(2)檢查輸入項的各種重要組合的合理性;(3)輸入格式要簡單,以使得輸入的步驟和操作盡可能簡單;(4)輸入數(shù)據(jù)時,應(yīng)允許使用自由格式;(5)應(yīng)允許缺省值;(6)輸入一批數(shù)據(jù)時,最好使用輸入結(jié)束標(biāo)志;(7)在以交豆式輸人/輸出方式進(jìn)行輸人時,要在屏幕上使用提示符明確提示輸人的譜求,同時在數(shù)據(jù)輸入過程中和輸人結(jié)束時,應(yīng)在屏幕上給出狀態(tài)信息;(8)當(dāng)程序設(shè)計語言對輸入格式有嚴(yán)格要求時,應(yīng)保持輸人格式與輸人語句的一致性;給所有的輸出加注釋,并設(shè)計輸出報表格式。5.2

結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計的原則結(jié)構(gòu)化程序的基本結(jié)構(gòu)與特點(diǎn)結(jié)構(gòu)化程序設(shè)計原則和方法的應(yīng)用5.2

結(jié)構(gòu)化程序設(shè)計由于軟件危機(jī)的出現(xiàn),人們開始研究程序設(shè)計方法,其中最受關(guān)注的是結(jié)構(gòu)化程序設(shè)計方法。20世紀(jì)70年代提出了“結(jié)構(gòu)化程序設(shè)計(StructuredProgramming)”的思想和方法。結(jié)構(gòu)化程序設(shè)計方法引人了工程思想和結(jié)構(gòu)化思想,使大型軟件的開發(fā)和編程都得到了極大的改善。5.2.1結(jié)構(gòu)化程序設(shè)計的原則結(jié)構(gòu)化程序設(shè)計方法的主要原則可以概括為自頂向下,逐步求精,模塊化,限制使用COTO語句。1.自頂向下程序設(shè)計時,應(yīng)先考慮總體,后考慮細(xì)節(jié);先考慮全局目標(biāo),后考慮局部目標(biāo)。不要開始就過多追求眾多的細(xì)節(jié),先從最上層總目標(biāo)開始設(shè)計,逐步使問題具體化。2.逐步求精對復(fù)雜問題,應(yīng)設(shè)計一些子目標(biāo)作過渡,逐步細(xì)化。3.模塊化一個復(fù)雜問題,肯定是由若干稍簡單的問題構(gòu)成。模塊化是把程序要解決的總目標(biāo)分解為分日標(biāo),再進(jìn)一步分解為具體的小日標(biāo),把每個小日標(biāo)稱為一個模塊。5.2.1結(jié)構(gòu)化程序設(shè)計的原則4.限制使用COTO語句實(shí)際上,結(jié)構(gòu)化程序設(shè)計方法的起源來自對GOTO語句的認(rèn)識和爭論??隙ǖ慕Y(jié)論是,在塊和進(jìn)程的非正常出口處往往需要用GOTO語句,使用GOTO語句會使程序執(zhí)行效率較高;在合成程序目標(biāo)時,COTO語句往往是有用的,如返回語句用COTO。否定的結(jié)論是,GOTO語句是有害的,是造成程序混亂的禍根,程序的質(zhì)量與G0T0語句的數(shù)量成反比,應(yīng)該在所有高級程序設(shè)計語育中取消GOTO語句。取消GOTO語句后,程序易理解、易排錯、易維護(hù),程序容易進(jìn)行正確性證明。作為爭論的結(jié)論,1974年Knulh發(fā)表了令人信服的總結(jié)。(1)濫用GOTO語句確實(shí)有害,應(yīng)盡量避免。(2)完全避免使用GOTO語句也并非是一個明智的方法,有些地方使用GOTO語句,會使程序流程更清楚、效率更高。(3)爭論的焦點(diǎn)不應(yīng)該放在是否取消GOTO語句,而應(yīng)該放在用在什么樣的程序結(jié)構(gòu)上。其中最關(guān)鍵的是肯定以提高程序清晰性為目標(biāo)的結(jié)構(gòu)化方法。5.2.2結(jié)構(gòu)化程序的基本結(jié)構(gòu)與特點(diǎn)結(jié)構(gòu)化程序設(shè)計方法是程序設(shè)計的先進(jìn)方法和工具。采用結(jié)構(gòu)化程序設(shè)計方法編寫程序,可使程序結(jié)構(gòu)良好、易讀、易理解、易維護(hù)。1966年,Boehm和Jacopini證明了程序設(shè)計語言僅使用順序、選擇和循環(huán)三種基本控制結(jié)構(gòu)就足以表達(dá)出各種其他形式結(jié)構(gòu)的程序設(shè)計方法。5.2.2結(jié)構(gòu)化程序的基本結(jié)構(gòu)與特點(diǎn)1.順序結(jié)構(gòu)順序結(jié)構(gòu)是…種簡單的程序設(shè)計,它是最基本、最常用的結(jié)構(gòu)。順序結(jié)構(gòu)是順序執(zhí)行結(jié)構(gòu),所諧順序執(zhí)行,就是按照程序語句行的自然順序,從上到下逐條語句地執(zhí)行程序。2.選擇結(jié)構(gòu)選擇結(jié)構(gòu)又稱為分支結(jié)構(gòu),它包括簡單選擇和多分支選擇結(jié)構(gòu),這種結(jié)構(gòu)可以根據(jù)設(shè)定的條件,判斷應(yīng)該選擇哪條分支來執(zhí)行相應(yīng)的語句序列。3.循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)根據(jù)給定的條件,判斷是杏需要重復(fù)執(zhí)行某相同的或類似的程序段,利用循環(huán)結(jié)構(gòu)可簡化大量的程序行。在程序設(shè)計語言中,循環(huán)結(jié)構(gòu)對應(yīng)兩類循環(huán)語句,對先判斷后執(zhí)行循環(huán)體的稱為當(dāng)型循環(huán)結(jié)構(gòu)。對先執(zhí)行循環(huán)體后判斷的稱為直到型循環(huán)結(jié)構(gòu)。5.2.2結(jié)構(gòu)化程序的基本結(jié)構(gòu)與特點(diǎn)總之,遵循結(jié)構(gòu)化程序的設(shè)計原則,按結(jié)構(gòu)化程序設(shè)計方法設(shè)計出的程序具有明顯的優(yōu)點(diǎn),其一,程序易于理解、使用和維護(hù)。程序員采用結(jié)構(gòu)化編程方法,便于控制、降低程序的復(fù)雜性,因此,容易編寫程序。使于驗證程序的正確性,結(jié)構(gòu)化程序清晰易讀,可理解性好,程序員能夠進(jìn)行逐步求精、程序證明和測試,以確保程序的正確性,程序容易閱讀并被人理解,便于用戶使用和維護(hù)。其二,提高了編程工作的效率,降低了軟件開發(fā)成本。由于結(jié)構(gòu)化編程方法能夠把錯誤控制到最低限度,因此,能夠減少調(diào)試和查錯時間。結(jié)構(gòu)化程序是由……些為數(shù)不多的基本結(jié)構(gòu)模塊組成,這些模塊甚至可以由機(jī)器自動生成,從而極大地減輕了編程工作量。5.2.3結(jié)構(gòu)化程序設(shè)計原則和方法的應(yīng)用基于對結(jié)構(gòu)化程序設(shè)計原則、方法以及結(jié)構(gòu)化程序基本構(gòu)成結(jié)構(gòu)的掌握和了解,在結(jié)構(gòu)化程序設(shè)計的具體實(shí)施中,要注意把握如下要素。1.使用程序設(shè)計語言中的順序、選擇、循環(huán)等有限的控制結(jié)構(gòu)表示程序的控制邏輯。2.選用的控制結(jié)構(gòu)只準(zhǔn)許有一個人口和一個出口。3.程序語甸組成容易識別的塊,每塊只有一個入口和一個出口。4.復(fù)雜結(jié)構(gòu)應(yīng)該用嵌套的基本控制結(jié)構(gòu)進(jìn)行組合嵌套來實(shí)現(xiàn)。5.語言中所沒有的控制結(jié)構(gòu),應(yīng)該采用前后一致的方法來模擬并嚴(yán)格控制GOTO語句的使用。其意思如下。(1)用一個非結(jié)構(gòu)化的程序設(shè)計語言去實(shí)現(xiàn)一個結(jié)構(gòu)化的構(gòu)造。(2)若不使用GOTO語句會使功能模糊。(3)在某種可以改善而不是損害程序可談性的情況下。5.3面向?qū)ο蟮某绦蛟O(shè)計關(guān)于面向?qū)ο蠓椒嫦驅(qū)ο蠓椒ǖ幕靖拍罱Y(jié)構(gòu)化程序設(shè)計原則和方法的應(yīng)用5.3.1關(guān)于面向?qū)ο蠓椒ㄗ?0世紀(jì)80年代中期開始,面向?qū)ο螅∣bjectOriented)方法已經(jīng)發(fā)展成為主流的軟件開發(fā)方法。面向?qū)ο蠓椒ǖ男纬赏Y(jié)構(gòu)化方法一樣,起源于實(shí)現(xiàn)語言,首先對面向?qū)ο蟮某绦蛟O(shè)計語言開展研究,隨之逐漸形成面向?qū)ο蠓治龊驮O(shè)計方法。面向?qū)ο蠓椒ê图夹g(shù)歷經(jīng)40多年的研究和發(fā)展,已經(jīng)越來越成熟和完善,應(yīng)用也越來越深入和廣泛。面向?qū)ο蟮能浖_發(fā)方法在20世紀(jì)60年代后期首次提出,以60年代末挪威奧斯陸大學(xué)和挪威計算中心共同研制的SIMULA語言為標(biāo)志,面向?qū)ο蠓椒ǖ幕疽c(diǎn)首次在SIMULA語言中得到了表達(dá)和實(shí)現(xiàn)。后來一些著名的面向?qū)ο笳Z言(如Smalltalk、C++、Java、Eiffel)的設(shè)計者都曾從SIMULA得到啟發(fā)。隨著20世紀(jì)80年代美國加州的Xerox研究中心推出Smalltalk語言和環(huán)境,使面向?qū)ο蟪绦蛟O(shè)計方法得到比較完善的實(shí)現(xiàn)。Smallalk-80等一系列描述能力較強(qiáng)、執(zhí)行效率較高的面向?qū)ο缶幊陶Z言的出現(xiàn),標(biāo)志著面向?qū)ο蟮姆椒ㄅc技術(shù)開始走向?qū)嵱?。而向?qū)ο蠓椒ǖ谋举|(zhì),就是主張從客觀世界固有的事物出發(fā)來構(gòu)造系統(tǒng),提倡用入類在現(xiàn)實(shí)生活中常用的思維方法來認(rèn)識、理解和描述客觀事物,強(qiáng)調(diào)最終建立的系統(tǒng)能夠映射問題域,也就是說,系統(tǒng)中的對象以及對象之間的關(guān)系能夠如實(shí)地反映問題域中國有事物及其關(guān)系。5.3.1關(guān)于面向?qū)ο蠓椒?/p>

1.與人類習(xí)慣的思維方法一致傳統(tǒng)的程序設(shè)計技術(shù)是面向過程的,其核心思想是以算法為核心,把數(shù)據(jù)和過程作為相互獨(dú)立的部分,數(shù)據(jù)代表問題空間中的客體,程序則用于處理這些數(shù)據(jù),在計算機(jī)內(nèi)部數(shù)據(jù)和程序是分開仔放的,這樣的做法往往會發(fā)生使用錯誤的數(shù)據(jù)調(diào)用正確的程序模塊的情況。其原因是,傳統(tǒng)的程序設(shè)計方法忽略了數(shù)據(jù)和操作之間的內(nèi)在聯(lián)系,用這種方法設(shè)計出來的軟件系統(tǒng)其解空間與問題空間不一致。使人感到難于理解。實(shí)際上,用汁算機(jī)解決的問題都是現(xiàn)實(shí)世界中的問題,這些問題無非是由一些相互間存在一定聯(lián)系的事物所組成,每個具體的事物都具有行為和屬性兩方面的特征。因此,把播述事物靜態(tài)屬性的數(shù)據(jù)結(jié)構(gòu)和表示事物動態(tài)行為的操作放在一起構(gòu)成一個整體。才能完整,自然地表示客觀世界中的實(shí)體。面向?qū)ο蠓椒ê图夹g(shù)以對象為核心。對象是由數(shù)據(jù)和容許的操作組成的封裝體,與客觀實(shí)體有直接的對應(yīng)關(guān)系。對象之間通過傳通消息互相聯(lián)系,以模擬現(xiàn)實(shí)世界中不同事物彼此之間的聯(lián)系。面向?qū)ο蟮脑O(shè)計方法與傳統(tǒng)的面向過程的方法有本質(zhì)不同,這種方法的基本原理是,使用現(xiàn)實(shí)世界的概念抽象地思考問題從而自然地解決問題。它強(qiáng)調(diào)模擬現(xiàn)實(shí)世界中的概念而不強(qiáng)調(diào)算法,它歧勵開發(fā)者在軟件開發(fā)的絕大部分過程中都用應(yīng)用領(lǐng)域的概念去思考.5.3.1關(guān)于面向?qū)ο蠓椒?/p>

2.穩(wěn)定性好面向?qū)ο蠓椒ɑ跇?gòu)造問題領(lǐng)域的對象模型,以對象為中心構(gòu)造軟作系統(tǒng)。它的基本做法是用對象模擬問題領(lǐng)域中的實(shí)體,以對象間的聯(lián)系刻畫實(shí)體間的聯(lián)系。因為面向?qū)ο蟮能浖到y(tǒng)的結(jié)構(gòu)是根據(jù)問題領(lǐng)域的模型建立起來的,而不是基于對系統(tǒng)應(yīng)完成的功能的分解,所以,當(dāng)對系統(tǒng)的功能需求變化時并不會引起軟件結(jié)構(gòu)的整體變化,往往僅需要做一些局部性的修改。由于現(xiàn)實(shí)世界中的實(shí)體是相對穩(wěn)定的,因此,以對象為中心構(gòu)造的軟件系統(tǒng)也是比較穩(wěn)定的。而傳統(tǒng)的軟件開發(fā)方法以算法為核心,開發(fā)過程基于功能分析和功能分解。用傳統(tǒng)方法所建立起來的軟件系統(tǒng)的結(jié)構(gòu)緊密地依賴于系統(tǒng)所要完成的功能,當(dāng)功能需求發(fā)生變化時將引起軟件結(jié)構(gòu)的監(jiān)體修改。事實(shí)上,用戶需求變化大部分是針對功能的,因此。這樣的軟件系統(tǒng)是不穩(wěn)定的。5.3.1關(guān)于面向?qū)ο蠓椒?/p>

3.可重用性好軟件重用是指在不同的軟件開發(fā)過程中重復(fù)使用相同或相似軟件元素的過程。重用是提高軟件生產(chǎn)率的最主要的方法。傳統(tǒng)的軟件重用技術(shù)是利用標(biāo)準(zhǔn)函數(shù)庫,也就是試圖用標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)作為“預(yù)制件”水建造新的軟件系統(tǒng)。但是,標(biāo)準(zhǔn)函數(shù)缺乏必要的“柔性”,不能適應(yīng)不同應(yīng)用場合的不同需要,并不是理想的可重用的軟件成分。實(shí)際的庫函數(shù)往往僅提供最基本、最常用的功能,在開發(fā)一個新的軟件系統(tǒng)時,通常多數(shù)函數(shù)是開發(fā)者自己編寫的、甚至絕大多數(shù)函數(shù)都是新編的。使用傳統(tǒng)方法學(xué)開發(fā)軟件時,人們強(qiáng)調(diào)的是功能抽象,認(rèn)為具有功能內(nèi)聚性的模塊是理想的模塊,也就是說,如果一個模塊完成一個且只完成一個相對獨(dú)立的子功能,那么這個模塊就是理想的可重用模塊,而且這樣的模塊也更容易維護(hù)?;谶@種認(rèn)識,通常盡量把標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)做成功能內(nèi)聚的。但是,事實(shí)上具有功能內(nèi)聚性的模塊并不是自含的和獨(dú)立的,相反,它必須在數(shù)據(jù)上運(yùn)行。如果要重用這樣的模塊,則相應(yīng)的數(shù)據(jù)也必須重用。如果新產(chǎn)品中的數(shù)據(jù)與最初產(chǎn)品中的數(shù)據(jù)不同、則要么修改數(shù)據(jù)要么修改這個模塊。5.3.1關(guān)于面向?qū)ο蠓椒ㄊ聦?shí)上,離開了操作數(shù)據(jù)便無法處理。而脫離了數(shù)據(jù)的操作也是毫無意義的,我們應(yīng)該對數(shù)據(jù)和操作同樣重視。在面向?qū)ο蠓椒ㄖ兴褂玫膶ο螅鋽?shù)據(jù)和操作是作為平等伙伴出現(xiàn)的。因此,對象具有很強(qiáng)的自含性。此外,對象所固有的封裝性,使得對象的內(nèi)部實(shí)現(xiàn)與外界隔離,具有較強(qiáng)的獨(dú)立性。由此可見,對象提供了比較理想的模塊化機(jī)制和比較理想的可重用的軟件成分。而向?qū)ο蟮能浖_發(fā)技術(shù)在利用可重用的軟件成分構(gòu)造新的軟件系統(tǒng)時,有很大的靈活性。有兩種方法可以重復(fù)使用一個對象類:一種方法是創(chuàng)建該類的實(shí)例,從而直接使用它;另一種方法是從它派生出一個滿足當(dāng)前需要的新類。繼承性機(jī)制使得子類不僅可以重用其父類的數(shù)據(jù)結(jié)構(gòu)和程序代碼,而且可以在父類代碼的基礎(chǔ)上方便地修改和擴(kuò)充,這種修改并不影響對原有類的使用。可見,而向?qū)ο蟮能浖_發(fā)技術(shù)所實(shí)現(xiàn)的可重用性是自然的和準(zhǔn)確的。5.3.1關(guān)于面向?qū)ο蠓椒?/p>

4.易于開發(fā)大型軟件產(chǎn)品當(dāng)開發(fā)大型軟件產(chǎn)品時,組織開發(fā)人員的方法不恰當(dāng)往往是出現(xiàn)問題的主要原因。用面向?qū)ο蠓缎烷_發(fā)軟件時,可以把一個大型產(chǎn)品看作是一系列本質(zhì)上相互獨(dú)立的小產(chǎn)品來處理、這就不僅降低了開發(fā)的技術(shù)難度,而且也使得對開發(fā)工作的管理變得容易。這就是為什么對于大型軟件產(chǎn)品來說,而向?qū)ο蠓缎蛢?yōu)于結(jié)構(gòu)化范型的原因之一。許多軟件開發(fā)公司的經(jīng)驗都表明,當(dāng)把面向?qū)ο蠹夹g(shù)用于大型軟件開發(fā)時,軟件成本明顯地降低了,軟件的整體質(zhì)也提高了。5.3.1關(guān)于面向?qū)ο蠓椒?.可維護(hù)性好用傳統(tǒng)的開發(fā)方法和面向過程的方法開發(fā)出來的軟件很難維護(hù),是長期困擾人們的…個嚴(yán)重問題、是軟件危機(jī)的突出表現(xiàn).由于下述因素的存在,使得用面向?qū)ο蟮姆椒ㄩ_發(fā)的軟件可維護(hù)性好。(1)用面向?qū)ο蟮姆椒ㄩ_發(fā)的軟件穩(wěn)定性比較好如前所述、當(dāng)對軟件的功能或性能的要求發(fā)生變化時,通常不會引起軟件的整體變化,往往只需對局部做一些修改。由于對軟件的改動較小且限于局部,自然比較容易實(shí)現(xiàn)。5.可維護(hù)性好5.3.1關(guān)于面向?qū)ο蠓椒ǎ?)用面向?qū)ο蟮姆椒ㄩ_發(fā)的軟件比較容易修改在面向?qū)ο蠓椒ㄖ?,核心是類(對象),它具有理想的模塊機(jī)制,獨(dú)立性好,修改一個類通常很少會牽扯到其他類。如果僅修改一個類的內(nèi)部實(shí)現(xiàn)部分(私有數(shù)據(jù)成員或成員函數(shù)的算法),而不修改該類的對外接口,則可以完全不影響軟件的其他部分。面向?qū)ο蠹夹g(shù)特有的繼承機(jī)制,使得對所開發(fā)的軟件的修改和擴(kuò)充比較容易實(shí)現(xiàn),通常只需從已有類派生出一些新類,無須修改軟件原有成分。面向?qū)ο蠹夹g(shù)的多態(tài)性機(jī)制,使得當(dāng)擴(kuò)充軟件功能時對原有代碼的修改進(jìn)一步減少。需要增加的新代碼也比較少。5.3.1關(guān)于面向?qū)ο蠓椒ǎ?)用面向?qū)ο蟮姆椒ㄩ_發(fā)的軟件比較容易理解在維護(hù)已有軟件的時候,首先需要對原有軟件與此次修改有關(guān)的部分有深人埋解,才能正確地完成維護(hù)工作。傳統(tǒng)軟件之所以難于維護(hù),在很大程度上是因為修改所涉及的部分分散在軟件各個地方,需要了解的面很廣,內(nèi)容很多,而且傳統(tǒng)軟件的解空間與問題空間的結(jié)構(gòu)很不一致,更增加了理解原有軟件的難度和工作量。面向?qū)ο蟮募夹g(shù)符合人們習(xí)慣的思維方式,用這種方法所建立的軟件系統(tǒng)的結(jié)構(gòu)與間題空間的結(jié)構(gòu)基本一致。因此,面向?qū)ο蟮能浖到y(tǒng)比較容易理解。對面向?qū)ο筌浖到y(tǒng)進(jìn)行修改和擴(kuò)充,通常是通過在原有類的基礎(chǔ)上派生出一些新類來實(shí)現(xiàn)。由于對象類有很強(qiáng)的獨(dú)立性,當(dāng)派生新類的時候通常不需要詳細(xì)了解基類中操作的實(shí)現(xiàn)算法。因此,了解原有系統(tǒng)的工作量可以大幅度降低。5.3.1關(guān)于面向?qū)ο蠓椒ǎ?)易于測試和調(diào)試為了保證軟件質(zhì)量,對軟件進(jìn)行維護(hù)之后必須進(jìn)行必要的測試,以確保要求修改或擴(kuò)充的功能已正確地實(shí)現(xiàn)了,而且沒有影響到軟件未修改的部分。如果測試過程中發(fā)現(xiàn)了錯誤,還必須通過調(diào)試改正過來。顯然,軟件是否易于測試和調(diào)試,是影響軟件可維護(hù)性的一個重要因素。對用面向?qū)ο蟮姆椒ㄩ_發(fā)的軟件進(jìn)行維護(hù),往往是通過從已有類派生出…些新類來實(shí)現(xiàn)。因此,維護(hù)后的測試和調(diào)試工作也主要圍繞這些新派生出來的類進(jìn)行。類是獨(dú)立性很強(qiáng)的模塊,向類的實(shí)例發(fā)消息即可運(yùn)行它,觀察它是否能正確地完成相應(yīng)的工作,因此,對類的測試通常比較容易實(shí)現(xiàn)。5.3.2面向?qū)ο蠓椒ǖ幕靖拍铌P(guān)于面向?qū)ο蠓椒?,對其概念有許多不同的看法和定義,但是都涵蓋對象及對象滿性與方法、類、繼承、多態(tài)性幾個基本要素。下面分別介紹面向?qū)ο蠓椒ㄖ羞@幾個重要的基本概念,這些概念是理解和使用面向?qū)ο蠓椒ǖ幕A(chǔ)和關(guān)鍵。1.對象(Object)對象是面向?qū)ο蠓椒ㄖ凶罨镜母拍?。對象可以用來表示客觀世界中的任何實(shí)體,也就是說,應(yīng)用領(lǐng)域中有意義的、與所要解決的問題有關(guān)系的任何事物都可以作為對象,它既可以是具體的物理實(shí)體的抽象,也可以是人為的概念、或者是任何有明確邊界和意義的東西。例如,……個人、…家公司、一個窗口、貸款和借款等,都可以作為…個對象??傊?,對象是對問題域中某個實(shí)體的抽象,設(shè)立某個對象就反映了軟件系統(tǒng)保存有美它的信息并具有與它進(jìn)行交互的能力。面向?qū)ο蟮某绦蛟O(shè)計方法中涉及的對象是系統(tǒng)中用來描述客觀事物的一個實(shí)體,是構(gòu)成系統(tǒng)的一個基本單位,它由一組表示其靜態(tài)特征的屬性和它可執(zhí)行的一組操作組成。5.3.2面向?qū)ο蠓椒ǖ幕靖拍顚ο笥腥缦乱恍┗咎攸c(diǎn)。(1)標(biāo)識唯一性。指對象是可區(qū)分的,并且由對象的內(nèi)在本質(zhì)來區(qū)分,而不是通過描述來區(qū)分。(2)分類性。指可以將具有相同屬性和操作的對象抽象成類。(3)多態(tài)性。指同一個操作可以是不同對象的行為。(4)封裝性。從外面看只能看到對象的外部特性,即只需知道數(shù)據(jù)的取值范圍和可以對該數(shù)據(jù)施加的操作,根本無須知道數(shù)據(jù)的具體結(jié)構(gòu)以及實(shí)現(xiàn)操作的算法。對象的內(nèi)部,即處理能力的實(shí)行和內(nèi)部狀態(tài),對外是不可見的。從外面不能直接使用對象的處理能力。也不能直接修改其內(nèi)部狀態(tài)。對象的內(nèi)部狀態(tài)只能山其自身改變。(5)模塊獨(dú)立性好。對象是面向?qū)ο蟮能浖幕灸K,它是由數(shù)據(jù)及可以對這些數(shù)據(jù)施加的操作所組成的統(tǒng)一體,而且對象是以數(shù)據(jù)為中心的,操作圍繞對其數(shù)據(jù)所需做的處理來設(shè)置,沒有無關(guān)的操作。從模塊的獨(dú)立性考慮,對象內(nèi)部各種元素彼此結(jié)合得很緊密,內(nèi)聚性強(qiáng)。5.3.2面向?qū)ο蠓椒ǖ幕靖拍?.類(Class)和實(shí)例(Instance)將屬性、操作相似的對象歸為類,也就是說,類是具有共同屆性、共同方法的對象的集合。所以、類是對象的抽象,它描述了屬于該對象類型的所有對象的性質(zhì),而一個對象則是其對應(yīng)類的一個實(shí)例。要注意的是,當(dāng)使用“對象”這個術(shù)語時,既可以指一個具體的對象,也可以泛指一般的對象,但是,當(dāng)使用“實(shí)例”這個術(shù)語時,必然是指一個具體的對象。例如,integer是一個整數(shù)類,它描述了所有整數(shù)的性質(zhì)。因此,任何整數(shù)都是整數(shù)類的對象,而一個具體的整數(shù)“123”是類Integer的一個實(shí)例。由類的定義可知,類是關(guān)于對象性質(zhì)的描述,它同對象一樣,包括一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作。例如,一個面向?qū)ο蟮膱D形程序在屏幕左下角顯示一個半徑3cm的紅顏色的圓,在屏幕中部顯示……個半徑4cm的綠顏色的圓,在屏幕右上角顯示…個半徑1cm的黃顏色的圓。這三個圓心位置、半徑大小和顏色均不相同的圓,是三個不同的對象。但是,它們都有相同的屬性(圓心坐標(biāo)、半徑、顏色)和相同的操作(顯示自己、放大縮小半徑、在屏幕上移動位置,等等)。因此,它們是同類事物,可以用“Circle類”來定義。5.3.2面向?qū)ο蠓椒ǖ幕靖拍钕ⅲ∕essage)面向?qū)ο蟮氖澜缡峭ㄟ^對象與對象間彼此的相互合作來推動的,對象間的這種相互合作需要一個機(jī)制協(xié)助進(jìn)行,這樣的機(jī)制稱為“消息”。消息是一個實(shí)例與另一個實(shí)例之間傳遞的信息,它請求對象執(zhí)行某……處理或回答某…要求的信息,它統(tǒng)……了數(shù)據(jù)流和控制流。消息的使用類似于函數(shù)調(diào)用,消息中指定了某…個實(shí)例,……個操作名和…個參數(shù)表(可空)。接收消息的實(shí)例執(zhí)行消息中指定的操作,并將形式參數(shù)與參數(shù)表中相應(yīng)的值結(jié)合起來。消息傳遞過程中,由發(fā)送消息的對象(發(fā)送對象)的觸發(fā)操作產(chǎn)生輸出結(jié)果、作為消息傳送至接收消息的對象(接收對象),引發(fā)接收消息的對象一系列的操作。所傳送的消息實(shí)質(zhì)上是接收對象所具有的操作/方法名稱,有時還包括相應(yīng)參數(shù)。5.3.2面向?qū)ο蠓椒ǖ幕靖拍钔ǔ?,一個消息由下述三部分組成。(1)接收消息的對象的名稱;(2)消息標(biāo)識符(也稱為消息名);(3)零個或多個參數(shù)。5.3.2面向?qū)ο蠓椒ǖ幕靖拍?.繼承(Inheritance)繼承是面向?qū)ο蟮姆椒ǖ囊粋€主要特征。繼承是使用已有的類定義作為基礎(chǔ)建立新類的定義技術(shù)。已有的類可當(dāng)作基類來引用,則新類相應(yīng)地可當(dāng)作派生類來引用。廣義地說,繼承是指能夠直接得已有的性質(zhì)和特征,而不必重復(fù)定義它們。面向?qū)ο筌浖夹g(shù)的許多強(qiáng)有力的功能和突出的優(yōu)點(diǎn),都來源于把類組成…個層次結(jié)構(gòu)的系統(tǒng):一個類的上層可以有父類,下層可以有子類。這種層次結(jié)構(gòu)系統(tǒng)的一個重要性質(zhì)是繼承性,……個類直接繼承其父類的描述(數(shù)據(jù)和操作)或特性,子類自動地共享基類中定義的數(shù)據(jù)和方法。以A、B兩個類為例,其中類B是從類A派生出來的子類,它除了具有自它定義的特性(數(shù)據(jù)和操作)之外,還從父類

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論