(整理)智能科學(xué)技術(shù)導(dǎo)論-周昌樂-第04講 程序編制_第1頁
(整理)智能科學(xué)技術(shù)導(dǎo)論-周昌樂-第04講 程序編制_第2頁
(整理)智能科學(xué)技術(shù)導(dǎo)論-周昌樂-第04講 程序編制_第3頁
(整理)智能科學(xué)技術(shù)導(dǎo)論-周昌樂-第04講 程序編制_第4頁
(整理)智能科學(xué)技術(shù)導(dǎo)論-周昌樂-第04講 程序編制_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精品文檔精品文檔精品文檔第04講程序編制導(dǎo)語構(gòu)建了解決問題的算法,要讓機(jī)器系統(tǒng)能夠順利運(yùn)行該算法,必須采用機(jī)器能夠直接處理的某種語言來編制給出算法的程序。當(dāng)然,一個(gè)最為直接的編程語言就是由機(jī)器指令構(gòu)成的機(jī)器語言。不過,機(jī)器指令過于繁瑣且缺乏直觀性,不利于描述復(fù)雜的算法。因此為了方便編程,人們構(gòu)建了各種高級(jí)編程語言,同時(shí)對(duì)應(yīng)構(gòu)造相應(yīng)的編譯或解釋軟件,將高級(jí)編程語言描述的程序自動(dòng)轉(zhuǎn)化為機(jī)器指令的形式。這樣,對(duì)于程序編制的一般人員而言,就可以使用高級(jí)語言來編制程序了。第4.1節(jié)編程語言可以用于程序編制的語言種類繁多,如果包括機(jī)器語言在內(nèi),通常按照機(jī)器系統(tǒng)方便處理的程度分為機(jī)器語言、匯編語言與高級(jí)語言

2、三類。機(jī)器語言就是直接采用機(jī)器系統(tǒng)能夠直接執(zhí)行的機(jī)器指令來編制程序的一種語言。但顯而易見的是,缺乏直觀性理解的機(jī)器指令非常不方便,給程序的編制、特別是有一定規(guī)模的程序編制帶來許多困難,明顯會(huì)加重算法實(shí)現(xiàn)的任務(wù)復(fù)雜性為了克服機(jī)器語言不方便閱讀的缺陷,可以為各種操作碼、操作數(shù)分配各種助記符號(hào),并用這些助記符號(hào)取代十六進(jìn)制數(shù)字編碼表示,采用這樣表示方法形成的語言就稱為匯編語言。這樣,在編制程序時(shí),程序員就可以使用這些助記符號(hào)構(gòu)成的匯編語言(assemblylanguage)來編制程序,然后再使用一種稱為匯編程序(assembler)來自動(dòng)將匯編語言編制的程序翻譯成為機(jī)器語言表達(dá)的程序,供機(jī)器系統(tǒng)執(zhí)行

3、。由于匯編語言僅僅改變的是操作碼、操作數(shù)等符號(hào)的表示,因此跟機(jī)器語言一樣,編制這樣的程序是深深依賴于機(jī)器系統(tǒng)的(所提供的指令系統(tǒng)),于是在一種機(jī)器上可以運(yùn)行的匯編語言編制的程序往往無法在另一種機(jī)器上直接運(yùn)行。這個(gè)缺陷就是缺乏可移植性。匯編語言的另一個(gè)缺陷是依然沒有改變機(jī)器語言原有的繁瑣性,必須從最基本的機(jī)器指令基礎(chǔ)上去考慮如何構(gòu)建算法的實(shí)現(xiàn)程序。為了克服匯編語言的上述局限性,開發(fā)比匯編語言更加方便編制程序的語言,各種高級(jí)程序設(shè)計(jì)語言應(yīng)運(yùn)而生。早期的高級(jí)語言有FORTRAN(FORmulaTRANslator)應(yīng)用于科學(xué)與工程、COBOL(CommonBusiness-OritentedLang

4、uage)應(yīng)用于商業(yè)、PASCAL(以法國數(shù)學(xué)家pasca啲名字命名)應(yīng)用于教一般機(jī)器語言稱為第一代編程語言,匯編語言稱為第二代編程語言,高級(jí)語言稱為第三代編程語言。與前兩代編程語言不同,高級(jí)語言(highlanguage)的最大特點(diǎn)就是采用更加高級(jí)的操作原語來作為程序構(gòu)造的基本砌塊,非常接近算法設(shè)計(jì)的偽碼。高級(jí)語言編譯程序匯編程序匯編語言機(jī)器語言匯編語言和高級(jí)語言需要經(jīng)過特定的匯編程序和編譯程序進(jìn)行翻譯,使之成為機(jī)器能夠直接執(zhí)行的指令才能為機(jī)器所識(shí)別。當(dāng)然它們自身也是程序,也需用某種語言寫成。高級(jí)語言程序#includevoidf(int*j);*j=9;voidmain()printf(m

