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

下載本文檔

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

文檔簡介

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

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

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

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

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

用來計(jì)算下面公式的值:程序語言中的控制成分控制成分用來提供一種基本框架,在此基本框架的支持下,將數(shù)據(jù)和對數(shù)據(jù)的運(yùn)算組合成程序三種控制結(jié)構(gòu):由一組順序執(zhí)行的計(jì)算操作(或語句)組成順序結(jié)構(gòu)AB由一個(gè)條件(P)和兩個(gè)供選擇的操作(或語句)A和B組成PAB真假條件選擇結(jié)構(gòu)由一個(gè)條件(P)和一個(gè)供重復(fù)執(zhí)行的操作(或語句)A組成PA假真重復(fù)結(jié)構(gòu)例:C語言的9種控制語句If(P)A;elseB實(shí)現(xiàn)條件選擇結(jié)構(gòu)for(P1;P2;P3)A實(shí)現(xiàn)重復(fù)結(jié)構(gòu)while(P)A實(shí)現(xiàn)重復(fù)結(jié)構(gòu)doAwhile(P)實(shí)現(xiàn)重復(fù)結(jié)構(gòu)switch實(shí)現(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);}運(yùn)算語句預(yù)處理命令注釋賦值語句數(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進(jìn)行計(jì)算變量說明輸入語句輸出語句4.1.3程序設(shè)計(jì)語言

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

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

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

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

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

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

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

m=sqrt(n+16.0);

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

格式如下:Sub<過程名>(形參表){過程體}4.3.2函數(shù)與過程注意:(1)保留字Sub是必不可少的。(2)<過程名>:是有意義的標(biāo)識符。所謂有意義,是使標(biāo)識符盡可能地表達(dá)此過程的功能。(3)形參表:給出了輸入?yún)?shù)與返回參數(shù)的描述。它標(biāo)明哪些是輸入?yún)?shù)及其各自的類型,哪些是輸出參數(shù)及其各自的類型。(4)輸入?yún)?shù)一般采用值參數(shù),而輸出參數(shù)采用變量參數(shù)。在參數(shù)的前面冠以var就成為變量參數(shù)。(5)過程體是一段程序代碼,用來實(shí)現(xiàn)模塊的功能。(6)無參數(shù)的過程可以省掉括號以及形參表。4.3.2函數(shù)與過程4.3.3遞歸思維與應(yīng)用所謂遞歸,通俗地說,就是一個(gè)函數(shù)或過程自己調(diào)用自己,遞歸是一種重要算法,它允許一個(gè)函數(shù)從其內(nèi)部調(diào)用其自身,可以將一個(gè)復(fù)雜的問題用簡化的程序來實(shí)現(xiàn)。要用遞歸解決問題,最主要的就是找出遞歸式子或遞歸過程的規(guī)律,同時(shí)找出正確的遞歸邊界值,遞歸邊界的含義,就是遞歸調(diào)用到達(dá)此步時(shí),問題就已有確切的解,而且此時(shí)不能再進(jìn)行遞歸調(diào)用,而必須是進(jìn)行遞歸過程的返回。在遞歸調(diào)用中,有幾次遞歸調(diào)用,就必須有幾次遞歸過程的返回。在數(shù)學(xué)中有許多函數(shù)是用遞歸方法定義的,因此用遞歸方法編寫求這些函數(shù)值的程序也是最為簡單、最為自然、最好理解的。但是遞歸程序執(zhí)行時(shí)要占用大量的內(nèi)存空間,可能計(jì)算速度很慢。在設(shè)計(jì)遞歸函數(shù)時(shí)應(yīng)特別仔細(xì)。如果懷疑其中存在著無限遞歸的可能,則可以讓該函數(shù)記錄它調(diào)用自身的次數(shù)。如果該函數(shù)調(diào)用自身的次數(shù)太多,即使您已決定了它應(yīng)調(diào)用多少次,就自動(dòng)退出。例:定義一個(gè)求階乘N!的遞歸函數(shù)。分析:我們知道,求一個(gè)自然數(shù)n的階乘,可表示為:n*(n-1)!(n>=1)(稱為遞歸式子)1(n=0)(稱為遞歸邊界值)4.3.3遞歸思維與應(yīng)用現(xiàn)在定義一個(gè)求階乘的遞歸函數(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ī)模校小的問題的解,如此不斷的反復(fù)分解和綜合,總能分解到最簡單的能直接得到解的情況。在解遞歸算法的題目時(shí),要注意以下幾點(diǎn):1)找到遞歸調(diào)用的結(jié)束條件或繼續(xù)遞歸調(diào)用條件。2)想方設(shè)法將處理對象的規(guī)模縮小或元素減少。3)由于遞歸調(diào)用可理解為并列同名函數(shù)的多次調(diào)用,而函數(shù)調(diào)用的原則是一層一層調(diào)用,一層一層返回。因此,還要注意理解調(diào)用返回后的下一個(gè)語句的作用。在一些簡單的遞歸算法中,往往不需要考慮遞歸調(diào)用返回后的語句處理。而在一些復(fù)雜的遞歸算法中,則需要考慮遞歸調(diào)用返回后的語句處理和進(jìn)一步的遞歸調(diào)用。4)在讀遞歸程序或編寫遞歸程序時(shí),必須要牢記遞歸函數(shù)的作用,這樣便于理解整個(gè)函數(shù)的功能和知道哪兒需要寫上遞歸調(diào)用語句。4.3.3遞歸思維與應(yīng)用4.4.1軟件工程概念1.軟件“軟件”一詞是20世紀(jì)60年代才出現(xiàn)的,它是指:計(jì)算機(jī)程序及其說明程序的各種文檔。軟件與硬件一起構(gòu)成完整的計(jì)算機(jī)系統(tǒng),它們相互依存,缺一不可。軟件是一種特殊的產(chǎn)品,它具有以下獨(dú)特的特性:(1)軟件是一種邏輯產(chǎn)品,它與物質(zhì)產(chǎn)品有很大的區(qū)別。軟件產(chǎn)品看不見摸不著,它以程序和文檔的形式出現(xiàn),保存在計(jì)算機(jī)存儲(chǔ)器、磁盤或光盤等介質(zhì)上,通過計(jì)算機(jī)的執(zhí)行才能體現(xiàn)它的功能和作用。(2)軟件產(chǎn)品的生產(chǎn)主要是研制,軟件產(chǎn)品的成本主要體現(xiàn)在軟件的開發(fā)和研制上,軟件開發(fā)研制完成后,通過復(fù)制就產(chǎn)生了大量軟件產(chǎn)品。(3)軟件產(chǎn)品不存在磨損、消耗問題。(4)軟件產(chǎn)品生產(chǎn)的成本主要是腦力勞動(dòng),還未完全擺脫手工開發(fā)方式,大部分產(chǎn)品是“定做”的。(5)軟件費(fèi)用不斷增加,軟件成本相當(dāng)昂貴。軟件的研制工作需要投入大量的、復(fù)雜的、高強(qiáng)度的腦力勞動(dòng),它的成本非常高。4.4軟件和軟件工程4.4.1軟件工程概念從第一臺計(jì)算機(jī)誕生到現(xiàn)在,軟件生產(chǎn)經(jīng)過了三個(gè)階段:以個(gè)體手工勞動(dòng)為主的程序設(shè)計(jì)時(shí)代;提倡結(jié)構(gòu)化方法,以作坊式小集團(tuán)合作生產(chǎn)的程序系統(tǒng)時(shí)代;使用數(shù)據(jù)庫、開發(fā)工具、開發(fā)環(huán)境、網(wǎng)絡(luò)、分布式、面向?qū)ο蠹夹g(shù)開發(fā)的軟件工程時(shí)代。二十世紀(jì)60年代以來,由于計(jì)算機(jī)硬件技術(shù)的飛速發(fā)展和計(jì)算機(jī)應(yīng)用的普及,軟件產(chǎn)業(yè)越來越不能滿足社會(huì)需求和適應(yīng)硬件技術(shù)的發(fā)展,軟件危機(jī)就出現(xiàn)了。軟件危機(jī)產(chǎn)生的原因主要有:

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

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

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

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

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

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

