參考資料:高教版《全國計算機等級考試二級教程——C語言程序設(shè)計》
程序設(shè)計方法與風(fēng)格
就程序設(shè)計方法和技術(shù)的發(fā)展而言,主要經(jīng)過了結(jié)構(gòu)化程序設(shè)計和面向?qū)ο蟪绦蛟O(shè)計階段。
一般來講,程序設(shè)計風(fēng)格是指編寫程序時所表現(xiàn)出的特點、習(xí)慣和邏輯思路。程序設(shè)計風(fēng)格是很重要的,因為程序設(shè)計風(fēng)格會深刻地影響軟件的質(zhì)量和可維護(hù)性。可以認(rèn)為,著名的“清晰第一,效率第二”的論點已成為當(dāng)今主導(dǎo)的程序設(shè)計風(fēng)格。
要形成良好的程序設(shè)計風(fēng)格,主要應(yīng)注重考慮以下因素:
源程序文檔化
- 符號的命名:符號的命名應(yīng)具有一定的實際含義。
- 程序注釋:正確的注釋能夠幫助讀者理解程序。注釋一般分為序言性注釋和功能性注釋。
- 視覺組織:為了使程序結(jié)構(gòu)一目了然,可以在程序中使用空格、空行、縮進(jìn)等技巧使程序?qū)哟吻逦?/li>
數(shù)據(jù)說明的方法
- 數(shù)據(jù)說明的次序規(guī)范化:鑒于程序理解、閱讀和維護(hù)的需要,使數(shù)據(jù)說明次序固定,可以使數(shù)據(jù)的屬性容易查找,也有利于測試、排錯和維護(hù)。
- 說明語句中變量安排有序化:當(dāng)一個語句說明多個變量時,變量按照字母順序排序為好。
- 使用注釋來說明復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
語句的結(jié)構(gòu)
- 在一行內(nèi)只寫一條語句。
- 程序編寫應(yīng)優(yōu)先考慮清晰性。
- 除非對效率有特殊要求,程序編寫要做到清晰第一,效率第二。
- 首先要保證程序正確,然后才要求提高速度。
- 避免使用臨時變量而使程序的可讀性下降。
- 避免不必要的轉(zhuǎn)移。
- 盡可能使用庫函數(shù)。
- 避免采用復(fù)雜的條件語句。
- 盡量減少使用“否定”條件的語句。
- 數(shù)據(jù)結(jié)構(gòu)要有利于程序的簡化。
- 要模塊化,使模塊功能盡可能單一化。
- 利用信息隱蔽,確保每一個模塊的獨立性。
- 從數(shù)據(jù)出發(fā)去構(gòu)造程序。
- 不要修補不好的程序,要重新編寫。
輸入和輸出
輸入和輸出方式和格式應(yīng)盡可能方便用戶的使用。
- 對所有的輸入數(shù)據(jù)都要檢驗數(shù)據(jù)的合法性。
- 檢查輸入項的各種重要組合的合理性。
- 輸入格式要簡單,以使得輸入的步驟和操作盡可能簡單。
- 輸入數(shù)據(jù)時,應(yīng)允許使用自由格式。
- 應(yīng)允許缺省值。
- 輸入一批數(shù)據(jù)時,最好使用輸入結(jié)束標(biāo)志。
- 在以交互式輸入/輸出方式進(jìn)行輸入時,要在屏幕上使用提示符明確提示輸入的請求,同時在數(shù)據(jù)輸入過程中和輸入結(jié)束時,應(yīng)在屏幕上給出狀態(tài)信息。
- 當(dāng)程序設(shè)計語言對輸入格式有嚴(yán)格要求時,應(yīng)保持輸入格式與輸入語句的一致性;給所有的輸出加注釋,并設(shè)計輸出報表格式。
結(jié)構(gòu)化程序設(shè)計
結(jié)構(gòu)化程序設(shè)計的原則
結(jié)構(gòu)化程序設(shè)計方法的主要原則可以概括為自頂向下,逐步求精,模塊化,限制使用goto語句。
自頂向下
程序設(shè)計時,應(yīng)先考慮總體,后考慮細(xì)節(jié);先考慮全局目標(biāo),后考慮局部目標(biāo)。
逐步求精
對復(fù)雜的問題,應(yīng)設(shè)計一些子目標(biāo)作過渡,逐步細(xì)化。
模塊化
把程序要解決的總目標(biāo)分解為分目標(biāo),再進(jìn)一步分解為具體的小目標(biāo),把每一個小目標(biāo)稱為一個模塊。
限制使用goto語句
結(jié)構(gòu)化程序的基本結(jié)構(gòu)與特點
- 順序結(jié)構(gòu)
- 選擇結(jié)構(gòu)
- 循環(huán)結(jié)構(gòu)
按結(jié)構(gòu)化程序設(shè)計方法設(shè)計出來的程序基友明顯的優(yōu)點:
- 程序易于理解、使用和維護(hù)。
- 提高了編程工作的效率。
結(jié)構(gòu)化程序設(shè)計原則和方法使用
- 使用程序設(shè)計語言中的順序、選擇、循環(huán)等有限的控制結(jié)構(gòu)表示程序的控制邏輯。
- 選用的控制結(jié)構(gòu)只準(zhǔn)許有一個入口和一個出口。
- 程序語句組成容易識別的塊,每塊只有一個入口和一個出口。
- 復(fù)雜結(jié)構(gòu)應(yīng)該用嵌套的基本控制結(jié)構(gòu)進(jìn)行組合嵌套來實現(xiàn)。
- 語言中所沒有的控制結(jié)構(gòu),應(yīng)該采用前后一致的方法來模擬。
- 嚴(yán)格控制goto語句的使用。
面向?qū)ο蟮某绦蛟O(shè)計
關(guān)于面向?qū)ο蠓椒?/h2>
面向?qū)ο蠓椒ǖ谋举|(zhì),就是主張從客觀世界固有的事物出發(fā)來構(gòu)造系統(tǒng),提倡人類在現(xiàn)實生活中常用的思維方法來認(rèn)認(rèn)識、理解和描述客觀事物,強調(diào)最終建立的系統(tǒng)能夠映射問題域。
面向?qū)ο蠓椒ㄖ饕幸韵聝?yōu)點:
- 與人類習(xí)慣思維方法一致。
- 穩(wěn)定性好。
- 可重用性好。
- 易于開發(fā)大型軟件產(chǎn)品。
- 可維護(hù)性好。
面向?qū)ο蠓椒ǖ幕靖拍?/h2>
對象
對象是面向?qū)ο蠓椒ㄖ凶罨镜母拍睢?/p>
對象可以用來表示客觀世界中的任何實體,也就是說,應(yīng)用領(lǐng)域中有意義的、與所要解決的問題有關(guān)系的任何事物都可以作為對象,它既可以是具體的物理實體的抽象,也可以是人為的概念,或者是任何有明確邊界和意義的東西。
總之,對象是對問題域中某個實體的抽象,是構(gòu)成系統(tǒng)的一個基本單位,它由一組表示其靜態(tài)特征的屬性和它可執(zhí)行的一組操作組成。
對象可以做的操作表示它的動態(tài)行為,在面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計中,通常把對象的操作也稱為方法或服務(wù)。
屬性即對象所包含的信息,它在設(shè)計對象時確定,一般只能通過執(zhí)行對象的操作來改變。
操作描述了對象執(zhí)行的功能,若通過消息傳遞,還可以為其他對象使用。
對象有如下一些基本特點:
- 標(biāo)識唯一性:對象是可區(qū)分的,并且由對象的內(nèi)在本質(zhì)來區(qū)分。
- 分類性:可以將具有相同屬性的對象抽象成類。
- 多態(tài)性:同一個操作可以是不同對象的行為。
- 封裝性:從外面看只能看到對象的外部特征,對象的內(nèi)部狀態(tài)只能由其自身改變。
- 模塊獨立性好:對象內(nèi)部各種元素彼此結(jié)合得很緊密,內(nèi)聚性強。
類和實例
將屬性、操作相似的對象歸為類。類是對象的抽象,它描述了屬于該對象類型的所有對象的性質(zhì),而一個對象則是其對應(yīng)類的一個實例。
類是關(guān)于對象性質(zhì)的描述,它同對象一樣,包括一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作。
消息
對象間的相互合作需要一個機制協(xié)助進(jìn)行,這樣的機制稱為消息。
消息是一個實例與另一個實例之間傳遞的信息,它請求對象執(zhí)行某一處理或回答某一要求的信息,它同意了數(shù)據(jù)流和控制流。
通常,一個消息由三部分組成:
- 接受消息的對象的名稱;
- 消息標(biāo)識符(也稱消息名);
- 零個或多個參數(shù)。
繼承
繼承是使用已有的類定義作為基礎(chǔ)建立新類的定義技術(shù)。已有的類可當(dāng)作基類來引用,則新類相應(yīng)地可當(dāng)作派生類來引用。
廣義地說,繼承是指能夠直接獲得已有的性質(zhì)和特征,而不必重復(fù)定義它們。
面向?qū)ο筌浖夹g(shù)的許多強有力的功能和突出的優(yōu)點,都來源于把類組成一個層次結(jié)構(gòu)的系統(tǒng):一個類的上層可以有父類,下層可以有子類。這種層次結(jié)構(gòu)系統(tǒng)的一個重要性質(zhì)是繼承性,一個類直接繼承其父類的描述(數(shù)據(jù)和操作)或特性,子類自動地共享基類中定義的數(shù)據(jù)和方法。
繼承分為單重繼承和多重繼承。單重繼承是指一個類只允許有一個父類,多重繼承是指一個類允許有多個父類。
多態(tài)性
對象根據(jù)所接收的消息而做出動作,同樣的消息被不同的對象接收時可導(dǎo)致完全不同的行為,該現(xiàn)象稱為多態(tài)性。
在面向?qū)ο蟮能浖夹g(shù)中,多態(tài)性是指子類對象可以像父類對象那樣使用,同樣的消息既可以發(fā)送給父類對象也可以發(fā)送給子類對象。