5、yProgramn);i=1;printf(“i=”,i);f(i);printf(“i=“,i);匯編語言程序MOVDX,OFFSETFILEMOVAL,0MOVAH,3DHINT21HJCOPERRMOVHANDLE,AXMOVBX,HANDLEMOVDX,OFFSETBUFMOVCX,512MOVAH,3FHINT21HJCREADERRCMPAX,0JECLOSEMOVBX,AXMOVBUFBX,$精品文檔精品文檔精品文檔MOVDX,OFFSETBUFMOVAH,9INT21HJMPREAD機(jī)器語言程序110110101100010001011000110000100101101101

6、000101010111110110010101110010111011110110000001001110010101100111010101011100101010010101010100010110001101101110111001011000110101110010110101100011010100111110101010101001001001011101000111001010110001100101100011001100101010101010000001111001011011111001011000010111111110010110010111010101010101

7、00010101111110010100100101110010編程語言之間的轉(zhuǎn)化:編譯、解釋與匯編除了獨(dú)立于具體的機(jī)器,高級(jí)語言的主要特點(diǎn)就是面向人類思維特性來進(jìn)行程序的編制,這也是編程語言不斷發(fā)展的動(dòng)力。如果以此動(dòng)力為標(biāo)準(zhǔn)來考察編程語言的演變歷史,那么第一、二代語言主要面向機(jī)器運(yùn)行特性要求的,而從第三代語言開始,越來越體現(xiàn)面向人類思維特性的需要了。目前的高級(jí)程序設(shè)計(jì)語言的范式大致可以分為命令式、說明式、函數(shù)式和對(duì)象式四種,如下圖所示。機(jī)器編程語言范型的演變1、過程范式(Proceduralparadigm),也稱為命令式范式(Imperativeparadigm),是程序設(shè)計(jì)過程的傳統(tǒng)方式

8、,其命令語句與算法設(shè)計(jì)的偽碼最為相像。主要是以程序設(shè)計(jì)過程為依據(jù)、通過控制數(shù)據(jù)產(chǎn)生所需結(jié)果為目的來展現(xiàn)命令序列。其主要特點(diǎn)就是通過尋找解決問題的算法處理過程,并用程序設(shè)計(jì)語言提供的命令序列描述出來。2、說明范式(Declarativeparadigm),也稱為邏輯式范式,與過程式語言不同,說明式語言不是給出解決問題的算法過程,而是描述所要解決的問題。具體方法是發(fā)現(xiàn)并且實(shí)現(xiàn)一個(gè)解決問題的通用算法,然后給出與這個(gè)算法兼容的形式表達(dá)問題,通過形式化通用算法的實(shí)現(xiàn)來解決給定的問題。主要的特點(diǎn)是要對(duì)問題進(jìn)行準(zhǔn)確的描述,而不是尋找解決問題的算法。3、函數(shù)范式(Functionalparadigm),也稱模

9、塊式范式,就是將程序開發(fā)過程看作將預(yù)先定義“模塊”連接起來的過程,這些模塊,就是所謂的函數(shù)。每個(gè)函數(shù)都有自己的輸入與輸出,因此所謂連接不同模塊,就是建立不同函數(shù)模塊輸入與輸出之間的關(guān)系。在函數(shù)式程序設(shè)計(jì)語言中提供有一些基本函數(shù)作為原語,程序的編制就是針對(duì)具體的問題,去尋找能夠?qū)⒒竞瘮?shù)連接起來的系統(tǒng)方法,從而給出一個(gè)聯(lián)合函數(shù)的程序,解決所給定的問題。簡言之,這種函數(shù)式程序設(shè)計(jì)的編程過程,就是基于提供的基本函數(shù)來構(gòu)造解決問題的函數(shù)嵌套聯(lián)合體。4、對(duì)象范式(0bject-orientedparadigm),全稱是面向?qū)ο蟮某绦蛟O(shè)計(jì)范式。這是一種目前廣泛流行的程序開發(fā)方法。在這種設(shè)計(jì)范式中,將數(shù)據(jù)單

