版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
主講教師:XXX第8章程序設計基礎1第8章程序設計基礎語言是人們交流思想、傳達信息的工具。人類在長期的歷史發(fā)展過程中,為了交流思想、表達感情和交換信息,逐步形成了語言,如漢語和英語等,通常稱為自然語言。另一方面,人們?yōu)榱四撤N專門用途,創(chuàng)造出種種不同的語言,例如旗語和啞語,這類語言通常稱為人工語言。此外,人們把專門用于人與計算機之間交流信息的各種人工語言稱為計算機語言或者程序設計語言。2教學目的:了解程序設計語言的分類、選擇和程序設計方法的風格;掌握算法的基本概念和基本思想;掌握結(jié)構(gòu)化程序設計的思想和方法;了解面向?qū)ο蟪绦蛟O計的基本概念和程序設計思想;了解軟件工程的基本概念,以及軟件開發(fā)的方法與軟件測試。第8章程序設計基礎3第8章程序設計基礎8.1程序設計概述8.2算法8.3結(jié)構(gòu)化程序設計8.4面向?qū)ο蟪绦蛟O計8.5軟件工程48.1程序設計概述8.1.1程序的概念 程序(program)是為為實現(xiàn)特定目標或解決特定問題而用計算機語言編寫的命令序列的集合。一般分為系統(tǒng)程序和應用程序兩大類。8.1.2程序設計語言的分類 根據(jù)程序設計語言發(fā)展的歷程,可將其大致分為4類:機器語言、匯編語言、高級語言和4GL語言。1.機器語言 機器語言是指直接用二進制代碼指令表達的計算機語言,指令是用0和1組成的一串代碼,它們有一定的位數(shù),并分成若干段,各段的編碼表示不同的含義,例如某臺計算機字長為16位,即有16個二進制數(shù)組成一條指令或其他信息。16個0和1可組成各種排列組合,通過線路變成電信號,讓計算機執(zhí)行各種不同的操作。不同處理器類型的計算機,其機器語言是不同的,按照一種計算機的機器指令編制的程序,不能在指令系統(tǒng)不同的計算機中執(zhí)行。機器語言的缺點是:難記憶、難書寫、難編程、易出錯、可讀性差和可執(zhí)行差。58.1程序設計概述8.1.2程序設計語言的分類2.匯編語言 為了克服機器語言的缺點,人們采用了與二進制代碼指令實際含義相近的英文縮寫詞、字母和數(shù)字等符號來取代二進制指令代碼,這就是匯編語言(也稱為符號語言)。匯編語言是由助記符(memoni)代替操作碼,用地址符號(symbol)或標號(label)代替地址碼所組成的指令系統(tǒng)。使用匯編語言編寫的程序,機器不能直接識別,要由一種程序?qū)R編語言翻譯成機器語言,這種起翻譯作用的程序稱為匯編程序,匯編程序是系統(tǒng)軟件中的語言處理系統(tǒng)軟件。匯編程序把匯編語言翻譯成機器語言的過程稱為匯編。 匯編語言比機器語言易于讀寫、調(diào)試和修改,同時具有機器語言的全部優(yōu)點。但在編寫復雜程序時,相對高級語言代碼量較大,而且匯編語言依賴于具體的處理器體系結(jié)構(gòu),不能通用,因此不能直接在不同處理器體系結(jié)構(gòu)之間移植。68.1程序設計概述8.1.2程序設計語言的分類3.高級語言 機器語言和匯編語言統(tǒng)稱為低級語言,由于其二者依賴于硬件體系,且匯編語言中的助記符量大、難記,于是人們又發(fā)明了更加方便易用的高級語言。在這種語言下,其語法和結(jié)構(gòu)更類似普通英文,且由于遠離對硬件的直接操作,使得一般人經(jīng)過學習之后都可以進行編程。(1)傳統(tǒng)的高級程序設計語言
1954年,約翰·巴克斯發(fā)明了FORTRAN語言。FORTRAN是最早出現(xiàn)的高級程序設計語言,主要應用在科學和工程計算領域。
1958年,在FORTRAN的基礎上改進的ALGOL語言誕生了,與FORTRAN相比,ALGOL的優(yōu)點引入了局部變量和遞歸過程的概念,提供了較為豐富的控制結(jié)構(gòu)和數(shù)據(jù)類型,對后來的高級語言產(chǎn)生了深刻影響。78.1程序設計概述
8.1.2程序設計語言的分類
1960年誕生的COBOL是商用數(shù)據(jù)處理應用中廣泛使用的標準語言,它通用性強,容易移植,并提供了與事務處理有關的大范圍的過程化技術。COBOL是世界上最早實現(xiàn)標準化的語言,它的出現(xiàn)、應用與發(fā)展,改變了人們“計算機只能用于數(shù)值計算”的觀點。
1964年,由Dartmouth學院JohnG.Kemeny與ThomasE.Kurtz兩位教授所開發(fā)的Beginner'sAll-purposeSymbolicInstructionCode(初學者通用的符號指令代碼),是最著名的BASIC語言。由于BASIC語言立意甚佳,簡單、易學的基本特性,很快便流行起來,幾乎所有小型、微型,以及家用計算機,甚至部分大型計算機,都提供給使用者這種語言撰寫程式。在微型計算機方面,則因為BASIC語言可配合微型計算機的操作功能,使得BASIC早已成為微型計算機的主要語言之一。隨著計算機科學技術的迅速發(fā)展,特別是微型計算機的廣泛使用,計算機廠商不斷地在原有的BASIC基礎上進行功能擴充,出現(xiàn)了多種BASIC版本,例如TRS-80BASIC、AppleBASIC、GWBASIC、IBMBASIC(即BASICA)和TrueBASIC。88.1程序設計概述8.1.2程序設計語言的分類(2)通用的結(jié)構(gòu)化程序設計語言 結(jié)構(gòu)化程序設計語言的特點是具有很強的過程功能和數(shù)據(jù)結(jié)構(gòu)功能,并提供結(jié)構(gòu)化的邏輯構(gòu)造。這一類語言的代表有Pascal、C等,它們都是從ALGOL語言派生出來的。
Pascal是一種計算機通用的高級程序設計語言。Pascal的取名是為了紀念17世紀法國著名哲學家和數(shù)學家BlaisePascal。它由瑞士NiklausWirth教授于60年代末設計并創(chuàng)立。1971年,瑞士聯(lián)邦技術學院尼克勞斯·沃爾斯(N.Wirth)教授發(fā)明了另一種簡單明晰的計算機語言,這就是以計算機先驅(qū)帕斯卡的名字命名的Pascal語言。Pascal語言語法嚴謹,層次分明,程序易寫,具有很強的可讀性,是第1個結(jié)構(gòu)化的編程語言。它一出世就受到廣泛歡迎,迅速地從歐洲傳到美國。沃爾斯一生還寫作了大量有關程序設計、算法和數(shù)據(jù)結(jié)構(gòu)的著作,因此,他獲得了1984年度的“圖靈獎”。98.1程序設計概述8.1.2程序設計語言的分類(2)通用的結(jié)構(gòu)化程序設計語言
C語言是一種面向過程的計算機程序設計語言,它是目前眾多計算機語言中舉世公認的優(yōu)秀結(jié)構(gòu)程序設計語言之一。它由美國貝爾研究所的D.M.Ritchie于1972年推出。1978年后,C語言已先后被移植到大、中、小及微型機上。C語言的特點是適用于編寫系統(tǒng)軟件和應用軟件,它具有豐富的數(shù)據(jù)結(jié)構(gòu),支持用戶自定義函數(shù),與匯編語言接口好,具有豐富的函數(shù)庫,具有比較強的圖形處理能力。
Ada是一種表現(xiàn)能力很強的通用程序設計語言,它是由美國國防部為克服軟件開發(fā)危機,耗費巨資,歷時近20年研制成功的。作為一種用于嵌入式實時計算機設計的標準語言,Ada它被譽為第4代計算機語言的成功代表。108.1程序設計概述8.1.2程序設計語言的分類(2)通用的結(jié)構(gòu)化程序設計語言
C語言是一種面向過程的計算機程序設計語言,它是目前眾多計算機語言中舉世公認的優(yōu)秀結(jié)構(gòu)程序設計語言之一。它由美國貝爾研究所的D.M.Ritchie于1972年推出。1978年后,C語言已先后被移植到大、中、小及微型機上。C語言的特點是適用于編寫系統(tǒng)軟件和應用軟件,它具有豐富的數(shù)據(jù)結(jié)構(gòu),支持用戶自定義函數(shù),與匯編語言接口好,具有豐富的函數(shù)庫,具有比較強的圖形處理能力。
Ada是一種表現(xiàn)能力很強的通用程序設計語言,它是由美國國防部為克服軟件開發(fā)危機,耗費巨資,歷時近20年研制成功的。作為一種用于嵌入式實時計算機設計的標準語言,Ada它被譽為第4代計算機語言的成功代表。118.1程序設計概述8.1.2程序設計語言的分類(3)專用語言 專用語言是為特殊的應用而設計的語言,通常具有自己特殊的語法形式,面對特定的問題,輸入結(jié)構(gòu)及詞匯與該問題的相應范圍密切相關。具有代表性的專用語言有C++,Java等。
1980年貝爾實驗室的Bjarne
Stroustrup發(fā)明了“帶類的C”,增加了面向?qū)ο蟪绦蛟O計所需要的抽象數(shù)據(jù)類型“類”,帶類的C語言于1983年被命名為C++(Cplusplus),成為面向?qū)ο蟪绦蛟O計語言。C++有豐富的類庫和函數(shù)庫,可嵌入?yún)R編語言,使程序優(yōu)化,但這種語言難于學習和掌握,需要有C語言編程的基礎經(jīng)驗和較為廣泛的知識。目前,C++成為當今最受歡迎的面向?qū)ο蟮某绦蛟O計語言,因為它既融合了面向?qū)ο蟮哪芰Γ峙cC語言兼容,保留了C語言的許多重要特征。C++常見的開發(fā)工具有BorlandC++、MicrosoftVisualC++等。128.1程序設計概述8.1.2程序設計語言的分類(3)專用語言
Java誕生于1995年,至今已經(jīng)16年歷史。Java名稱的來源:Java是印度尼西亞爪哇島的英文名稱,因盛產(chǎn)咖啡而聞名。Java語言中的許多庫類名稱多與咖啡有關,如JavaBeans(咖啡豆)、NetBeans(網(wǎng)絡豆)和ObjectBeans(對象豆)等。SUN和Java的標識也正是一杯正冒著熱氣的咖啡。10多年來,Java就像爪哇咖啡一樣譽滿全球,成為實至名歸的企業(yè)級應用平臺霸主,而Java語言也如同咖啡一般醇香動人。Java是一種簡單的、面向?qū)ο蟮?、分布式的、解釋型的、健壯安全的、結(jié)構(gòu)中立的、可移植的、性能優(yōu)異、多線程的動態(tài)語言,Java語言的優(yōu)良特性使得Java應用具有無比的健壯性和可靠性,這也減少了應用系統(tǒng)的維護費用。Java對對象技術的全面支持和Java平臺內(nèi)嵌的API能夠縮短應用系統(tǒng)的開發(fā)時間并降低成本。Java的編譯一次即可,到處可運行的特性使得它能夠提供一個隨處可用的開放結(jié)構(gòu)和在多平臺之間傳遞信息的低成本方式。特別是Java企業(yè)應用編程接口(JavaEnterpriseAPIS)為企業(yè)計算及電子商務應用系統(tǒng)提供了有關技術和豐富的類庫。Java有建立在公共密鑰技術上的確認技術,指示器語義的改變將使應用程序不能再去訪問以前的數(shù)據(jù)結(jié)構(gòu)或者私有數(shù)據(jù),這樣大多數(shù)病毒也就無法破壞數(shù)據(jù)。因而,使用Java可以構(gòu)造無病毒、安全的系統(tǒng)。它適用于Internet環(huán)境,并具有較強的交互性和實時性,提供了網(wǎng)絡應用的支持和多媒體的存取,推動了Internet和企業(yè)網(wǎng)絡Web的進步。SUN公司的J2EE平臺的發(fā)布,推動了Java在各個領域的應用。138.1程序設計概述8.1.2程序設計語言的分類4.4GL語言
4GL即第4代語言(fourth-generationlanguage),4GL是按計算機科學理論指導設計出來的結(jié)構(gòu)化語言,如ADA、MODULA-2、SMALLTALK-80等。 一般認為4GL具有簡單易學,用戶界面良好,非過程化程度高,面向問題,只需告知計算機“做什么”,而不必告知計算機“怎么做”,用4GL編程使用的代碼量較之COBOL和PL/1明顯減少,并可呈數(shù)量級地提高軟件生產(chǎn)率等特點。許多4GL為了提高對問題的表達能力,也為了提高語言的效率,引入了過程化的語言成分,出現(xiàn)了過程化的語句與非過程化的語句交織并存的局面,如LINC、NOMAD、IDEAL、FOCUS和NATURAL等均是如此。
4GL以數(shù)據(jù)庫管理系統(tǒng)所提供的功能為核心,進一步構(gòu)造了開發(fā)高層軟件系統(tǒng)的開發(fā)環(huán)境,如報表生成、多窗口表格設計和菜單生成系統(tǒng)等,為用戶提供了一個良好的應用開發(fā)環(huán)境。
4GL的代表性軟件系統(tǒng)有:PowerBuilder、Delphi等。148.1程序設計概述8.1.3程序設計語言的選擇 在選擇程序設計語言時,既要考慮程序設計語言的特性,又要考慮是否能滿足需求分析和設計階段所產(chǎn)生的模型的需要。一般而言,衡量某種程序設計語言是否適合特定的項目,應考慮以下一些因素:①應用領域;②算法和計算復雜性;③軟件運行環(huán)境;④用戶需求中關于性能方面的需要;⑤數(shù)據(jù)結(jié)構(gòu)的復雜性;⑥軟件開發(fā)人員的知識水平和心理因素等。 其中,應用領域常常被作為選擇程序設計語言的首要標準,這主要是因為若干主要的應用領域長期以來已固定地選用了某些標準語言。例如,C語言經(jīng)常用于系統(tǒng)軟件開發(fā);Ada及C對實時應用和嵌入式軟件更有效;FORTRAN適用于工程及科學計算領域等。158.1程序設計概述8.1.4程序設計的基本過程 程序設計就是使用某種程序設計語言編寫程序代碼來驅(qū)動計算機完成特定功能的過程。程序設計的基本過程一般由分析所求解的問題、抽象數(shù)學模型(確定數(shù)據(jù)結(jié)構(gòu))、選擇合適算法(確定算法)、編寫程序,以及調(diào)試通過直至得到正確結(jié)果等幾個階段所組成,如圖8-1所示。 一個完整的程序設計步驟如下:①確定數(shù)據(jù)結(jié)構(gòu):根據(jù)任務提出的要求、指定的輸入數(shù)據(jù)和輸出的結(jié)果,確定存放數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。②確定算法:針對存放數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)來確定解決問題及完成任務的各個步驟。③編寫代碼:根據(jù)確定的數(shù)據(jù)結(jié)構(gòu)和算法,使用選定的計算機語言來編寫程序代碼,并輸入到計算機中,保存在磁盤上,通常簡稱為“編程”。④調(diào)試運行程序:消除由于疏忽而引起的語法錯誤或邏輯錯誤,用各種可能的輸入數(shù)據(jù)對程序進行調(diào)試,使其對各種合理的數(shù)據(jù)都能得到正確的結(jié)果,對不合理的數(shù)據(jù)能進行適當處理。⑤整理文檔:對解決問題整個過程的有關資料進行整理,編寫程序使用說明書。確定算法編寫代碼調(diào)試運行程序整理文檔確定數(shù)據(jù)結(jié)構(gòu)168.1程序設計概述8.1.5程序設計的方法和風格 編寫程序時所表現(xiàn)出的特點、習慣和邏輯思路。主導的程序設計風格:清晰第一、效率第二。 要形成良好的程序設計風格,應考慮以下因素:源程序的文檔化、數(shù)據(jù)說明方法、語句的結(jié)構(gòu)、輸入和輸出。1.源程序的文檔化①符號名的命名:既要符合語法,又要有實際含義,以便理解程序功能;②視覺組織:在程序中利用空格、空行和縮進技巧等使程序?qū)哟吻逦?;③正確的程序注釋:分為序言性注釋和功能性注釋。序言性注釋一般位于程序的開頭部分,它包括程序標題、程序功能說明、主要算法、接口說明、程序位置、開發(fā)簡歷、程序設計者、復審者、復審日期和修改日期等。功能性注釋一般嵌在源程序體中,用于描述其后的語句或程序的主要功能。2.數(shù)據(jù)說明方法——見名知義①數(shù)據(jù)說明的次序規(guī)范化。各種不同種類數(shù)據(jù)說明的次序,最好固定下來,這樣易于查找數(shù)據(jù)屬性;②說明語句中變量安排有序化。一個語句中需要聲明多個變量,應按字母順序排列;③使用注釋來說明復雜數(shù)據(jù)的結(jié)構(gòu)。178.1程序設計概述8.1.5程序設計的方法和風格3.語句的結(jié)構(gòu) 一行內(nèi)只寫一個語句;數(shù)據(jù)結(jié)構(gòu)要有利于程序的簡化,程序要模塊化;程序編寫要做到清晰第一,效率第二。 盡量使用庫函數(shù);避免不必要的轉(zhuǎn)移,避免采用復雜的條件語句;不要修補不好的程序,要重新編寫。4.輸入/輸出 對輸入數(shù)據(jù)要檢查數(shù)據(jù)的合法性,交互式輸入數(shù)據(jù)時應有必要的提示信息,應允許缺省值,提高輸入數(shù)據(jù)的效率。若用戶輸入某些數(shù)據(jù)后可能產(chǎn)生嚴重后果,應給用戶輸出必要的提示并要求用戶確認(容錯處理)。輸入格式要簡單,使得輸入的步驟和操作盡可能簡單。當程序設計語言對輸入格式有嚴格要求時,應保持輸入格式與輸入語句的一致性。輸出數(shù)據(jù)的格式應清晰、美觀,輸出數(shù)據(jù)時要加上必要的提示信息。18第8章程序設計基礎8.1程序設計概述8.2算法8.3結(jié)構(gòu)化程序設計8.4面向?qū)ο蟪绦蛟O計8.5軟件工程198.2算法8.2.1算法的概念 算法是對解決某一特定問題的操作步驟的具體描述。簡單地說,算法就是解決一個問題而采取的方法和步驟,如打電話,要進行撥號、接通后通話、結(jié)束通話等操作,這就是“通話算法”;植樹的過程,是挖坑、栽樹苗、培土和澆水,這就是“植樹算法”。 在計算機科學中,算法是描述計算機解決給定問題的有明確意義操作步驟的有限集合。計算機算法一般可分為數(shù)值計算算法和非數(shù)值計算算法。數(shù)值計算算法就是對所給的問題求數(shù)值解,如求函數(shù)的極限、求方程的根等;非數(shù)值計算算法主要是指對數(shù)據(jù)的處理,如對數(shù)據(jù)的排序、分類、查找、文字處理和圖形圖像處理等。8.2.2算法的特征算法應具有以下基本特征:①可行性:算法中描述的操作必須是可執(zhí)行的,通過有限次基本操作可以實現(xiàn);②確定性:算法的每一步操作必須具有確切的含義,不能有二義性和多義性;③有窮性:一個算法必須保證執(zhí)行有限步驟之后結(jié)束;④輸入:一個算法有零個或多個輸入以描述運算對象的初始情況,所謂零個輸入是指算法本身給定了初始條件;⑤輸出:一個算法有一個或多個輸出,以反映對輸入數(shù)據(jù)加工后的結(jié)果。沒有輸出的算法是毫無意義的。208.2算法8.2.3算法的表示 算法的描述應直觀、清晰、易懂,便于維護和修改。描述算法的方法有多種,常用的表示方法有自然語言、傳統(tǒng)流程圖、N-S圖、偽代碼和計算機語言等。其中最常用的是傳統(tǒng)流程圖和N-S圖。1.自然語言 自然語言就是人們?nèi)粘J褂玫恼Z言,所以自然語言表示一個算法便于人們理解?!纠?-1】用自然語言描述求圓的面積和周長的算法。①輸入一個值給半徑R②計算面積S=3.14×R×R③計算周長L=2×3.14×R④輸出結(jié)果S、L218.2算法8.2.3算法的表示【例8-2】求s=1+2+…+100,用自然語言描述其算法。分析:修改表達式為s=0+1+2+…+100其求解過程為:先求0+1,再把和加上2,再把和加上3,……,一直加到100。1=0+13=1+26=3+3…4950=4851+995050=4950+100通式:s=s +i分析出s的特點:s的初始值0;i的特點:i初始值為1,i的終止值為100,i=i+1。其自然語言描述算法如下:①將0賦值給s。②將1賦值給i。③將s與i相加,結(jié)果存放在s中。④將i加1,結(jié)果存放在i中。⑤若i大于100,則輸出結(jié)果s,算法結(jié)束,否則返回步驟③,算法繼續(xù)執(zhí)行。 用自然語言描述表示算法,雖然表達容易,且容易理解,但是文字的描述冗長且容易出現(xiàn)二義性,表示的算法也不夠直觀。所以,一般對于簡單的問題可以選擇用自然語言描述其算法,而對于復雜的問題,則需要使用其他的方式來進行算法描述。228.2算法8.2.3算法的表示2.程序流程圖 流程圖是指用一些框圖來表示各種操作。用圖形表示算法,直觀形象,易于理解。美國國家標準化協(xié)會ANSI(americannationalstandardsinstitute)規(guī)定了一些常用的流程圖符號,已被全世界各國程序工作者普遍采用,如圖8-2所示。238.2算法8.2.3算法的表示圖8-3流程圖【例8-3】用程序流程圖描述求圓的面積和周長的算法。 用流程圖表示如圖8-3所示?!纠?-4】求s=1+2+…+100,用程序流程圖描述其算法。 程序流程圖由一些特定意義的圖形、流程線及簡要的文字說明構(gòu)成的,它能清晰明確地表示程序的運行過程。在使用過程中,人們發(fā)現(xiàn)流程線會使得程序的流程轉(zhuǎn)向很多,容易破壞程序的結(jié)構(gòu),給閱讀程序流程圖帶來困難。為此,人們設計了一種新的流程圖,它把整個程序?qū)懺谝粋€大框圖內(nèi),這個大框圖由若干個小的基本框圖構(gòu)成,這種流程圖簡稱N-S圖。N-S圖也被稱為盒圖或CHAPIN圖,如圖8-4(左)所示?!纠?-5】求s=1+2+…+100,用N-S圖描述其算法,如圖8-4(右)所示。248.2算法8.2.3算法的表示3.偽代碼偽代碼是用介于自然語言和計算機語言之間的文字和符號來描述算法。用偽代碼寫算法并無固定、嚴格的語法規(guī)則,只需把意思表達清楚,并且書寫的格式要寫成清晰易讀的形式?!纠?-6】求s=1+2+…+100,用偽代碼描述其算法。258.2算法8.2.3算法的表示4.計算機語言 可以利用某種程序設計語言對算法進行描述,程序本身就是算法的一種表示方式。【例8-7】求s=1+2+…+100,用C語言描述其算法。#include<stdio.h>voidmain(){ int
s,i; s=0; i=1;
while(i<=100) { s=s+i; i=i+1; }
printf("%d\n",s);}268.2算法8.2.4算法設計的基本方法 常用算法設計的基本方法有遞推算法、遞歸算法、窮舉算法、貪心算法、分治算法和動態(tài)規(guī)劃算法。1.遞推算法 遞推算法是一種簡單的算法,即通過已知條件,利用特定關系得出中間推論,直至得到結(jié)果的算法。遞推算法分為順推和逆推兩種。 所謂順推法是指從已知條件出發(fā),逐步推算出要解決的問題的方法。如斐波拉契數(shù)列,設它的函數(shù)為f(n),已知f(1)=1,f(2)=1,f(n)=f(n-2)+f(n-1)(n>=3,n∈N),則通過順推可以知道,f(3)=f(1)+f(2)=2,f(4)=f(2)+f(3)=3…直至推出所要求的解。 所謂逆推法是指從已知問題的結(jié)果出發(fā),用迭代表達式逐步推算出問題的開始的條件,即順推法的逆過程。278.2算法8.2.4算法設計的基本方法2.遞歸算法 在調(diào)用一個函數(shù)的過程中,又調(diào)用該函數(shù)本身,把這種方法稱為遞歸算法。遞歸算法的執(zhí)行過程分遞推和回歸兩個階段。如求5!。用f(5)表示5!。分析如下:f(5)=5×f(4) (想要計算出5!,必須先計算出4?。籪(4)=4×f(3) (想要計算出4!,必須先計算出3?。?;f(3)=3×f(2)
(想要計算出3!,必須先計算出2!);f(2)=2×f(1) (想要計算出2!,必須先計算出1!);f(1)=1 (直到已知1!=1時為止,返回后即可依次計算出2!,3!,4!,5?。?。得出結(jié)論:當n>=2時,f(n)=n×f(n-1)(遞歸算法);當n=1時,f(n)=1(終結(jié)條件)。3.窮舉算法4.貪心算法5.分治算法 6.動態(tài)規(guī)劃算法288.2算法8.2.5算法的評價 解決同一個問題的算法可以有多種,不同人員的設計不盡相同,其效率也存在差別,一個不好的算法可能會導致程序運行幾天、幾個月甚至幾年,而一個好的算法則可能只需幾分鐘或幾秒鐘就可以完成。在評價一個算法時,應當遵循以下原則:1.正確性 設計出算法后,應證明該算法對所有可能的合法輸入都能計算出正確的結(jié)果。2.可讀性 一個正確的算法,應該是思路清晰,層次分明,簡單明了,易讀易懂。3.健壯性 健壯性是指軟件對于規(guī)范要求以外的輸入情況的處理能力。所謂健壯的系統(tǒng),是指對于規(guī)范要求以外的輸入能夠判斷出這個輸入不符合規(guī)范要求,并能有合理的處理方式。另外健壯性有時也與容錯性、可移植性和正確性有交叉的地方。4.算法執(zhí)行所需的時間 算法執(zhí)行所需的時間是指算法的時間復雜度。5.占用存儲空間的需求 占用存儲空間的需求是指空間復雜度,是算法在計算機內(nèi)執(zhí)行時所需存儲空間的度量。29第8章程序設計基礎8.1程序設計概述8.2算法8.3結(jié)構(gòu)化程序設計8.4面向?qū)ο蟪绦蛟O計8.5軟件工程308.3結(jié)構(gòu)化程序設計 由于軟件危機的出現(xiàn),人們開始研究程序設計方法,其中最受關注的是結(jié)構(gòu)化程序設計方法。結(jié)構(gòu)化程序設計由迪杰斯特拉(E.W.dijkstra)在1969年提出,是以模塊化設計為中心,將待開發(fā)的軟件系統(tǒng)劃分為若干個相互獨立的模塊,這樣使完成每一個模塊的工作變得單純而明確,為設計一些較大的軟件打下了良好基礎。
圖8-5順序結(jié)構(gòu)8.3.1結(jié)構(gòu)化程序設計的基本結(jié)構(gòu)和設計思想 結(jié)構(gòu)化程序設計是軟件發(fā)展的一個重要里程碑,它的主要觀點是采用自頂向下、逐步求精的程序設計方法,使得程序結(jié)構(gòu)清晰、易讀、易理解、易維護。結(jié)構(gòu)化程序設計使用3種基本控制結(jié)構(gòu)構(gòu)造程序,任何程序都可由順序、選擇和循環(huán)3種基本控制結(jié)構(gòu)構(gòu)造。1.順序結(jié)構(gòu) 順序結(jié)構(gòu)表示程序中的各個操作是按照它們出現(xiàn)的先后順序執(zhí)行的,如圖8-5所示。318.3結(jié)構(gòu)化程序設計8.3.1結(jié)構(gòu)化程序設計的基本結(jié)構(gòu)和設計思想2.選擇結(jié)構(gòu) 選擇結(jié)構(gòu)表示程序的處理步驟出現(xiàn)了分支,它需要根據(jù)某一特定的條件選擇其中的一個分支來執(zhí)行。選擇結(jié)構(gòu)分為單選擇、雙選擇和多選擇3種形式,如圖8-6所示。328.3結(jié)構(gòu)化程序設計8.3.1結(jié)構(gòu)化程序設計的基本結(jié)構(gòu)和設計思想3.循環(huán)結(jié)構(gòu) 循環(huán)結(jié)構(gòu)表示程序反復執(zhí)行某個或某些操作,直到某條件為假(或為真)時才可終止循環(huán)。在循環(huán)結(jié)構(gòu)中最主要的是:什么情況下執(zhí)行循環(huán)?哪些操作需要循環(huán)執(zhí)行?循環(huán)結(jié)構(gòu)的基本形式有兩種:當型循環(huán)和直到型循環(huán),如圖8-7所示。338.3結(jié)構(gòu)化程序設計8.3.1結(jié)構(gòu)化程序設計的基本結(jié)構(gòu)和設計思想結(jié)構(gòu)化程序設計的基本思想是:①在需求分析、概要設計中,都采用了自頂向下、逐層細化的方法。②任何程序都可由順序、選擇和重復3種基本控制結(jié)構(gòu)構(gòu)造。 用順序方式對過程分解,確定各部分的執(zhí)行順序; 用選擇方式對過程分解,確定某個部分的執(zhí)行條件; 用循環(huán)方式對過程分解,確定某個部分進行重復的開始和結(jié)束的條件; 對處理過程仍然模糊的部分反復使用以上分解方法,最終可將所有細節(jié)確定下來。③主程序員組的組織形式。開發(fā)程序的人員組織方式應采用由一個主程序員(負責全部技術活動)、一個后備程序員(協(xié)調(diào)并支持主程序員)和一個程序管理員(負責事務性工作,如收集、記錄數(shù)據(jù),文檔資料管理等)3個為核心,再加上一些專家(如通信專家、數(shù)據(jù)庫專家等)和其他技術人員組成小組。348.3結(jié)構(gòu)化程序設計8.3.2結(jié)構(gòu)化程序設計的基本原則1.自頂向下 在進行程序設計時,應先考慮總體,后考慮細節(jié),先考慮全局目標,后考慮局部目標。不要一開始就過多地追求眾多細節(jié),先從最上層總目標開始設計,逐步使問題具體化。2.逐步細化 對于復雜問題,應設計一些子目標作為過渡,逐步細化。3.模塊化設計 一個復雜問題肯定是由若干個稍簡單的問題構(gòu)成的。模塊化是把程序要解決的總目標分解為子目標,再進一步分解為具體的小目標,把每一個小目標稱為一個模塊。①使用程序設計語言中的順序、選擇和循環(huán)等有限的控制結(jié)構(gòu)表示程序的控制邏輯;②選用的控制結(jié)構(gòu)只準有一個入口和一個出口;③程序語句組成容易識別的塊,每塊只有一個入口和一個出口;④復雜結(jié)構(gòu)應該用嵌套的基本控制結(jié)構(gòu)進行組合嵌套來實現(xiàn);⑤對于語言中沒有的控制結(jié)構(gòu),應該采用前后一致的方法來模擬。4.嚴格控制GOTO語句的使用。35第8章程序設計基礎8.1程序設計概述8.2算法8.3結(jié)構(gòu)化程序設計8.4面向?qū)ο蟪绦蛟O計8.5軟件工程368.4面向?qū)ο蟪绦蛟O計 面向?qū)ο蟪绦蛟O計的雛形,早在1960年的Simula語言中即可發(fā)現(xiàn),當時的程序設計領域正面臨著一種危機:在軟硬件環(huán)境逐漸復雜的情況下,軟件如何得到良好的維護?面向?qū)ο蟪绦蛟O計在某種程度上通過強調(diào)可重復性解決這一問題。20世紀70年代的Smalltalk語言在面向?qū)ο蠓矫婵胺Q經(jīng)典,以至于在30多年后的今天依然將這一語言視為面向?qū)ο笳Z言的基礎。 面向?qū)ο蟪绦蛟O計可以被視為一種在程序中包含各種獨立而又互相調(diào)用的單位和對象的思想,這與傳統(tǒng)的思想剛好相反:傳統(tǒng)的程序設計主張將程序看做是一系列函數(shù)的集合,或者直接就是一系列對計算機下達的指令。面向?qū)ο蟪绦蛟O計中的每一個對象都應該能夠接受和處理數(shù)據(jù),并將數(shù)據(jù)傳達給其他對象,因此它們都可以被看做是一個小型的“機器”,或者說是負有責任的角色。 目前已經(jīng)被證實的是,面向?qū)ο蟪绦蛟O計推廣了程序的靈活性和可維護性,并且在大型項目設計中廣為應用。此外,支持者聲稱面向?qū)ο蟪绦蛟O計要比以往的做法更加便于學習,因為它能夠讓人們更簡單地設計并維護程序,使得程序更加便于分析、設計和理解,而反對者則在某些領域?qū)Υ擞枰苑裾J。如圖8-8所示為面向?qū)ο蟪绦蛟O計與其他程序設計的關系圖。378.4面向?qū)ο蟪绦蛟O計 面向?qū)ο蟪绦蛟O計的雛形,早在1960年的Simula語言中即可發(fā)現(xiàn),當時的程序設計領域正面臨著一種危機:在軟硬件環(huán)境逐漸復雜的情況下,軟件如何得到良好的維護?面向?qū)ο蟪绦蛟O計在某種程度上通過強調(diào)可重復性解決這一問題。20世紀70年代的Smalltalk語言在面向?qū)ο蠓矫婵胺Q經(jīng)典,以至于在30多年后的今天依然將這一語言視為面向?qū)ο笳Z言的基礎。 面向?qū)ο蟪绦蛟O計可以被視為一種在程序中包含各種獨立而又互相調(diào)用的單位和對象的思想,這與傳統(tǒng)的思想剛好相反:傳統(tǒng)的程序設計主張將程序看做是一系列函數(shù)的集合,或者直接就是一系列對計算機下達的指令。面向?qū)ο蟪绦蛟O計中的每一個對象都應該能夠接受和處理數(shù)據(jù),并將數(shù)據(jù)傳達給其他對象,因此它們都可以被看做是一個小型的“機器”,或者說是負有責任的角色。 目前已經(jīng)被證實的是,面向?qū)ο蟪绦蛟O計推廣了程序的靈活性和可維護性,并且在大型項目設計中廣為應用。此外,支持者聲稱面向?qū)ο蟪绦蛟O計要比以往的做法更加便于學習,因為它能夠讓人們更簡單地設計并維護程序,使得程序更加便于分析、設計和理解,而反對者則在某些領域?qū)Υ擞枰苑裾J。如圖8-8所示為面向?qū)ο蟪绦蛟O計與其他程序設計的關系圖。388.4面向?qū)ο蟪绦蛟O計8.4.1面向?qū)ο蟪绦蛟O計的基本概念1.類2.對象3.方法4.繼承性5.封裝性6.多態(tài)性7.抽象性398.4面向?qū)ο蟪绦蛟O計8.4.2面向?qū)ο蟪绦蛟O計的思想 面向?qū)ο蟪绦蛟O計是從現(xiàn)實世界中客觀存在的事物(即對象)出發(fā),盡可能運用人類自然的思維方式去構(gòu)造軟件系統(tǒng),也就是直接以客觀世界的事務為中心來思考問題、認識問題、分析問題和解決問題。它將事物的本質(zhì)特征經(jīng)抽象后表示為軟件系統(tǒng)的對象,以此作為系統(tǒng)構(gòu)造的基本單位。使軟件系統(tǒng)能直接映射問題,并保持問題中事物及其相互關系的本來面貌。因此,面向?qū)ο蟮姆椒◤娬{(diào)按照人類思維方法中的抽象、分類、繼承、組合和封裝等原則去解決問題。這樣,軟件開發(fā)人員便能更有效地思考問題,從而更容易與客戶溝通。 面向?qū)ο笤O計方法以對象為基礎,利用特定的軟件工具直接完成從對象客體的描述到軟件結(jié)構(gòu)之間的轉(zhuǎn)換,這是面向?qū)ο笤O計方法最主要的特點和成就。面向?qū)ο笤O計方法的應用解決了傳統(tǒng)結(jié)構(gòu)化開發(fā)方法中客觀世界描述工具與軟件結(jié)構(gòu)的不一致性問題,縮短了開發(fā)周期,解決了從分析和設計到軟件模塊結(jié)構(gòu)之間多次轉(zhuǎn)換映射的復雜過程,是一種很有發(fā)展前途的系統(tǒng)開發(fā)方法。 但是同原型方法一樣,面向?qū)ο笤O計方法需要一定的軟件基礎支持才可以應用,另外在大型的MIS開發(fā)中,如果不經(jīng)自頂向下的整體劃分,而是一開始就自底向上地采用面向?qū)ο笤O計方法開發(fā)系統(tǒng),同樣也會造成系統(tǒng)結(jié)構(gòu)不合理、各部分關系失調(diào)等問題。所以面向?qū)ο笤O計方法和結(jié)構(gòu)化方法目前仍是兩種在系統(tǒng)開發(fā)領域相互依存的、不可替代的方法。408.4面向?qū)ο蟪绦蛟O計8.4.3面向?qū)ο蟪绦蛟O計的步驟面向?qū)ο蟪绦蛟O計的步驟如下:①分析確定在問題空間和解決空間出現(xiàn)的全部對象及其屬性。②確定應施加于每個對象的操作,即對象固有的處理能力。③分析對象間的聯(lián)系,確定對象彼此間傳遞的消息。④設計對象的消息模式,消息模式和處理能力共同構(gòu)成對象的外部特性。⑤分析各個對象的外部特性,將具有相同外部特性的對象歸為一類,從而確定所需要的類。⑥確定類間的繼承關系,將各對象的公共性質(zhì)放在較上層的類中描述,通過繼承來共享對公共性質(zhì)的描述。⑦設計每個類關于對象外部特性的描述。⑧設計每個類的內(nèi)部實現(xiàn)(數(shù)據(jù)結(jié)構(gòu)和方法)。⑨創(chuàng)建所需的對象(類的實例),實現(xiàn)對象間應有的聯(lián)系(發(fā)消息)。41第8章程序設計基礎8.1程序設計概述8.2算法8.3結(jié)構(gòu)化程序設計8.4面向?qū)ο蟪绦蛟O計8.5軟件工程428.5軟件工程 軟件工程(softwareengineering,簡稱為SE)是一門研究用工程化方法構(gòu)建和維護有效的、實用的和高質(zhì)量的軟件學科,它涉及程序設計語言、數(shù)據(jù)庫、軟件開發(fā)工具、系統(tǒng)平臺、標準和設計模式等方面。在現(xiàn)代社會中,軟件應用于多個方面。典型的軟件有電子郵件、嵌入式系統(tǒng)、人機界面、辦公套件、操作系統(tǒng)、編譯器、數(shù)據(jù)庫和游戲等。同時,各個行業(yè)幾乎都有計算機軟件的應用,比如工業(yè)、農(nóng)業(yè)、銀行、航空和政府部門等。這些應用促進了經(jīng)濟和社會的發(fā)展,使得人們的工作更加高效,同時提高了生活質(zhì)量。8.5.1軟件工程的基本概念1.軟件的相關概念計算機軟件是包括程序、數(shù)據(jù)及相關文檔的完整集合。軟件的特點如下:①軟件是一種邏輯實體,而不是物理實體,具有抽象性;②軟件的生產(chǎn)與硬件不同,它沒有明顯的制作過程;③軟件在運行和使用期間不存在磨損、老化等問題;④軟件的開發(fā)及運行對計算機系統(tǒng)具有依賴性,受計算機系統(tǒng)的限制,這導致了軟件移植的問題;⑤軟件復雜性高,成本昂貴;⑥軟件開發(fā)涉及諸多的社會因素。438.5軟件工程8.5.1軟件工程的基本概念2.軟件危機與軟件工程 軟件工程源自軟件危機。軟件危機泛指在計算機軟件的開發(fā)和維護過程中所遇到的一系列嚴重問題。具體來說,在軟件開發(fā)和維護過程中,軟件危機主要表現(xiàn)在:①軟件需求的增長得不到滿足,用戶對系統(tǒng)不滿意的情況經(jīng)常發(fā)生;②軟件開發(fā)成本和進度無法控制,開發(fā)成本超出預算,開發(fā)周期大大超過規(guī)定日期的情況經(jīng)常發(fā)生;③軟件質(zhì)量難以保證;④軟件不可維護或維護程度非常低;⑤軟件的成本不斷提高;⑥軟件開發(fā)生產(chǎn)率的提高跟不上硬件的發(fā)展和應用需求的增長。 總之,可以將軟件危機歸結(jié)為成本、質(zhì)量和生產(chǎn)率等問題。 軟件工程是應用于計算機軟件的定義、開發(fā)和維護的一整套方法、工具、文檔、實踐標準和工序。 軟件工程的目的就是要建造一個優(yōu)良的軟件系統(tǒng),它所包含的內(nèi)容概括為以下兩點:①軟件開發(fā)技術,主要有軟件開發(fā)方法學、軟件工具和軟件工程環(huán)境;②軟件工程管理,主要有軟件管理、軟件工程經(jīng)濟學等。 軟件工程的主要思想是將工程化原則運用到軟件開發(fā)過程,它包含3個要素:方法、工具和過程。方法是完成軟件工程項目的技術手段;工具支持軟件的開發(fā)、管理,以及文檔生成;過程支持軟件開發(fā)的各個環(huán)節(jié)的控制和管理。軟件工程過程是把輸入轉(zhuǎn)化為輸出的一組彼此相關的資源和活動。448.5軟件工程8.5.1軟件工程的基本概念3.軟件生命周期軟件生命周期是指軟件產(chǎn)品從提出、實現(xiàn)、使用維護到停止使用退役的過程。軟件生命周期分為軟件定義、軟件開發(fā)和軟件運行維護3個階段。(1)軟件定義階段:包括制訂計劃和需求分析制訂計劃。確定總目標;可行性研究;探討解決方案;制訂開發(fā)計劃;需求分析。對待開發(fā)軟件提出的需求進行分析并給出詳細定義。(2)軟件開發(fā)階段軟件設計。分為概要設計和詳細設計兩個部分;軟件實現(xiàn)。把軟件設計轉(zhuǎn)換成計算機可以接受的程序代碼;軟件測試。在設計測試用例的基礎上檢驗軟件的各個組成部分。(3)軟件運行維護階段軟件投入運行,并在使用中不斷地維護,進行必要的擴充和刪改。軟件生命周期中所花費最多的階段就是軟件運行維護階段。458.5軟件工程8.5.1軟件工程的基本概念4.軟件工程的模型 軟件生存周期對各個階段有明顯的劃分,實際中多數(shù)場合不能一次就全部、精確地生成需求規(guī)格說明。軟件開發(fā)各個階段之間的關系不可能是順序的、線性的,相反,應該是帶有反饋的迭代過程。這種過程用軟件開發(fā)模型表示,主要為軟件工程管理提供進度表,為軟件開發(fā)過程提供原則和方法。(1)瀑布模型瀑布模型如圖8-9所示。468.5軟件工程8.5.1軟件工程的基本概念4.軟件工程的模型 軟件生存周期對各個階段有明顯的劃分,實際中多數(shù)場合不能一次就全部、精確地生成需求規(guī)格說明。軟件開發(fā)各個階段之間的關系不可能是順序的、線性的,相反,應該是帶有反饋的迭代過程。這種過程用軟件開發(fā)模型表示,主要為軟件工程管理提供進度表,為軟件開發(fā)過程提供原則和方法。(1)瀑布模型瀑布模型如圖8-9所示。478.5軟件工程8.5.1軟件工程的基本概念4.軟件工程的模型(2)原型模型 原型模型如圖8-10所示,分為拋棄原型法和演化原型法兩種。 拋棄原型法。建立這種原型的目的,是評價目標系統(tǒng)的某些特性,以便更準確地確定需求,或者更嚴格地驗證設計方案。使用完以后,這種原型系統(tǒng)將被拋棄,然后再重新建立正式的目標系統(tǒng)。 這種途徑本質(zhì)上仍屬于瀑布模型,建立原型只不過是一種輔助性的步驟。 演化原型法。多次迭代,最終形成產(chǎn)品,每次迭代都是對問題的進一步理解和提高。488.5軟件工程8.5.1軟件工程的基本概念4.軟件工程的模型(3)螺旋模型 螺旋模型是生存周期模型與原型模型的結(jié)合,增加了新的成分——風險投資,如圖8-11所示。498.5軟件工程8.5.1軟件工程的基本概念4.軟件工程的模型(4)基于四代技術的模型 基于四代技術的模型快速開發(fā)原型,以減少分析、設計、編碼和測試的時間。4GT軟件開發(fā)工具有數(shù)據(jù)庫查詢語言、報表生成器和表單生成器等,如圖8-12所示508.5軟件工程8.5.1軟件工程的基本概念4.軟件工程的模型(5)組合模型組合模型根據(jù)軟件項目和軟件開發(fā)環(huán)境的特點,幾種模型組合在一起,配套使用,如圖8-13所示。518.5軟件工程8.5.1軟件工程的基本概念5.軟件工程的目標和與原則(1)軟件工程目標 在給定成本和進度的前提下,開發(fā)出具有有效性、可靠性、可理解性、可維護性、可重用性、可適應性、可移植性、可追蹤性和可互操作性且滿足用戶需求的產(chǎn)品。(2)軟件工程需要達到的基本目標應 付出較低的開發(fā)成本;達到要求的軟件功能;取得較好的軟件性能;開發(fā)的軟件易于移植;需要較低的維護費用;能按時完成開發(fā),及時交付使用。528.5軟件工程8.5.1軟件工程的基本概念(3)軟件工程原則 抽象、信息隱蔽、模塊化、局部化、確定性、一致性、完備性和可驗證性。①抽象:抽象是事物最基本的特性和行為,忽略非本質(zhì)細節(jié),采用分層次抽象、自頂向下、逐層細化的辦法控制軟件開發(fā)過程的復雜性;②信息隱蔽:采用封裝技術,將程序模塊的實現(xiàn)細節(jié)隱藏起來,使模塊接口盡量簡單;③模塊化:模塊是程序中相對獨立的成分,一個獨立的編程單位,應有良好的接口定義。模塊的大小要適中,模塊過大,會使模塊內(nèi)部的復雜性增加,不利于模塊的理解和修改,也不利于模塊的調(diào)試和重用;模塊太小,會導致整個系統(tǒng)表示過于復雜,不利于控制系統(tǒng)的復雜性;④局部化:保證模塊間具有松散的耦合關系,模塊內(nèi)部有較強的內(nèi)聚性;⑤確定性:軟件開發(fā)過程中所有概念的表達應是確定、無歧義且規(guī)范的;⑥一致性:程序內(nèi)外部接口應保持一致,系統(tǒng)規(guī)格說明與系統(tǒng)行為應保持一致;⑦完備性:軟件系統(tǒng)不丟失任何重要成分,完全實現(xiàn)系統(tǒng)所需的功能;⑧可驗證性:應遵循容易檢查、測評和評審的原則,以確保系統(tǒng)的正確性。538.5軟件工程8.5.1軟件工程的基本概念6.軟件開發(fā)工具與軟件開發(fā)環(huán)境(1)軟件開發(fā)工具 軟件開發(fā)工具的完善和發(fā)展將促使軟件開發(fā)方法的進步和完善,促進軟件開發(fā)的高速度和高質(zhì)量。軟件開發(fā)工具的發(fā)展是從單項工具的開發(fā)逐步向集成工具發(fā)展的,軟件開發(fā)工具為軟件工程方法提供了自動的或半自動的軟件支撐環(huán)境。同時,軟件開發(fā)方法的有效應用也必須得到相應工具的支持,否則該方法將難以有效地實施。(2)軟件開發(fā)環(huán)境 軟件開發(fā)環(huán)境(或稱軟件工程環(huán)境)是全面支持軟件開發(fā)全過程的軟件工具集合。 計算機輔助軟件工程(computeraidedsoftwareengineering,CASE)將各種軟件工具、開發(fā)機器和一個存放開發(fā)過程信息的中心數(shù)據(jù)庫組合起來,形成軟件工程環(huán)境,它將極大降低軟件開發(fā)的技術難度并保證軟件開發(fā)的質(zhì)量。548.5軟件工程8.5.2軟件開發(fā)方法 在20世紀60年代中期爆發(fā)了眾所周知的軟件危機,為了克服這一危機,在1968年和1969年連續(xù)召開的兩次著名的NATO會議上提出了軟件工程這一術語,并在以后不斷發(fā)展和完善。與此同時,軟件研究人員也在不斷探索新的軟件開發(fā)方法。1.面向數(shù)據(jù)結(jié)構(gòu)的軟件開發(fā)方法(1)Jackson方法
1975年,M.A.Jackson提出了一類至今仍廣泛使用的軟件開發(fā)方法。這一方法從目標系統(tǒng)的輸入和輸出數(shù)據(jù)結(jié)構(gòu)入手,導出程序框架結(jié)構(gòu),再補充其他細節(jié),就可得到完整的程序結(jié)構(gòu)圖。這一方法對輸入和輸出數(shù)據(jù)結(jié)構(gòu)明確的中小型系統(tǒng)特別有效,如商業(yè)應用中的文件表格處理等。該方法也可與其他方法結(jié)合,用于模塊的詳細設計。Jackson方法有時也稱為面向數(shù)據(jù)結(jié)構(gòu)的軟件設計方法。(2)Warnier方法
1974年,J.D.Warnier提出的軟件開發(fā)方法與Jackson方法類似。差別有3點:一是它們使用的圖形工具不同,分別使用Warnier圖和Jackson圖;另一個差別是使用的偽碼不同;最主要的差別是在構(gòu)造程序框架時,Warnier方法僅考慮輸入數(shù)據(jù)結(jié)構(gòu),而Jackson方法不僅考慮輸入數(shù)據(jù)結(jié)構(gòu),而且還考慮輸出數(shù)據(jù)結(jié)構(gòu)。
558.5軟件工程8.5.2軟件開發(fā)方法2.面向?qū)ο蟮能浖_發(fā)方法
面向?qū)ο蠹夹g是軟件技術的一次革命,在軟件開發(fā)史上具有里程碑的意義。隨著OOP(面向?qū)ο缶幊蹋┫騉OD(面向?qū)ο笤O計)和OOA(面向?qū)ο蠓治觯┑陌l(fā)展,最終形成面向?qū)ο蟮能浖_發(fā)方法OMT(objectmodellingtechnique)。這是一種自底向上和自頂向下相結(jié)合的方法,而且它以對象建模為基礎,從而不僅考慮了輸入和輸出數(shù)據(jù)結(jié)構(gòu),實際上也包含了所有對象的數(shù)據(jù)結(jié)構(gòu),所以OMT徹底實現(xiàn)了PAM沒有完全實現(xiàn)的目標。不僅如此,OO技術在需求分析、可維護性和可靠性這3個軟件開發(fā)的關鍵環(huán)節(jié)和質(zhì)量指標上也有了實質(zhì)性的突破,徹底解決了在這些方面存在的嚴重問題,從而宣告了軟件危機末日的來臨。568.5軟件工程8.5.2軟件開發(fā)方法3.可視化的軟件開發(fā)方法
可視化開發(fā)是20世紀90年代軟件界最大的兩個熱點之一。隨著圖形用戶界面的興起,用戶界面在軟件系統(tǒng)中所占的比例也越來越大,有的甚至高達60~70%。產(chǎn)生這一問題的原因是圖形界面元素的生成很不方便,為此Windows提供了應用程序設計接口API(applicationprogramminginterface),它包含了600多個函數(shù),極大地方便了圖形用戶界面的開發(fā)。但是在這批函數(shù)中,使用了大量的函數(shù)參數(shù)和有關常量,使基于WindowsAPI的開發(fā)變得相當困難。為此BorlandC++推出了ObjectWindows編程。它將API的各部分用對象類進行封裝,提供了大量預定義的類,并為這些定義了許多成員函數(shù)。利用子類對父類的繼承性,以及實例對類的函數(shù)的引用,應用程序的開發(fā)可以省略大量類的定義,省略大量成員函數(shù)的定義或只需進行少量修改以定義子類。ObjectWindows還提供了許多標準的缺省處理,大大減少了應用程序開發(fā)的工作量。但要掌握它們,對非專業(yè)人員來說仍是一個沉重的負擔。為此,人們利用WindowsAPI或BorlandC++的ObjectWindows開發(fā)了一批可視開發(fā)工具。 可視化開發(fā)就是在可視開發(fā)工具提供的圖形用戶界面上,通過操作界面元素,諸如菜單、按鈕、對話框、編輯框、單選框、復選框、列表框和滾動條等,由可視開發(fā)工具自動生成應用軟件。 這類應用軟件的工作方式是事件驅(qū)動。對于每一事件,由系統(tǒng)產(chǎn)生相應的消息,再傳遞給相應的消息響應函數(shù)。這些消息響應函數(shù)是由可視開發(fā)工具在生成軟件時自動裝入的。578.5軟件工程8.5.3軟件測試1.軟件測試目的
1983年IEEE(instituteofelectrical&electronicengineers)將軟件測試定義為:使用人工或自動手段來運行或測定某個系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或弄清預期結(jié)果與實際結(jié)果的差別。2.軟件測試的基本原則和方法①盡早地、不斷地進行軟件測試;②設計測試用例時,要給出測試的預期結(jié)果;③開發(fā)小組和測試小組分開;④要設計非法輸入的測試用例;⑤在對程序修改之后要進行回歸測試;⑥程序中尚未發(fā)現(xiàn)的錯誤數(shù)量往往與在該段程序中已發(fā)現(xiàn)的錯誤數(shù)量成正比。588.5軟件工程8.5.3軟件測試3.軟件測試的步驟(1)單元測試 單元測試又稱模塊測試,每個程序模塊完成一個相對獨立的子功能,所以可以對該模塊進行單獨測試。由于每個模塊都有清晰定義的功能,所以通常比較容易設計相應的測試方案,以檢驗每個模塊的正確性。(2)集成測試 在單元測試完成后,要考慮將模塊集成為系統(tǒng)的過程中可能出現(xiàn)的問題,例如,模塊之間的通信和協(xié)調(diào)問題,所以在單元測試結(jié)束之后還要進行集成測試。這個步驟著重測試模塊間的接口,子功能的組合是否達到了預期要求的功能,以及全程數(shù)據(jù)結(jié)構(gòu)是否有問題等。(3)有效性測試 集成測試通過后,應在用戶的參與下進行有效性測試。這個時候往往使用實際數(shù)據(jù)進行測試,從而驗證系統(tǒng)是否能滿足用戶的實際需要。(4)系統(tǒng)測試 系統(tǒng)測試是把通過有效性測試的軟件作為基于計算機系統(tǒng)的一個整體元素,與整個系統(tǒng)的其他元素結(jié)合起來。在實際運行環(huán)境下,將對計算機系統(tǒng)進行一系列的集成測試和有效性測試。
598.5軟件工程8.5.3軟件測試4.軟件測試的方法 軟件的測試方法很多,但是任何產(chǎn)品都可以使用以下兩種方法進行測試:①如果已知產(chǎn)品的功能,則可以對它的每一個功能進行測試,看是否都達到了預期要求;②如果已知產(chǎn)品的內(nèi)部工作過程,則可以對它的每種內(nèi)部操作進行測試,看是否符合設計要求。第一種方法是黑盒測試,第二種方法是白盒測試。(1)黑盒測試 在進行黑盒測試時,完全不考慮程序內(nèi)部的結(jié)構(gòu)和處理過程,只需按照規(guī)格說明書的規(guī)定來檢查程序是否符合它的功能要求。黑盒測試是在程序接口進行的測試,又稱為功能測試。黑盒測試檢查的主要方面有以下幾個方面:①程序的功能是否正確或完善;②數(shù)據(jù)的輸入能否正確接收,輸出是否正確;③是否能保證外部信息(如數(shù)據(jù)文件)的完整性等;④用黑盒法設計測試用例時,必須用所有可能的輸入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度建筑工程質(zhì)量檢測承包合同范本8篇
- 2025年度機動車碰撞損害賠償合同細則4篇
- 二零二五年度影視基地場地租賃代理服務協(xié)議4篇
- 專項設計制作:2024版合作合同版B版
- 2025年度個人與公司間無抵押借款合同樣本4篇
- 2025年度教育信息化建設個人聘用合同3篇
- 二零二五版程海流域水資源保護與利用合作協(xié)議2篇
- 二零二五年度個體工商戶合伙環(huán)境保護合作協(xié)議3篇
- 2025年度出租車公司車輛檢測維修合同模板4篇
- 2025年度環(huán)保項目合同中因環(huán)境情勢變更引發(fā)的合規(guī)調(diào)整及責任界定4篇
- 2025年蛇年春聯(lián)帶橫批-蛇年對聯(lián)大全新春對聯(lián)集錦
- 表B. 0 .11工程款支付報審表
- 警務航空無人機考試題庫及答案
- 空氣自動站儀器運營維護項目操作說明以及簡單故障處理
- 新生兒窒息復蘇正壓通氣課件
- 2022年12月Python-一級等級考試真題(附答案-解析)
- 法律顧問投標書
- 班主任培訓簡報4篇(一)
- 成都市數(shù)學八年級上冊期末試卷含答案
- T-CHSA 020-2023 上頜骨缺損手術功能修復重建的專家共識
- 危重癥患者轉(zhuǎn)運指南-課件
評論
0/150
提交評論