第4章程序和軟件(Ye)_第1頁
第4章程序和軟件(Ye)_第2頁
第4章程序和軟件(Ye)_第3頁
第4章程序和軟件(Ye)_第4頁
第4章程序和軟件(Ye)_第5頁
已閱讀5頁,還剩127頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章程序設(shè)計和軟件開發(fā)4.1程序和程序設(shè)計4.2程序構(gòu)造的基本方法4.3程序設(shè)計的基本結(jié)構(gòu)4.4軟件和軟件工程4.5軟件開發(fā)兩大體系結(jié)構(gòu)4.1程序和程序設(shè)計4.1.1程序設(shè)計語言分類4.1.2程序設(shè)計語言的組成4.1.3程序設(shè)計語言處理系統(tǒng)什么是程序設(shè)計語言?什么是程序?程序是為了用計算機解決某個問題而采用程序設(shè)計語言編寫的一個指令序列什么是程序設(shè)計語言?語言的目的是用于通信程序設(shè)計語言用于人與計算機之間的通信程序設(shè)計語言是由人使用但計算機可以理解的一種語言程序設(shè)計語言用于編制程序,表達需要計算機完成什么任務(wù)和怎樣完成任務(wù),然后交給計算機去完成程序設(shè)計語言填補了

人與計算機交流的鴻溝計算機硬件僅僅知道0和1有問題需要計算機解決的人交流的鴻溝計算機硬件僅僅知道0和1有問題需要計算機解決的人程序設(shè)計語言計算機中使用多種“語言”程序設(shè)計語言:主要用于描述算法機器語言、匯編語言、高級語言數(shù)據(jù)描述語言:主要用于描述數(shù)據(jù)(文檔、音樂、圖形、圖像、視頻等)的規(guī)范、結(jié)構(gòu)和文件格式HTML、XML、MIDI、MP3、OpenGL、JPEG、MPEG、······腳本語言:用于編寫嵌入在文檔中的程序的程序設(shè)計語言VBA、VBScript、JavaScript計算機通信語言(網(wǎng)絡(luò)協(xié)議):用于描述計算機-計算機之間的會話(請求-應(yīng)答)的語法和語義HTTP、POP3、SMTP、FTP、Telnet、TCP、IP、······數(shù)據(jù)庫語言:用于數(shù)據(jù)操作,如SQL語言······4.1.1程序設(shè)計語言分類機器語言匯編語言高級程序設(shè)計語言B87F01BB210203D8B81F042BC3(計算1055-(383+545)的5條機器指令)機器語言

機器語言就是計算機的指令系統(tǒng)指令是使用二進制編碼表示的用機器語言編程序,也就是直接使用二進制代碼編寫程序優(yōu)點:可以直接被計算機執(zhí)行缺點:記不住、難理解、效率低、不易維護不同的機器語言程序,相互不兼容現(xiàn)在已不直接用機器語言編制程序!操作碼操作數(shù)(或操作數(shù)的地址)1條機器指令操作數(shù)地址操作碼3.301-2節(jié)6-7節(jié)第二章剛好完例:機器語言程序在MIPS計算機上求最大共約數(shù)(GCD())的機器程序(16進制表示)MISP計算機的每條機器指令均為32個二進位,用8個16進制數(shù)表示匯編語言用助記符號來表示機器指令中的操作符與操作數(shù)優(yōu)點:操作數(shù)直接使用十進制程序相對容易理解缺點:大型程序難以開發(fā)依賴于具體計算機將383傳送到AX寄存器將545傳送到BX寄存器將BX內(nèi)容加AX內(nèi)容,結(jié)果在BX中將1055傳送到AX寄存器將AX內(nèi)容減BX內(nèi)容,結(jié)果在AX寄存器中B87F01BB210203D8B81F042BC3(計算1055-(383+545)的5條機器指令)機器語言程序?qū)?yīng)的匯編語言程序MOVAX383MOVBX545ADDBXAXMOVAX1055SUBAXBX匯編語言程序高級程序設(shè)計語言目的:克服匯編語言的缺陷,提高編程和維護的效率特點:接近人們?nèi)粘J褂玫淖匀徽Z言(主要是英語)容易理解、記憶和使用可在不同計算機上通用對使用的符號、詞匯、語法和語義等各種語言成分都有嚴格的規(guī)定意義:使程序設(shè)計的難度降低,導致了計算機的發(fā)展進入新的階段MOVAX383MOVBX545ADDBXAXMOVAX1055SUBAXBX匯編語言程序S=1055-(383+545)高級程序設(shè)計語言的發(fā)展50年代:Fortran,ALGOL60年代:COBOL語言,BASIC語言70年代:Pascal語言,C語言80年代:Ada語言,PROLOG語言,LISP語言90年代起:面向?qū)ο笳Z言C++、JAVA、C#等4.1.2程序設(shè)計語言的成分程序設(shè)計語言的要素字符集(大多使用ASCII字符集)詞匯:保留詞運算符分隔符標識符語法:詞法和句法語義:32保留詞:(由系統(tǒng)定義,不能再作其它定義)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile(C語言的保留詞)程序設(shè)計語言的4種基本成分數(shù)據(jù)成分:用于描述程序所涉及的對象——數(shù)據(jù)運算成分:用以描述程序中所包含的運算(算術(shù)運算、邏輯運算、字符串運算等)控制成分:用以控制程序中所含語句的執(zhí)行順序傳輸成分:用以描述程序中的數(shù)據(jù)傳輸操作程序語言中的數(shù)據(jù)成分數(shù)據(jù)是客觀事物在計算機內(nèi)的(格式化)表示,是程序所操作和處理的對象程序中的數(shù)據(jù)通常應(yīng)該先說明、后使用數(shù)據(jù)說明的內(nèi)容包括:變量還是常量它們的標識符(符號表示)它們的數(shù)據(jù)類型······整型基本類型算術(shù)類型字符類型邏輯類型實型復合類型數(shù)組指針……用戶定義類型例:C語言中的數(shù)據(jù)類型什么是數(shù)據(jù)類型(datatype)?數(shù)據(jù)類型:用于刻畫數(shù)據(jù)的特性——數(shù)據(jù)的取值范圍和允許對它進行哪些操作C語言通常支持下列基本數(shù)據(jù)類型:類型說明符類型名稱字長取

圍可執(zhí)行的操作bool邏輯型(布爾型)4(1)Btrue,false邏輯操作char字符型1B-128~127(0~255)比較操作int整型4B-2147483648~2147483647算術(shù)和比較操作long[int]長整型4(8)B-2147483648~2147483647算術(shù)和比較操作float單精度浮點型4B6位有效數(shù)字,2.0x10-38~2.0x1038

算術(shù)和比較操作double雙精度浮點型8B12位有效數(shù)字,2.0x10-308~2.0x10308算術(shù)和比較操作(基本數(shù)據(jù)類型是大部分CPU能直接支持的數(shù)據(jù)類型,也稱為內(nèi)部類型,是不可分解的)復合數(shù)據(jù)類型通過類型構(gòu)造符把1個或多個更簡單的類型復合而成的數(shù)據(jù)類型常見的復合數(shù)據(jù)類型有:數(shù)組(含:字符數(shù)組——字符串)結(jié)構(gòu)(記錄)指針集合枚舉聯(lián)合(變體記錄)程序員定義的其它數(shù)據(jù)類型(定制類型)數(shù)據(jù)類型的概念在各種程序設(shè)計語言中幾乎都有,目的是實現(xiàn)信息的隱蔽,將程序員不必了解的細節(jié)都封裝在數(shù)據(jù)類型中例如使用浮點數(shù)類型時,可不必了解浮點數(shù)在CPU中如何表示,如何完成運算,只需了解其數(shù)學特性即可intI;int*p=&i;3指針變量p變量i算術(shù)運算符:+-*/%++--關(guān)系運算符:<<===>>=!=邏輯運算符:!&&||位運算符:<<>>~|^&賦值運算符:=及其擴展條件運算符:?:逗號運算符:,指針運算符:*&求字節(jié)數(shù):sizeof強制類型轉(zhuǎn)換:(類型)分量運算符:.->下標運算符:[]其它:()-運算成分:運算符和表達式“表達式”由變量、常量、函數(shù)、運算符和括號組成

,它用來計算一個值。例如,sin(45*3.14/180)+(exp(10)+log(10))/sqr(x+y+1)