10、元看作是一種主動(dòng)的“對(duì)象”,而不再是被動(dòng)由控制命令處理的數(shù)據(jù)。對(duì)象由數(shù)據(jù)序列及其操作過程共同構(gòu)成,也就是說任何處理的數(shù)據(jù)本身就包含了專用的操作數(shù)據(jù)的過程,因此不再需要外部全局性的算法來處理數(shù)據(jù)序列本身的操作。對(duì)象之間可以通過消息傳遞機(jī)制來建立聯(lián)系,這些機(jī)制也是對(duì)象內(nèi)部操作的有機(jī)構(gòu)成部分。因此,也可以將對(duì)象看作是一個(gè)小型命令式語言程序單元。面向?qū)ο笤O(shè)計(jì)的優(yōu)點(diǎn)就是非常符合模塊化軟件設(shè)計(jì)的要求,因此成為目前程序設(shè)計(jì)語言發(fā)展的主流。究其原因,這種程序設(shè)計(jì)思想,符合人類思維的特點(diǎn),思維與思維對(duì)象捆綁性特點(diǎn),比如視覺處理與視覺對(duì)象相關(guān)聯(lián),而且不會(huì)應(yīng)用到聽覺對(duì)象的處理中等。從中不難看出,未來的發(fā)展一定智能化

11、、自然化、交互性的趨勢(shì)。應(yīng)該說,發(fā)展更高層次的語言是人類一直不懈追求的目標(biāo)?,F(xiàn)代人工智能研究的主要領(lǐng)域之一就是自動(dòng)編制程序,就是要發(fā)展一種高層次的語言。這種高級(jí)精巧的語言具有這樣一些功能:(1)符合人類思維習(xí)慣,而不是迎合機(jī)器死板規(guī)定;(2)自動(dòng)糾正機(jī)器代碼中語法錯(cuò)誤;(3)能夠理解那些含糊其辭的描述;(4)能夠運(yùn)用模型提供預(yù)言性的猜測(cè);(5)當(dāng)遇到不清楚的描述時(shí)還能主動(dòng)提出建議。目前這種語言的實(shí)現(xiàn)還在不斷努力的過程之中。第4.2節(jié)程序結(jié)構(gòu)與自然語言相對(duì)應(yīng),使用程序設(shè)計(jì)語言編制的程序類似于自然語言撰寫的文章,是由語句構(gòu)成的。不同的是,程序中的語句一般分為數(shù)據(jù)描述語句(Declarative精品

12、文檔statements)與操作命令語句(Imperativestatements)兩個(gè)部分。有時(shí)為了方便理解程序句群的含義,也會(huì)出現(xiàn)一些注釋(Comments)。注釋不是程序的必要部分,通常直接用自然語言來說明。第一部分由聲明語句組成,描述該程序要操作的數(shù)據(jù)第二部分由命令語句組成,描述該程序所要實(shí)現(xiàn)的動(dòng)作程序結(jié)構(gòu)示意圖對(duì)于數(shù)據(jù)描述語句,其功能主要是定義在程序中使用各種數(shù)據(jù)類型或數(shù)據(jù)結(jié)構(gòu)的實(shí)體(比如常量、變量以及類型)。數(shù)據(jù)類型是指數(shù)據(jù)的種類,其決定著數(shù)據(jù)的編碼方式以及對(duì)可執(zhí)行操作的限制。在程序中處理的常量或變量主要的數(shù)據(jù)類型包括(datatype)整型數(shù)據(jù)(integer)、實(shí)型數(shù)據(jù)(rea

13、l或float)、字符型數(shù)據(jù)(character)、布爾型數(shù)據(jù)(boolean)。比如,如下圖所示就是給出了主要編程語言中的變量類型的說明語句。a.VariabledeclarationsinPascalvarLength,Width:real;Price,Tax,Total:integer;Symbol:char;b.VariabledeclarationsinC,C+,C#,andJavafloatLength,Width;intPrice,Tax,Total;charSymbol;c.VariabledeclarationsinFORTRANREALLength,WidthINTEGER

