計算機與程序設計_第1頁
計算機與程序設計_第2頁
計算機與程序設計_第3頁
計算機與程序設計_第4頁
計算機與程序設計_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第1 章 計算機與程序設計本章介紹計算機和程序設計的基本知識,主要內(nèi)容包括計算機的基本結構、程序設計 語言和面向過程程序設計等。通過對這些內(nèi)容的學習,可使讀者對計算機和程序設計有一 個初步的了解,為后面各章的學習奠定必要的基礎。1.1 計算機的基本結構1.1.1 計算機硬件的基本組成計算機是程序式電子數(shù)字計算機的簡稱。 1946 年世界上第一臺計算機問世。最初,計算 機只被當作一種現(xiàn)代化的計算工具, 但隨著技術的進步, 現(xiàn)在,計算機已經(jīng)遠不只是一種計算 工具,它的應用已經(jīng)遍及國民經(jīng)濟和人類生活的各個領域,并帶動著各行各業(yè)向現(xiàn)代化邁進。計算機是作為一種計算工具出現(xiàn)的,它的工作過程和人使用算盤或計

2、算器等簡單計算 工具解題的過程很相似。為了了解計算機的組成和工作過程,下面先講述使用算盤解題的 步驟和所需要的設備。1用算盤解題的設備和步驟假設需要計算半徑為 15 的圓面積與邊長為 12 的正方形面積之差,即計算下式的值:3.1416 氷5 XI5-12 X12首先,需要有一個算盤作為計算工具,其次需要一張紙,以便記錄原始數(shù)據(jù)、運算的 中間結果和最后結果。把這些原始數(shù)據(jù)和運算結果記錄到紙上是由人用筆來完成的,整個 運算過程也是在人的控制下進行的。運算步驟概括如下:( 1 )人把要計算的表達式(其中包含了原始數(shù)據(jù))用筆記錄在紙上。(2) 人用算盤計算 3.1416 XI5X15,然后把中間結果

3、 706.86用筆記錄在紙上。(3) 人用算盤計算12X12得到中間結果144,把這個中間結果也用筆記錄在紙上。(4) 最后,人用算盤從第一個中間結果706.86 中減去第二個中間結果 144,得到最后 結果 562.86,再用筆把它記錄在紙上。2用計算機解題需要的設備 用計算機來完成上述解題過程,首先需要一個能夠代替算盤完成各種運算的部件,這 個部件稱為運算器。其次,需要一個能存放原始數(shù)據(jù)和運算結果的部件,這個部件稱為存 儲器,有內(nèi)存儲器與外存儲器之分。雖然計算機的工作過程和人用算盤解題的過程很相似,但是它們之間卻有一個本質(zhì)區(qū)別:計算機工作過程是脫離人的干預的,人只要事先把解題步驟按先后順序

4、排列起來,輸 入到計算機的內(nèi)存儲器中,然后啟動計算機運轉,計算機就會自動按預先安排好的解題步 驟完成計算。這種事先編寫好的解題步驟稱為程序。通常,把程序及其相關文檔資料稱為 軟件??梢姡鎯ζ饕彩谴娣懦绦虻牟考?。用來把原始數(shù)據(jù)和程序輸入到計算機中的設備,稱為輸入設備。輸出計算結果所用的 設備稱為輸出設備。人在使用計算機時應完成的任務只是編寫程序和操作計算機,計算機解題的全過程是 在程序控制下依次發(fā)出各種控制命令,操縱計算過程一步一步地進行,完全取代了人在用 算盤計算過程中所起的控制作用。把能夠依次發(fā)出各種控制信息、代替人起控制作用的部 件稱為控制器。綜上所述,計算機主要由內(nèi)存儲器、運算器、控制