用來計算下面公式的值:程序語言中的控制成分控制成分用來提供一種基本框架,在此基本框架的支持下,將數(shù)據(jù)和對數(shù)據(jù)的運算組合成程序三種控制結(jié)構(gòu):由一組順序執(zhí)行的計算操作(或語句)組成順序結(jié)構(gòu)AB由一個條件(P)和兩個供選擇的操作(或語句)A和B組成PAB真假條件選擇結(jié)構(gòu)由一個條件(P)和一個供重復執(zhí)行的操作(或語句)A組成PA假真重復結(jié)構(gòu)例:C語言的9種控制語句If(P)A;elseB實現(xiàn)條件選擇結(jié)構(gòu)for(P1;P2;P3)A實現(xiàn)重復結(jié)構(gòu)while(P)A實現(xiàn)重復結(jié)構(gòu)doAwhile(P)實現(xiàn)重復結(jié)構(gòu)switch實現(xiàn)條件選擇結(jié)構(gòu)goto無條件選擇結(jié)構(gòu)return無條件選擇結(jié)構(gòu)continuebreak例1兩數(shù)求和(C語言程序)/*example1.1calculatethesumofaandb*/#include<stdio.h>/*Thisisthemainprogram*/main(){inta,b,sum;a=10;b=24;sum=a+b;printf(”sum=%d\n",sum);}運算語句預處理命令注釋賦值語句數(shù)據(jù)類型說明輸出語句intmax(intx,inty){intz;if(x>=y)z=x;elsez=y;return(z);}函數(shù)max的定義函數(shù)的返回值例2找兩數(shù)中較大的數(shù)main(){inta,b,c;scanf("%d%d",&a,&b);c=max(a,b);printf(”%d\n",c);}主函數(shù)調(diào)用函數(shù)max進行計算變量說明輸入語句輸出語句4.1.3程序設(shè)計語言

處理系統(tǒng)程序設(shè)計語言的翻譯程序把甲語言編寫的程序翻譯為等價的乙語言編寫的程序。其中甲語言程序稱為源程序,乙語言程序稱為目標程序翻譯程序源程序目標程序常用的有下列幾種:匯編程序(匯編器)匯編語言源程序機器語言目標程序編譯程序(編譯器)高級語言源程序機器語言或匯編語言目標程序解釋程序(解釋器)高級語言源程序邊解釋邊執(zhí)行,不產(chǎn)生目標程序編譯程序與解釋程序的區(qū)別解釋:解釋器直接解釋并且執(zhí)行源語言程序,不產(chǎn)生目標程序(相當于“口譯”)編譯:把源程序編譯為機器語言目標程序后,再由計算機運行(相當于“筆譯”)源程序目標程序編譯器計算機編譯方式計算機源程序解釋器解釋方式BASIC、VisualBasic、VBScript、Java、JavaScript等都是解釋執(zhí)行的語言C、C++等都是需要編譯的語言編譯程序的處理過程源程序目標程序可執(zhí)行代碼程序庫編譯程序鏈接程序.c.h.obj.exe1.編輯 2.編譯 3.鏈接 4.運行4.2算法和數(shù)據(jù)結(jié)構(gòu)4.2.1數(shù)據(jù)結(jié)構(gòu)4.2.2算法4.2.1數(shù)據(jù)結(jié)構(gòu)什么是數(shù)據(jù)結(jié)構(gòu)?數(shù)據(jù)結(jié)構(gòu)研究如何在計算機中表示被處理的對象及對象之間的關(guān)系,即如何組織數(shù)據(jù)。例如:選擇排序中,未排序整數(shù)和已排序整數(shù)如何表示?排序算法中,排序的對象若不是整數(shù)而是姓名如何表示?是文件夾中的文件名又如何表示?是表格中的“行”又如何表示?Word文檔中插入的表格和圖片如何表示?Windows操作系統(tǒng)中菜單如何表示?對話框如何表示?窗口如何表示?計算機下棋時,棋盤和棋局如何表示?精心設(shè)計的數(shù)據(jù)結(jié)構(gòu)可使算法獲得更高的時間效率或空間效率數(shù)據(jù)結(jié)構(gòu)的內(nèi)容1數(shù)據(jù)的抽象(邏輯)結(jié)構(gòu),即數(shù)據(jù)結(jié)構(gòu)中包括哪些元素,相互之間有什么關(guān)系等。例如:2數(shù)據(jù)的物理(存儲)結(jié)構(gòu),即數(shù)據(jù)的抽象結(jié)構(gòu)如何在實際的存儲器中予以實現(xiàn),數(shù)據(jù)元素如何表示,相互關(guān)系如何表示等3定義在數(shù)據(jù)結(jié)構(gòu)上的一組運算(操作)及其實現(xiàn)方法線性結(jié)構(gòu)網(wǎng)狀結(jié)構(gòu)樹形結(jié)構(gòu)集合結(jié)構(gòu)2.線性數(shù)據(jù)結(jié)構(gòu)

舉例:線性表(Liner-List)定義:若干個相同類型的數(shù)據(jù)元素組成的一個有限序列,其中每個數(shù)據(jù)元素可由多個數(shù)據(jù)項組成。表中有且僅有一個開始元素和一個結(jié)束元素,且所有元素都最多只有一個直接前趨和一個直接后繼例:考生成績登記表(table)數(shù)據(jù)元素已經(jīng)排了序的線性表稱為有序線性表,簡稱有序表34681張雷64834682王寧68234683周光明58834684李霞霞61534685錢欣608………………34700趙剛658準考證號姓名總分表中的每一行是1個數(shù)據(jù)元素每個數(shù)據(jù)元素包含3個數(shù)據(jù)項:準考證號、姓名、總分開始元素結(jié)束元素前趨元素后繼元素線性表的運算(操作)增加1個新的數(shù)據(jù)元素刪除1個指定數(shù)據(jù)元素查找指定的數(shù)據(jù)元素最高分考生最低分考生將表中的數(shù)據(jù)元素排序?qū)Ρ碇械臄?shù)據(jù)進行計算計算平均分···34681張雷64834682王寧68234683周光明58834684李霞霞61534685錢欣608………………34700趙剛658準考證號姓名總分數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)——存儲結(jié)構(gòu)順序存儲結(jié)構(gòu):借助數(shù)據(jù)元素在存儲器中的相對位置來表示數(shù)據(jù)元素之間的邏輯關(guān)系鏈接表存儲結(jié)構(gòu):利用地址指針來表示元素之間的邏輯關(guān)系a1a2低地址高地址a2是a1的后繼元素a1p1a2a2是a1的后繼元素假設(shè)下面的有序表中姓名已按拼音排序例:有序表的實現(xiàn)方法之1使用數(shù)組實現(xiàn),在內(nèi)存中順序存放元素:如果要在表中加一個姓名:馬明,結(jié)果為:程紅李軍劉林劉建平王曉林張小明010016022028034040046

程紅李軍劉林劉建平王曉林張小明010016022028034040046馬明分析:尋找指定的數(shù)據(jù)元素很容易插入元素或刪除元素很不方便程紅李軍劉林劉建平王曉林張小明內(nèi)存地址有序表的實現(xiàn)方法之2使用鏈接表(linkedlist)實現(xiàn):數(shù)據(jù)元素在內(nèi)存中可不按順序存放,它們之間的順序用“指針”來表示指針實際上就是后繼數(shù)據(jù)元素的地址演示

2種實現(xiàn)方法的對比:數(shù)組實現(xiàn)的空間開銷少;存取指定元素的速度比較塊鏈表實現(xiàn)時插入/刪除指定元素的速度快,表的長度不受限制第n個考生準考證號、姓名、…∧第1個考生準考證號、姓名、…Link第2個考生準考證號、姓名、…Link第3個考生準考證號、姓名、…Link3.非線性數(shù)據(jù)結(jié)構(gòu)

樹(Tree)“樹”是一種與線性表不同的數(shù)據(jù)結(jié)構(gòu),在樹中各數(shù)據(jù)元素之間的邏輯關(guān)系具有層次性(樹的一般形式)層次1層次2層次3層次4根結(jié)點葉結(jié)點葉結(jié)點葉結(jié)點葉結(jié)點(二叉樹)根結(jié)點葉結(jié)點葉結(jié)點葉結(jié)點樹的數(shù)組實現(xiàn)012345數(shù)組下標2A1Y1L0D0S-1H說明:每個數(shù)組元素有2個數(shù)據(jù)項:一項是樹的節(jié)點的數(shù)據(jù)元素,另一項是該節(jié)點的父節(jié)點所在的數(shù)組元素下標樹的鏈表實現(xiàn)(二叉樹的結(jié)點)數(shù)據(jù)元素右子結(jié)點指針左子結(jié)點指針樹的應(yīng)用舉例:

人-機對弈時棋局變化的數(shù)據(jù)結(jié)構(gòu)假設(shè):先X后,第4著的棋局如右圖:XXXXXXXXXX接下來有5種下子的方法:XXXXXXXXXXXX然后,X有4種下子的方法:XX小結(jié)1數(shù)據(jù)結(jié)構(gòu)研究如何在計算機中描述操作對象和操作對象之間的關(guān)系:所有操作對象在計算機中均表示為某種類型的數(shù)據(jù)(或數(shù)據(jù)結(jié)構(gòu))操作對象之間的關(guān)系可以刻畫為:每一種數(shù)據(jù)結(jié)構(gòu)均有3個方面的內(nèi)容:設(shè)計其概念結(jié)構(gòu)(邏輯結(jié)構(gòu))設(shè)計其存儲結(jié)構(gòu)(物理結(jié)構(gòu))設(shè)計并實現(xiàn)其運算(操作)集合結(jié)構(gòu)線性結(jié)構(gòu)樹形結(jié)構(gòu)網(wǎng)狀結(jié)構(gòu)小結(jié)2數(shù)據(jù)結(jié)構(gòu)與高級程序設(shè)計語言的關(guān)系:初級(基本)數(shù)據(jù)類型語言本身定義(擴充)的數(shù)據(jù)類型程序員定制的新的數(shù)據(jù)類型瑞士計算機科學家尼?沃思(N.Wirth)在20世紀70年代曾經(jīng)提出過一個著名公式:“數(shù)據(jù)結(jié)構(gòu)+算法=程序”之后他又提出:“計算機科學就是研究算法的學問”數(shù)據(jù)結(jié)構(gòu)4.2.2算法算法(程序)的組成算法(程序)由2個部分組成:進行的操作所涉及的操作對象(數(shù)據(jù))算法操作對象操作步驟與條件程序說明所要處理的數(shù)據(jù)的名字和類型描述所要執(zhí)行的算法說明語句命令語句計算機求解問題的步驟(1)確定并理解問題;(2)尋找解決問題的方法與步驟,并將其表示成算法(Algorithm);(3)使用某種程序設(shè)計語言描述該算法(編程),并進行調(diào)試;(4)運行程序,獲得問題的解答;(5)進行評估,改進算法和程序1.什么是算法?算法是解決問題的方法與步驟例:有三個硬幣,其中一個是偽造的,另兩個是真的,偽幣與真幣重量略有不同?,F(xiàn)在提供一座天平,如何找出偽幣呢?分析:方法明確而有序按提供的條件進行操作任何人均可仿照進行(共享智能)開始C是偽幣B是偽幣A是偽幣A=B?A=C?是否否是關(guān)于算法的三方面問題如何確定算法(算法設(shè)計)?如何表示算法(算法表示)?如何使算法更有效(算法分析)?2.算法設(shè)計舉例例:對整數(shù)進行排序問題:任給一組(n個)整數(shù),將它們從小到大進行排序粗略的思路:①從所有整數(shù)中選一個最小的,作為已排序的第一個數(shù)②從剩下未排序整數(shù)中選最小的數(shù),添加到已排序整數(shù)的后面③反復執(zhí)行步驟②,直到所有整數(shù)都處理完畢進一步細化:把待排序的整數(shù)放在一個數(shù)組A中,每個整數(shù)是數(shù)組A中的一個元素:A[1],A[2],A[3],···],A[n],排好序的元素在A的前面部分,無序的元素留在后面,每“循環(huán)”一次,有序部分增加1個元素,無序部分減少1個元素每次“循環(huán)”只需在數(shù)組的無序元素部分選出最小的數(shù)反復進行n-1次即可得到排序后的結(jié)果“直接選擇排序”算法舉例2345789第6次循環(huán)后,排序結(jié)束2937845與首元素交換,第1次循環(huán)結(jié)束4937825數(shù)組的初態(tài),全部是未排序元素4937825在未排序元素中確定最小數(shù)位置2397845與首元素交換,第2次循環(huán)結(jié)束2937845在未排序元素中確定最小數(shù)位置2347895與首元素交換,第3次循環(huán)結(jié)束2397845在未排序元素中確定最小數(shù)位置“直接選擇排序”算法的描述將原始數(shù)據(jù)放在數(shù)組A中;設(shè)置i的初值為1,循環(huán)執(zhí)行下列操作,直到i=n:{確定A[i]到A[n]中最小整數(shù)的位置,設(shè)為j;交換A[i]和[j];i=i+1}原始數(shù)據(jù)放在數(shù)組A中;令i=1確定A[i]到A[n]中最小整數(shù)的位置,設(shè)為jA[i]和A[j]交換位置i=i+1i=n?結(jié)束開始用偽代碼表示算法用流程圖表示算法直接選擇排序的c語言程序voidsort(intA[],intn)/*sort函數(shù)有2個參數(shù):整型數(shù)組A和數(shù)組元素個數(shù)n*/{inti,j,t,k;/*定義4個整型變量*/for(i=0;i<n-1;i++){/*重復執(zhí)行n-1次,每次增加1個已排序的數(shù)*/j=i;for(k=i+1;k<n;k++)if(A[k]<A[j])j=k;/*在未排序整數(shù)中確定最小數(shù)的位置*/t=A[i];A[i]=A[j];A[j]=t;/*把未排序數(shù)中的最小數(shù)交換到未排序數(shù)的首位*/}}3.算法的表示算法的表示方法文字說明流程圖表示用N-S盒圖表示算法用PAD圖描述算法偽代碼(一種介于自然語言和程序設(shè)計語言之間的文字和符號表達工具)自然語言描述“比較A與B的重量,若A=B,則C是偽造的;否則再比較A與C的重量,若A=C,則B是偽造的;否則A是偽造的?!比秉c:容易產(chǎn)生歧義,很難“精確”地進行表達敘述冗長,很難清楚地表達算法的邏輯流程算法的流程圖表示流程圖由結(jié)點和有向邊構(gòu)成,它描述了算法所執(zhí)行操作的順序及執(zhí)行操作的條件流程圖符號:比文字描述簡明,但當算法比較復雜時,理解困難,容易產(chǎn)生錯誤端點符處理判斷預定義功能原始數(shù)據(jù)放在數(shù)組A中;令i=1確定A[i]到A[n]中最小整數(shù)的位置,設(shè)為jA[i]和A[j]交換位置i=i+1i=n?結(jié)束開始求最大公約數(shù)的偽代碼表示算法3:輾轉(zhuǎn)相除法求最大公約數(shù)BEGINinputm,n;/*輸入正整數(shù)m和n*/do{r←mmodn;m←n;n←r;}whiler≠0;printm;/*輸出最大公約數(shù)*/ENDYNr不等于0?輸出m的值輸入正整數(shù)m和n開始結(jié)束r←m被n除的余數(shù)m←n;n←r4.算法的分析算法分析的基本內(nèi)容正確性:給定有效輸入后,經(jīng)過有限時間的計算,產(chǎn)生正確的輸出結(jié)果簡單性算法是否容易理解,是否容易驗證其正確性,程序是否容易調(diào)試簡單的算法效率不一定高,要在保證一定效率的前提下力求算法簡單時間復雜性(TimeComplexity):當問題的規(guī)模n充分大時,運行該算法所需要的時間的數(shù)量級表示空間復雜性(SpaceComplexity):除原始數(shù)據(jù)之外,額外占用的存儲空間的大小選擇排序算法的時間復雜性假設(shè)參加排序的整數(shù)有n個(1)比較操作的次數(shù): 在第i趟排序中選出最小整數(shù)時,需做n-i次比較操作, 因此,總的比較操作次數(shù)為:n(n-1)/2=(n2-n)/2(2)移動操作的次數(shù): 最好情況(原始數(shù)據(jù)已經(jīng)排序)時,移動次數(shù)為0