14、Price,Tax,TotalCHARACTERSymbol同樣一些實(shí)型、整型及字符型變量在不同高級(jí)語言Pascal,C類(Java)、FORTRAN中的不同說明方式。除了簡單數(shù)據(jù)變量的說明語句,在程序中還有復(fù)雜數(shù)據(jù)結(jié)構(gòu)(datastructure)的說明語句。常見的數(shù)據(jù)結(jié)構(gòu)通常分為數(shù)組、記錄與對(duì)象三種。數(shù)組是一種包含同質(zhì)數(shù)據(jù)的集合結(jié)構(gòu),主要用于表達(dá)一維表格、二維表格、多維表格等這樣的形式。當(dāng)然,因?yàn)槭峭|(zhì)的,數(shù)組所有元素具有相同的類型,其說明語句比較簡單,如C語言中的intScores29以及FORTRAN語言中的INTEGERScores(2,9)及PASCAL語言中Scores:arra

15、y3.4,12.20ofinteger說明的都是一個(gè)二維數(shù)組。在程序中一旦說明了一個(gè)數(shù)組,那么就可以通過引用其名稱在程序任何需要的地方引用該數(shù)組或數(shù)組元素,如果引用的數(shù)組元素,要給出其對(duì)應(yīng)的索引標(biāo)識(shí),此時(shí)需要注意不同語言對(duì)數(shù)組起始索引標(biāo)識(shí)的規(guī)定是不同的,比如C語言是從0開始計(jì)數(shù),F(xiàn)ORTRAN則是從1開始標(biāo)識(shí)的,而PASCAL則從規(guī)定的起始位置開始標(biāo)識(shí)的。Scoresindicesstartatone.whereindicesstartatzero.不同于數(shù)組的同質(zhì)性,記錄(異構(gòu)數(shù)組)則是由不同質(zhì)的數(shù)據(jù)元素構(gòu)成的數(shù)據(jù)結(jié)構(gòu)。比如如圖所示給出的是表示職員信息的記錄結(jié)構(gòu):Name(char)Age(

16、integer)SkillRating(Real)J1NameAgeSkillRating職員記錄結(jié)構(gòu)示意圖記錄中的數(shù)據(jù)元素通常采用記錄名、一個(gè)句點(diǎn)和元素名來引用,比如對(duì)于上述職員記錄,要引用其中的Age,需要寫成Employee.Age。a.ThearraydeclarationinPascalvarEmployee:recordName:packedarray1.8ofchar;Age:integer;SkillRating:realendb.ThearraydeclarationinCstructcharName8;intAge;floatSkillRating;Employee;不同編

17、程語言中對(duì)記錄的說明語句至于對(duì)象,是指面向?qū)ο缶幊烧Z言中一種復(fù)雜數(shù)據(jù)結(jié)構(gòu),主要是說明一類對(duì)象的模板的,因此嚴(yán)格上通過定義對(duì)象類來說明的。對(duì)象類除了類名外,內(nèi)部包括對(duì)象數(shù)據(jù)說明及其各種處理方法兩個(gè)部分。classLaserClass數(shù)據(jù)說明;數(shù)據(jù)操作方法1;精品文檔精品文檔精品文檔while(B)SI;True圖像數(shù)據(jù)超文本數(shù)據(jù)最后,需要強(qiáng)調(diào)指出的,一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu),比如表列、堆棧、隊(duì)列、樹圖等,均可以通過上述數(shù)組、記錄與對(duì)象及其相關(guān)算法來實(shí)現(xiàn)。上面是程序的數(shù)據(jù)說明語句部分,下面介紹程序執(zhí)數(shù)據(jù)操作方法n;一旦定義了一個(gè)對(duì)象類,就可以用這個(gè)對(duì)象類來定義具體對(duì)象如下:LaserClassLase1

18、,Laser2,Laser3;現(xiàn)在我們介紹有關(guān)常量的說明。在程序中有時(shí)要用到一些預(yù)先確定的并始終保持不變的量,這些量就稱為常量。常量的數(shù)據(jù)類型同變量一樣,可以是整型、實(shí)型、字符型、布爾型等。比如Ada語言中說明語句AirportAltconstantInteger:=645;JAVA語言中FinalintAirportAlt=645;以及C+語言中ConstAirportAlt=645;均定義了一個(gè)常量AirportAlt,以后在程序中凡出現(xiàn)AirportAlt的地方,其值均為固定不變的645。當(dāng)然,你也可以不預(yù)先定義常量,而在需要的地方直接寫上“645這”個(gè)數(shù)值,只是這樣可能會(huì)損害程序的可讀

