版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程式設計語言和編碼第一節程式設計語言程式設計語言的演變第一代語言:與機器緊密相關的機器語言和組合語言,與硬體操作一一對應。第二代語言:20世紀50年代初先後出現,應用面廣。FORTRAN,COBOL,ALGOL60和BASIC等。第一節程式設計語言第三代語言:結構化程式語言。直接支持結構化構件,並具有很強的過程能力和數據結構能力。本身又分為三類:通用高級語言:最早的有Algol60,以它為基礎衍生出PL/1,Pascal,Modula-2,C和Ada等。這些語言被廣泛地用於各種應用領域。面向對象程式語言(OOPL)直接支持類定義、繼承、封裝、和消息傳遞等概念,能自然地實現由OOA/OOD給出的分析/設計模型。最有生命力的有:C++,Objective-c,Smalltalk,Eiffel和Java等。專用語言:應用面窄,語法形式獨特。它針對特殊用途設計,翻譯過程簡便、高效,但可以執行和可維護性較差。如:應用於人工智慧領域:LISP,Prolog應用於數組和向量運算:APL應用於開發微處理機軟體:Forth第四代語言(4GL)抽象層次更高,不再涉及太多的演算法性細節。目前使用最廣的是資料庫查詢語言。第一節程式設計語言程式設計語言特性工程特性可移植性:支持重用開發工具的可利用性:減少源代碼的開發時間和提高品質軟體的可重用性:加快開發速度,提高軟體生產率和軟體品質。可維護性:應便於將設計翻譯成代碼,語言本身的自說明性可促進軟體的可維護性第一節程式設計語言技術特性:根據專案的特點選擇相應的語言,影響到概要設計和詳細設計的實現,對軟體的維護也有一定的影響。將設計翻譯為代碼的便利程度:支持結構化構件,複雜的數據結構,特殊I/O處理,OO配套的開發工具:CASE工具第一節程式設計語言心理特性二義性:x=x1/x2*x3,引起程式員對程式理解的混亂緊致性:程式員需要記憶的資訊的總量局部性:一種聯想機制,直接支持結構化構件一致性:採用標記法協調一致的程度;線性:語言的線性與維持功能域的概念緊密相連第一節程式設計語言第一節程式設計語言程式設計語言的選擇專案的應用領域軟體開發方法軟體開發運行環境演算法和數據結構的複雜性軟體開發人員的知識用戶關於性能的需求
第二節程式設計過程面向對象語言對OOD的支持(C++)面向對象語言對OOD的支持面向對象語言對OOD的支持面向對象語言對OOD的支持面向對象語言對OOD的支持面向對象語言對OOD的支持基於對象語言對OOD的支持(Ada)基於對象語言對OOD的支持(Ada)基於對象語言對OOD的支持(Ada)基於對象語言對OOD的支持(Ada)基於對象語言對OOD的支持(Ada)過程是語言對OOD的支持
傳統語言對數據抽象、封裝等概念的支持較基於對象的語言(如:Ada)更弱。類與對象在C語言中,只好用結構表示。同樣對於上面所提到的例子的C語言描述如下:過程式語言對OOD的支持(C)過程是語言對OOD的支持(C)過程是語言對OOD的支持(C)第三節程式設計標準程式的清晰、緊湊、高效等特性在編碼時往往互相矛盾。程式的編碼一般應考慮下列原則:編制易於修改和維護的代碼:在模組化和麵向對象詳細設計的基礎上,進一步按屬性劃分程式。編制易於測試的代碼:運用條件編譯語句儘早設計出測試用例,採用統一的命名規則管理這些測試用例並適時地進行回歸測試等一系列措施。第三節程式設計標準必須將編程與編文檔的工作統一起來:這樣既有利於整個專案按期完成,又能保證文檔與程式協調一致。一個程式段的文檔包括:代碼的功能;代碼的完成者;代碼在整個軟體系統中的位置;代碼編制、復審的時間;保留代碼的原因;代碼中如何使用數據結構和演算法。第三節程式設計標準編程中採用統一的標準和約定,降低程式複雜性:用統一的版本命名規則進行版本控制、注釋、取消Goto語句、慎用嵌套等限定每一層的副作用,減少耦合程度:主要技術是分解。盡可能地重用
第四節程式設計風格程式實際上也是一種供人閱讀的文章,有一個文章的風格問題。應該使程式具有良好的風格。
根源程式文檔化
數據說明
語句結構
輸入/輸出方法程式設計風格:根源程式文檔化識別字的命名符號名即識別字,包括模組名、變數名、常量名、標號名、副程式名、、數據區名以及緩衝區名等。這些名字應能反映它所代表的實際東西,應有一定實際意義。例如,表示次數的量用Times,表示總量的用Total,表示平均值的用Average,表示和的量用Sum等。名字不是越長越好,應當選擇精煉的意義明確的名字。必要時可使用縮寫名字,但這時要注意縮寫規則要一致,並且要給每一個名字加注釋。同時,在一個程式中,一個變數只應用於一種用途。
程式設計風格:根源程式文檔化安排注釋程式的注釋夾在程式中的注釋是程式員與日後的程式讀者之間通信的重要手段。注釋決不是可有可無的。一些正規的程式文本中,注釋行的數量占到整個根源程式的1/3到1/2,甚至更多。注釋分為序言性注釋和功能性注釋。程式設計風格:根源程式文檔化序言性注釋通常置於每個程式模組的開頭部分,它應當給出程式的整體說明,對於理解程式本身具有引導作用。有些軟體開發部門對序言性注釋做了明確而嚴格的規定,要求程式編制者逐項列出。有關專案包括:
程式標題;程式設計風格:根源程式文檔化有關本模組功能和目的的說明;
主要演算法;
介面說明:包括調用形式,參數描述,副程式清單;
有關數據描述:重要的變數及其用途,約束或限制條件,以及其他有關資訊;
模組位置:在哪一個原始檔案中,或隸屬於哪一個軟體包;
開發簡歷:模組設計者,復審者,復審日期,修改日期及有關說明等。程式設計風格:根源程式文檔化功能性注釋功能性注釋嵌在根源程式體中,用以描述其後的語句或程式段是在做什麼工作,或是執行了下麵的語句會怎麼樣。而不要解釋下麵怎麼做。例如,
/*ADDAMOUNTTOTOTAL*/
TOTAL=AMOUNT+TOTAL
不好。
程式設計風格:根源程式文檔化如果注明把月銷售額計入年度總額,便使讀者理解了下麵語句的意圖:
/*ADDMONTHLY-SALESTOANNUAL-TOTAL*/
TOTAL=AMOUNT+TOTAL要點描述一段程式,而不是每一個語句;用縮進和空行,使程式與注釋容易區別;注釋要正確。程式設計風格:根源程式文檔化程式的視覺組織恰當地利用空格,可以突出運算的優先性,避免發生運算的錯誤。例如,將運算式
(A<-17)ANDNOT(B<=49)ORC
寫成
(A<-17)ANDNOT(B<=49)ORC自然的程式段之間可用空行隔開;程式設計風格:根源程式文檔化移行也叫做向右縮格。它是指程式中的各行不必都在左端對齊,都從第一格起排列。這樣做使程式完全分不清層次關係。對於選擇語句和迴圈語句,把其中的程式段語句向右做階梯式移行。使程式的邏輯結構更加清晰。例如,兩重選擇結構嵌套,寫成下麵的移行形式,層次就清楚得多。
程式設計風格:根源程式文檔化IF(…)
THEN
IF(…)
THEN
……
ELSE
……
ENDIF
……ELSE……ENDIF程式設計風格:數據說明在設計階段已經確定了數據結構的組織及其複雜性。在編寫程式時,則需要注意數據說明的風格。為了使程式中數據說明更易於理解和維護,必須注意以下幾點。
1.數據說明的次序應當規範化
程式設計風格:數據說明例如,在FORTRAN程式中數據說明次序
①常量說明
②簡單變數類型說明
③數組說明
④公用數據塊說明
⑤所有的檔說明在類型說明中還可進一步要求。例如,可按如下順序排列:
①整型量說明
②實型量說明
③字元量說明
④邏輯量說明程式設計風格:數據說明2.說明語句中變數安排有序化當多個變數名在一個說明語句中說明時,應當對這些變數按字母的順序排列。帶標號的全程數據(如FORTRAN的公用塊)也應當按字母的順序排列。例如,把
integersize,length,width,cost,price
寫成
integercost,length,price,size,width程式設計風格:數據說明3.使用注釋說明複雜數據結構如果設計了一個複雜的數據結構,應當使用注釋來說明在程式實現時這個數據結構的固有特點。例如,對PL/1的鏈表結構和Pascal中用戶自定義的數據類型,都應當在注釋中做必要的補充說明。程式設計風格:語句結構在設計階段確定了軟體的邏輯流結構,但構造單個語句則是編碼階段的任務。語句構造力求簡單,直接,不能為了片面追求效率而使語句複雜化。在一行內只寫一條語句在一行內只寫一條語句,並且採取適當的移行格式,使程式的邏輯和功能變得更加明確。許多程式設計語言允許在一行內寫多個語句。但這種方式會使程式可讀性變差。因而不可取。程式設計風格:語句結構例如,有一段排序程式
FORI:=1TON-1DOBEGINT:=I;FORJ:=I+1TONDOIFA[J]<A[T]THENT:=J;IFT≠ITHENBEGINWORK:=A[T];A[T]:=A[I];A[I]:=WORK;ENDEND;由於一行中包括了多個語句,掩蓋了程式的迴圈結構和條件結構,使其可讀性變得很差。這段程式可以改進如下:程式設計風格:語句結構FORI:=1TON-1DO//改進佈局
BEGIN
T:=I;
FORJ:=I+1TONDO
IFA[J]<A[T]THENT:=J;
IFT≠ITHEN
BEGIN
WORK:=A[T];
A[T]:=A[I];
A[I]:=WORK;
ENDEND;程式設計風格:語句結構程式編寫首先應當考慮清晰性程式編寫首先應當考慮清晰性,不要刻意追求技巧性,使程式編寫得過於緊湊。例如,有一個用Pascal語句寫出的程式段:
A[I]:=A[I]+A[T];
A[T]:=A[I]-A[T];
A[I]:=A[I]-A[T];程式設計風格:語句結構此段程式可能不易看懂,有時還需用實際數據試驗一下。實際上,這段程式的功能就是交換A[I]和A[T]中的內容。目的是為了節省一個工作單元。如果改一下:
WORK:=A[T];
A[T]:=A[I];
A[I]:=WORK;
就能让读者一目了然了。
程式設計風格:語句結構程式要能直截了當地說明程式員的用意。程式編寫得要簡單,寫清楚,直截了當地說明程式員的用意。例如,
DOI=1,N
DOJ=1,N
V(I,J)=(I/J)*(J/I)
除法運算(/)在除數和被除數都是整型量時,其結果只取整數部分,而得到整型量。程式設計風格:語句結構當I<J時,I/J=0
当J<I時,J/I=0得到的數組當I≠J時
V(I,J)=(I/J)*(J/I)=0
當I=J時
V(I,J)=(I/J)*(J/I)=1這樣得到的結果V是一個單位矩陣。程式設計風格:語句結構寫成以下的形式,就能讓讀者直接瞭解程式編寫者的意圖。
DOI=1,N
DOJ=1,N
IF(I.EQ.J)THEN
V(I,J)=1.0
ELSE
V(I,J)=0.0
ENDIF
CONTINUE程式設計風格:語句結構除非對效率有特殊的要求,程式編寫要做到清晰第一,效率第二。不要為了追求效率而喪失了清晰性。事實上,程式效率的提高主要應通過選擇高效的演算法來實現。首先要保證程式正確,然後才要求提高速度。反過來說,在使程式高速運行時,首先要保證它是正確的。
程式設計風格:語句結構避免使用臨時變數而使可讀性下降。例如,有的程式員為了追求效率,往往喜歡把運算式
A[I]+1/A[I];寫成AI=A[I];X=AI+1/AI;這樣將一句分成兩句寫,會產生意想不到的問題。程式設計風格:語句結構讓編譯程序做簡單的優化。盡可能使用庫函數避免不必要的轉移。同時如果能保持程式可讀性,則不必用GOTO語句。儘量只採用三種基本的控制結構來編寫程式。除順序結構外,使用IF-THEN-ELSE來實現選擇結構;使用DO-UNTIL或DO-WHILE來實現迴圈結構。程式設計風格:語句結構避免使用空的ELSE語句和IF…THENIF…的語句。這種結構容易使讀者產生誤解。例如,
IF(CHAR>='A’)THEN
IF(CHAR<='Z’)THEN
PRINT“Thisisaletter。”
ELSE
PRINT“Thisisnotaletter。”可能產生二義性問題。程式設計風格:語句結構避免採用過於複雜的條件測試。儘量減少使用“否定”條件的條件語句。例如,如果在程式中出現
IFNOT((CHAR<‘0’)OR(CHAR>‘9’))THEN……
改成
IF(CHAR>='0’)AND(CHAR<='9’)THEN……
不要讓讀者繞彎子想。程式設計風格:語句結構盡可能用通俗易懂的偽碼來描述程式的流程,然後再翻譯成必須使用的語言。數據結構要有利於程式的簡化。要模組化,使模組功能盡可能單一化,模組間的耦合能夠清晰可見。利用資訊隱蔽,確保每一個模組的獨立性。程式設計風格:語句結構從數據出發去構造程式。不要修補不好的程式,要重新編寫。也不要一味地追求代碼的複用,要重新組織。對太大的程式,要分塊編寫、測試,然後再集成。對遞歸定義的數據結構儘量使用遞歸過程。程式設計風格:輸入/輸出方法輸入和輸出資訊是與用戶的使用直接相關的。輸入和輸出的方式和格式應當盡可能方便用戶的使用。一定要避免因設計不當給用戶帶來的麻煩。因此,在軟體需求分析階段和設計階段,就應基本確定輸入和輸出的風格。系統能否被用戶接受,有時就取決於輸入和輸出的風格。
程式設計風格:輸入/輸出方法不論是批處理的輸入/輸出方式,還是互動式的輸入/輸出方式,在設計和程式編碼時都應考慮下列原則:對所有的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 整改通知书5篇集锦
- 安全员岗位述职
- 广东广州市2026年普通高中毕业班考前冲刺题(二)英语试题(解析版)
- 山东省2025-2026学年高一下学期5月阶段性检测英语试题(解析版)
- 安全用电制作教程
- 2026年湘教版高二化学第1课化学实验技能测试题
- 2026年云南省部编版初中数学上册第9章综合测试卷
- 小学一年级心理健康北师大版第二十九课热爱生命教学设计
- 小学四年级劳动“我爱厨艺”交流会教学设计
- 初中地理七年级上册第一章《地球》复习教学设计
- 数控控制系统:智能制造与高端机床市场趋势
- 2026年百色市右江区社区工作者考试题库及答案
- 2026年重症5c培训试题(附答案)
- 2026年CSCO胃癌诊疗指南解读课件
- 中途入股合作协议书范本
- 小学道德与法治新部编版五年级上册全册教案(2026秋)
- 检验科仪器设备校准验证程序性文件
- 2025年高校二级学院教学管理笔试真题(附答案)
- 新时代陕西省立德树人工作指南细则
- 2026年针灸推拿医师高频面试题包含详细解答
- dbj41现浇混凝土内置保温墙体技术规程
评论
0/150
提交评论