最壞情況(原始數(shù)據(jù)逆序排列)時,每趟均要執(zhí)行交換操作(3次傳送),總的移動次數(shù)取最大值為:3(n-1)所以,直接選擇排序的時間復雜性為O(n2)設(shè)置i的初值為1,循環(huán)執(zhí)行下列操作,直到I=n:{確定A[i]到A[n]中最小的整數(shù)元素的位置,設(shè)為j;交換A[i]和[j];i=i+1}4.小結(jié)計算機中處處是算法!例1:Word程序如何在文檔中查找用戶指定的詞語?例2:在Word文檔的表格中如何將表格內(nèi)容排序?例3:如何把一幅彩色圖片轉(zhuǎn)換為灰度(黑白)圖片?例4:Windows如何在硬盤中找到用戶指定的文件?例5:媒體播放器如何把MP3文件轉(zhuǎn)換成動聽的音樂?例6:搜索引擎如何在WWW網(wǎng)中找到用戶需要的網(wǎng)頁?算法是計算機軟件的靈魂計算機的通用性是因為它能運行各種各樣的程序,而程序之所以能解決問題,是因為它所體現(xiàn)了正確的算法 算法所解決的是一類問題而不是一個特定的問題,例如排序(sort)可以是表格內(nèi)容的排序,也可以是文件夾中文件的排序,可以按數(shù)字或文字排序,也可以按日期排序,等等查找(search),可以在文檔中查找某個單詞或在硬盤中查找某個文件,也可在Web上查找某個網(wǎng)頁,等等開發(fā)計算機應(yīng)用的核心是:根據(jù)實際問題給出解題的算法,然后再將該算法在計算機上實現(xiàn)(即開發(fā)成為軟件)計算機算法的4個特點目的:完成某個特定的信息處理任務(wù)必須滿足的性質(zhì):①確定性:算法中每一步操作的含義必須清楚明確,無二義性②能行性:算法中有待實現(xiàn)的操作都是計算機可執(zhí)行的,即必須在計算機的能力范圍之內(nèi)③有窮性:算法在執(zhí)行了有限步操作后必須結(jié)束④算法結(jié)束后至少產(chǎn)生一個輸出(包括參量或狀態(tài)的變化)4.3程序設(shè)計的基本結(jié)構(gòu)4.3.1三種基本結(jié)構(gòu)結(jié)構(gòu)化程序設(shè)計要求把程序的結(jié)構(gòu)限制為順序、選擇和循環(huán)三種基本結(jié)構(gòu),以便提高程序的可讀性。結(jié)構(gòu)化程序具有以下兩個特點:(1)以控制結(jié)構(gòu)為單位,只有一個入口和一個出口,各單位之間的接口比較簡單,每個單位也容易被人們所理解。(2)縮小了程序的靜態(tài)結(jié)構(gòu)與動態(tài)執(zhí)行之間的差異,使人們能方便、正確地理解程序的功能。4.3.1三種基本結(jié)構(gòu)1.順序結(jié)構(gòu)如圖4-8(a)為傳統(tǒng)流程圖,4-8(b)為N-S圖虛線框內(nèi)是順序結(jié)構(gòu)。其中A和B兩框是順序執(zhí)行的。即在執(zhí)行完A框所指定的操作后,必須接著執(zhí)行B框所指定的操作,它是最簡單的一種基本結(jié)構(gòu)。2.選擇結(jié)構(gòu)(分支結(jié)構(gòu))如圖4-9(a)為傳統(tǒng)流程圖,4-9(b)為N-S圖。虛框內(nèi)是一個選擇結(jié)構(gòu),此結(jié)構(gòu)中必包含一個判斷框。根據(jù)給定的條件P是否成立而選擇執(zhí)行A框或B框。請注意,無論P條件是否成立,只能執(zhí)行A框或B框之一,不可能既執(zhí)行A框又執(zhí)行B框。A框或B框中可以有一個是空的,即不執(zhí)行任何操作。4.3.1三種基本結(jié)構(gòu)3.循環(huán)結(jié)構(gòu)又稱重復結(jié)構(gòu),即反復執(zhí)行某一部分的操作,有兩種循環(huán)結(jié)構(gòu):當型和直到型。當給定的條件P1成立時,執(zhí)行A框操作,執(zhí)行完A后,再判斷條件P是否成立,若仍然成立,再執(zhí)行A框,如此反復執(zhí)行直至P1不成立結(jié)束循環(huán)。4.3.1三種基本結(jié)構(gòu)(2)直到型循環(huán)如圖4-11(a)為傳統(tǒng)流程圖,4-11(b)為N-S圖。先執(zhí)行A框,然后判斷給定的條件P2是否成立,若P2條件不成立,則執(zhí)行A,然后再對P2條件作判斷,若P2條件仍不成立,又執(zhí)行A,如此反復直到P2條件成立則結(jié)束循環(huán)。4.3.1三種基本結(jié)構(gòu)當型循環(huán)與直到型循環(huán)的主要差別在于:當型循環(huán)首先判斷給定的條件是否成立,如果條件不成立,循環(huán)體就不執(zhí)行,這種循環(huán)有可能循環(huán)體一次也不運行。直到型循環(huán)首先執(zhí)行循環(huán)體,再對給定的條件進行判斷,這種循環(huán)的循環(huán)體至少能運行一次。4.3.1三種基本結(jié)構(gòu)第四章后面的內(nèi)容為自學材料,不作教學要求。后半程教學由趙青松老師擔任再見4.3.2函數(shù)與過程1.函數(shù)函數(shù)是可以實現(xiàn)特定功能的一小段程序。使用函數(shù),有助于程序代碼的重用和整個程序的結(jié)構(gòu)清晰。在程序設(shè)計語言中,函數(shù)可以分為:標準函數(shù)和自定義函數(shù),目前采用自定義函數(shù)編程思想被廣泛應(yīng)用于各種程序設(shè)計語言中。標準函數(shù)實際上也是一種模塊。在那里,我們看到的實際上是模塊的接口部分,看不到功能實現(xiàn)部分。實現(xiàn)部分對我們來說是隱藏的。例如,求平方根的標準函數(shù)sqrt(x),我們知道函數(shù)名(即模塊名)是sqrt,括號中的僅有的一個參數(shù)x被規(guī)定成是實型量,而函數(shù)的返回值也只有一個,也是實型量。還有如ord(ch);其函數(shù)名為ord,一個輸入?yún)?shù)ch,被規(guī)定成是字符型,而函數(shù)的返回值卻是整型。我們根據(jù)這個接口,就能很方便地調(diào)用這些標準函數(shù)。例如:ch='A';n=ord(ch);

m=sqrt(n+16.0);

printf(m);這個程序段調(diào)用了兩個標準函數(shù),也可以說調(diào)用了兩個模塊,一個模塊為ord,主程序傳給它一個值為字符‘A’,它回送一個值65,用變量n保存。主程序又把n+16.0值傳給模塊sqrt,它計算返回一個值9.0,用變量m保存。最后輸出m的值是9.0。4.3.2函數(shù)與過程標準函數(shù)為我們編程帶來了方便,但標準函數(shù)是有限的,在實際應(yīng)用中常常需要自已根據(jù)具體的需要定義一些可重用的新函數(shù),從而實現(xiàn)將大問題轉(zhuǎn)化為小模塊來進行編程。(1)函數(shù)定義也稱函數(shù)說明,就是要定義接口部分及編寫實現(xiàn)部分的程序代碼。自定義函數(shù)必須先定義后使用,不同的程序設(shè)計語言中,自定義函數(shù)的說明方式并不一樣,此處以VB語言舉例說明。在VB中函數(shù)說明的一般格式如下:Function<函數(shù)名>(參數(shù)表)as<函數(shù)類型>;{函數(shù)語句部分}4.3.2函數(shù)與過程4.3.2函數(shù)與過程注意:①保留字Function是不可少的。②函數(shù)名(也稱模塊名),必須是合法的標識符。③參數(shù)表(也稱形參表),指出每個參數(shù)所屬的類型,多個參數(shù)時,用逗號分開。④函數(shù)類型:是指函數(shù)返回值的類型,可以是實型,整型,字符型,布爾型?;蛞院蟪W到的枚舉型,指針等類型。⑤函數(shù)名兼作存放返回值的變量,所以在函數(shù)體中必定含有這樣一個語句:<函數(shù)名>:=<表達式>;從以上的書寫格式可以看出,一個函數(shù)就是一個模塊,函數(shù)的首部就是模塊的接口說明,函數(shù)的語句部分(程序)就是模塊的功能實現(xiàn)部分。因為函數(shù)只有一個返回值,所以就可以直接用函數(shù)名兼作返回值的變量。4.3.2函數(shù)與過程(2)函數(shù)調(diào)用當函數(shù)被定義后,就可以在程序的任何位置調(diào)用它。調(diào)用的主要依據(jù)是函數(shù)的首部。它包含函數(shù)名,實參表,函數(shù)的返回類型。函數(shù)調(diào)用的一般格式:〈函數(shù)名〉〈實參表〉注意:①函數(shù)調(diào)用必須出現(xiàn)在表達式中;函數(shù)的每次調(diào)用,是將每個實在參數(shù)的值賦給對應(yīng)的形式參數(shù),然后由函數(shù)體完成規(guī)定的處理,并回送結(jié)果值。4.3.2函數(shù)與過程②實在參數(shù)與形式參數(shù)的個數(shù)要相同。每個實在參數(shù)之間用逗號分開。實在參數(shù)與形式參數(shù)按順序一一對應(yīng),每個實參與它對應(yīng)的形參在類型上要賦值相容。所謂賦值相容是指:對應(yīng)的實參,形參的類型必須相同,或者,當形參為實型時,對應(yīng)的實參的類型可以是整型。相反,當形參為整型時對應(yīng)的實參若為實型是不允許的。③若函數(shù)沒有形參,則可以略去實參與括號。函數(shù)是有局限性的。它返回的僅是單個函數(shù)值,這個值是通過函數(shù)名帶回給調(diào)用程序的。在實際應(yīng)用中,常常需要編寫一些程序模塊,回送多個結(jié)果值。也可能希望模塊不回送任何值,而只完成某種功能。為此,程序設(shè)計語言用“過程”來達到此目的。2.過程過程是完成某一個特定功能的一組程序代碼的集合。一個應(yīng)用程序是由若干個模塊組成的。而每個模塊又是由若干個更小的代碼片段組成,我們把這些模塊的代碼片段稱為過程。通過過程,可以將整個應(yīng)用程序按功能進行分塊,每個過程用來完成一項特定的功能??梢詫⑦^程反復使用。要注意的是過程是不能通過過程名返回一個值的,而是通過參數(shù)表中的變量帶回過程的運算結(jié)果。過程和函數(shù)非常相似,過程說明在格式上類似于函數(shù)說明。過程的首部與過程體組成。