19、性與通用性。比如如果在程序多處出現(xiàn)這個(gè)代表機(jī)場(chǎng)海拔高度的數(shù)值,一旦需要修改該常量的值(比如機(jī)場(chǎng)搬家,海拔高度變化了),那么如果預(yù)先定義了常量,只需在定義說明處改動(dòng)就可以完成修改;否則需要在每一處出現(xiàn)的地方均修改數(shù)據(jù)。這就是常量定義的優(yōu)點(diǎn)之一,另一個(gè)優(yōu)點(diǎn)則是可讀性好。其他常見的類型還可以有枚舉型數(shù)據(jù)、視頻類數(shù)據(jù)音頻類數(shù)據(jù)、以及超文本類型數(shù)據(jù)等等,雖然目前大多數(shù)編程語言并不支持這樣的數(shù)據(jù)類型的直接說明,但隨著智能多媒體技術(shù)應(yīng)用的不斷發(fā)展,這將是一種不可阻行語句部分的具體語句。有了數(shù)據(jù)變量、常量與復(fù)雜數(shù)據(jù)結(jié)構(gòu)的說明,就可以用程序語句來描述算法步驟了。類似于算法中的偽碼,程序執(zhí)行語句主要包括賦值語句控

20、制語句(轉(zhuǎn)移、條件與循環(huán))、模塊調(diào)用三種類別。賦值語句是最基本的執(zhí)行語句,主要任務(wù)就是將某個(gè)值(或表達(dá)式計(jì)算的值)賦給一個(gè)變量。不同的語言中賦值語句的表示形式有些微的差別,C、C+、C#、JAVA語言中采用的句式為:Z=X+Y;而Ada和Pascal則采用如下形式:Z:=X+Y;APL語言則為:ZX+Y如此等等。在賦值語句中,賦值號(hào)左邊為變量,右邊為表達(dá)式,表達(dá)式中可以含有各種規(guī)定的運(yùn)算符,此時(shí)要注意不同運(yùn)算符之間的優(yōu)先級(jí)。有時(shí)候,運(yùn)算符也可能不是傳統(tǒng)意義上的運(yùn)算操作,比如位移操作、字符串操作、邏輯運(yùn)算符操作等,一切要按照具體語言的規(guī)定來進(jìn)行運(yùn)算控制語句主要是用來控制語句執(zhí)行次序的,在編程語言

21、中常見的控制語句包括無條件轉(zhuǎn)移語句(如goto語句)、條件類轉(zhuǎn)移語句(如if語句)以及循環(huán)類語句(如for語句)。考慮無條件轉(zhuǎn)移語句帶來程序結(jié)構(gòu)的非結(jié)構(gòu)性,現(xiàn)在許多編程語言均不提倡使用,以及常見的控制語句包括if-then(-else)語句、case語句、while語句、repeat-until語句、for語句等,除了for、case語句外,其他均在算法的偽碼中有過介紹。因此下面重點(diǎn)說明case語句和for語句。ControlstructureC.C+,C#,andJavaTruersiIB?False4s2if(B)SIelseS2;1switch(N)caseCl:si;break;cas

22、eC2:S2;break;caseC3:S3;break;;用(calling),而將一個(gè)請(qǐng)求過程執(zhí)行的程序單元稱為調(diào)用單元(callingunit)。調(diào)用程序單元控制傳遞到過程請(qǐng)求過程Theformalparameterlist.NotethatC,aswithmanyprogramminglanguages,requiresthatthedatatypeofeachparameterbespecified.(floatGrowthRate)控制語句的結(jié)構(gòu)及在C,C+,C#,andJava中的表示for語句類似于偽碼中的while語句,不同之處是循環(huán)的控制方式。對(duì)于for語句而言,循環(huán)過程是

23、由一個(gè)計(jì)數(shù)變量(比如count)來控制的,而對(duì)該變量的初始賦值、修改以及終止條件判斷都在一個(gè)語句中表達(dá)。比如forcount:=1to3do(循環(huán)體)就是典型的for語句格式,其含義如下面圖例所示。C+,C#zandJavafor(intCount=1;Count4;Count+4-)body;PascalforCount:=1to3dobeginbodyend;For語句的結(jié)構(gòu)以及在不同編程語言中的描述。在執(zhí)行語句中,第三類重要的語句是模塊調(diào)用。程序模塊主要分為過程與函數(shù)兩類,而輸入輸出語句則是一種特定的模塊調(diào)用,也可以歸入模塊調(diào)用。首先,過程是一個(gè)指令的集合,并作為其他程序單元調(diào)用的一個(gè)模