5、器、輸入設備和輸出設備等5個部件組成。此外,為了擴大存儲容量和長期保存數(shù)據(jù),通常還設有外存儲器。各部件的關系 如圖1.1所示。3 計算機的內(nèi)部組成(1) 中央處理器(CPU)CPU即中央處理器,如圖 1.2所示。它是計算機的大腦,計算機的運算、控制都是由 它來處理的。它的發(fā)展非常迅速,就像不斷在加速的列車一樣。個人計算機從8088(XT)時代發(fā)展到現(xiàn)在的Pentium D時代,只經(jīng)過了不到 20年的時間。從生產(chǎn)技術來說,最初的750萬個晶體管。從而,CPU8088集成了 29 000個晶體管,而高能奔騰的集成度超過了 的運行速度也有了本質(zhì)上的提高。圖1.1計算機的基本結構圖1.2中央處理器(C

6、PU)(2) 主板主板是計算機中最重要的部件之一,是整個計算機工作的基礎,如圖1.3所示。計算機技術已非常成熟, 幾乎都是模塊化的設計。 對10種或20種主板進行研究發(fā)現(xiàn), 它們差不多是相同的,它分為許多個功能塊,每個功能塊由一些芯片或元件組成。萬變不 離其宗,大致說來,主板由以下幾個部分組成:CPU插槽(插座),內(nèi)存插槽,高速緩存,局域總線和擴展總線,硬盤、軟驅(qū)、串口、并口等外設接口,時鐘和CMOS芯片,BIOS控制芯片。(3) 內(nèi)存RAM ),如圖1.4所示。靜態(tài)內(nèi)內(nèi)存一般指的是隨機存取存儲器,簡稱隨機存儲器(存(SRAM )指靜態(tài)隨機存儲器,用作系統(tǒng)的高速緩存,而平常所提到的計算機的內(nèi)存

7、指 的是動態(tài)內(nèi)存(DRAM )指動態(tài)隨機存儲器。除此之外,還有各種用途的內(nèi)存,如顯示卡 使用的VRAM,存儲系統(tǒng)設置信息的 CMOS RAM等。圖1.3 主板圖1.4內(nèi)存每條內(nèi)存上有一排黑色的芯片,稱為內(nèi)存顆粒,每個內(nèi)存顆粒里,又有很多個內(nèi)存單 元,一個內(nèi)存單元由一個電容和一個晶體管組成,為了讓系統(tǒng)對內(nèi)存準確無誤,有秩序的 管理,所以給每個內(nèi)存單元分配了在它所在系統(tǒng)里的唯一的一個內(nèi)存地址,而內(nèi)存范圍就 是很多內(nèi)存地址中的一段,比如0x5b0000050x5c0000010。本書第4章將介紹指針的使用,指針就是地址??梢詫⒅羔樌斫鉃樗赶蛄藘?nèi)存中的某個內(nèi)存單元(如地址為 0x5b000005的單

8、元),如果想獲取此指針的值,這個指針值便是這個地址(0x5b000005 )。也可以這樣來理解,把對內(nèi)存單元的訪問管理和學生公寓的情況類比,如圖1.5所示。圖1.5存儲結構和學生公寓結構對比圖假設每個學生住一間房,一個學生就相當于一個變量的內(nèi)容,房間是內(nèi)存單元,房號 就是內(nèi)存地址。如果知道了學生姓名,可以通過這個名字來訪問該學生,這相當于使用普 通變量名訪問數(shù)據(jù)。如果知道了房號,同樣也可以訪問該學生,這相當于通過地址訪問數(shù) 據(jù)。比如,要從 303 (如同0x5b000005 樣)房間中取出某樣物品,有了地址以后,就可 以從地址所指定的房間取出所要的物品(即數(shù)據(jù)的調(diào)用)。(4)硬盤硬盤的結構和軟

9、盤差不多,是由磁道(tracks)、扇區(qū)(sectors)、柱面(cylinders)和磁頭(heads)組成的,如圖1.6所示。拿一個盤片來講,它和軟盤類似,上面被分成若干 個同心圓磁道,每個磁道被分成若干個扇區(qū),每扇區(qū)通常是512B。硬盤的磁道數(shù)一般為3003000,每磁道的扇區(qū)數(shù)通常是63個,而早期的硬盤只有17個。圖1.6 硬盤和軟盤不同的是,硬盤由很多個盤片疊在一起,柱面指的就是多個磁片上具有相同編 號的磁道,它的數(shù)目和磁道數(shù)是相同的。硬盤的容量按下式計算:硬盤容量=柱面數(shù)X扇區(qū)數(shù)X每扇區(qū)字節(jié)數(shù)X磁頭數(shù)標準IDE接口最多支持1024個柱面、63個扇區(qū)、16個磁頭,其最大容量為1024