格式如下:Sub<過程名>(形參表){過程體}4.3.2函數(shù)與過程注意:(1)保留字Sub是必不可少的。(2)<過程名>:是有意義的標識符。所謂有意義,是使標識符盡可能地表達此過程的功能。(3)形參表:給出了輸入?yún)?shù)與返回參數(shù)的描述。它標明哪些是輸入?yún)?shù)及其各自的類型,哪些是輸出參數(shù)及其各自的類型。(4)輸入?yún)?shù)一般采用值參數(shù),而輸出參數(shù)采用變量參數(shù)。在參數(shù)的前面冠以var就成為變量參數(shù)。(5)過程體是一段程序代碼,用來實現(xiàn)模塊的功能。(6)無參數(shù)的過程可以省掉括號以及形參表。4.3.2函數(shù)與過程4.3.3遞歸思維與應(yīng)用所謂遞歸,通俗地說,就是一個函數(shù)或過程自己調(diào)用自己,遞歸是一種重要算法,它允許一個函數(shù)從其內(nèi)部調(diào)用其自身,可以將一個復雜的問題用簡化的程序來實現(xiàn)。要用遞歸解決問題,最主要的就是找出遞歸式子或遞歸過程的規(guī)律,同時找出正確的遞歸邊界值,遞歸邊界的含義,就是遞歸調(diào)用到達此步時,問題就已有確切的解,而且此時不能再進行遞歸調(diào)用,而必須是進行遞歸過程的返回。在遞歸調(diào)用中,有幾次遞歸調(diào)用,就必須有幾次遞歸過程的返回。在數(shù)學中有許多函數(shù)是用遞歸方法定義的,因此用遞歸方法編寫求這些函數(shù)值的程序也是最為簡單、最為自然、最好理解的。但是遞歸程序執(zhí)行時要占用大量的內(nèi)存空間,可能計算速度很慢。在設(shè)計遞歸函數(shù)時應(yīng)特別仔細。如果懷疑其中存在著無限遞歸的可能,則可以讓該函數(shù)記錄它調(diào)用自身的次數(shù)。如果該函數(shù)調(diào)用自身的次數(shù)太多,即使您已決定了它應(yīng)調(diào)用多少次,就自動退出。例:定義一個求階乘N!的遞歸函數(shù)。分析:我們知道,求一個自然數(shù)n的階乘,可表示為:n*(n-1)!(n>=1)(稱為遞歸式子)1(n=0)(稱為遞歸邊界值)4.3.3遞歸思維與應(yīng)用現(xiàn)在定義一個求階乘的遞歸函數(shù)fact,該函數(shù)以自然數(shù)n為參數(shù),而函數(shù)的值是長整型的值,遞歸函數(shù)定義如下: intfact(intn) {if(n==0)fact=1; elsefact=n*fact(n-1);}4.3.3遞歸思維與應(yīng)用4.3.3遞歸思維與應(yīng)用

遞歸算法通常具有這樣的特征:為求解規(guī)模為N的問題,設(shè)法將它分解成一些規(guī)模較小的問題,然后從這些較小問題的解能方便地構(gòu)造出題目所需的解。而這些規(guī)模較小的問題也采用同樣的方法分解成規(guī)模更小的問題,通過規(guī)模更小的問題構(gòu)造出規(guī)模校小的問題的解,如此不斷的反復分解和綜合,總能分解到最簡單的能直接得到解的情況。在解遞歸算法的題目時,要注意以下幾點:1)找到遞歸調(diào)用的結(jié)束條件或繼續(xù)遞歸調(diào)用條件。2)想方設(shè)法將處理對象的規(guī)??s小或元素減少。3)由于遞歸調(diào)用可理解為并列同名函數(shù)的多次調(diào)用,而函數(shù)調(diào)用的原則是一層一層調(diào)用,一層一層返回。因此,還要注意理解調(diào)用返回后的下一個語句的作用。在一些簡單的遞歸算法中,往往不需要考慮遞歸調(diào)用返回后的語句處理。而在一些復雜的遞歸算法中,則需要考慮遞歸調(diào)用返回后的語句處理和進一步的遞歸調(diào)用。4)在讀遞歸程序或編寫遞歸程序時,必須要牢記遞歸函數(shù)的作用,這樣便于理解整個函數(shù)的功能和知道哪兒需要寫上遞歸調(diào)用語句。4.3.3遞歸思維與應(yīng)用4.4.1軟件工程概念1.軟件“軟件”一詞是20世紀60年代才出現(xiàn)的,它是指:計算機程序及其說明程序的各種文檔。軟件與硬件一起構(gòu)成完整的計算機系統(tǒng),它們相互依存,缺一不可。軟件是一種特殊的產(chǎn)品,它具有以下獨特的特性:(1)軟件是一種邏輯產(chǎn)品,它與物質(zhì)產(chǎn)品有很大的區(qū)別。軟件產(chǎn)品看不見摸不著,它以程序和文檔的形式出現(xiàn),保存在計算機存儲器、磁盤或光盤等介質(zhì)上,通過計算機的執(zhí)行才能體現(xiàn)它的功能和作用。(2)軟件產(chǎn)品的生產(chǎn)主要是研制,軟件產(chǎn)品的成本主要體現(xiàn)在軟件的開發(fā)和研制上,軟件開發(fā)研制完成后,通過復制就產(chǎn)生了大量軟件產(chǎn)品。(3)軟件產(chǎn)品不存在磨損、消耗問題。(4)軟件產(chǎn)品生產(chǎn)的成本主要是腦力勞動,還未完全擺脫手工開發(fā)方式,大部分產(chǎn)品是“定做”的。(5)軟件費用不斷增加,軟件成本相當昂貴。軟件的研制工作需要投入大量的、復雜的、高強度的腦力勞動,它的成本非常高。4.4軟件和軟件工程4.4.1軟件工程概念從第一臺計算機誕生到現(xiàn)在,軟件生產(chǎn)經(jīng)過了三個階段:以個體手工勞動為主的程序設(shè)計時代;提倡結(jié)構(gòu)化方法,以作坊式小集團合作生產(chǎn)的程序系統(tǒng)時代;使用數(shù)據(jù)庫、開發(fā)工具、開發(fā)環(huán)境、網(wǎng)絡(luò)、分布式、面向?qū)ο蠹夹g(shù)開發(fā)的軟件工程時代。二十世紀60年代以來,由于計算機硬件技術(shù)的飛速發(fā)展和計算機應(yīng)用的普及,軟件產(chǎn)業(yè)越來越不能滿足社會需求和適應(yīng)硬件技術(shù)的發(fā)展,軟件危機就出現(xiàn)了。軟件危機產(chǎn)生的原因主要有:

(1)軟件的規(guī)模越來越大,結(jié)構(gòu)越來越復雜;

(2)軟件開發(fā)管理困難而復雜;

(3)軟件開發(fā)費用不斷增加;

(4)軟件開發(fā)技術(shù)落后;

(5)生產(chǎn)方式落后;