24、塊來完成任務(wù)。在其他程序單元調(diào)用了某個(gè)過程時(shí),程序的控制權(quán)就轉(zhuǎn)移給了該過程;在該過程執(zhí)行之后,控制權(quán)又返回到調(diào)用該過程的程序單元,如下圖所示。其中,將控制權(quán)轉(zhuǎn)移給過程的步驟稱為調(diào)精品文檔過程被執(zhí)行調(diào)用程序單元當(dāng)過程完成時(shí),控制繼續(xù)返回到調(diào)用單元程序調(diào)用一個(gè)過程的控制流程示意圖從構(gòu)成結(jié)構(gòu)上講,過程就是一個(gè)程序的縮影,也包括說明語句與執(zhí)行語句兩個(gè)部分構(gòu)成。在過程說明部分定義的變量稱為局部變量(localvariable),其作用范圍局限于過程的內(nèi)部。與此相對(duì),全局變量(globalvariables)可以作用于整個(gè)程序。除了全局變量,過程與調(diào)用單元之間的數(shù)據(jù)傳遞還可以通過過程參數(shù)來實(shí)現(xiàn)(param

25、eters)。過程的定義從過程頭部(proceduresheader)語句開始,包括過程名以及形參列表,然后就是類似于程序結(jié)構(gòu)的過程體。過程的調(diào)用只需寫上調(diào)用的過程名以及實(shí)參列表,不再需要再現(xiàn)過程體。所謂形參(formalparameters)是指定義過程時(shí)在過程中使用的參數(shù)變量,而實(shí)參(actualparameters)則是指當(dāng)調(diào)用過程中,形參的具體賦值。形參與實(shí)參之間的數(shù)據(jù)傳遞,不同的語言有不同的實(shí)現(xiàn)方式。常見的方式有兩種:(1)提供實(shí)參的一個(gè)副本,此時(shí)過程只對(duì)副本起作用,而對(duì)原實(shí)參不起作用;(2)或者提供參數(shù)所處的地址,此時(shí)過程會(huì)對(duì)原實(shí)參直接作用。Startingtheheadwitht

26、hetermvoidisthewaythataCprogrammerspecifiesthattheprogramunitisaprocedureratherthanafunction.Wewilllearnaboutfunctionsshortly.voidProjectPopulationThisdeclaresalocalvariablenamedYear.Population0=100.0;for(Year0;Year=10;Year+)PopulationYear+1=PopulationYear+(PopulationYear*GrowthRate);Thesestatements

27、describehowthepopulationsaretobecomputedandstoredintheglobalarraynamedPopulation.定義過程a.Whentheprocedureiscalled,theformalparameterbecomesareferencetotheactualparameter.CallingenvironmentProceduresenvironmentb于是,該過程所做的改變是對(duì)實(shí)參的c.因此,在過程終止后被保留下來了執(zhí)行過程Demo,按值傳遞方式傳遞參數(shù)結(jié)束時(shí)會(huì)產(chǎn)生一個(gè)數(shù)值。因此,對(duì)函數(shù)的調(diào)用也與過程以Void開始頭部是C語言程序員

28、指定程序單元是過程而不是函數(shù)的方法。形參列表。注意,像大多數(shù)程序設(shè)計(jì)語言一樣,C語言要求對(duì)每個(gè)參數(shù)說明數(shù)據(jù)類型聲明一個(gè)名為Year的局部變量這些語句描述人口是如何計(jì)算并存儲(chǔ)在名為Population的全局?jǐn)?shù)組中。實(shí)參列表調(diào)用過程:ProjectPopulation(0.03);用C語言編寫的過程定義與調(diào)用定義過程Demo:調(diào)用過程Demo:ProcedureDemo(Formal)Actual5;FormalFormal+1;Demo(Actual);b.該過程操縱它的副本c.于是,當(dāng)過程終止時(shí),調(diào)用環(huán)境沒有改變計(jì)算圓柱體的體積終止函數(shù)并返回變量Volume的值用C語言編寫的函數(shù)在一般的編程語

