版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章計(jì)算機(jī)與程序設(shè)計(jì)本章介紹計(jì)算機(jī)和程序設(shè)計(jì)的基本知識(shí),主要內(nèi)容包括計(jì)算機(jī)的基本結(jié)構(gòu)、程序設(shè)計(jì)語(yǔ)言和面向過(guò)程程序設(shè)計(jì)等。通過(guò)對(duì)這些內(nèi)容的學(xué)習(xí),可使讀者對(duì)計(jì)算機(jī)和程序設(shè)計(jì)有一個(gè)初步的了解,為后面各章的學(xué)習(xí)奠定必要的基礎(chǔ)。計(jì)算機(jī)的基本結(jié)構(gòu)1.1.1計(jì)算機(jī)硬件的基本組成計(jì)算機(jī)是作為一種計(jì)算工具出現(xiàn)的,它的工作過(guò)程和人使用算盤或計(jì)算器等簡(jiǎn)單計(jì)算工具解題的過(guò)程很相似。為了了解計(jì)算機(jī)的組成和工作過(guò)程,下面先講述使用算盤解題的步驟和所需要的設(shè)備。1.用算盤解題的設(shè)備和步驟假設(shè)需要計(jì)算半徑為15的圓面積與邊長(zhǎng)為12的正方形面積之差,即計(jì)算下式的值:×15×15–12×12首先,需要有一個(gè)算盤作為計(jì)算工具,其次需要一張紙,以便記錄原始數(shù)據(jù)、運(yùn)算的中間結(jié)果和最后結(jié)果。把這些原始數(shù)據(jù)和運(yùn)算結(jié)果記錄到紙上是由人用筆來(lái)完成的,整個(gè)運(yùn)算過(guò)程也是在人的控制下進(jìn)行的。運(yùn)算步驟概括如下:(1)人把要計(jì)算的表達(dá)式(其中包含了原始數(shù)據(jù))用筆記錄在紙上。(2)人用算盤計(jì)算×15×15,然后把中間結(jié)果用筆記錄在紙上。(3)人用算盤計(jì)算12×12得到中間結(jié)果144,把這個(gè)中間結(jié)果也用筆記錄在紙上。(4)最后,人用算盤從第一個(gè)中間結(jié)果中減去第二個(gè)中間結(jié)果144,得到最后結(jié)果,再用筆把它記錄在紙上。2.用計(jì)算機(jī)解題需要的設(shè)備用計(jì)算機(jī)來(lái)完成上述解題過(guò)程,首先需要一個(gè)能夠代替算盤完成各種運(yùn)算的部件,這個(gè)部件稱為運(yùn)算器。其次,需要一個(gè)能存放原始數(shù)據(jù)和運(yùn)算結(jié)果的部件,這個(gè)部件稱為存儲(chǔ)器,有內(nèi)存儲(chǔ)器與外存儲(chǔ)器之分。雖然計(jì)算機(jī)的工作過(guò)程和人用算盤解題的過(guò)程很相似,但是它們之間卻有一個(gè)本質(zhì)區(qū)別:計(jì)算機(jī)工作過(guò)程是脫離人的干預(yù)的,人只要事先把解題步驟按先后順序排列起來(lái),輸入到計(jì)算機(jī)的內(nèi)存儲(chǔ)器中,然后啟動(dòng)計(jì)算機(jī)運(yùn)轉(zhuǎn),計(jì)算機(jī)就會(huì)自動(dòng)按預(yù)先安排好的解題步驟完成計(jì)算。這種事先編寫好的解題步驟稱為程序。通常,把程序及其相關(guān)文檔資料稱為軟件??梢?jiàn),存儲(chǔ)器也是存放程序的部件。用來(lái)把原始數(shù)據(jù)和程序輸入到計(jì)算機(jī)中的設(shè)備,稱為輸入設(shè)備。輸出計(jì)算結(jié)果所用的設(shè)備稱為輸出設(shè)備。人在使用計(jì)算機(jī)時(shí)應(yīng)完成的任務(wù)只是編寫程序和操作計(jì)算機(jī),計(jì)算機(jī)解題的全過(guò)程是在程序控制下依次發(fā)出各種控制命令,操縱計(jì)算過(guò)程一步一步地進(jìn)行,完全取代了人在用算盤計(jì)算過(guò)程中所起的控制作用。把能夠依次發(fā)出各種控制信息、代替人起控制作用的部件稱為控制器。綜上所述,計(jì)算機(jī)主要由內(nèi)存儲(chǔ)器、運(yùn)算器、控制器、輸入設(shè)備和輸出設(shè)備等5個(gè)部件組成。此外,為了擴(kuò)大存儲(chǔ)容量和長(zhǎng)期保存數(shù)據(jù),通常還設(shè)有外存儲(chǔ)器。各部件的關(guān)系如圖所示。3.計(jì)算機(jī)的內(nèi)部組成(1)中央處理器(CPU)CPU即中央處理器,如圖所示。它是計(jì)算機(jī)的大腦,計(jì)算機(jī)的運(yùn)算、控制都是由它來(lái)處理的。它的發(fā)展非常迅速,就像不斷在加速的列車一樣。個(gè)人計(jì)算機(jī)從8088(XT)時(shí)代發(fā)展到現(xiàn)在的PentiumD時(shí)代,只經(jīng)過(guò)了不到20年的時(shí)間。從生產(chǎn)技術(shù)來(lái)說(shuō),最初的8088集成了29?000個(gè)晶體管,而高能奔騰的集成度超過(guò)了750萬(wàn)個(gè)晶體管。從而,CPU的運(yùn)行速度也有了本質(zhì)上的提高。圖計(jì)算機(jī)的基本結(jié)構(gòu)
圖中央處理器(CPU)(2)主板主板是計(jì)算機(jī)中最重要的部件之一,是整個(gè)計(jì)算機(jī)工作的基礎(chǔ),如圖所示。計(jì)算機(jī)技術(shù)已非常成熟,幾乎都是模塊化的設(shè)計(jì)。對(duì)10種或20種主板進(jìn)行研究發(fā)現(xiàn),它們差不多是相同的,它分為許多個(gè)功能塊,每個(gè)功能塊由一些芯片或元件組成。萬(wàn)變不離其宗,大致說(shuō)來(lái),主板由以下幾個(gè)部分組成:CPU插槽(插座),內(nèi)存插槽,高速緩存,局域總線和擴(kuò)展總線,硬盤、軟驅(qū)、串口、并口等外設(shè)接口,時(shí)鐘和CMOS芯片,BIOS控制芯片。(3)內(nèi)存內(nèi)存一般指的是隨機(jī)存取存儲(chǔ)器,簡(jiǎn)稱隨機(jī)存儲(chǔ)器(RAM),如圖所示。靜態(tài)內(nèi)存(SRAM)指靜態(tài)隨機(jī)存儲(chǔ)器,用作系統(tǒng)的高速緩存,而平常所提到的計(jì)算機(jī)的內(nèi)存指的是動(dòng)態(tài)內(nèi)存(DRAM)指動(dòng)態(tài)隨機(jī)存儲(chǔ)器。除此之外,還有各種用途的內(nèi)存,如顯示卡使用的VRAM,存儲(chǔ)系統(tǒng)設(shè)置信息的CMOSRAM等。圖主板圖內(nèi)存每條內(nèi)存上有一排黑色的芯片,稱為內(nèi)存顆粒,每個(gè)內(nèi)存顆粒里,又有很多個(gè)內(nèi)存單元,一個(gè)內(nèi)存單元由一個(gè)電容和一個(gè)晶體管組成,為了讓系統(tǒng)對(duì)內(nèi)存準(zhǔn)確無(wú)誤,有秩序的管理,所以給每個(gè)內(nèi)存單元分配了在它所在系統(tǒng)里的唯一的一個(gè)內(nèi)存地址,而內(nèi)存范圍就是很多內(nèi)存地址中的一段,比如0x5b000005~0x5c0000010。本書(shū)第4章將介紹指針的使用,指針就是地址??梢詫⒅羔樌斫鉃樗赶蛄藘?nèi)存中的某個(gè)內(nèi)存單元(如地址為0x5b000005的單元),如果想獲取此指針的值,這個(gè)指針值便是這個(gè)地址(0x5b000005)。也可以這樣來(lái)理解,把對(duì)內(nèi)存單元的訪問(wèn)管理和學(xué)生公寓的情況類比,如圖所示。圖存儲(chǔ)結(jié)構(gòu)和學(xué)生公寓結(jié)構(gòu)對(duì)比圖假設(shè)每個(gè)學(xué)生住一間房,一個(gè)學(xué)生就相當(dāng)于一個(gè)變量的內(nèi)容,房間是內(nèi)存單元,房號(hào)就是內(nèi)存地址。如果知道了學(xué)生姓名,可以通過(guò)這個(gè)名字來(lái)訪問(wèn)該學(xué)生,這相當(dāng)于使用普通變量名訪問(wèn)數(shù)據(jù)。如果知道了房號(hào),同樣也可以訪問(wèn)該學(xué)生,這相當(dāng)于通過(guò)地址訪問(wèn)數(shù)據(jù)。比如,要從303(如同0x5b000005一樣)房間中取出某樣物品,有了地址以后,就可以從地址所指定的房間取出所要的物品(即數(shù)據(jù)的調(diào)用)。(4)硬盤硬盤的結(jié)構(gòu)和軟盤差不多,是由磁道(tracks)、扇區(qū)(sectors)、柱面(cylinders)和磁頭(heads)組成的,如圖所示。拿一個(gè)盤片來(lái)講,它和軟盤類似,上面被分成若干個(gè)同心圓磁道,每個(gè)磁道被分成若干個(gè)扇區(qū),每扇區(qū)通常是512B。硬盤的磁道數(shù)一般為300~3000,每磁道的扇區(qū)數(shù)通常是63個(gè),而早期的硬盤只有17個(gè)。圖硬盤和軟盤不同的是,硬盤由很多個(gè)盤片疊在一起,柱面指的就是多個(gè)磁片上具有相同編號(hào)的磁道,它的數(shù)目和磁道數(shù)是相同的。硬盤的容量按下式計(jì)算:硬盤容量=柱面數(shù)×扇區(qū)數(shù)×每扇區(qū)字節(jié)數(shù)×磁頭數(shù)標(biāo)準(zhǔn)IDE接口最多支持1024個(gè)柱面、63個(gè)扇區(qū)、16個(gè)磁頭,其最大容量為1024×63×16×512B=528482304B,即528MB。增強(qiáng)型IDE(IntegratedDriveElectronics)接口最多可支持256個(gè)邏輯磁頭,容量最大可達(dá)到。這里需要提到有關(guān)簇的概念,簇是文件存儲(chǔ)的最小單位。軟盤的簇只有一個(gè)扇區(qū)。在硬盤上,簇的大小和分區(qū)大小有關(guān)。比如,當(dāng)分區(qū)容量介于64MB和128MB之間時(shí),每簇有4個(gè)扇區(qū);介于128MB和256MB之間時(shí),每簇有8個(gè)扇區(qū);而當(dāng)分區(qū)容量大于1024MB時(shí),每簇的扇區(qū)數(shù)目將超過(guò)64個(gè),容量達(dá)到32KB以上。在此時(shí),一個(gè)1B的文件在硬盤上也會(huì)占用32KB的空間。因此,要根據(jù)具體情況來(lái)進(jìn)行合理分區(qū),以免浪費(fèi)很多的硬盤空間。如果用戶使用的Windows95OSR2或者Windows98的話,可以利用它們提供的FAT32分區(qū),使硬盤的每一個(gè)簇小到4KB。如果使用的是Windows2000或WindowsXP,使用NTFS分區(qū),每個(gè)簇的大小不要超過(guò)4KB。(5)其他部件一般來(lái)說(shuō),一臺(tái)完整的功能強(qiáng)大的計(jì)算機(jī)還配備有軟驅(qū)(floppydrive)、光驅(qū)(CD/DVD-ROM)、刻錄機(jī)(CD/DVD-RW)、顯示卡(videocard)、聲卡(audiocard)、網(wǎng)卡(networkcard)及顯示器(display)、音箱(soundbox)、鍵盤(keyboard)、鼠標(biāo)(mouse)、掃描儀(scanner)、打印機(jī)(printer)等,本書(shū)不做詳細(xì)介紹,請(qǐng)有興趣的同學(xué)自行查找相關(guān)資料。1.1.2計(jì)算機(jī)的工作過(guò)程如圖所示,在計(jì)算機(jī)中有兩類信息在流動(dòng)。一類信息是數(shù)據(jù),包括原始數(shù)據(jù)、中間結(jié)果、最后結(jié)果和程序指令等,數(shù)據(jù)流在圖中用粗線表示,箭頭表明流動(dòng)方向。另一類信息是控制命令,在圖中用細(xì)線表示,箭頭同樣表明流動(dòng)方向。不論是數(shù)據(jù)還是控制命令,在計(jì)算機(jī)中都是僅用“0”和“1”表示的二進(jìn)制信息。通過(guò)輸入設(shè)備把程序和原始數(shù)據(jù)按指定地址輸入存儲(chǔ)器保存,圖是存儲(chǔ)器存儲(chǔ)程序和數(shù)據(jù)的示意圖。然后啟動(dòng)計(jì)算機(jī),則計(jì)算機(jī)按照存入的順序依次取出存儲(chǔ)器中的指令送入控制器分析,控制器根據(jù)分析結(jié)果發(fā)出相應(yīng)的控制命令,從而按照人的意圖自動(dòng)完成全部運(yùn)算,最后再通過(guò)輸出設(shè)備輸出計(jì)算結(jié)果。在運(yùn)算過(guò)程中,數(shù)據(jù)從存儲(chǔ)器取出并輸入運(yùn)算器進(jìn)行運(yùn)算,運(yùn)算的中間結(jié)果和最后結(jié)果可存入存儲(chǔ)器保存,也可由運(yùn)算器經(jīng)過(guò)輸出設(shè)備輸出。必要時(shí),可將內(nèi)存儲(chǔ)器的成批數(shù)據(jù)送入外存儲(chǔ)器保存,或?qū)⑼獯鎯?chǔ)器中的成批數(shù)據(jù)調(diào)入內(nèi)存儲(chǔ)器參加運(yùn)算。前面概括地說(shuō)明了計(jì)算機(jī)工作的大致過(guò)程,下面,仍以前面所舉的計(jì)算×15×15–12×12為例,具體說(shuō)明計(jì)算機(jī)的工作過(guò)程。第一步,用輸入設(shè)備把事先編寫好的解題步驟(即程序)和原始數(shù)據(jù)(第二步,命令計(jì)算機(jī)從第一條指令開(kāi)始執(zhí)行程序,則計(jì)算機(jī)在程序控制下自動(dòng)完成解題的全過(guò)程。具體說(shuō)來(lái),解題過(guò)程包括下列操作:(1)把第一個(gè)數(shù)據(jù)從存儲(chǔ)器中取到運(yùn)算器內(nèi)。(2)把第二個(gè)數(shù)據(jù)15從存儲(chǔ)器中取到運(yùn)算器內(nèi),進(jìn)行乘法運(yùn)算×15,得到中間結(jié)果。(3)用第二個(gè)數(shù)據(jù)15再次乘中間結(jié)果,得到新的中間結(jié)果。(4)把運(yùn)算器中的中間結(jié)果送到存儲(chǔ)器中暫時(shí)保存。(5)把第三個(gè)數(shù)據(jù)12從存儲(chǔ)器中取到運(yùn)算器內(nèi)。(6)進(jìn)行乘法運(yùn)算12×12,得到中間結(jié)果144。(7)把運(yùn)算器中的中間結(jié)果144送到存儲(chǔ)器中暫時(shí)存放。(8)把暫存的中間結(jié)果取到運(yùn)算器內(nèi)。(9)把暫存的中間結(jié)果144取到運(yùn)算器內(nèi),進(jìn)行減法運(yùn)算–144,得到最后結(jié)果。(10)把最后結(jié)果通過(guò)輸出設(shè)備輸出給用戶(例如,用打印機(jī)打印在紙上或顯示在顯示器的熒光屏上)。(11)停機(jī)。程序設(shè)計(jì)語(yǔ)言計(jì)算機(jī)本身并不知道如何解決一個(gè)問(wèn)題,必須由人事先把解題步驟設(shè)計(jì)好,編寫成程序輸入到計(jì)算機(jī)中,計(jì)算機(jī)才能在程序控制下按照人的意圖解決這個(gè)問(wèn)題。因此,人們必須用計(jì)算機(jī)能夠接受的語(yǔ)言和它通信,告訴它對(duì)什么數(shù)據(jù)進(jìn)行什么運(yùn)算,以及運(yùn)算的次序。程序設(shè)計(jì)語(yǔ)言就是為了表達(dá)程序而由人設(shè)計(jì)出來(lái)的計(jì)算機(jī)能夠接受的人工語(yǔ)言,它是用來(lái)表達(dá)用戶意圖指揮計(jì)算機(jī)工作的通信工具。目前,程序設(shè)計(jì)語(yǔ)言的發(fā)展已經(jīng)經(jīng)歷了4代,第五代程序設(shè)計(jì)語(yǔ)言尚處于萌芽狀態(tài)。下面簡(jiǎn)單介紹一下各代程序設(shè)計(jì)語(yǔ)言的基本特點(diǎn)。1.第一代程序設(shè)計(jì)語(yǔ)言第一代程序設(shè)計(jì)語(yǔ)言是機(jī)器語(yǔ)言,它是計(jì)算機(jī)所特有的,也就是說(shuō),不同計(jì)算機(jī)有不同的機(jī)器語(yǔ)言。機(jī)器語(yǔ)言的基本組成成分是若干條機(jī)器指令,每條指令指明作什么運(yùn)算及對(duì)哪個(gè)單元中的數(shù)據(jù)進(jìn)行運(yùn)算。這些指令是計(jì)算機(jī)硬件可以直接識(shí)別和執(zhí)行的。計(jì)算機(jī)只能存儲(chǔ)和識(shí)別二進(jìn)制的數(shù)據(jù)和指令,因此,機(jī)器語(yǔ)言也稱為二進(jìn)制語(yǔ)言。用機(jī)器語(yǔ)言編寫程序時(shí),數(shù)據(jù)和指令必須分別存儲(chǔ)在不同的單元中。例如,計(jì)算半徑為15的圓面積:A=×15×15用某種型號(hào)計(jì)算機(jī)計(jì)算時(shí),內(nèi)存中存儲(chǔ)的數(shù)據(jù)及用機(jī)器語(yǔ)言編寫的程序如表和表所示。表數(shù)據(jù)地址數(shù)值地址數(shù)值地址數(shù)值00100011150012A表程序地址指令注釋操作碼地址碼01000210010取01010120011×1501020120011×1501030220012存A01040350012打印A01050070000停機(jī)計(jì)算機(jī)可以直接識(shí)別和執(zhí)行用機(jī)器語(yǔ)言編寫的程序,因此效率較高。但是,人工編寫機(jī)器語(yǔ)言程序很繁瑣,容易出錯(cuò),而且不同計(jì)算機(jī)有不同的機(jī)器語(yǔ)言,通用性很差。2.第二代程序設(shè)計(jì)語(yǔ)言為了克服機(jī)器語(yǔ)言的缺點(diǎn),人們?cè)O(shè)計(jì)出第二代程序設(shè)計(jì)語(yǔ)言——匯編語(yǔ)言,也稱為符號(hào)語(yǔ)言。相對(duì)于第一代程序設(shè)計(jì)語(yǔ)言,第二代程序設(shè)計(jì)語(yǔ)言的主要進(jìn)步是,用含義較鮮明的符號(hào)代替機(jī)器語(yǔ)言中的二進(jìn)制編碼,因此看起來(lái)較直觀,不易出錯(cuò)。例如,上面的計(jì)算圓面積的例子,如果用匯編語(yǔ)言編程序,則源程序如下:LOADMUL15MUL15SAVEAPRINTASTOP計(jì)算機(jī)硬件并不能直接識(shí)別和執(zhí)行匯編語(yǔ)言源程序,因此,必須用一個(gè)編譯程序(一種系統(tǒng)軟件)把匯編語(yǔ)言源程序轉(zhuǎn)換(即翻譯)成機(jī)器語(yǔ)言程序(稱為目標(biāo)程序)之后,才能執(zhí)行。匯編語(yǔ)言仍然是依賴于計(jì)算機(jī)的,不同計(jì)算機(jī)有不同的匯編語(yǔ)言,彼此不能通用。此外,匯編語(yǔ)言指令與機(jī)器語(yǔ)言指令是一一對(duì)應(yīng)的,一個(gè)復(fù)雜的程序需要包含大量匯編語(yǔ)言指令,編寫起來(lái)仍然很繁瑣。為了克服匯編語(yǔ)言的缺點(diǎn),人們開(kāi)發(fā)出第三代程序設(shè)計(jì)語(yǔ)言。3.第三代程序設(shè)計(jì)語(yǔ)言前面曾經(jīng)講過(guò),為了利用計(jì)算機(jī)解決一個(gè)特定問(wèn)題,必須首先設(shè)計(jì)出解題步驟。通常,把為了在計(jì)算機(jī)上解決一個(gè)問(wèn)題而采用的方法和步驟稱為算法。更確切地說(shuō),算法是在有限步驟內(nèi)解決某一問(wèn)題所使用的有精確定義的一系列操作規(guī)則。第三代程序設(shè)計(jì)語(yǔ)言特別適合用來(lái)表達(dá)算法,因此也稱為算法語(yǔ)言。算法語(yǔ)言的基本組成成分是各種語(yǔ)句。通常一個(gè)語(yǔ)句的功能相當(dāng)于多條機(jī)器指令的功能,因此,用算法語(yǔ)言編寫程序遠(yuǎn)比用機(jī)器語(yǔ)言或匯編語(yǔ)言編寫程序更加方便、簡(jiǎn)單和直觀,而且更不容易出錯(cuò)。此外,算法語(yǔ)言不依賴于機(jī)器,同一個(gè)算法語(yǔ)言程序可以在眾多不同類型的計(jì)算機(jī)上運(yùn)行,通用性很強(qiáng)。因此,第三代程序設(shè)計(jì)語(yǔ)言也稱為高級(jí)語(yǔ)言。常用的高級(jí)語(yǔ)言有BASIC、FORTRAN、ALGOL、COBOL、C、Pascal、PL/1等。例如,計(jì)算前述圓面積的BASIC源程序如下(每行前數(shù)字為行號(hào)):10A=*15*1520PRINTA30END顯然,計(jì)算機(jī)硬件并不能直接識(shí)別和執(zhí)行高級(jí)語(yǔ)言源程序,因此,必須首先使用編譯程序(一種系統(tǒng)軟件)把高級(jí)語(yǔ)言源程序編譯(即翻譯)成機(jī)器語(yǔ)言程序(稱為目標(biāo)程序),然后才能執(zhí)行。4.第四代程序設(shè)計(jì)語(yǔ)言雖然比起機(jī)器語(yǔ)言和匯編語(yǔ)言來(lái),第三代程序設(shè)計(jì)語(yǔ)言有了很大進(jìn)步,但是,為了能熟練地使用這種語(yǔ)言解決實(shí)際問(wèn)題,仍然需要經(jīng)過(guò)長(zhǎng)期的專業(yè)訓(xùn)練。為了提高軟件開(kāi)發(fā)效率,增強(qiáng)軟件的可維護(hù)性,人們研究出第四代程序設(shè)計(jì)語(yǔ)言。所謂第四代程序設(shè)計(jì)語(yǔ)言,實(shí)質(zhì)上是可以快速開(kāi)發(fā)應(yīng)用軟件的各種高生產(chǎn)率的軟件工具的統(tǒng)稱。5.第五代程序設(shè)計(jì)語(yǔ)言多數(shù)人認(rèn)為,第五代程序設(shè)計(jì)語(yǔ)言將是智能化的語(yǔ)言。到目前為止,還沒(méi)有公認(rèn)的第五代程序設(shè)計(jì)語(yǔ)言出現(xiàn)。PROLOG語(yǔ)言可能是第五代程序設(shè)計(jì)語(yǔ)言最著名的雛形。面向過(guò)程程序設(shè)計(jì)如前所述,使用傳統(tǒng)程序設(shè)計(jì)語(yǔ)言進(jìn)行程序設(shè)計(jì)時(shí),不論所使用的語(yǔ)言是第一代程序設(shè)計(jì)語(yǔ)言或第二代程序設(shè)計(jì)語(yǔ)言,還是第三代程序設(shè)計(jì)語(yǔ)言,都必須詳細(xì)準(zhǔn)確地描述解題過(guò)程。也就是說(shuō),當(dāng)人們用這類語(yǔ)言表達(dá)自己意圖指揮計(jì)算機(jī)工作時(shí),必須向計(jì)算機(jī)詳細(xì)說(shuō)明怎樣完成預(yù)定的功能:第一步做什么、第二步做什么、第三步做什么……哪些操作按程序編寫順序只做一遍,哪些操作重復(fù)做多遍,哪些操作在某個(gè)條件成立時(shí)做,等等。因?yàn)槌绦蛟O(shè)計(jì)工作主要圍繞設(shè)計(jì)解題過(guò)程來(lái)進(jìn)行,這種傳統(tǒng)的程序設(shè)計(jì)方法稱為面向過(guò)程程序設(shè)計(jì),傳統(tǒng)的程序設(shè)計(jì)語(yǔ)言稱為過(guò)程性語(yǔ)言。使用過(guò)程性語(yǔ)言編寫的程序,其功能是隱含在程序代碼中的。為了搞清楚程序的功能,必須反復(fù)閱讀程序,仔細(xì)分析程序的每個(gè)語(yǔ)句,根據(jù)該程序設(shè)計(jì)語(yǔ)言的語(yǔ)法確定語(yǔ)句的執(zhí)行順序,并要綜合每個(gè)語(yǔ)句的語(yǔ)義及執(zhí)行順序才能推斷出程序的功能。因此,理解面向過(guò)程的程序相當(dāng)困難。顯然,當(dāng)應(yīng)用系統(tǒng)的功能比較復(fù)雜時(shí),應(yīng)用程序的規(guī)模必然十分龐大,包含的語(yǔ)句很多,程序元素(數(shù)據(jù)、語(yǔ)句)相互之間的關(guān)系十分復(fù)雜。因此,用面向過(guò)程程序設(shè)計(jì)方法開(kāi)發(fā)應(yīng)用系統(tǒng)時(shí),需要耗費(fèi)大量人力物力,只有經(jīng)過(guò)嚴(yán)格訓(xùn)練的有經(jīng)驗(yàn)的程序員才能勝任編程工作。這樣的應(yīng)用系統(tǒng)不僅不易開(kāi)發(fā),維護(hù)起來(lái)也十分困難。所謂維護(hù),就是在軟件交付給用戶使用期間,出于種種原因,而對(duì)軟件進(jìn)行修改。人們?cè)陂_(kāi)發(fā)軟件的長(zhǎng)期實(shí)踐過(guò)程中,總結(jié)出一些設(shè)計(jì)原理并研究出一些系統(tǒng)化的技術(shù)方法,把它們用于面向過(guò)程程序設(shè)計(jì),能夠提高開(kāi)發(fā)效率,增加系統(tǒng)的可理解性、可閱讀性和可維護(hù)性。這些原理和技術(shù)方法,在進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì)時(shí)也有借鑒意義。下面簡(jiǎn)要介紹主要設(shè)計(jì)原理和技術(shù)方法。1.3.1模塊化模塊是數(shù)據(jù)說(shuō)明、可執(zhí)行的語(yǔ)句等程序元素的集合,它是單獨(dú)命名的而且可以通過(guò)名字來(lái)訪問(wèn),也就是說(shuō),可以用名字代表該模塊。所謂模塊化,就是把一個(gè)程序劃分成若干個(gè)模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊組裝成一個(gè)整體,可以完成指定的功能。模塊化是為了使一個(gè)復(fù)雜的大型程序能被人的智力所管理、程序應(yīng)該具備的基本屬性。如果一個(gè)大型程序僅由一個(gè)模塊組成,例如,程序由幾十萬(wàn)個(gè)語(yǔ)句一個(gè)語(yǔ)句接著一個(gè)語(yǔ)句堆積而成,那么它將很難被人所理解。下面根據(jù)人類解決問(wèn)題的一般規(guī)律,論證上面的結(jié)論。設(shè)函數(shù)C
(x)定義問(wèn)題X的復(fù)雜程度,函數(shù)E
(x)確定解決問(wèn)題X需要的工作量(時(shí)間)。對(duì)于兩個(gè)問(wèn)題P1和P2,如果C
(P1)>C
(P2)顯然E
(P1)>E
(P2)根據(jù)人們解決一般問(wèn)題的經(jīng)驗(yàn),另一個(gè)有趣的規(guī)律為:C(P1+P2)>C
(P1)+C
(P2)也就是說(shuō),如果一個(gè)問(wèn)題由P1和P2兩個(gè)問(wèn)題組合而成,那么它的復(fù)雜程度大于分別考慮每個(gè)問(wèn)題時(shí)的復(fù)雜程度之和。綜上所述,得到下面的不等式:E
(P1+P2)>E
(P1)+E
(P2)這個(gè)不等式導(dǎo)致“各個(gè)擊破”的結(jié)論——把復(fù)雜的問(wèn)題分解成許多容易解決的小問(wèn)題,原來(lái)的問(wèn)題也就容易解決了。這就是模塊化的根據(jù)。從上面的不等式并不能得出“如果無(wú)限地分割程序,最后為了開(kāi)發(fā)程序而需要的工作量也就小得可以忽略了”的結(jié)論。事實(shí)上,還有另一個(gè)因素在起作用,從而使得上述結(jié)論不能成立。當(dāng)模塊數(shù)目增加時(shí)每個(gè)模塊的規(guī)模將減小,開(kāi)發(fā)單個(gè)模塊的工作量確實(shí)減少了;但是,隨著模塊數(shù)目增加,設(shè)計(jì)和實(shí)現(xiàn)模塊接口所需要的工作量也將增加。綜合這兩個(gè)因素,每個(gè)程序都有一個(gè)最適合的模塊數(shù)目,使得開(kāi)發(fā)該程序的總成本(開(kāi)發(fā)模塊的成本加上開(kāi)發(fā)模塊間接口的成本)最小。換句話說(shuō),在把程序劃分成模塊的時(shí)候,模塊規(guī)模應(yīng)該適當(dāng)。模塊太大則模塊化帶來(lái)的好處不明顯,模塊太小,則模塊間接口的成本過(guò)大。采用模塊化原理可以使程序結(jié)構(gòu)清晰,不僅容易設(shè)計(jì)也容易閱讀和理解。因?yàn)槌绦蝈e(cuò)誤通常局限在有關(guān)的模塊及它們之間的接口中,所以模塊化使軟件容易測(cè)試和調(diào)試,因而有助于提高軟件的穩(wěn)定性。因?yàn)樽儎?dòng)往往只涉及少數(shù)幾個(gè)模塊,所以模塊化能夠提高軟件的可修改性。模塊化也有助于軟件開(kāi)發(fā)工程的組織管理,一個(gè)復(fù)雜的大型程序可以由許多程序員分工編寫不同的模塊,并且可以進(jìn)一步分配技術(shù)熟練的程序員編寫困難的模塊。1.3.2抽象人類在認(rèn)識(shí)復(fù)雜現(xiàn)象的過(guò)程中使用的最強(qiáng)有力的思維工具是抽象。人們?cè)趯?shí)踐中認(rèn)識(shí)到,在現(xiàn)實(shí)世界中一定事物、狀態(tài)或過(guò)程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和概括起來(lái),暫時(shí)忽略它們之間的差異,這就是抽象。在求解問(wèn)題的過(guò)程中使用抽象原理,就是忽略該問(wèn)題與當(dāng)前目的無(wú)關(guān)的那些方面,以便集中精力考慮與當(dāng)前目的有關(guān)的那些方面。由于人類思維能力的限制,如果每次面臨的因素太多,是不可能做出精確的思維的。處理復(fù)雜系統(tǒng)的唯一有效的方法是用層次的方式構(gòu)造和分析它。一個(gè)復(fù)雜的動(dòng)態(tài)系統(tǒng)首先可以用一些高級(jí)的抽象概念構(gòu)造和理解,這些高級(jí)概念又可以用一些較低級(jí)的概念構(gòu)造和理解,如此進(jìn)行下去,直至最低層次的具體元素。這種層次的思維和解題方式必須反映在定義動(dòng)態(tài)系統(tǒng)的程序結(jié)構(gòu)之中,每層的一個(gè)概念將以某種方式對(duì)應(yīng)于程序的一組成分。考慮問(wèn)題的模塊化解法時(shí),可以提出許多抽象的層次。在抽象的最高層次使用描述問(wèn)題環(huán)境的語(yǔ)言,以概括的方式敘述問(wèn)題的解法;在較低抽象層次采用更過(guò)程化的方法,把面向問(wèn)題的術(shù)語(yǔ)和面向?qū)崿F(xiàn)的術(shù)語(yǔ)結(jié)合起來(lái)敘述問(wèn)題的解法;最后,在最低的抽象層次用可以直接實(shí)現(xiàn)的方式敘述問(wèn)題的解法。逐步求精和模塊化的概念,與抽象是密切相關(guān)的。隨著程序開(kāi)發(fā)工作的進(jìn)展,在程序結(jié)構(gòu)每一層次中的模塊,表示了對(duì)程序抽象層次的一次精化。事實(shí)上處于程序結(jié)構(gòu)頂層的模塊,控制了程序的全部功能并且影響全局;在程序結(jié)構(gòu)底層的模塊,完成對(duì)數(shù)據(jù)的一個(gè)具體處理。用自頂向下由抽象到具體的方式分配控制,簡(jiǎn)化了程序的設(shè)計(jì)和實(shí)現(xiàn),提高了程序的可理解性、可修改性和可測(cè)試性,使程序更容易維護(hù)。1.3信息隱藏原理指出,在設(shè)計(jì)和確定模塊時(shí),應(yīng)該使得一個(gè)模塊內(nèi)包含的信息(數(shù)據(jù)和操作)對(duì)于不需要這些信息的其他模塊來(lái)說(shuō),是不能訪問(wèn)的。局部化的概念和信息隱藏概念是密切相關(guān)的。所謂局部化,是指把一些關(guān)系密切的程序元素物理地放得彼此靠近,處于同一局部區(qū)城內(nèi)。在模塊中使用局部數(shù)據(jù)元素是局部化的一個(gè)例子。顯然,局部化有助于實(shí)現(xiàn)信息隱藏?!半[藏”意味著有效的模塊化可以通過(guò)定義一組獨(dú)立的模塊來(lái)實(shí)現(xiàn),這些獨(dú)立的模塊彼此間僅僅交換那些為了完成系統(tǒng)功能而必須交換的信息。如果在測(cè)試期間和以后的維護(hù)期間需要修改程序,那么用信息隱藏原理指導(dǎo)模塊化系統(tǒng)設(shè)計(jì)就會(huì)帶來(lái)極大好處。因?yàn)榻^大多數(shù)數(shù)據(jù)和處理過(guò)程對(duì)于程序的其他部分而言是隱藏的(也就是“看不見(jiàn)”的),在修改期間由于疏忽而引入的錯(cuò)誤傳播到程序的其他部分的可能性就很小。1.3.4模塊獨(dú)立模塊獨(dú)立原理是模塊化、抽象、信息隱藏和局部化原理的直接結(jié)果和進(jìn)一步發(fā)展。開(kāi)發(fā)具有獨(dú)立、完整功能而且和其他模塊之間沒(méi)有過(guò)多相互作用的模塊,就可以做到模塊獨(dú)立。換句話說(shuō),應(yīng)該這樣設(shè)計(jì)程序結(jié)構(gòu),使得每個(gè)模塊完成一個(gè)相對(duì)獨(dú)立的特定子功能,并且和其他模塊之間的關(guān)系盡可能簡(jiǎn)單。為什么模塊的獨(dú)立性很重要呢?主要有兩條理由:第一,有效的模塊化(即具有獨(dú)立的模塊)的軟件比較容易開(kāi)發(fā)出來(lái)。這是由于能夠分割功能而且接口可以簡(jiǎn)化,當(dāng)許多人分工合作開(kāi)發(fā)同一個(gè)軟件時(shí),這一優(yōu)點(diǎn)尤其重要。第二,獨(dú)立的模塊軟件比較容易測(cè)試和維護(hù)。這是因?yàn)橄鄬?duì)說(shuō)來(lái),修改設(shè)計(jì)和程序需要的工作量比較小,錯(cuò)誤傳播范圍小,需要擴(kuò)充功能時(shí)能夠“插入”模塊??傊?,模塊獨(dú)立是好設(shè)計(jì)的關(guān)鍵,而設(shè)計(jì)又是決定軟件質(zhì)量的關(guān)鍵環(huán)節(jié)。模塊的獨(dú)立程度可以由兩個(gè)定性標(biāo)準(zhǔn)量度,這兩個(gè)標(biāo)準(zhǔn)分別稱為耦合度和內(nèi)聚度。耦合度衡量不同模塊彼此間互相依賴(連接)的緊密程度;內(nèi)聚度衡量一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度。在程序設(shè)計(jì)時(shí)應(yīng)該追求盡可能松散耦合的系統(tǒng)。在這樣的系統(tǒng)中可以研究、測(cè)試或維護(hù)任何一個(gè)模塊,而不需要對(duì)系統(tǒng)的其他模塊有很多了解。此外,由于模塊間聯(lián)系簡(jiǎn)單,發(fā)生在一處的錯(cuò)誤傳播到整個(gè)系統(tǒng)的可能性就很小。因此,模塊間的耦合程度強(qiáng)烈影響系統(tǒng)的可理解性、可測(cè)試性、穩(wěn)定性和可維護(hù)性。一般說(shuō)來(lái),如果兩個(gè)模塊彼此間通過(guò)參數(shù)交換信息,而且交換的信息基本上是數(shù)據(jù),則這樣的耦合是松耦合。內(nèi)聚表示一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度,它是信息隱藏和局部化概念的自然擴(kuò)展。簡(jiǎn)單地說(shuō),理想內(nèi)聚的模塊只做一件事情。設(shè)計(jì)時(shí)應(yīng)該力求做到高內(nèi)聚,通常中等程度的內(nèi)聚也是可以采用的,而且效果和高內(nèi)聚相差不多。但是,低內(nèi)聚效果很差,不要使用。如果模塊內(nèi)所有元素屬于一個(gè)整體,完成一個(gè)單一的功能,則稱為功能內(nèi)聚。這種內(nèi)聚是最高程度的內(nèi)聚。內(nèi)聚和耦合是密切相關(guān)的,模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。高內(nèi)聚和松耦合都是進(jìn)行模塊化設(shè)計(jì)的重要標(biāo)準(zhǔn),但是實(shí)踐表明內(nèi)聚更重要,應(yīng)該把更多注意力集中到提高模塊的內(nèi)聚程度上。1.3.5結(jié)構(gòu)程序設(shè)計(jì)技術(shù)在把一個(gè)程序劃分成若干個(gè)模塊,并且確定了模塊之間的關(guān)系之后,進(jìn)一步的工作就是設(shè)計(jì)完成每個(gè)模塊功能的處理過(guò)程。為了能開(kāi)發(fā)出高質(zhì)量的程序,必須充分注意下述事實(shí):在軟件的生存周期中,設(shè)計(jì)測(cè)試方案,診斷程序錯(cuò)誤,修改和改進(jìn)程序等都必須首先讀懂程序。實(shí)際上對(duì)于長(zhǎng)期使用的軟件系統(tǒng)而言,讀程序的時(shí)間可能比寫程序的時(shí)間還要長(zhǎng)得多。因此,衡量程序的質(zhì)量不僅要看它的邏輯是否正確,性能是否滿足要求,更主要的是看它是否容易閱讀和理解。怎樣才能設(shè)計(jì)出容易閱讀、容易理解的程序呢?結(jié)構(gòu)程序設(shè)計(jì)技術(shù)是實(shí)現(xiàn)這一目標(biāo)的關(guān)鍵技術(shù)。結(jié)構(gòu)程序設(shè)計(jì)的概念最早由提出。1965年他在一次會(huì)議上指出:“可以從高級(jí)語(yǔ)言中取消goto語(yǔ)句”,“程序的質(zhì)量與程序中所包含的goto語(yǔ)句的數(shù)量成反比”。所謂goto語(yǔ)句就是轉(zhuǎn)移語(yǔ)句。1966年和證明,只用3種基本的控制結(jié)構(gòu)就能實(shí)現(xiàn)任何單入口單出口的程序。這3種基本的控制結(jié)構(gòu)是“順序”、“選擇”和“循環(huán)”,它們的流程圖分別如圖(a)、圖(b)和圖(c)所示。流程圖是描繪處理過(guò)程的一種常用圖形,矩形框表示操作,菱形框表示條件,箭頭線表明執(zhí)行次序。(a)順序結(jié)構(gòu),先執(zhí)行A再執(zhí)行B
(b)if-then-else型選擇(分支)結(jié)構(gòu)(c)do-while型循環(huán)結(jié)構(gòu)圖3種基本的控制結(jié)構(gòu)雖然從理論上說(shuō)只用上述3種基本控制結(jié)構(gòu)就可以實(shí)現(xiàn)任何單入口單出口的程序,但是為了實(shí)際使用方便起見(jiàn),常常還使用do-until和do-case兩種控制結(jié)構(gòu),它們的流程圖分別如圖(a)和圖(b)所示。(a)do-until型循環(huán)結(jié)構(gòu)
(b)多分支結(jié)構(gòu)圖其他常用的控制結(jié)構(gòu)如圖和圖所示可以看出,這幾種控制結(jié)構(gòu)有一個(gè)共同的特點(diǎn),那就是每種結(jié)構(gòu)都只有一個(gè)入口和一個(gè)出口,因此統(tǒng)稱為單入口單出口的控制結(jié)構(gòu)。那么,什么是結(jié)構(gòu)程序設(shè)計(jì)呢?目前還沒(méi)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025旺鋪?zhàn)饧s轉(zhuǎn)讓合同模板
- 2025關(guān)于公司的借款合同
- 2024年度四川省公共營(yíng)養(yǎng)師之三級(jí)營(yíng)養(yǎng)師押題練習(xí)試題B卷含答案
- 2024年度四川省公共營(yíng)養(yǎng)師之二級(jí)營(yíng)養(yǎng)師能力提升試卷B卷附答案
- 2024年電子教育未來(lái)發(fā)展趨勢(shì)分析及投資規(guī)劃建議研究報(bào)告
- 2025品牌加盟店合同
- 2025年景觀照明項(xiàng)目可行性分析報(bào)告
- 2025暫時(shí)沒(méi)有房產(chǎn)證房屋買賣合同
- 2025年高純鎘行業(yè)市場(chǎng)研究報(bào)告
- 2025外貿(mào)單證業(yè)務(wù)概述外貿(mào)合同
- 手術(shù)室發(fā)生地震應(yīng)急預(yù)案演練
- 配合、協(xié)調(diào)、服務(wù)方案
- 市政工程監(jiān)理大綱
- 2023-2024學(xué)年廣東省廣州市黃埔區(qū)六年級(jí)(上)期末數(shù)學(xué)試卷(A卷)
- 初中數(shù)學(xué)新課程標(biāo)準(zhǔn)(2024年版)
- 2024年北京市學(xué)業(yè)水平合格性地理試卷(第一次)
- 黑龍江哈爾濱六中2025屆高三第六次模擬考試數(shù)學(xué)試卷含解析
- GB/T 36547-2024電化學(xué)儲(chǔ)能電站接入電網(wǎng)技術(shù)規(guī)定
- 會(huì)議記錄培訓(xùn)教材課件幻燈片
- 期末測(cè)試卷(一)2024-2025學(xué)年 人教版PEP英語(yǔ)五年級(jí)上冊(cè)(含答案含聽(tīng)力原文無(wú)聽(tīng)力音頻)
- 售后服務(wù)人員培訓(xùn)資料課件
評(píng)論
0/150
提交評(píng)論