(6)開發(fā)工具落后,效率低。因此,軟件工程被認為是解決這種危機的靈丹妙藥。2.軟件工程軟件工程是一類工程。工程是將理論和知識應(yīng)用于實踐的科學。就軟件工程而言,它借鑒了傳統(tǒng)工程的原則和方法,以求高效地開發(fā)高質(zhì)量軟件。其中應(yīng)用了計算機科學、數(shù)學和管理科學。計算機科學和數(shù)學用于構(gòu)造模型與算法,工程科學用于制定規(guī)范、設(shè)計模型、評估成本及確定權(quán)衡,管理科學用于計劃、資源、質(zhì)量和成本的管理。軟件工程主要是針對20世紀60年代“軟件危機”而提出的。它首次出現(xiàn)在1968年NATO(北大西洋公約組織)會議上。這一概念提出以來,圍繞軟件項目,開展了有關(guān)開發(fā)模型、方法以及支持工具的研究。其主要成果有:提出了瀑布模型,開發(fā)了一些結(jié)構(gòu)化程序設(shè)計語言(例如PASCAL語言,Ada語言)、結(jié)構(gòu)化方法等。并且圍繞項目管理提出了費用估算、文檔復審等方法和工具。綜觀60年代末至80年代初,其主要特征是,前期著重研究系統(tǒng)實現(xiàn)技術(shù),后期開始強調(diào)開發(fā)管理和軟件質(zhì)量。4.4.1軟件工程概念軟件工程圍繞工程設(shè)計、工程支持以及工程管理,提出了以下四項基本原則:1、選取適宜開發(fā)模型。該原則與系統(tǒng)設(shè)計有關(guān)。在系統(tǒng)設(shè)計中,軟件需求、硬件需求以及其他因素之間是相互制約、相互影響的,經(jīng)常需要權(quán)衡。因此,必須認識需求定義的易變性,采用適宜的開發(fā)模型予以控制,以保證軟件產(chǎn)品滿足用戶的要求。2、采用合適的設(shè)計方法。軟件設(shè)計中,通常要考慮軟件的模塊化、抽象與信息隱蔽、局部化、一致性以及適應(yīng)性等特征。合適的設(shè)計方法有助于這些特征的實現(xiàn),以達到軟件工程的目標。3、提供高質(zhì)量的工程支持。在軟件工程中,軟件工具與環(huán)境對軟件過程的支持頗為重要。軟件工程項目的質(zhì)量與開銷直接取決于對軟件工程所提供的支撐質(zhì)量和效用。4、重視開發(fā)過程的管理。軟件工程的管理,直接影響可用資源的有效利用,生產(chǎn)滿足目標的軟件產(chǎn)品,提高軟件組織的生產(chǎn)能力等問題。僅當軟件過程得以有效管理時,才能實現(xiàn)有效的軟件工程。4.4.1軟件工程概念軟件工程的主要環(huán)節(jié)包括:人員管理、項目管理、可行性與需求分析、系統(tǒng)設(shè)計、程序設(shè)計、測試、維護等,如圖4-12所示。4.4.1軟件工程概念軟件工程的目標是可用性、正確性和經(jīng)濟性;實施一個軟件工程要選取適宜的開發(fā)模型,要采用合適的設(shè)計方法,要提供高質(zhì)量的工程支撐,要實行開發(fā)過程的有效管理;軟件工程活動主要包括需求、設(shè)計、實現(xiàn)、確認和支持等活動,每一活動可根據(jù)特定的軟件工程,采用合適的開發(fā)模型、設(shè)計方法、支持過程以及過程管理。根據(jù)軟件工程這一框架,軟件工程學科的研究內(nèi)容主要包括:軟件開發(fā)模型、軟件開發(fā)方法、軟件過程、軟件工具、軟件開發(fā)環(huán)境、計算機輔助軟件工程(CASE,ComputerAidedSoftwareEngineering)及軟件經(jīng)濟學等。4.4.1軟件工程概念美國著名的軟件工程專家Boehm綜合這些專家的意見,并總結(jié)了TRW公司多年的開發(fā)軟件的經(jīng)驗,于1983年提出了軟件工程的七條基本原則。1用分階段的生命周期計劃嚴格管理2堅持進行階段評審3實行嚴格的產(chǎn)品控制4采納現(xiàn)代程序設(shè)計技術(shù)5結(jié)果應(yīng)能清楚地審查6開發(fā)小組的人員應(yīng)少而精7承認不斷改進軟件工程實踐的必要性4.4.1軟件工程概念4.4.2軟件開發(fā)方法軟件開發(fā)方法是一種使用早已定義好的技術(shù)集及符號表示習慣來組織軟件生產(chǎn)的過程。軟件開發(fā)的目標是在規(guī)定的投資和時間內(nèi),開發(fā)出符合用戶需求的高質(zhì)量的軟件。大型軟件公司和機構(gòu)一直在研究軟件開發(fā)方法,提出了很多實際的開發(fā)方法,比如:生命周期法、原型化方法、面向?qū)ο蠓椒ǖ鹊?。下面介紹幾種常用的軟件開發(fā)方法:

1、結(jié)構(gòu)化方法