10、X53X 16 X512B= 528 482 304B,即 528MB。增強型IDE (Integrated Drive Electronics )接口最多可支持 256個邏輯磁頭,容量最大 可達到8.4GB。這里需要提到有關簇的概念,簇是文件存儲的最小單位。軟盤的簇只有一 個扇區(qū)。在硬盤上,簇的大小和分區(qū)大小有關。比如,當分區(qū)容量介于64MB和128MB之間時,每簇有 4個扇區(qū);介于128MB和256MB之間時,每簇有8個扇區(qū);而當分區(qū)容 量大于1024MB時,每簇的扇區(qū)數(shù)目將超過64個,容量達到 32KB以上。在此時,一個1B的文件在硬盤上也會占用32KB的空間。因此,要根據(jù)具體情況來進行

11、合理分區(qū),以免浪費很多的硬盤空間。如果用戶使用的Windows 95 OSR2或者 Windows 98的話,可以利用它們提供的FAT32分區(qū),使硬盤的每一個簇小到4KB。如果使用的是 Windows 2000或Windows XP,使用NTFS分區(qū),每個簇的大小不要超過4KB。(5 )其他部件一般來說,一臺完整的功能強大的計算機還配備有軟驅(qū)(floppy drive )、光驅(qū)(CD/DVD-ROM )、刻錄機(CD/DVD-RW )、顯示卡(video card )、聲卡(audio card )、網(wǎng) 卡(network card ) 及顯示器 (display)、音箱 (sound box

12、)、鍵盤 (keyboard)、鼠標 (mouse)、 掃描儀(scanner)、打印機(printer)等,本書不做詳細介紹,請有興趣的同學自行查找相 關資料。1.1.2計算機的工作過程如圖1.1所示,在計算機中有兩類信息在流動。一類信息是數(shù)據(jù),包括原始數(shù)據(jù)、中 間結果、最后結果和程序指令等,數(shù)據(jù)流在圖中用粗線表示,箭頭表明流動方向。另一類 信息是控制命令,在圖中用細線表示,箭頭同樣表明流動方向。不論是數(shù)據(jù)還是控制命令,在計算機中都是僅用“ o”和“ 1”表示的二進制信息。通過輸入設備把程序和原始數(shù)據(jù)按指定地址輸入存儲器保存,圖1.7是存儲器存儲程序和數(shù)據(jù)的示意圖。然后啟動計算機,則計算機按

13、照存入的順序依次取出存儲器中的指令送入控制器分析,控制器根據(jù)分析結果發(fā)出相應的控 制命令,從而按照人的意圖自動完成全部運算,最后 再通過輸出設備輸出計算結果。在運算過程中,數(shù)據(jù) 從存儲器取出并輸入運算器進行運算,運算的中間結 果和最后結果可存入存儲器保存,也可由運算器經(jīng)過 輸出設備輸出。必要時,可將內(nèi)存儲器的成批數(shù)據(jù)送 入外存儲器保存,或?qū)⑼獯鎯ζ髦械某膳鷶?shù)據(jù)調(diào)入內(nèi) 存儲器參加運算。前面概括地說明了計算機工作的大致過程,下面,仍以前面所舉的計算3.1416 朽 X15-12 X12為例,具體說明計算機的工作過程。第一步,用輸入設備把事先編寫好的解題步驟(即程序)和原始數(shù)據(jù)(3.1416, 15

14、, 12)輸入到存儲器 指定編號的地方存儲起來。第二步,命令計算機從第一條指令開始執(zhí)行程序,則計算機在程序控制下自動完成解 題的全過程。具體說來,解題過程包括下列操作:(1) 把第一個數(shù)據(jù)3.1416從存儲器中取到運算器內(nèi)。(2) 把第二個數(shù)據(jù)15從存儲器中取到運算器內(nèi),進行乘法運算 3.1416 >15,得到中間 結果 47.124。(3) 用第二個數(shù)據(jù)15再次乘中間結果47.124,得到新的中間結果706.86。(4) 把運算器中的中間結果706.86送到存儲器中暫時保存。(5) 把第三個數(shù)據(jù)12從存儲器中取到運算器內(nèi)。(6) 進行乘法運算12X12,得到中間結果144。(7) 把運