29、言中,均會(huì)提供程序的輸入輸出手執(zhí)行過程Demo,按值傳遞方式傳遞參數(shù)a.當(dāng)過程被調(diào)用時(shí),形參變成對(duì)實(shí)參的引用不同,其主要出現(xiàn)在表達(dá)式中。比如,下圖給出的就是用C語言定義的一個(gè)函數(shù)CylinderVolume(),調(diào)用該函數(shù)時(shí)的形式可為:Cost=3*CylinderVolume(3.45,12.7);注意,由于函數(shù)調(diào)用結(jié)束后會(huì)返回一個(gè)值,因此函數(shù)可以出現(xiàn)在表達(dá)式中來參與計(jì)算。函數(shù)頭部以要返回?cái)?shù)據(jù)的類型作為開始聲明一個(gè)名為Volume的局部變量精品文檔軟件開發(fā)精品文檔段,通常的實(shí)現(xiàn)方式是通過系統(tǒng)調(diào)用來實(shí)現(xiàn)。也就是說由機(jī)器系統(tǒng)(操作系統(tǒng))提供一些標(biāo)準(zhǔn)的過程或函數(shù),稱為系統(tǒng)調(diào)用,來專門完成各種輸入輸

30、出任務(wù)。對(duì)應(yīng)的,在某種語言中也會(huì)提供與這些系統(tǒng)調(diào)用相配套的輸入、輸出標(biāo)準(zhǔn)過程或函數(shù),在編制程序時(shí),不必定義這些過程或函數(shù)而可以直接調(diào)用。比如,在Pascal語言中,從鍵盤中輸入一個(gè)值賦給給定的變量Value,可以直接調(diào)用過程Reasln(Value);并將其輸出到屏幕上,則再調(diào)用過程:writeln(Value);如此等等。其他語言也一樣,均規(guī)定了各自相應(yīng)的輸入輸出過程或函數(shù)。C語言格式化輸出的例子對(duì)于編程語言的程序結(jié)構(gòu),最后需要說明的是,大多數(shù)編程語言均提供有注釋說明功能,可以稱之為解釋性語句。主要是幫助人們閱讀程序的,而不是提供給機(jī)器執(zhí)行的。因此,在編譯器處理程序時(shí),都忽略注釋。不同的語言

31、中注釋的方式有不同的約定,如下例子/*Thisisacomment.*/Thisisacomment.均是在C+、C#、JAVA語言中合法的注釋。第4.3節(jié)軟件開發(fā)對(duì)于十分復(fù)雜的智能計(jì)算問題,往往需要構(gòu)造規(guī)模龐大的程序,一般稱其為智能軟件開發(fā),此時(shí)就需要有一個(gè)軟件開發(fā)的系統(tǒng)方法。而對(duì)于規(guī)模較大軟件的開發(fā)一般要經(jīng)過分析、設(shè)計(jì)、實(shí)現(xiàn)與測(cè)試這樣四個(gè)階段的過程。分析主要是弄清所開發(fā)的軟件需要解決的是什么問題、實(shí)現(xiàn)什么功能、滿足什么樣的要求等,并以規(guī)范化的說明書給出。報(bào)廢處置軟件不能適應(yīng)業(yè)務(wù)發(fā)展新軟件項(xiàng)目立項(xiàng)企業(yè)數(shù)據(jù)信息備份軟件升釀需求調(diào)整分析軟件功能拓展憂化丟統(tǒng)需求調(diào)硏分析設(shè)計(jì)開發(fā)測(cè)試培訓(xùn)丟統(tǒng)上線軟件

32、錐護(hù)軟件數(shù)據(jù)庫管理用戶跟蹤培訓(xùn)故障分析解決軟件生命周期軟件開發(fā)周期如果說分析關(guān)注的是軟件系統(tǒng)應(yīng)該做什么,那么設(shè)計(jì)關(guān)注的就是應(yīng)該如何實(shí)現(xiàn)軟件系統(tǒng)的這些目標(biāo)或功能等要求。大型軟件的開發(fā)通常使用模塊化方法來設(shè)計(jì)程序系統(tǒng),主要思想是將總體任務(wù)逐級(jí)分解,直到所有最底層的子任務(wù)均可以直接進(jìn)行單獨(dú)編程為止,然后再建立起來所有分解模塊之間的調(diào)用關(guān)系,形成完整的程序功能設(shè)計(jì)系統(tǒng)。實(shí)現(xiàn)就是將設(shè)計(jì)的方案具體用某種程序設(shè)計(jì)語言編制成為軟件程序,也常常稱為代碼。編制好的軟件程序需要進(jìn)行實(shí)際運(yùn)行,檢查是否實(shí)現(xiàn)了最初的目標(biāo),這個(gè)過程就叫做測(cè)試。因此,測(cè)試與實(shí)現(xiàn)緊密相關(guān),對(duì)于復(fù)雜的軟件系統(tǒng)開發(fā),系統(tǒng)設(shè)計(jì)中的每一個(gè)模塊在其實(shí)現(xiàn)