結(jié)構(gòu)化開發(fā)方法是由E.Yourdon和L.L.Constantine提出的,即所謂的SASD方法,也可稱為面向功能的軟件開發(fā)方法或面向數(shù)據(jù)流的軟件開發(fā)方法。Yourdon方法是80年代使用最廣泛的軟件開發(fā)方法。它首先用結(jié)構(gòu)化分析(SA)對軟件進行需求分析,然后用結(jié)構(gòu)化設(shè)計(SD)方法進行總體設(shè)計,最后是結(jié)構(gòu)化編程(SP)。它給出了兩類典型的軟件結(jié)構(gòu)----變換型和事務(wù)型,使軟件開發(fā)的成功率大大提高。2、面向數(shù)據(jù)結(jié)構(gòu)的軟件開發(fā)方法Jackson方法是最典型的面向數(shù)據(jù)結(jié)構(gòu)的軟件開發(fā)方法,Jackson方法把問題的各部分分解為可由三種基本結(jié)構(gòu)形式表示的層次結(jié)構(gòu)。三種基本的結(jié)構(gòu)形式就是順序、選擇和循環(huán)。三種數(shù)據(jù)結(jié)構(gòu)可以進行組合,形成復雜的結(jié)構(gòu)體系。這一方法從目標系統(tǒng)的輸入、輸出數(shù)據(jù)結(jié)構(gòu)入手,導出程序框架結(jié)構(gòu),再補充其它細節(jié),就可得到完整的程序結(jié)構(gòu)圖。這一方法對輸入、輸出數(shù)據(jù)結(jié)構(gòu)明確的中小型系統(tǒng)特別有效,如商業(yè)應(yīng)用中的文件表格處理。該方法也可與其它方法結(jié)合,用于模塊的詳細設(shè)計。4.4.2軟件開發(fā)方法3、原型化方法產(chǎn)生原型化方法的原因很多,主要隨著我們系統(tǒng)開發(fā)經(jīng)驗的增多,我們也發(fā)現(xiàn)并非所有的需求都能夠預先定義而且反復修改是不可避免的。當然能夠采用原型化方法是因為開發(fā)工具的快速發(fā)展,比如用VB,DELPHI等工具我們可以迅速的開發(fā)出一個可以讓用戶看得見、摸得著的系統(tǒng)框架,這樣,對于計算機不是很熟悉的用戶就可以根據(jù)這個樣板提出自己的需求。4.4.2軟件開發(fā)方法開發(fā)原型化系統(tǒng)一般由以下幾個階段:(1)確定用戶需求(2)開發(fā)原始模型(3)征求用戶對初始原型的改進意見(4)修改原型。原型化方法比較適合于用戶需求不清、業(yè)務(wù)理論不確定、需求經(jīng)常變化的情況。當系統(tǒng)規(guī)模不是很大也不太復雜時采用該方法是比較好的。4.4.2軟件開發(fā)方法4、面向?qū)ο筌浖_發(fā)方法面向?qū)ο蠹夹g(shù)是軟件技術(shù)的一次革命,在軟件開發(fā)史上具有里程碑的意義。當前主流的兩大面向?qū)ο蠹夹g(shù)是DCOM和CORBA,但是程序開發(fā)人員實際用到的還是面向?qū)ο蟮木幊陶Z言,比如C++和Java。隨著OOP(Object-OrientedProgramming面向?qū)ο缶幊蹋┫騉OD(Object-OrientedDesign面向?qū)ο笤O(shè)計)和OOA(Object-OrientedAnalysis面向?qū)ο蠓治觯┑陌l(fā)展,最終形成面向?qū)ο蟮能浖_發(fā)方法OMT(ObjectModelingTechnique)。這是一種自底向上和自頂向下相結(jié)合的方法,它以對象建模為基礎(chǔ),從而不僅考慮了輸入、輸出數(shù)據(jù)結(jié)構(gòu),實際上也包含了所有對象的數(shù)據(jù)結(jié)構(gòu)。OMT徹底實現(xiàn)了面向問題的分析法沒有完全實現(xiàn)的目標。不僅如此,OO技術(shù)在需求分析、可維護性和可靠性這三個軟件開發(fā)的關(guān)鍵環(huán)節(jié)和質(zhì)量指標上有了實質(zhì)性的突破,基本解決了在這些方面存在的嚴重問題。4.4.2軟件開發(fā)方法面向?qū)ο笙到y(tǒng)采用自底向上的歸納、自頂向下的分解方法,它通過對對象模型的建立,能夠真正建立基于用戶的需求,而且系統(tǒng)的可維護性大大改善。當前業(yè)界關(guān)于面向?qū)ο蠼5臉藴适荱ML(UnifiedModelingLanguage)。為了統(tǒng)一各種面向?qū)ο蠓椒ǖ男g(shù)語、概念和模型,1997年推出了統(tǒng)一建模語言。它是面向?qū)ο蟮臉藴式UZ言,通過統(tǒng)一的語義和符號表示,使各種方法的建模過程和表示統(tǒng)一起來,將成為面向?qū)ο蠼5墓I(yè)標準。UML表示法以下九種視圖構(gòu)成:靜態(tài)結(jié)構(gòu)圖(其中包括類圖和對象圖)、使用事例圖、順序圖、協(xié)作圖、狀態(tài)圖、活動圖、實現(xiàn)圖(包括成分圖和展開圖)。4.4.2軟件開發(fā)方法5、可視化開發(fā)方法輔助工具,用過VB、DELPHI、C++Builder等開發(fā)工具4.4.2軟件開發(fā)方法6.工作流技術(shù)工作流是一類能夠完全或者部分自動執(zhí)行的經(jīng)營過程,它根據(jù)一系列過程規(guī)則,文檔、信息或任務(wù)能夠在不同的執(zhí)行者之間進行傳遞與執(zhí)行。簡單地講,工作流就是業(yè)務(wù)流程(BusinessProcess)的計算機化或自動化。企業(yè)或組織內(nèi)有許多繁瑣復雜的業(yè)務(wù)流程,這些流程構(gòu)成了企業(yè)或組織的日常運營活動。通過現(xiàn)代的技術(shù)手段將這些流程自動化,并對其進行有效地管理便是工作流管理需要解決的問題。工作流作為一種反映業(yè)務(wù)流程的計算機化的模型,它是為了在先進計算機環(huán)境支持下,實現(xiàn)經(jīng)營過程集成與經(jīng)營過程自動化,而建立的可由工作流管理系統(tǒng)執(zhí)行的業(yè)務(wù)模型。4.4.2軟件開發(fā)方法軟件開發(fā)模型是指軟件開發(fā)全部過程、活動和任務(wù)的結(jié)構(gòu)框架。軟件開發(fā)模型能清晰、直觀地表達軟件開發(fā)全過程,明確規(guī)定了要完成的主要活動和任務(wù),用來作為軟件項目開發(fā)的基礎(chǔ)。軟件開發(fā)包括需求、設(shè)計、編碼和測試等階段,有時也包括維護階段。典型的開發(fā)模型有:①瀑布模型(waterfallmodel)②漸增模型/演化/迭代(incrementalmodel)③原型模型(prototypemodel)④螺旋模型(spiralmodel)⑤RAD模型(rapapplicationdevelopment)4.4.3軟件開發(fā)模型1.瀑布模型(WaterfallModel)1970年WinstonRoyce提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被廣泛采用的軟件開發(fā)模型。瀑布模型將軟件生命周期劃分為制定計劃、需求分析、軟件設(shè)計、程序編寫、軟件測試和運行維護等六個基本活動,并且規(guī)定了它們自上而下、相互銜接的固定次序,如同瀑布流水,逐級下落,最終得到軟件產(chǎn)品。優(yōu)點:a.強調(diào)開發(fā)的階段性;b.強調(diào)早期計劃及需求調(diào)查;c.強調(diào)產(chǎn)品測試。4.4.3軟件開發(fā)模型1.瀑布模型(WaterfallModel)圖4-15瀑布模型缺點:a.依賴于早期進行的唯一一次需求調(diào)查,不能適應(yīng)需求的變化;b.由于是單一流程,開發(fā)中的經(jīng)驗教訓不能反饋應(yīng)用于本產(chǎn)品的過程;c.風險往往遲至后期的開發(fā)階段才顯露,因而失去及早糾正的機會。1.瀑布模型(WaterfallModel)演化模型主要針對事先不能完整定義需求的軟件開發(fā)。用戶可以給出待開發(fā)系統(tǒng)的核心需求,并且當看到核心需求實現(xiàn)后,能夠有效地提出反饋,以支持系統(tǒng)的最終設(shè)計和實現(xiàn)。軟件開發(fā)人員根據(jù)用戶的需求,首先開發(fā)核心系統(tǒng)。當該核心系統(tǒng)投入運行后,用戶試用之,完成他們的工作,并提出精化系統(tǒng)、增強系統(tǒng)能力的需求。軟件開發(fā)人員根據(jù)用戶的反饋,實施開發(fā)的迭代過程。第一迭代過程均由需求、設(shè)計、編碼、測試、集成等階段組成,為整個系統(tǒng)增加一個可定義的、可管理的子集。在開發(fā)模式上采取分批循環(huán)開發(fā)的辦法,每循環(huán)開發(fā)一部分的功能,它們成為這個產(chǎn)品的原型的新增功能。于是,設(shè)計就不斷地演化出新的系統(tǒng)。實際上,這個模型可看作是重復執(zhí)行的多個“瀑布模型”。2.演化模型(IncrementalModel)快速原型模型(RapidPrototypeModel)快速原型模型的第一步是構(gòu)建一個快速原型,實現(xiàn)客戶或未來的用戶與系統(tǒng)的交互,用戶或客戶對原型進行評價,進一步細化待開發(fā)軟件的需求。通過逐步調(diào)整原型使其滿足客戶的要求,開發(fā)人員可以確定客戶的真正需求是什么;第二步則在第一步的基礎(chǔ)上開發(fā)客戶滿意的軟件產(chǎn)品??焖僭头椒梢钥朔俨寄P偷娜秉c,減少由于軟件需求不明確帶來的開發(fā)風險,具有顯著的效果??焖僭偷年P(guān)鍵在于盡可能快速地建造出軟件原型,一旦確定了客戶的真正需求,所建造的原型將被丟棄。因此,原型系統(tǒng)的內(nèi)部結(jié)構(gòu)并不重要,重要的是必須迅速建立原型,隨之迅速修改原型,以反映客戶的需求。3.快速原型模型(RapidPrototypeModel)1988年,BarryBoehm正式發(fā)表了軟件系統(tǒng)開發(fā)的“螺旋模型”,它將瀑布模型和快速原型模型結(jié)合起來,強調(diào)了其他模型所忽視的風險分析,特別適合于大型復雜的系統(tǒng)。4.螺旋模型(SpiralModel)螺旋模型沿著螺線進行若干次迭代,圖中的四個象限代表了以下活動:

(1)制定計劃:確定軟件目標,選定實施方案,弄清項目開發(fā)的限制條件;

(2)風險分析:分析評估所選方案,考慮如何識別和消除風險;

(3)實施工程:實施軟件開發(fā)和驗證;

(4)客戶評估:評價開發(fā)工作,提出修正建議,制定下一步計劃。

螺旋模型由風險驅(qū)動,強調(diào)可選方案和約束條件從而支持軟件的重用,有助于將軟件質(zhì)量作為特殊目標融入產(chǎn)品開發(fā)之中。4.4.3軟件開發(fā)模型RAD(rapapplicationdevelopment)模型,即快速應(yīng)用開發(fā)模型。由于其模型構(gòu)圖形似字母“V”,故也稱V模型,是屬于線性順序一類的軟件開發(fā)模型。它通過使用基于構(gòu)件的開發(fā)方法來縮短產(chǎn)品開發(fā)的周期,提高開發(fā)的速度。RAD模型實現(xiàn)的前提是能做好需求分析,并且項目范圍明確,這一點正好和原型模型相反。5.RAD模型4.5軟件開發(fā)兩大體系結(jié)構(gòu)開發(fā)平臺的選擇,是軟件開發(fā)成功的關(guān)鍵要素之一,當前基于網(wǎng)絡(luò)的軟件開發(fā)平臺有兩種主流體系結(jié)構(gòu),一是微軟公司的.NET,二是SUN公司的J2EE。