15、算器中的中間結果144送到存儲器中暫時存放。(8) 把暫存的中間結果706.86取到運算器內(nèi)。(9) 把暫存的中間結果144取到運算器內(nèi),進行減法運算706.86-44,得到最后結果562.86。(10) 把最后結果 562.86通過輸出設備輸出給用戶(例如,用打印機打印在紙上或顯示在顯示器的熒光屏上)(11) 停機。1.2 程序設計語言計算機本身并不知道如何解決一個問題,必須由人事先把解題步驟設計好,編寫成程 序輸入到計算機中,計算機才能在程序控制下按照人的意圖解決這個問題。因此,人們必 須用計算機能夠接受的語言和它通信,告訴它對什么數(shù)據(jù)進行什么運算,以及運算的次序。程序設計語言就是為了表達

16、程序而由人設計出來的計算機能夠接受的人工語言,它是用來 表達用戶意圖指揮計算機工作的通信工具。目前,程序設計語言的發(fā)展已經(jīng)經(jīng)歷了4代,第五代程序設計語言尚處于萌芽狀態(tài)。下面簡單介紹一下各代程序設計語言的基本特點。1第一代程序設計語言第一代程序設計語言是機器語言,它是計算機所特有的,也就是說,不同計算機有不 同的機器語言。機器語言的基本組成成分是若干條機器指令,每條指令指明作什么運算及 對哪個單元中的數(shù)據(jù)進行運算。這些指令是計算機硬件可以直接識別和執(zhí)行的。計算機只能存儲和識別二進制的數(shù)據(jù)和指令,因此,機器語言也稱為二進制語言。用機器語言編寫程序時,數(shù)據(jù)和指令必須分別存儲在不同的單元中。例如,計算

17、半徑為15的圓面積:A=3.1416 >15 XI5用某種型號計算機計算時,內(nèi)存中存儲的數(shù)據(jù)及用機器語言編寫的程序如表1.1和表1.2所示。表1.1數(shù)據(jù)地址數(shù)值地址數(shù)值地址數(shù)值00103.14160011150012A表1.2 程序地址指令注釋操作碼地址碼01000210010取 3.141601010120011X1501020120011X1501030220012存A01040350012打印A01050070000停機計算機可以直接識別和執(zhí)行用機器語言編寫的程序,因此效率較高。但是,人工編寫 機器語言程序很繁瑣,容易出錯,而且不同計算機有不同的機器語言,通用性很差。2.第二代程序

18、設計語言為了克服機器語言的缺點,人們設計出第二代程序設計語言 匯編語言,也稱為符 號語言。相對于第一代程序設計語言,第二代程序設計語言的主要進步是,用含義較鮮明 的符號代替機器語言中的二進制編碼,因此看起來較直觀,不易出錯。例如,上面的計算圓面積的例子,如果用匯編語言編程序,則源程序如下:LOAD 3.1416MUL 15MUL 15SAVE APRINT ASTOP計算機硬件并不能直接識別和執(zhí)行匯編語言源程序,因此,必須用一個編譯程序(一 種系統(tǒng)軟件)把匯編語言源程序轉換(即翻譯)成機器語言程序(稱為目標程序)之后, 才能執(zhí)行。匯編語言仍然是依賴于計算機的,不同計算機有不同的匯編語言,彼此不