33、過程中均要進(jìn)行單獨(dú)的測(cè)試,然后才是整體系統(tǒng)的測(cè)試。當(dāng)然,測(cè)試一個(gè)模塊或系統(tǒng)并非是一件容易的事情,需要有系統(tǒng)的測(cè)試方法與技術(shù),其中如何選擇測(cè)試數(shù)據(jù)就是其中非常具有挑戰(zhàn)的課題。常用的測(cè)試方法分為白箱測(cè)試(glass-boxtesting)和黑箱測(cè)試(black-boxtesting)。白箱測(cè)試是指軟件內(nèi)部結(jié)構(gòu)是透明的,可以采用諸如基本路徑測(cè)試方法,來測(cè)試軟件內(nèi)部每一條可能執(zhí)行路徑的正確性,來完成軟件的測(cè)試。黑箱測(cè)試則剛好相反,軟件內(nèi)部結(jié)構(gòu)是不透明的,只能根據(jù)輸入數(shù)據(jù)執(zhí)行的結(jié)構(gòu)來斷言軟件系統(tǒng)的正確性。當(dāng)然,復(fù)雜軟件的輸入往往是不可窮盡的,為了能夠有效測(cè)試軟件,黑箱測(cè)試往往只針對(duì)一些特殊的數(shù)據(jù)輸入進(jìn)行

34、測(cè)試,比如邊界數(shù)據(jù)分析就是黑箱測(cè)試的一種具體方法。通過測(cè)試的軟件系統(tǒng)就可以投入使用了,不過需要精品文檔指出的是,即使通過了系統(tǒng)的測(cè)試,也很難保證軟件程序的正確性,因此在使用中不斷發(fā)現(xiàn)問題并進(jìn)行修改完善,是經(jīng)常性的工作,稱為維護(hù)。在軟件開發(fā)的分析、設(shè)計(jì)、實(shí)現(xiàn)與測(cè)試四個(gè)階段中,分析是依賴于問題領(lǐng)域的、而實(shí)現(xiàn)主要是利用前面介紹的編程語言進(jìn)行代碼就可以完成。因此這里需要進(jìn)一步深入介紹的就是設(shè)計(jì)方法問題了,特別是模塊化程序設(shè)計(jì)方法。為了便于分解任務(wù)并給出子任務(wù)之間的關(guān)系,一般采用結(jié)構(gòu)圖來刻畫軟件模塊及其之間的關(guān)系。如圖所示每一個(gè)模塊(過程)用一個(gè)矩形框來表示,而模塊之間的依賴關(guān)系用聯(lián)結(jié)矩形框的箭頭來表示,可以是構(gòu)成關(guān)系,也可以是調(diào)用關(guān)系。比如成熟的軟件模塊描述結(jié)構(gòu)圖還有程序流程圖,數(shù)據(jù)流圖,以及實(shí)體關(guān)系圖等。任務(wù)模塊子模塊1子模塊2子模塊3子模塊21子模塊22任務(wù)分解結(jié)構(gòu)圖模塊的劃分原則是模塊化程序設(shè)計(jì)中一個(gè)關(guān)鍵問題。顯然,模塊劃分不宜過細(xì),但每個(gè)模塊也不宜過大,如何做出平衡是提高軟件效率的重要課題。劃分模塊的一個(gè)基本原則是,盡可能密切塊內(nèi)聯(lián)系而降低塊間聯(lián)系降低塊間聯(lián)系就是使得模塊之間的獨(dú)立性盡可能大,如果將模塊之間的聯(lián)系稱為塊間耦合(coupling),那么模塊之間獨(dú)立性最大化的目標(biāo)就變?yōu)閷K間耦合性最小化。通過分析可知,塊間耦合的形式主要有兩種,一種是控制耦合,出現(xiàn)在一個(gè)模塊對(duì)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論