2000年6月,Microsoft公司發(fā)布了.NET計劃,.NET提供了一種新的軟件開發(fā)模型,它允許用不同程序設(shè)計語言創(chuàng)造的應(yīng)用程序能相互通信。程序員可以使用自己最精通的與.NET兼容的語言,如VC++.NET、C#、VB、Java,甚至Fortran、Cobol和Pascal等語言來編寫代碼,也可以將多種語言結(jié)合起來開發(fā).NET應(yīng)用程序。這個平臺也允許開發(fā)者創(chuàng)建基于WEB的應(yīng)用程序,這些應(yīng)用程序能夠發(fā)布到臺式機、PDA、無繩電話號碼或其他設(shè)備上。4.5.1Microsoft.NET簡介1.NET的優(yōu)點:(1)提供標準的面向?qū)ο箝_發(fā)環(huán)境,不僅可以在本地與對象交互,還可以通過WebService和.NETRemote技術(shù)在遠程與對象交互。(2)提供優(yōu)化的代碼執(zhí)行環(huán)境,使以前讓人們頭痛的程序版本問題得到了解決。我們可以在同一臺機器中安裝相同程序的不同版本。而且deployment也得到了改善,微軟說是X-COPY,就是說象拷貝文件s一樣簡單了。(3)提供代碼運行安全性。以前我們擔心網(wǎng)頁中包含的ActiveX控件會執(zhí)行惡意的代碼,但現(xiàn)在不用擔心了,因為.NETFramework保障執(zhí)行代碼的安全性。(4)使用JIT(JustInTimeActivation)技術(shù),提高代碼運行速度。(5)提供標準的框架和強大的開發(fā)工具,可以讓程序員在實際的開發(fā)當中,積累更多的經(jīng)驗。(6).NET遵循業(yè)界標準規(guī)范,所以可以讓代碼(.NET里的代碼)可以與其他系統(tǒng)交互。比如WebService、COM等等。4.5.1Microsoft.NET簡介2.NET構(gòu)架.NET有兩個主要的部件,一個是CLR(CommonLanguageRuntime),另一個是.NETFrameworkclasslibrary。CLR是.NET系統(tǒng)構(gòu)架中最核心部分,負責執(zhí)行代碼、管理內(nèi)存、提供安全性等等核心功能。.NETclasslibrary提供功能強大而完全面向?qū)ο蟮暮瘮?shù)庫,我們可以在任何種類中項目中都可以使用它。.NETclasslibrary包括以下方面的組件:(1)Consoleapplications(2)WindowsGUIapplication(WindowsForms)(3)Asp.NETapplications(4)XMLWebservices(5)WindowsServices(6).NETCompactFramework.NETCompactFramework是.NETFramework的簡化版本。為了在小型機器中運行,微軟為.NETFramework減了肥,讓她適合當前小型機器硬件環(huán)境。用于PDA的CompactFramework2M多的容量,而用于手機的只有幾百K。要開發(fā)小型機器程序要安裝smartdeviceextension。4.5.1Microsoft.NET簡介今天,越來越多的程序設(shè)計人員希望借助服務(wù)器技術(shù)的快捷、安全及可靠性,為企業(yè)開發(fā)分布式交易應(yīng)用系統(tǒng)。在今天這樣一個電子商務(wù)和信息飛速發(fā)展并充滿需求的時代,企業(yè)必須以更少的資金、更快的速度和比以往更少的資源來設(shè)計、建造和運營。為降低成本、快速實現(xiàn)企業(yè)應(yīng)用的設(shè)計和開發(fā),J2EE平臺技術(shù)為企業(yè)應(yīng)用的設(shè)計、開發(fā)、集成以及部署提供了一條基于組件的實現(xiàn)途徑。J2EE平臺提供了一個多層次分布是應(yīng)用設(shè)計模式,重用組件的能力,統(tǒng)一的安全模式,靈活的交易控制。J2EE平臺采用一個多層次分布式的應(yīng)用模式。這意味著應(yīng)用邏輯根據(jù)功能被劃分成組件,組成J2EE應(yīng)用的不同應(yīng)用組件安裝在不同的服務(wù)器上,這種劃分是根據(jù)應(yīng)用組件屬于多層次J2EE環(huán)境中的哪一個層次來決定的。J2EE的應(yīng)用組件主要有:1、運行在客戶機器上的客戶層組件;2、運行在J2EE服務(wù)器上的Web層組件;3、運行在J2EE服務(wù)器上的業(yè)務(wù)層組件;4、運行在EIS服務(wù)器上的企業(yè)信息系統(tǒng)層軟件。4.5.2J2EE簡介J2EE多層次應(yīng)用一般被認為是三層應(yīng)用,因為它們是被分布在三個不同的地點:客戶端機器、J2EE服務(wù)器和數(shù)據(jù)庫或后端的傳統(tǒng)系統(tǒng)服務(wù)器。三層架構(gòu)應(yīng)用是對標準的客戶端/服務(wù)器應(yīng)用架構(gòu)的一種擴展,即在客戶端應(yīng)用和后臺存儲之間增加一個多線程應(yīng)用服務(wù)器。4.5.2J2EE簡介4.5.3常用程序設(shè)計語言到目前為止,各種不同應(yīng)用的程序設(shè)計語言有數(shù)百種之多,在這里我們介紹幾種比較有影響和程序設(shè)計語言。1、VisualBasic語言

VisualBasic(VB)是一種由微軟公司開發(fā)的包含協(xié)助開發(fā)環(huán)境的事件驅(qū)動編程語言。從任何標準來說,VB都是世界上使用人數(shù)最多的語言——不僅是盛贊VB的開發(fā)者還是抱怨VB的開發(fā)者的數(shù)量。它源自于BASIC編程語言。VB擁有圖形用戶界面(GUI)和快速應(yīng)用程序開發(fā)(RAD)系統(tǒng),可以輕易的使用DAO、RDO、ADO連接數(shù)據(jù)庫,或者輕松的創(chuàng)建ActiveX控件。程序員可以輕松的使用VB提供的組件快速建立一個應(yīng)用程序。1、VisualBasic語言用戶用VB不但可快速創(chuàng)建Windows程序,還可以編寫企業(yè)水平的客戶端/服務(wù)器程序及強大的數(shù)據(jù)庫應(yīng)用程序。VB非常適合用來開發(fā)擁有友好界面的程序(比如針對終端的數(shù)據(jù)),但是不適合開發(fā)其它程序(比如聯(lián)合計算程序)。VB使得大量的外界控件有了自己的生存空間。大量的第三方控件針對VB提供。VB也提供了建立、使用和重用這些控件的方法,當然由于語言問題,從一個應(yīng)用程序創(chuàng)建另外一個并不簡單。2、C語言C語言是目前世界上流行、使用非常廣泛的高級程序設(shè)計語言。C語言對操作系統(tǒng)和系統(tǒng)應(yīng)用程序以及需要對硬件進行操作的場合,用C語言明顯優(yōu)于其它高級語言,許多大型應(yīng)用軟件都是用C語言編寫的。C語言具有繪圖能力強,可移植性,并具備很強的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件,三維,二維圖形和動畫,它是數(shù)值計算的高級語言。C語言常用的編譯軟件有MicrosoftVisualC++、BorlandC++、BorlandC++、BorlandC++Builder、BorlandC++3.1forDOS、、MicrosoftC、TurboC等等......。2、C語言VisualC++是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出VisualC++1.0后,隨著其新版本的不斷問世,VisualC++已成為專業(yè)程序員進行軟件開發(fā)的首選工具。雖然微軟公司推出了VisualC++.NET(VisualC++7.0),但它的應(yīng)用的很大的局限性,只適用于Windows2000,WindowsXP和WindowsNT4.0。所以實際中,更多的是以VisualC++6.0為平臺。VisualC++6.0不僅是一個C++編譯器,而且是一個基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrateddevelopmentenvironment,IDE)。VisualC++6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lassWizard等開發(fā)工具。這些組件通過一個名為DeveloperStudio的組件集成為和諧的開發(fā)環(huán)境。2、C語言c#語言:C#(讀做“Csharp”,中文譯音“夏普”)是微軟公司在去年六月發(fā)布的一種新的編程語言,并定于在微軟職業(yè)開發(fā)者論

溫馨提示

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

評論

0/150

提交評論