19、能通用。此 外,匯編語言指令與機器語言指令是一一對應的,一個復雜的程序需要包含大量匯編語言 指令, 編寫起來仍然很繁瑣。 為了克服匯編語言的缺點, 人們開發(fā)出第三代程序設計語言。3第三代程序設計語言前面曾經(jīng)講過, 為了利用計算機解決一個特定問題, 必須首先設計出解題步驟。 通常, 把為了在計算機上解決一個問題而采用的方法和步驟稱為算法。更確切地說,算法是在有 限步驟內(nèi)解決某一問題所使用的有精確定義的一系列操作規(guī)則。第三代程序設計語言特別適合用來表達算法,因此也稱為算法語言。算法語言的基本組成成分是各種語句。通常一個語句的功能相當于多條機器指令的功 能,因此,用算法語言編寫程序遠比用機器語言或匯

20、編語言編寫程序更加方便、簡單和直 觀,而且更不容易出錯。此外,算法語言不依賴于機器,同一個算法語言程序可以在眾多 不同類型的計算機上運行,通用性很強。因此,第三代程序設計語言也稱為高級語言。常用的高級語言有 BASIC 、 FORTRAN 、ALGOL 、 COBOL 、C、Pascal、PL/1 等。 例如,計算前述圓面積的 BASIC 源程序如下(每行前數(shù)字為行號) :10 A=3.1416*15 *1520 PRINT A30 END顯然,計算機硬件并不能直接識別和執(zhí)行高級語言源程序,因此,必須首先使用編譯 程序(一種系統(tǒng)軟件) 把高級語言源程序編譯 (即翻譯) 成機器語言程序 (稱為目

21、標程序) 然后才能執(zhí)行。4第四代程序設計語言雖然比起機器語言和匯編語言來,第三代程序設計語言有了很大進步,但是,為了能 熟練地使用這種語言解決實際問題,仍然需要經(jīng)過長期的專業(yè)訓練。為了提高軟件開發(fā)效 率,增強軟件的可維護性,人們研究出第四代程序設計語言。所謂第四代程序設計語言,實質(zhì)上是可以快速開發(fā)應用軟件的各種高生產(chǎn)率的軟件工 具的統(tǒng)稱。5第五代程序設計語言多數(shù)人認為,第五代程序設計語言將是智能化的語言。到目前為止,還沒有公認的第 五代程序設計語言出現(xiàn)。 PROLOG 語言可能是第五代程序設計語言最著名的雛形。1.3 面向過程程序設計如前所述,使用傳統(tǒng)程序設計語言進行程序設計時,不論所使用的語

22、言是第一代程序 設計語言或第二代程序設計語言,還是第三代程序設計語言,都必須詳細準確地描述解題 過程。也就是說,當人們用這類語言表達自己意圖指揮計算機工作時,必須向計算機詳細 說明怎樣完成預定的功能:第一步做什么、第二步做什么、第三步做什么哪些操作按 程序編寫順序只做一遍,哪些操作重復做多遍,哪些操作在某個條件成立時做,等等。因 為程序設計工作主要圍繞設計解題過程來進行,這種傳統(tǒng)的程序設計方法稱為面向過程程 序設計,傳統(tǒng)的程序設計語言稱為過程性語言。使用過程性語言編寫的程序, 其功能是隱含在程序代碼中的。 為了搞清楚程序的功能, 必須反復閱讀程序,仔細分析程序的每個語句,根據(jù)該程序設計語言的語

23、法確定語句的執(zhí) 行順序,并要綜合每個語句的語義及執(zhí)行順序才能推斷出程序的功能。因此,理解面向過 程的程序相當困難。顯然,當應用系統(tǒng)的功能比較復雜時,應用程序的規(guī)模必然十分龐大,包含的語句很 多,程序元素(數(shù)據(jù)、語句)相互之間的關系十分復雜。因此,用面向過程程序設計方法 開發(fā)應用系統(tǒng)時,需要耗費大量人力物力,只有經(jīng)過嚴格訓練的有經(jīng)驗的程序員才能勝任 編程工作。這樣的應用系統(tǒng)不僅不易開發(fā),維護起來也十分困難。所謂維護,就是在軟件 交付給用戶使用期間,出于種種原因,而對軟件進行修改。人們在開發(fā)軟件的長期實踐過程中,總結出一些設計原理并研究出一些系統(tǒng)化的技術 方法,把它們用于面向過程程序設計,能夠提高