(1)制定計(jì)劃:確定軟件目標(biāo),選定實(shí)施方案,弄清項(xiàng)目開發(fā)的限制條件;

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

(3)實(shí)施工程:實(shí)施軟件開發(fā)和驗(yàn)證;

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

螺旋模型由風(fēng)險(xiǎn)驅(qū)動(dòng),強(qiáng)調(diào)可選方案和約束條件從而支持軟件的重用,有助于將軟件質(zhì)量作為特殊目標(biāo)融入產(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模型實(shí)現(xiàn)的前提是能做好需求分析,并且項(xiàng)目范圍明確,這一點(diǎn)正好和原型模型相反。5.RAD模型4.5軟件開發(fā)兩大體系結(jié)構(gòu)開發(fā)平臺的選擇,是軟件開發(fā)成功的關(guān)鍵要素之一,當(dāng)前基于網(wǎng)絡(luò)的軟件開發(fā)平臺有兩種主流體系結(jié)構(gòu),一是微軟公司的.NET,二是SUN公司的J2EE。

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

VisualBasic(VB)是一種由微軟公司開發(fā)的包含協(xié)助開發(fā)環(huán)境的事件驅(qū)動(dòng)編程語言。從任何標(biāo)準(zhǔn)來說,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提供的組件快速建立一個(gè)應(yīng)用程序。1、VisualBasic語言用戶用VB不但可快速創(chuàng)建Windows程序,還可以編寫企業(yè)水平的客戶端/服務(wù)器程序及強(qiáng)大的數(shù)據(jù)庫應(yīng)用程序。VB非常適合用來開發(fā)擁有友好界面的程序(比如針對終端的數(shù)據(jù)),但是不適合開發(fā)其它程序(比如聯(lián)合計(jì)算程序)。VB使得大量的外界控件有了自己的生存空間。大量的第三方控件針對VB提供。VB也提供了建立、使用和重用這些控件的方法,當(dāng)然由于語言問題,從一個(gè)應(yīng)用程序創(chuàng)建另外一個(gè)并不簡單。2、C語言C語言是目前世界上流行、使用非常廣泛的高級程序設(shè)計(jì)語言。C語言對操作系統(tǒng)和系統(tǒng)應(yīng)用程序以及需要對硬件進(jìn)行操作的場合,用C語言明顯優(yōu)于其它高級語言,許多大型應(yīng)用軟件都是用C語言編寫的。C語言具有繪圖能力強(qiáng),可移植性,并具備很強(qiáng)的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件,三維,二維圖形和動(dòng)畫,它是數(shù)值計(jì)算的高級語言。C語言常用的編譯軟件有MicrosoftVisualC++、BorlandC++、BorlandC++、BorlandC++Builder、BorlandC++3.1forDOS、、MicrosoftC、TurboC等等......。2、C語言VisualC++是一個(gè)功能強(qiáng)大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出VisualC++1.0后,隨著其新版本的不斷問世,VisualC++已成為專業(yè)程序員進(jìn)行軟件開發(fā)的首選工具。雖然微軟公司推出了VisualC++.NET(VisualC++7.0),但它的應(yīng)用的很大的局限性,只適用于Windows2000,WindowsXP和WindowsNT4.0。所以實(shí)際中,更多的是以VisualC++6.0為平臺。VisualC++6.0不僅是一個(gè)C++編譯器,而且是一個(gè)基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrateddevelopmentenvironment,IDE)。VisualC++6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lassWizard等開發(fā)工具。這些組件通過一個(gè)名為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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論