版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、軟件工程編碼和語言lyh1第八章第八章 編碼和語言的選擇編碼和語言的選擇軟件工程編碼和語言lyh2 做為軟件工程過程的一個階段,程序編碼是做為軟件工程過程的一個階段,程序編碼是設計的繼續(xù)。設計的繼續(xù)。程序設計語言的特性和程序設計風格會深刻程序設計語言的特性和程序設計風格會深刻地影響軟件的質量和可維護性。地影響軟件的質量和可維護性。為了保證程序編碼的質量,程序員必須深刻為了保證程序編碼的質量,程序員必須深刻理解、熟練掌握并正確地運用程序設計語言理解、熟練掌握并正確地運用程序設計語言的特性。此外,還要求源程序具有良好的結的特性。此外,還要求源程序具有良好的結構性和良好的程序設計風格。構性和良好的程
2、序設計風格。軟件工程編碼和語言lyh3軟件工程編碼和語言lyh4軟件工程編碼和語言lyh58.1 編碼的目的編碼的目的使用選定的程序設計語言,把模塊的過程性描述翻譯為用該語言書寫的源程序。軟件工程編碼和語言lyh68.2 編碼的風格編碼的風格 程序實際上也是一種供人閱讀的文章,有一個程序實際上也是一種供人閱讀的文章,有一個文章的文章的風格風格問題。應該使程序具有良好的風格。問題。應該使程序具有良好的風格。 從從2020世紀世紀7070年代以來,編碼的目標從強調效率轉變?yōu)槟甏詠恚幋a的目標從強調效率轉變?yōu)閺娬{清晰。與此相應,編碼的風格從追求強調清晰。與此相應,編碼的風格從追求“聰明聰明”和和“
3、技巧技巧”,變?yōu)樘岢優(yōu)樘岢昂喢骱喢鳌焙秃汀爸苯又苯印?。人們逐漸。人們逐漸認識到,良好的編碼風格能在一定程度上彌補語言存認識到,良好的編碼風格能在一定程度上彌補語言存在的缺點,反之,不注意風格,即使使用了結構化的在的缺點,反之,不注意風格,即使使用了結構化的現(xiàn)代語言,也很難寫出高質量的程序。當多個程序員現(xiàn)代語言,也很難寫出高質量的程序。當多個程序員合作編寫一個大的程序時,尤其需要強調良好的和一合作編寫一個大的程序時,尤其需要強調良好的和一致的風格,以利于相互通信,減少因不協(xié)調而引起的致的風格,以利于相互通信,減少因不協(xié)調而引起的問題。問題。軟件工程編碼和語言lyh7 1974 1974年,
4、年,kernighan kernighan 與與plaugerplauger在在the elements of the elements of progranmming style progranmming style 中,把編碼風格歸結為中,把編碼風格歸結為7 7個問題,個問題,7070余條指導原余條指導原則,下面從控制結構、則,下面從控制結構、gotogoto語句、代碼文檔化和輸入輸出等方面,簡述語句、代碼文檔化和輸入輸出等方面,簡述編碼風格的要求:編碼風格的要求: 使用標準的控制結構使用標準的控制結構 有限制地使用有限制地使用goto語句語句 實現(xiàn)源程序的文檔化實現(xiàn)源程序的文檔化 滿足運
5、行工程學的輸入輸出風格滿足運行工程學的輸入輸出風格軟件工程編碼和語言lyh8程序設計風格程序設計風格語句結構語句結構軟件工程編碼和語言lyh9結構化程序設計主要包括兩方面:結構化程序設計主要包括兩方面: 在編寫程序時,強調在編寫程序時,強調使用幾種基本控制結構使用幾種基本控制結構,通過組合嵌套,形成程序的控制結構。通過組合嵌套,形成程序的控制結構。盡可盡可能避免使用能避免使用goto語句語句。 在程序設計過程中,盡量采用自頂向下和逐在程序設計過程中,盡量采用自頂向下和逐步細化的原則,步細化的原則,由粗到細由粗到細,一步步展開一步步展開。軟件工程編碼和語言lyh10結構化程序設計的主要原則結構化
6、程序設計的主要原則 使用語言中的使用語言中的順序順序、選擇選擇、重復重復等有限的基等有限的基本控制結構表示程序邏輯。本控制結構表示程序邏輯。 選用的控制結構只準許有選用的控制結構只準許有一個入口一個入口和和一個出一個出口口。 程序語句組成程序語句組成容易識別的塊容易識別的塊,每塊只有,每塊只有一個一個入口入口和和一個出口一個出口。 復雜結構應該用基本控制結構進行組合嵌套復雜結構應該用基本控制結構進行組合嵌套來實現(xiàn)。來實現(xiàn)。軟件工程編碼和語言lyh11 語言中沒有的控制結構語言中沒有的控制結構,可用一段等價的程可用一段等價的程序段模擬序段模擬,但要求該程序段在整個系統(tǒng)中應但要求該程序段在整個系統(tǒng)
7、中應前后一致。前后一致。 嚴格控制嚴格控制goto語句語句,僅在下列情形才可使僅在下列情形才可使用用: 用一個非結構化的程序設計語言去實現(xiàn)用一個非結構化的程序設計語言去實現(xiàn)一個結構化的構造。一個結構化的構造。 若不使用若不使用goto語句就會使程序功能模語句就會使程序功能模糊。糊。 在某種可以改善而不是損害程序可讀性在某種可以改善而不是損害程序可讀性的情況下。的情況下。軟件工程編碼和語言lyh12例例1 打印打印a、b、 c三數(shù)中最小者程序三數(shù)中最小者程序軟件工程編碼和語言lyh13 程序程序1 if ( a b ) goto 120; if ( b c ) goto 110; 100 wri
8、te ( c ); goto 140; 110 write ( b ); goto 140; 120 if ( a c ) goto 130; goto 100; 130 write ( a ); 140 end 軟件工程編碼和語言lyh14 程序程序2 if ( a b ) and ( a c ) then write ( a ) else if ( a b ) and ( b c ) then write ( b ) else write ( c ) endif endif軟件工程編碼和語言lyh15例例2 用二分法求方程用二分法求方程 f (x)0 在區(qū)間在區(qū)間a.b中的中的根的程序根的
9、程序軟件工程編碼和語言lyh16 f0 = f (a); f1 = f (b); /程序程序1 if ( f0 * f1 = 0 ) x0 = a; x1 = b; for ( i = 1;i = n;i+ ) xm = ( x0 x1 ) / 2; fm = f (xm); if ( abs (fm) eps | abs (x1x0) 0 ) x0 = xm; f0 = fm; else x1 = xm; finish:printf (“n the root of this equation is %dn”,xm ); 軟件工程編碼和語言lyh17 finish:printf (“n the
10、 root of this equation is %dn”,xm );軟件工程編碼和語言lyh18 單入口,兩出口單入口,兩出口 正常出口是循環(huán)達到正常出口是循環(huán)達到 n 次,非正常出口是循環(huán)中次,非正常出口是循環(huán)中途控制轉出到標號途控制轉出到標號 finish 所在位置它不滿足結構所在位置它不滿足結構化的要求化的要求軟件工程編碼和語言lyh19 f0 = f (a); f1 = f (b); /程序程序2 if ( f0 * f1 = 0 ) x0 = a;x1 = b; for ( i = 1;i = n;i+ ) xm = ( x0 x1) / 2;fm = f (xm); if (a
11、bs( fm )eps | abs( x1x0 )eps) break; if ( f0 * fm0) x0 = xm;f0 = fm; else x1 = xm; 軟件工程編碼和語言lyh20 該程序利用了該程序利用了c c語言中的一個語句語言中的一個語句breakbreak,但仍然不是,但仍然不是結構化的程序,它與程序段結構化的程序,它與程序段1 1完成的工作相同,由于將完成的工作相同,由于將轉移語句與轉出條件的判斷聯(lián)系在一起,可讀性好。轉移語句與轉出條件的判斷聯(lián)系在一起,可讀性好。軟件工程編碼和語言lyh21 f0 = f (a);f1 = f (b); /程序程序3 if ( f0 *
12、 f1 = 0) x0 = a;x1 = b;i = 1;finished = 0; while (i = n & finished = 0) xm = ( x0 x1 )2; fm = f (xm); if (abs( fm)eps | abs( x1x0 )eps) finished = 1; if (finished = 0) if ( f0 * fm0 ) x0 = xm;f0 = fm; else x1 = xm ; 軟件工程編碼和語言lyh22 if ( f0 * fm0 ) x0 = xm;f0 = fm; else x1 = xm ; 軟件工程編碼和語言lyh23 引入
13、布爾變量引入布爾變量 finishedfinished,改,改 forfor 型循環(huán)為型循環(huán)為 whilewhile 型,型,將單入口多出口結構改為單入口單出口結構。將單入口多出口結構改為單入口單出口結構。軟件工程編碼和語言lyh24自頂向下,逐步求精自頂向下,逐步求精 在詳細設計和編碼階段,應當采取自頂向下,在詳細設計和編碼階段,應當采取自頂向下,逐步求精的方法。逐步求精的方法。 把一個模塊的功能逐步分解,細化為一系列把一個模塊的功能逐步分解,細化為一系列具體的步驟,進而翻譯成一系列用某種程序具體的步驟,進而翻譯成一系列用某種程序設計語言寫成的程序。設計語言寫成的程序。軟件工程編碼和語言ly
14、h25例,用篩選法求例,用篩選法求100以內的素數(shù)以內的素數(shù) 篩選法就是從篩選法就是從2到到100中去掉中去掉2,3,9,10的的倍數(shù),剩下的就是倍數(shù),剩下的就是100以內的素數(shù)。以內的素數(shù)。 為了解決這個問題,可先按程序功能寫出為了解決這個問題,可先按程序功能寫出一個框架。一個框架。軟件工程編碼和語言lyh26main ( ) /程序框架程序框架 建立建立2到到100的數(shù)組的數(shù)組a ,其中,其中aii; -1 建立建立2到到10的素數(shù)表的素數(shù)表 b ,其中存放,其中存放2 到到10以內的素數(shù);以內的素數(shù);-2 若若aii是是b 中任一數(shù)的倍數(shù),則中任一數(shù)的倍數(shù),則 剔除剔除ai;-3 輸出輸
15、出a 中所有沒有被剔除的數(shù);中所有沒有被剔除的數(shù); -4軟件工程編碼和語言lyh27main ( ) /*建立建立2到到100的數(shù)組的數(shù)組a ,其中,其中aii*/for ( i = 2;i = 100;i+ ) ai = i;/* 建立建立2到到10的素數(shù)表的素數(shù)表b ,其中存放,其中存放2到到 10以內的素數(shù)以內的素數(shù)*/b1= 2;b2= 3;b3= 5;b4= 7;/*若若aii是是b 中任一數(shù)的倍數(shù),則剔中任一數(shù)的倍數(shù),則剔 除除ai*/for ( j = 1;j = 4;j+ ) 檢查檢查a 所有的數(shù)能否被所有的數(shù)能否被bj整除并將整除并將 能被整除的數(shù)從能被整除的數(shù)從a 中剔除;
16、中剔除; -3.1 軟件工程編碼和語言lyh28 /*輸出輸出a 中所有沒有被剔除的數(shù)中所有沒有被剔除的數(shù)*/ for ( i = 2;i = 100;i+ ) 若若ai沒有被剔除,則輸出之沒有被剔除,則輸出之 -4.1 對框架中的局部再做細化,得到整個程序。對框架中的局部再做細化,得到整個程序。軟件工程編碼和語言lyh29main ( ) /*建立建立2到到100的數(shù)組的數(shù)組a ,其中,其中aii*/for ( i = 2;i = 100;i+ ) ai = i;/* 建立建立2到到10的素數(shù)表的素數(shù)表b ,其中存放,其中存放2到到 10以內的素數(shù)以內的素數(shù)*/b1= 2;b2= 3;b3=
17、 5;b4= 7;/*若若aii是是b 中任一數(shù)的倍數(shù),則剔除中任一數(shù)的倍數(shù),則剔除 ai*/for ( j = 1;j = 4;j+ ) /*檢查檢查a 所有的數(shù)能否被所有的數(shù)能否被bj整除并將能整除并將能 被整除的數(shù)從被整除的數(shù)從a 中剔除中剔除*/軟件工程編碼和語言lyh30 for ( i = 2;i = 100;i+) if ( aibj * bj = ai ) ai = 0; /*輸出輸出a 中所有沒有被剔除的數(shù)中所有沒有被剔除的數(shù)*/ for ( i = 2; i = 100;i+) /*若若ai沒有被剔除,則輸出之沒有被剔除,則輸出之*/ if ( ai != 0 ) prin
18、tf ( “a%d%dn”, i, ai ); 軟件工程編碼和語言lyh31自頂向下,逐步求精方法的優(yōu)點自頂向下,逐步求精方法的優(yōu)點 符合人們解決復雜問題的普遍規(guī)律??商岱先藗兘鉀Q復雜問題的普遍規(guī)律??商岣哕浖_發(fā)的成功率和生產率高軟件開發(fā)的成功率和生產率 用先全局后局部,先整體后細節(jié),先抽象用先全局后局部,先整體后細節(jié),先抽象后具體的逐步求精的過程開發(fā)出來的程序后具體的逐步求精的過程開發(fā)出來的程序具有清晰的層次結構,程序容易閱讀和理具有清晰的層次結構,程序容易閱讀和理解解軟件工程編碼和語言lyh32 程序自頂向下,逐步細化,分解成一個樹形程序自頂向下,逐步細化,分解成一個樹形結構。在同一層
19、的節(jié)點上的細化工作相互獨結構。在同一層的節(jié)點上的細化工作相互獨立。有利于編碼、測試和集成立。有利于編碼、測試和集成 每一步工作僅在上層節(jié)點的基礎上做不多的每一步工作僅在上層節(jié)點的基礎上做不多的設計擴展,便于檢查設計擴展,便于檢查 有利于設計的分工和組織工作。有利于設計的分工和組織工作。軟件工程編碼和語言lyh33逐步細化程序的樹型結構軟件工程編碼和語言lyh34 標識符的命名標識符的命名 安排注釋安排注釋 程序的視覺組織程序的視覺組織軟件工程編碼和語言lyh35標識符的命名標識符的命名 符號名即標識符,包括符號名即標識符,包括模塊名模塊名、變量名變量名、常量名常量名、標號名標號名、子程序名子程
20、序名、 數(shù)據區(qū)名數(shù)據區(qū)名以以及及緩沖區(qū)名緩沖區(qū)名等。等。 這些名字應能反映它所代表的實際東西,這些名字應能反映它所代表的實際東西,應有一定實際意義應有一定實際意義。 例如,表示次數(shù)的量用例如,表示次數(shù)的量用times,表示總量的,表示總量的用用total,表示平均值的用,表示平均值的用average,表示和,表示和的量用的量用sum等。等。軟件工程編碼和語言lyh36 名字不是越長越好名字不是越長越好,應當選擇精煉的意義明確,應當選擇精煉的意義明確的名字。的名字。必要時可使用縮寫名字必要時可使用縮寫名字,但這時要注,但這時要注意縮寫規(guī)則要一致,并且要意縮寫規(guī)則要一致,并且要給每一個名字加注給每
21、一個名字加注釋釋。同時,在一個程序中,一個變量只應用于。同時,在一個程序中,一個變量只應用于一種用途。一種用途。 例如,在一個程序中定義了一個變量例如,在一個程序中定義了一個變量temp,它,它在程序的前半段代表在程序的前半段代表“temperature”,在程序的在程序的后半段則代表后半段則代表“temporary”,這使程序閱讀者,這使程序閱讀者不知多措。不知多措。軟件工程編碼和語言lyh37程序的注釋程序的注釋 夾在程序中的注釋是程序員與日后的程序讀夾在程序中的注釋是程序員與日后的程序讀者之間通信的重要手段。者之間通信的重要手段。 注釋決不是可有可無的。注釋決不是可有可無的。 一些正規(guī)的
22、程序文本中,注釋行的數(shù)量占到一些正規(guī)的程序文本中,注釋行的數(shù)量占到整個源程序的整個源程序的13到到12,甚至更多。,甚至更多。 注釋分為注釋分為序言性注釋序言性注釋和和功能性注釋功能性注釋。軟件工程編碼和語言lyh38序言性注釋序言性注釋 通常置于每個程序模塊的開頭部分,通常置于每個程序模塊的開頭部分,它應當它應當給出程序的整體說明給出程序的整體說明,對于理解程序本身具,對于理解程序本身具有引導作用。有些軟件開發(fā)部門對序言性注有引導作用。有些軟件開發(fā)部門對序言性注釋做了明確而嚴格的規(guī)定,要求程序編制者釋做了明確而嚴格的規(guī)定,要求程序編制者逐項列出。逐項列出。 有關項目包括:有關項目包括: 程序
23、標題程序標題;軟件工程編碼和語言lyh39 有關本模塊有關本模塊功能和目的功能和目的的的說明說明; 主要算法主要算法; 接口說明接口說明:包括調用形式、參數(shù)描述、子程:包括調用形式、參數(shù)描述、子程序清單;序清單; 有關數(shù)據描述有關數(shù)據描述:重要的變量及其用途、約束:重要的變量及其用途、約束或限制條件,以及其它有關信息;或限制條件,以及其它有關信息; 模塊位置模塊位置:在哪一個源文件中,或隸屬于哪:在哪一個源文件中,或隸屬于哪一個軟件包;一個軟件包; 開發(fā)簡歷開發(fā)簡歷:模塊設計者、復審者、復審日期、:模塊設計者、復審者、復審日期、修改日期及有關說明等。修改日期及有關說明等。軟件工程編碼和語言ly
24、h40功能性注釋功能性注釋 功能性注釋嵌在源程序體中,用以描述其后功能性注釋嵌在源程序體中,用以描述其后的語句或程序段是在做什么工作,或是執(zhí)行的語句或程序段是在做什么工作,或是執(zhí)行了下面的語句會怎么樣。而不要解釋下面怎了下面的語句會怎么樣。而不要解釋下面怎么做。么做。 例如,例如, /* add amount to total */ total = amounttotal 不好不好軟件工程編碼和語言lyh41 如果注明把月銷售額計入年度總額,便使讀者如果注明把月銷售額計入年度總額,便使讀者理解了下面語句的意圖:理解了下面語句的意圖: /* add monthly-sales to annual
25、-total */total = amounttotal 要點要點 描述一段程序,而不是每一個語句;描述一段程序,而不是每一個語句; 用縮進和空行,使程序與注釋容易區(qū)別;用縮進和空行,使程序與注釋容易區(qū)別; 注釋要正確。注釋要正確。軟件工程編碼和語言lyh42視覺組織視覺組織 空格、空行和移行空格、空行和移行 恰當?shù)乩们‘數(shù)乩每崭窨崭?,可以,可以突出運算的優(yōu)先性突出運算的優(yōu)先性,避免發(fā)生運算的錯誤。避免發(fā)生運算的錯誤。 例如例如 ,將表達式,將表達式(a17)andnot(b49)orc寫成寫成(a17) and not (b49) or c 自然的程序段之間可用自然的程序段之間可用空行空
26、行隔開;隔開;軟件工程編碼和語言lyh43 移行移行也叫做也叫做向右縮格向右縮格。它是指程序中的各行不。它是指程序中的各行不必都在左端對齊,都從第一格起排列。這樣做必都在左端對齊,都從第一格起排列。這樣做使程序完全分不清層次關系。使程序完全分不清層次關系。 對于對于選擇語句選擇語句和和循環(huán)語句循環(huán)語句,把其中的程序段語,把其中的程序段語句向右做句向右做階梯式移行階梯式移行。使程序的邏輯結構更加。使程序的邏輯結構更加清晰。清晰。 例如:兩重選擇結構嵌套,寫成下面的移行形例如:兩重選擇結構嵌套,寫成下面的移行形式,層次就清楚得多。式,層次就清楚得多。軟件工程編碼和語言lyh44 if() then
27、 if() then else endif else endif軟件工程編碼和語言lyh45 在設計階段已經確定了數(shù)據結構的組織及其在設計階段已經確定了數(shù)據結構的組織及其復雜性。在編寫程序時,則需要注意數(shù)據說復雜性。在編寫程序時,則需要注意數(shù)據說明的風格。明的風格。 為了使程序中數(shù)據說明更易于理解和維護,為了使程序中數(shù)據說明更易于理解和維護,必須注意以下幾點。必須注意以下幾點。 數(shù)據說明的次序應當規(guī)范化數(shù)據說明的次序應當規(guī)范化 說明語句中變量安排有序化說明語句中變量安排有序化 使用注釋說明復雜數(shù)據結構使用注釋說明復雜數(shù)據結構軟件工程編碼和語言lyh46數(shù)據說明的次序應當規(guī)范化數(shù)據說明的次序應當
28、規(guī)范化 數(shù)據說明次序規(guī)范化,使數(shù)據屬性容易查找,數(shù)據說明次序規(guī)范化,使數(shù)據屬性容易查找,也有利于測試,排錯和維護。也有利于測試,排錯和維護。 原則上,數(shù)據說明的次序與語法無關,其次原則上,數(shù)據說明的次序與語法無關,其次序是任意的。但出于閱讀、理解和維護的需序是任意的。但出于閱讀、理解和維護的需要,最好使其規(guī)范化,使說明的先后次序固要,最好使其規(guī)范化,使說明的先后次序固定。定。軟件工程編碼和語言lyh47 例如,在例如,在fortran程序中數(shù)據說明次序程序中數(shù)據說明次序 常量說明常量說明 簡單變量類型說明簡單變量類型說明 數(shù)組說明數(shù)組說明 公用數(shù)據塊說明公用數(shù)據塊說明 所有的文件說明所有的文件
29、說明 在類型說明中還可進一步要求。例如,在類型說明中還可進一步要求。例如, 可按如下順序排列:可按如下順序排列: 整型量說明整型量說明 實型量說明實型量說明 字符量說明字符量說明 邏輯量說明邏輯量說明軟件工程編碼和語言lyh48說明語句中變量安排有序化說明語句中變量安排有序化 當當多個變量名在一個說明語句中說明多個變量名在一個說明語句中說明時,應當時,應當對這些變量對這些變量按字母的順序排列按字母的順序排列。帶標號的全程。帶標號的全程數(shù)據數(shù)據(如如fortran的公用塊的公用塊)也應當按字母的也應當按字母的順序排列。順序排列。 例如,把例如,把 integer size, length, wi
30、dth, cost, price寫成寫成 integer cost, length, price , size, width 軟件工程編碼和語言lyh49使用注釋說明復雜數(shù)據結構使用注釋說明復雜數(shù)據結構 如果設計了一個復雜的數(shù)據結構,應當使用如果設計了一個復雜的數(shù)據結構,應當使用注釋來說明在程序實現(xiàn)時這個數(shù)據結構的固注釋來說明在程序實現(xiàn)時這個數(shù)據結構的固有特點。有特點。 例如例如, 對對pl/1的鏈表結構和的鏈表結構和pascal中用戶自定中用戶自定義的數(shù)據類型,都應當在注釋中做必要的補義的數(shù)據類型,都應當在注釋中做必要的補充說明。充說明。軟件工程編碼和語言lyh50語句結構語句結構 在設計階
31、段確定了軟件的邏輯流結構,但構在設計階段確定了軟件的邏輯流結構,但構造單個語句則是編碼階段的任務。語句構造造單個語句則是編碼階段的任務。語句構造力求簡單、直接,不能為了片面追求效率而力求簡單、直接,不能為了片面追求效率而使語句復雜化。使語句復雜化。軟件工程編碼和語言lyh51在一行內只寫一條語句在一行內只寫一條語句 在一行內只寫一條語句,并且采取適當?shù)囊菩性谝恍袃戎粚懸粭l語句,并且采取適當?shù)囊菩懈袷?,使程序的邏輯和功能變得更加明確。格式,使程序的邏輯和功能變得更加明確。 許多程序設計語言允許許多程序設計語言允許在一行內寫多個語句在一行內寫多個語句。但這種方式但這種方式會使程序可讀性變差會使程序
32、可讀性變差。因而不可取。因而不可取。軟件工程編碼和語言lyh52 例如,有一段排序程序例如,有一段排序程序for i:=1 to n1 do begin t:=i;for j:=i1 to n do if ajat then t:=j;if ti then begin work:=at;at:=ai;ai:=work;end end; 由于一行中包括了多個語句,掩蓋了程序的循由于一行中包括了多個語句,掩蓋了程序的循環(huán)結構和條件結構,使其可讀性變得很差。環(huán)結構和條件結構,使其可讀性變得很差。軟件工程編碼和語言lyh53for i:=1 to n- -1 do /改進布局改進布局 begin t:
33、=i; for j:=i1 to n do if ajat then t:=j; if ti then begin work:=at; at:=ai; ai:=work; end end;軟件工程編碼和語言lyh54程序編寫首先應當考慮清晰性程序編寫首先應當考慮清晰性 程序編寫首先應當考慮清晰性,不要刻意追求程序編寫首先應當考慮清晰性,不要刻意追求技巧性,使程序編寫得過于緊湊。技巧性,使程序編寫得過于緊湊。 例如,有一個用例如,有一個用 c 語句寫出的程序段:語句寫出的程序段: ai = aiat; at = aiat; ai = aiat;軟件工程編碼和語言lyh55 此段程序可能不易看懂,
34、有時還需用實際數(shù)據此段程序可能不易看懂,有時還需用實際數(shù)據試驗一下。試驗一下。 實際上,這段程序的功能就是交換實際上,這段程序的功能就是交換ai和和at中的內容。目的是為了節(jié)省一個工作單元。如中的內容。目的是為了節(jié)省一個工作單元。如果改一下:果改一下: work = at; at = ai; ai = work;就能讓讀者一目了然了。就能讓讀者一目了然了。軟件工程編碼和語言lyh56程序要能直截了當?shù)卣f明程序員的用意程序要能直截了當?shù)卣f明程序員的用意 程序編寫得要簡單,寫清楚,直截了當?shù)卣f程序編寫得要簡單,寫清楚,直截了當?shù)卣f明程序員的用意。例如:明程序員的用意。例如: for ( i = 1
35、; i = n; i+ ) for ( j = 1; j = n; j+ ) vij ( ij ) * ( ji )除法運算()在除數(shù)和被除數(shù)都是整型量除法運算()在除數(shù)和被除數(shù)都是整型量時,其結果只取整數(shù)部分,而得到整型量。時,其結果只取整數(shù)部分,而得到整型量。軟件工程編碼和語言lyh57 當當 ij 時時, i / j = 0 當當 ji 時時, j / i = 0 得到的數(shù)組得到的數(shù)組 當當ij時時 vij = ( ij ) * ( ji ) = 0 當當ij時時 vij = ( ij ) * ( ji ) = 1這樣得到的結果這樣得到的結果 v 是一個單位矩陣。是一個單位矩陣。軟件工程
36、編碼和語言lyh58 寫成以下的形式,就能讓讀者直接了解程序編寫成以下的形式,就能讓讀者直接了解程序編寫者的意圖。寫者的意圖。 for ( i1; i = n; i+ ) for ( j1; j = n; j+ ) if ( i = j ) vij 1.0; else vij 0.0;軟件工程編碼和語言lyh59 軟件工程編碼和語言lyh60除非對效率有特殊的要求除非對效率有特殊的要求, 程序編寫要做到程序編寫要做到清清晰第一晰第一,效率第二效率第二。不要為了追求效率而喪失不要為了追求效率而喪失了清晰性。事實上,了清晰性。事實上,程序效率的提高主要應通程序效率的提高主要應通過選擇高效的算法過選
37、擇高效的算法來實現(xiàn)。來實現(xiàn)。首先要保證首先要保證程序正確程序正確, 然后才要求然后才要求提高速度提高速度。反過來說,在使程序高速運行時,首先要保證反過來說,在使程序高速運行時,首先要保證它是正確的。它是正確的。軟件工程編碼和語言lyh61避免避免使用臨時變量使用臨時變量而使可讀性下降。而使可讀性下降。例如,例如,有的程序員為了追求效率,往往喜歡把表有的程序員為了追求效率,往往喜歡把表達式達式 ai1ai; 寫成寫成 aiai; xai1ai; 這樣將一句分成兩句寫,會產生意想不到的這樣將一句分成兩句寫,會產生意想不到的問題。問題。軟件工程編碼和語言lyh62 讓編譯程序做簡單的優(yōu)化。讓編譯程序
38、做簡單的優(yōu)化。 盡可能盡可能使用庫函數(shù)使用庫函數(shù) 避免避免不必要的轉移不必要的轉移。同時如果能保持程序可讀同時如果能保持程序可讀性,則不必用性,則不必用 go to語句。語句。 例如,有一個求三個數(shù)中最小值的程序:例如,有一個求三個數(shù)中最小值的程序:軟件工程編碼和語言lyh63 if ( x y ) goto 30 if (y z) goto 50 smallz goto 7030 if ( x z)goto 60 smallz goto 7050 smally goto 7060 smallx70 continue軟件工程編碼和語言lyh64 程序只需編寫成:程序只需編寫成: smallx;
39、 if ( y small ) smally; if ( z = a ) if ( char = z ) cout “this is a letter?!? else cout = 0 & char = 9 ) 不要讓讀者繞彎子想。不要讓讀者繞彎子想。軟件工程編碼和語言lyh67盡可能用盡可能用通俗易懂的偽碼通俗易懂的偽碼來描述程序的流程,來描述程序的流程,然后再翻譯成必須使用的語言。然后再翻譯成必須使用的語言。數(shù)據結構要有利于程序的簡化。數(shù)據結構要有利于程序的簡化。要要模塊化模塊化,使模塊功能盡可能單一化,模塊,使模塊功能盡可能單一化,模塊間的耦合能夠清晰可見。間的耦合能夠清晰可見。
40、利用利用信息隱蔽信息隱蔽,確保每一個模塊的獨立性。,確保每一個模塊的獨立性。軟件工程編碼和語言lyh68從從數(shù)據數(shù)據出發(fā)去構造程序。出發(fā)去構造程序。 不要修補不好的程序,要重新編寫。也不要一不要修補不好的程序,要重新編寫。也不要一味地追求代碼的復用,要重新組織。味地追求代碼的復用,要重新組織。 對太大的程序,要分塊編寫、測試,然后再集對太大的程序,要分塊編寫、測試,然后再集成。成。對遞歸定義的數(shù)據結構盡量使用遞歸過程。對遞歸定義的數(shù)據結構盡量使用遞歸過程。軟件工程編碼和語言lyh69 輸入和輸出信息是與用戶的使用直接相關的。輸入和輸出信息是與用戶的使用直接相關的。輸入和輸出的方式和格式應當盡可
41、能方便用戶輸入和輸出的方式和格式應當盡可能方便用戶的使用。一定要避免因設計不當給用戶帶來的的使用。一定要避免因設計不當給用戶帶來的麻煩。麻煩。 因此,在軟件需求分析階段和設計階段,就應因此,在軟件需求分析階段和設計階段,就應基本確定輸入和輸出的風格。系統(tǒng)能否被用戶基本確定輸入和輸出的風格。系統(tǒng)能否被用戶接受,有時就取決于輸入和輸出的風格。接受,有時就取決于輸入和輸出的風格。軟件工程編碼和語言lyh70 不論是不論是批處理的輸入輸出方式批處理的輸入輸出方式,還是,還是交互交互式的輸入輸出方式式的輸入輸出方式,在設計和編碼時都應,在設計和編碼時都應考慮下列原則:考慮下列原則: 對所有的輸入數(shù)據都要
42、進行檢驗,識別錯誤對所有的輸入數(shù)據都要進行檢驗,識別錯誤的輸入,以保證每個數(shù)據的有效性;的輸入,以保證每個數(shù)據的有效性; 檢查輸入項的各種重要組合的合理性,必要檢查輸入項的各種重要組合的合理性,必要時報告輸入狀態(tài)信息;時報告輸入狀態(tài)信息;使得輸入的步驟和操作盡可能簡單,并保持使得輸入的步驟和操作盡可能簡單,并保持簡單的輸入格式;簡單的輸入格式;軟件工程編碼和語言lyh71輸入數(shù)據時,應允許使用自由格式輸入;輸入數(shù)據時,應允許使用自由格式輸入;應允許缺省值;應允許缺省值;輸入一批數(shù)據時,最好使用輸入結束標志,輸入一批數(shù)據時,最好使用輸入結束標志,而不要由用戶指定輸入數(shù)據數(shù)目;而不要由用戶指定輸入
43、數(shù)據數(shù)目;在交互式輸入輸入時,要在屏幕上使用提示在交互式輸入輸入時,要在屏幕上使用提示符明確提示交互輸入的請求,指明可使用選符明確提示交互輸入的請求,指明可使用選擇項的種類和取值范圍。同時,在數(shù)據輸入擇項的種類和取值范圍。同時,在數(shù)據輸入的過程中和輸入結束時,也要在屏幕上給出的過程中和輸入結束時,也要在屏幕上給出狀態(tài)信息;狀態(tài)信息;軟件工程編碼和語言lyh72當程序設計語言對輸入輸出格式有嚴格要求當程序設計語言對輸入輸出格式有嚴格要求時,應保持輸入格式與輸入語句的要求的一致時,應保持輸入格式與輸入語句的要求的一致性;性;給所有的輸出加注解,并設計輸出報表格式。給所有的輸出加注解,并設計輸出報表
44、格式。輸入輸出風格還受到許多其它因素的影響。輸入輸出風格還受到許多其它因素的影響。如輸入輸出設備(例如終端的類型、圖形設如輸入輸出設備(例如終端的類型、圖形設備、數(shù)字化轉換設備等)、用戶的熟練程度、備、數(shù)字化轉換設備等)、用戶的熟練程度、以及通信環(huán)境等。以及通信環(huán)境等。 軟件工程編碼和語言lyh73 討論效率的準則討論效率的準則程序的效率是指程序的效率是指程序的執(zhí)行速度程序的執(zhí)行速度及及程序所需占程序所需占用的內存的存儲空間用的內存的存儲空間。程序編碼是最后提高運。程序編碼是最后提高運行速度和節(jié)省存儲的機會,因此在此階段不能行速度和節(jié)省存儲的機會,因此在此階段不能不考慮程序的效率。讓我們首先明
45、確討論程序不考慮程序的效率。讓我們首先明確討論程序效率的幾條準則效率的幾條準則軟件工程編碼和語言lyh74 效率是一個性能要求,應當在需求分析階效率是一個性能要求,應當在需求分析階段給出。段給出。軟件效率以需求為準軟件效率以需求為準,不應以人,不應以人力所及為準。力所及為準。 好的設計可以提高效率。好的設計可以提高效率。 程序的程序的效率與程序的簡單性效率與程序的簡單性相關。相關。 一般說來,任何對效率無重要改善,且對一般說來,任何對效率無重要改善,且對程序的簡單性、可讀性和正確性不利的程程序的簡單性、可讀性和正確性不利的程序設計方法都是不可取的。序設計方法都是不可取的。軟件工程編碼和語言ly
46、h75算法對效率的影響算法對效率的影響 源程序的源程序的效率與詳細設計階段確定的算法的效率與詳細設計階段確定的算法的效率直接有關效率直接有關。在詳細設計翻譯轉換成源程。在詳細設計翻譯轉換成源程序代碼后,算法效率反映為程序的執(zhí)行速度序代碼后,算法效率反映為程序的執(zhí)行速度和存儲容量的要求。和存儲容量的要求。 設計向程序轉換過程中的指導原則:設計向程序轉換過程中的指導原則:軟件工程編碼和語言lyh76 在編程序前,盡可能化簡有關的算術表達式在編程序前,盡可能化簡有關的算術表達式和邏輯表達式;和邏輯表達式; 仔細檢查算法中的嵌套的循環(huán),盡可能將某仔細檢查算法中的嵌套的循環(huán),盡可能將某些語句或表達式移到
47、循環(huán)外面;些語句或表達式移到循環(huán)外面; 盡量避免使用多維數(shù)組;盡量避免使用多維數(shù)組; 盡量避免使用指針和復雜的表;盡量避免使用指針和復雜的表; 采用采用“快速快速”的算術運算;的算術運算; 軟件工程編碼和語言lyh77 不要混淆數(shù)據類型,避免在表達式中出現(xiàn)不要混淆數(shù)據類型,避免在表達式中出現(xiàn)類型混雜;類型混雜; 盡量采用整數(shù)算術表達式和布爾表達式;盡量采用整數(shù)算術表達式和布爾表達式; 選用等效的高效率算法;選用等效的高效率算法; 許多編譯程序具有許多編譯程序具有“優(yōu)化優(yōu)化”功能,可以自功能,可以自動生成高效率的目標代碼。動生成高效率的目標代碼。軟件工程編碼和語言lyh78影響存儲器效率的因素影
48、響存儲器效率的因素 在大中型計算機系統(tǒng)中,存儲限制不再是主在大中型計算機系統(tǒng)中,存儲限制不再是主要問題。在這種環(huán)境下,對要問題。在這種環(huán)境下,對內存采取基于操內存采取基于操作系統(tǒng)的分頁功能的虛擬存儲管理作系統(tǒng)的分頁功能的虛擬存儲管理。存儲效存儲效率與操作系統(tǒng)的分頁功能直接有關率與操作系統(tǒng)的分頁功能直接有關。軟件工程編碼和語言lyh79 采用結構化程序設計,采用結構化程序設計,將程序功能合理分塊將程序功能合理分塊,使每個模塊或一組密切相關模塊的程序體積使每個模塊或一組密切相關模塊的程序體積大小與每頁的容量相匹配大小與每頁的容量相匹配,可減少頁面調度,可減少頁面調度,減少內外存交換,提高存儲效率。
49、減少內外存交換,提高存儲效率。軟件工程編碼和語言lyh80 在微型計算機系統(tǒng)中,存儲器的容量對軟件在微型計算機系統(tǒng)中,存儲器的容量對軟件設計和編碼的制約很大。因此設計和編碼的制約很大。因此要選擇可生成要選擇可生成較短目標代碼且存儲壓縮性能優(yōu)良的編譯程較短目標代碼且存儲壓縮性能優(yōu)良的編譯程序序,有時需采用匯編程序。,有時需采用匯編程序。 提高存儲器效率的關鍵是程序的簡單性。提高存儲器效率的關鍵是程序的簡單性。軟件工程編碼和語言lyh81影響輸入輸出的因素影響輸入輸出的因素 輸入輸出可分為兩種類型:輸入輸出可分為兩種類型: 面向人面向人(操作員操作員)的輸入輸出的輸入輸出 面向設備的輸入輸出面向設
50、備的輸入輸出 如果操作員能夠十分方便、簡單地錄入輸入如果操作員能夠十分方便、簡單地錄入輸入數(shù)據,或者能夠十分直觀、一目了然地了解數(shù)據,或者能夠十分直觀、一目了然地了解輸出信息,則可以說面向人的輸入輸出是輸出信息,則可以說面向人的輸入輸出是高效的。高效的。軟件工程編碼和語言lyh82 關于面向設備的輸入關于面向設備的輸入/輸出,可以提出一些提輸出,可以提出一些提高輸入高輸入/輸出效率的指導原則:輸出效率的指導原則: 輸入輸入/輸出的請求應當最小化;輸出的請求應當最小化; 對于所有的輸入對于所有的輸入/輸出操作,輸出操作,安排適當?shù)陌才胚m當?shù)木彌_區(qū)緩沖區(qū),以減少頻繁的信息交換。,以減少頻繁的信息交
51、換。 對輔助存儲對輔助存儲(例如磁盤例如磁盤),選擇盡可能簡單選擇盡可能簡單的,可接受的存取方法的,可接受的存取方法;軟件工程編碼和語言lyh83 對輔助存儲的輸入對輔助存儲的輸入/輸出,應當輸出,應當成塊傳送成塊傳送; 對終端或打印機的輸入對終端或打印機的輸入/輸出,應考慮設備輸出,應考慮設備特性特性,盡可能改善輸入,盡可能改善輸入/輸出的質量和速度;輸出的質量和速度; 任何不易理解的,對改善輸入任何不易理解的,對改善輸入/輸出效果關輸出效果關系不大的措施都是不可取的;系不大的措施都是不可取的; 任何不易理解的所謂任何不易理解的所謂“超高效超高效”的輸入的輸入/輸輸出是毫無價值的;出是毫無價
52、值的;軟件工程編碼和語言lyh84程序復雜性度量程序復雜性度量 程序復雜性主要指程序復雜性主要指模塊內程序的復雜性模塊內程序的復雜性。它。它直接關聯(lián)到軟件開發(fā)費用的多少,開發(fā)周期直接關聯(lián)到軟件開發(fā)費用的多少,開發(fā)周期的長短和軟件內部潛伏錯誤的多少。的長短和軟件內部潛伏錯誤的多少。 減少程序復雜性,可提高軟件的簡單性和可減少程序復雜性,可提高軟件的簡單性和可理解性,并使軟件開發(fā)費用減少,開發(fā)周期理解性,并使軟件開發(fā)費用減少,開發(fā)周期縮短,軟件內部潛藏錯誤減少。縮短,軟件內部潛藏錯誤減少。軟件工程編碼和語言lyh85復雜性度量需要滿足的假設復雜性度量需要滿足的假設 為了度量程序復雜性,要求:為了度
53、量程序復雜性,要求: 它可以用來計算任何一個程序的復雜性;它可以用來計算任何一個程序的復雜性; 對于不合理的程序,例如對于長度動態(tài)增對于不合理的程序,例如對于長度動態(tài)增長的程序,或者對于原則上無法排錯的程長的程序,或者對于原則上無法排錯的程序,不應當使用它進行復雜性計算;序,不應當使用它進行復雜性計算; 如果程序中指令條數(shù)、附加存儲量、計算如果程序中指令條數(shù)、附加存儲量、計算時間增多,不會減少程序的復雜性。時間增多,不會減少程序的復雜性。軟件工程編碼和語言lyh86代碼行度量法代碼行度量法 源代碼行數(shù)度量法基于兩個前提:源代碼行數(shù)度量法基于兩個前提: 程序復雜性隨著程序規(guī)模的增加不均衡程序復雜
54、性隨著程序規(guī)模的增加不均衡地增長;地增長; 控制程序規(guī)模的方法最好是采用分而治控制程序規(guī)模的方法最好是采用分而治之的辦法。將一個大程序分解成若干個之的辦法。將一個大程序分解成若干個簡單的可理解的程序段。簡單的可理解的程序段。軟件工程編碼和語言lyh87 方法的基本考慮是方法的基本考慮是統(tǒng)計一個程序模塊的源代統(tǒng)計一個程序模塊的源代碼行數(shù)目,并以源代碼行數(shù)做為程序復雜性碼行數(shù)目,并以源代碼行數(shù)做為程序復雜性的度量。的度量。 設設每行代碼的出錯率每行代碼的出錯率為為每每100行源程序中可能行源程序中可能有的錯誤數(shù)目有的錯誤數(shù)目。 thayer曾指出,曾指出,程序出錯率的估算范圍是從程序出錯率的估算范
55、圍是從0.047之間之間,即每,即每100行源程序中可能存行源程序中可能存在在0.047個錯誤。他還指出,每行代碼的出個錯誤。他還指出,每行代碼的出錯率與源程序行數(shù)之間不存在簡單的線性關錯率與源程序行數(shù)之間不存在簡單的線性關系。系。軟件工程編碼和語言lyh88 lipow指出,對于指出,對于小程序小程序,每行代碼出錯率為,每行代碼出錯率為1.31.8;對于;對于大程序大程序,每行代碼的出錯,每行代碼的出錯率增加到率增加到2.73.2之間,這只是考慮了程之間,這只是考慮了程序的可執(zhí)行部分,沒有包括程序中的說明部分。序的可執(zhí)行部分,沒有包括程序中的說明部分。 lipow及其他研究者得出一個結論:對
56、于少于及其他研究者得出一個結論:對于少于100個語句的小程序,源代碼行數(shù)與出錯率是個語句的小程序,源代碼行數(shù)與出錯率是線性相關的。隨著程序的增大,出錯率以非線線性相關的。隨著程序的增大,出錯率以非線性方式增長。性方式增長。軟件工程編碼和語言lyh89mccabe度量法 mccabe度量法,又稱環(huán)路復雜性度量,是一度量法,又稱環(huán)路復雜性度量,是一種種基于程序控制流基于程序控制流的復雜性度量方法。的復雜性度量方法。 它它基于一個程序模塊的程序圖中環(huán)路的個數(shù)基于一個程序模塊的程序圖中環(huán)路的個數(shù),因此計算它先要畫出程序圖。因此計算它先要畫出程序圖。 程序圖是退化的程序流程圖。流程圖中每個處程序圖是退化
57、的程序流程圖。流程圖中每個處理都退化成一個結點,流線變成連接不同結點理都退化成一個結點,流線變成連接不同結點的有向弧。的有向弧。軟件工程編碼和語言lyh90 程序圖僅描述程序內部的控制流程,完全不程序圖僅描述程序內部的控制流程,完全不表現(xiàn)對數(shù)據的具體操作,以及分支和循環(huán)的表現(xiàn)對數(shù)據的具體操作,以及分支和循環(huán)的具體條件。具體條件。 計算環(huán)路復雜性的方法:計算環(huán)路復雜性的方法:根據圖論,在一個根據圖論,在一個強連通的有向圖強連通的有向圖g中,環(huán)的個數(shù)由以下公式中,環(huán)的個數(shù)由以下公式給出:給出: v(g)mnp其中,其中,v(g)是有向圖是有向圖g中環(huán)路個數(shù),中環(huán)路個數(shù),m是圖是圖g中弧數(shù),中弧數(shù),
58、n是圖是圖g中結點數(shù),中結點數(shù),p是圖是圖g中的強連中的強連通分量個數(shù)。通分量個數(shù)。軟件工程編碼和語言lyh91 myers建議,對于復合判定,例如,建議,對于復合判定,例如,(a0)(cd)(xa) 算做三個判定。算做三個判定。 為使圖成為強連通圖,從圖的入口點到出口點為使圖成為強連通圖,從圖的入口點到出口點加一條用虛線表示的有向邊,使圖成為強連通加一條用虛線表示的有向邊,使圖成為強連通圖。這樣就可以使用上式計算環(huán)路復雜性。圖。這樣就可以使用上式計算環(huán)路復雜性。 在例示中,結點數(shù)在例示中,結點數(shù)n11,弧數(shù),弧數(shù)m13,p1,則有則有 v(g)mnp131113. 等于程序圖中弧所封閉的區(qū)域
59、數(shù)。等于程序圖中弧所封閉的區(qū)域數(shù)。軟件工程編碼和語言lyh92軟件工程編碼和語言lyh93幾點說明幾點說明 環(huán)路復雜度取決于程序控制結構的復雜度。環(huán)路復雜度取決于程序控制結構的復雜度。當程序的分支數(shù)目或循環(huán)數(shù)目增加時其復雜當程序的分支數(shù)目或循環(huán)數(shù)目增加時其復雜度也增加。度也增加。環(huán)路復雜度與程序中覆蓋的路徑環(huán)路復雜度與程序中覆蓋的路徑條數(shù)有關條數(shù)有關。 環(huán)路復雜度是可加的。例如,環(huán)路復雜度是可加的。例如,模塊模塊a的復雜的復雜度為度為3,模塊模塊b的復雜度為的復雜度為 4,則,則模塊模塊a與與模塊模塊b的復雜度是的復雜度是7。軟件工程編碼和語言lyh94 mccabe建議,建議,對于復雜度超過
60、對于復雜度超過10的程序,的程序,應分成幾個小程序,以減少程序中的錯誤。應分成幾個小程序,以減少程序中的錯誤。walsh用實例證實了這個建議的正確性。在用實例證實了這個建議的正確性。在mccabe復雜度為復雜度為10的附近,存在出錯率的的附近,存在出錯率的間斷躍變。間斷躍變。 mccabe環(huán)路復雜度隱含的前提是:環(huán)路復雜度隱含的前提是:錯誤與錯誤與程序的判定加上例行子程序的調用數(shù)目成正程序的判定加上例行子程序的調用數(shù)目成正比。比。加工復雜性、數(shù)據結構、錄入與打亂輸加工復雜性、數(shù)據結構、錄入與打亂輸入卡片的錯誤可以忽略不計。入卡片的錯誤可以忽略不計。軟件工程編碼和語言lyh95 這種度量的缺點是:這種度量的缺點
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 知識點及2025秋期末測試卷(附答案)-蘇少版(2024)初中美術七年級上學期
- (新教材)2026年滬科版七年級下冊數(shù)學 9.3 分式方程 課件
- 臀紅預防的日常護理要點
- 痔瘡患者的社交護理技巧
- 2025年辦公樓外墻施工安全責任合同協(xié)議
- 征求意見稿-醫(yī)療機構開展疫苗臨床試驗能力建設規(guī)范
- 高危非致殘性缺血性腦血管事件復發(fā)風險評估和抗栓治療
- 《保護生物的多樣性》同步練習2
- 2025年農產品加工企業(yè)發(fā)展策略
- 土壤微生物基因流
- 股權轉讓-個人所得稅自行納稅申報表(A表)
- DB15T 435-2020 公路風吹雪雪害防治技術規(guī)程
- 備考2024四川省家庭教育指導師試題及答案三
- (正式版)CB∕T 4550-2024 船舶行業(yè)企業(yè)安全設備設施管理規(guī)定
- 全套管全回轉鉆機鉆孔咬合樁施工工藝
- 2024年春季學期中國文學基礎#期末綜合試卷-國開(XJ)-參考資料
- 軍隊物資工程服務采購產品分類目錄
- 《天文教學設計》教學設計
- 大學通用俄語1
- GB/T 24002.1-2023環(huán)境管理體系針對環(huán)境主題領域應用GB/T 24001管理環(huán)境因素和應對環(huán)境狀況的指南第1部分:通則
- GB/T 16938-2008緊固件螺栓、螺釘、螺柱和螺母通用技術條件
評論
0/150
提交評論