24、開發(fā)效率,增加系統(tǒng)的可理解性、可閱讀 性和可維護性。這些原理和技術方法,在進行面向?qū)ο蟪绦蛟O計時也有借鑒意義。下面簡 要介紹主要設計原理和技術方法。1.3.1 模塊化模塊是數(shù)據(jù)說明、可執(zhí)行的語句等程序元素的集合,它是單獨命名的而且可以通過名 字來訪問,也就是說,可以用名字代表該模塊。所謂模塊化,就是把一個程序劃分成若干 個模塊,每個模塊完成一個子功能,把這些模塊組裝成一個整體,可以完成指定的功能。模塊化是為了使一個復雜的大型程序能被人的智力所管理、程序應該具備的基本屬 性。如果一個大型程序僅由一個模塊組成,例如,程序由幾十萬個語句一個語句接著一個 語句堆積而成,那么它將很難被人所理解。下面根據(jù)

25、人類解決問題的一般規(guī)律,論證上面 的結論。設函數(shù)C (x)定義問題X的復雜程度,函數(shù)E (x)確定解決問題X需要的工作量(時間)。 對于兩個問題P1和P2,如果C (P1) > C (P2)顯然E (P1) > E (P2)根據(jù)人們解決一般問題的經(jīng)驗,另一個有趣的規(guī)律為:C (P1 + P2)> C (P1) + C (P2)也就是說,如果一個問題由 Pl和P2兩個問題組合而成,那么它的復雜程度大于分別 考慮每個問題時的復雜程度之和。綜上所述,得到下面的不等式:E (P1 + P2) > E (P1) + E (P2)這個不等式導致 “各個擊破” 的結論把復雜的問題分解

26、成許多容易解決的小問題, 原來的問題也就容易解決了。這就是模塊化的根據(jù)。從上面的不等式并不能得出“如果無限地分割程序,最后為了開發(fā)程序而需要的工作 量也就小得可以忽略了”的結論。事實上,還有另一個因素在起作用,從而使得上述結論 不能成立。當模塊數(shù)目增加時每個模塊的規(guī)模將減小, 開發(fā)單個模塊的工作量確實減少了; 但是, 隨著模塊數(shù)目增加,設計和實現(xiàn)模塊接口所需要的工作量也將增加。綜合這兩個因素,每 個程序都有一個最適合的模塊數(shù)目,使得開發(fā)該程序的總成本(開發(fā)模塊的成本加上開發(fā) 模塊間接口的成本)最小。換句話說,在把程序劃分成模塊的時候,模塊規(guī)模應該適當。模塊太大則模塊化帶來的好處不明顯,模塊太小

27、,則模塊間接口的成本過大。采用模塊化原理可以使程序結構清晰,不僅容易設計也容易閱讀和理解。因為程序錯 誤通常局限在有關的模塊及它們之間的接口中,所以模塊化使軟件容易測試和調(diào)試,因而 有助于提高軟件的穩(wěn)定性。因為變動往往只涉及少數(shù)幾個模塊,所以模塊化能夠提高軟件 的可修改性。模塊化也有助于軟件開發(fā)工程的組織管理,一個復雜的大型程序可以由許多 程序員分工編寫不同的模塊,并且可以進一步分配技術熟練的程序員編寫困難的模塊。1.3.2 抽象人類在認識復雜現(xiàn)象的過程中使用的最強有力的思維工具是抽象。人們在實踐中認識到, 在現(xiàn)實世界中一定事物、 狀態(tài)或過程之間總存在著某些相似的方面 (共性)。把這些相 似的

28、方面集中和概括起來,暫時忽略它們之間的差異,這就是抽象。在求解問題的過程中 使用抽象原理,就是忽略該問題與當前目的無關的那些方面,以便集中精力考慮與當前目 的有關的那些方面。由于人類思維能力的限制,如果每次面臨的因素太多,是不可能做出精確的思維的。 處理復雜系統(tǒng)的唯一有效的方法是用層次的方式構造和分析它。一個復雜的動態(tài)系統(tǒng)首先 可以用一些高級的抽象概念構造和理解,這些高級概念又可以用一些較低級的概念構造和 理解,如此進行下去,直至最低層次的具體元素。這種層次的思維和解題方式必須反映在定義動態(tài)系統(tǒng)的程序結構之中,每層的一個概 念將以某種方式對應于程序的一組成分??紤]問題的模塊化解法時,可以提出許

29、多抽象的層次。在抽象的最高層次使用描述問 題環(huán)境的語言,以概括的方式敘述問題的解法;在較低抽象層次采用更過程化的方法,把 面向問題的術語和面向?qū)崿F(xiàn)的術語結合起來敘述問題的解法;最后,在最低的抽象層次用 可以直接實現(xiàn)的方式敘述問題的解法。逐步求精和模塊化的概念,與抽象是密切相關的。隨著程序開發(fā)工作的進展,在程序結構每一層次中的模塊,表示了對程序抽象層次的一次精化。事實上處于程序結構頂層的模塊,控制了程序的全部功能并且影響全局;在程序結構底層的模塊,完成對數(shù)據(jù)的一個 具體處理。用自頂向下由抽象到具體的方式分配控制,簡化了程序的設計和實現(xiàn),提高了 程序的可理解性、可修改性和可測試性,使程序更容易維護

30、。1.3.3 信息隱藏和局部化信息隱藏原理指出,在設計和確定模塊時,應該使得一個模塊內(nèi)包含的信息(數(shù)據(jù)和 操作)對于不需要這些信息的其他模塊來說,是不能訪問的。局部化的概念和信息隱藏概念是密切相關的。所謂局部化,是指把一些關系密切的程 序元素物理地放得彼此靠近,處于同一局部區(qū)城內(nèi)。在模塊中使用局部數(shù)據(jù)元素是局部化 的一個例子。顯然,局部化有助于實現(xiàn)信息隱藏。“隱藏”意味著有效的模塊化可以通過定義一組獨立的模塊來實現(xiàn),這些獨立的模塊 彼此間僅僅交換那些為了完成系統(tǒng)功能而必須交換的信息。如果在測試期間和以后的維護期間需要修改程序,那么用信息隱藏原理指導模塊化系 統(tǒng)設計就會帶來極大好處。因為絕大多數(shù)

31、數(shù)據(jù)和處理過程對于程序的其他部分而言是隱藏 的(也就是 “看不見” 的),在修改期間由于疏忽而引入的錯誤傳播到程序的其他部分的可 能性就很小。1.3.4 模塊獨立模塊獨立原理是模塊化、抽象、信息隱藏和局部化原理的直接結果和進一步發(fā)展。開發(fā)具有獨立、完整功能而且和其他模塊之間沒有過多相互作用的模塊,就可以做到 模塊獨立。換句話說,應該這樣設計程序結構,使得每個模塊完成一個相對獨立的特定子 功能,并且和其他模塊之間的關系盡可能簡單。為什么模塊的獨立性很重要呢?主要有兩條理由:第一,有效的模塊化(即具有獨立 的模塊)的軟件比較容易開發(fā)出來。這是由于能夠分割功能而且接口可以簡化,當許多人 分工合作開發(fā)

32、同一個軟件時,這一優(yōu)點尤其重要。第二,獨立的模塊軟件比較容易測試和 維護。這是因為相對說來,修改設計和程序需要的工作量比較小,錯誤傳播范圍小,需要 擴充功能時能夠“插入”模塊。總之,模塊獨立是好設計的關鍵,而設計又是決定軟件質(zhì) 量的關鍵環(huán)節(jié)。模塊的獨立程度可以由兩個定性標準量度,這兩個標準分別稱為耦合度和內(nèi)聚度。耦 合度衡量不同模塊彼此間互相依賴(連接)的緊密程度;內(nèi)聚度衡量一個模塊內(nèi)部各個元 素彼此結合的緊密程度。在程序設計時應該追求盡可能松散耦合的系統(tǒng)。在這樣的系統(tǒng)中可以研究、測試或維 護任何一個模塊,而不需要對系統(tǒng)的其他模塊有很多了解。此外,由于模塊間聯(lián)系簡單, 發(fā)生在一處的錯誤傳播到整

33、個系統(tǒng)的可能性就很小。因此,模塊間的耦合程度強烈影響系 統(tǒng)的可理解性、可測試性、穩(wěn)定性和可維護性。一般說來,如果兩個模塊彼此間通過參數(shù)交換信息,而且交換的信息基本上是數(shù)據(jù), 則這樣的耦合是松耦合。內(nèi)聚表示一個模塊內(nèi)部各個元素彼此結合的緊密程度,它是信息隱藏和局部化概念的 自然擴展。簡單地說,理想內(nèi)聚的模塊只做一件事情。設計時應該力求做到高內(nèi)聚,通常中等程度的內(nèi)聚也是可以采用的,而且效果和高內(nèi) 聚相差不多。但是,低內(nèi)聚效果很差,不要使用。如果模塊內(nèi)所有元素屬于一個整體,完成一個單一的功能,則稱為功能內(nèi)聚。這種內(nèi) 聚是最高程度的內(nèi)聚。內(nèi)聚和耦合是密切相關的,模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。

34、高內(nèi)聚和松 耦合都是進行模塊化設計的重要標準,但是實踐表明內(nèi)聚更重要,應該把更多注意力集中 到提高模塊的內(nèi)聚程度上。1.3.5結構程序設計技術在把一個程序劃分成若干個模塊,并且確定了模塊之間的關系之后,進一步的工作就 是設計完成每個模塊功能的處理過程。為了能開發(fā)出高質(zhì)量的程序,必須充分注意下述事 實:在軟件的生存周期中,設計測試方案,診斷程序錯誤,修改和改進程序等都必須首先 讀懂程序。實際上對于長期使用的軟件系統(tǒng)而言,讀程序的時間可能比寫程序的時間還要 長得多。因此,衡量程序的質(zhì)量不僅要看它的邏輯是否正確,性能是否滿足要求,更主要 的是看它是否容易閱讀和理解。怎樣才能設計出容易閱讀、容易理解的

35、程序呢?結構程序設計技術是實現(xiàn)這一目標的 關鍵技術。結構程序設計的概念最早由 E.W.Dijkstra提出。1965年他在一次會議上指出:“可以從 高級語言中取消goto語句”,“程序的質(zhì)量與程序中所包含的 goto語句的數(shù)量成反比”。所 謂goto語句就是轉移語句。1966年C.Bohm和G.Jacopini證明,只用3種基本的控制結構就能實現(xiàn)任何單入口單 出口的程序。這3種基本的控制結構是“順序”、“選擇”和“循環(huán)”,它們的流程圖分別如 圖1.8(a)、圖1.8( b)和圖1.8(c)所示。流程圖是描繪處理過程的一種常用圖形,矩形 框表示操作,菱形框表示條件,箭頭線表明執(zhí)行次序。(a)順序

36、結構,先執(zhí)行A再執(zhí)行B(b) if-then-else型選擇(分支)結構(c)do-while型循環(huán)結構圖1.8 3種基本的控制結構雖然從理論上說只用上述3種基本控制結構就可以實現(xiàn)任何單入口單出口的程序,但是為了實際使用方便起見,常常還使用do-until和do-case兩種控制結構,它們的流程圖分別如圖1.9(a)和圖1.9( b)所示。do case I(b)多分支結構圖1.9其他常用的控制結構如圖1.8和圖1.9所示可以看出,這幾種控制結構有一個共同的特點,那就是每種結 構都只有一個入口和一個出口,因此統(tǒng)稱為單入口單出口的控制結構。那么,什么是結構程序設計呢?目前還沒有一個被所有人普遍接受的定義,一個比較 流行的定義為:結構程

溫馨提示

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

評論

0/150

提交評論