⑴ c語言編寫程序時的注意事項
在進行C語言編寫程序時,需要注意以下幾點:
1. 編寫規范:要遵守C語言的編程規范,如變數命名規范、縮進、注釋等。編寫規范的代碼易於維護和理解,且可以提高代碼質量。
2. 內存管理:C語言中需要手動管理內存,包括內存分配、釋放等。要注意內存泄漏和指針錯誤等問題,避免程序崩潰或數據損壞等情況。
3. 安全性:C語言對數據的邊界檢查並不嚴格,容易受到緩沖區溢出等安全問題的攻擊。在編寫程序時需要考慮安全性,包括輸入的數據驗證、防範攻擊等。
4. 錯誤處理:C語言中需要處理各種可能出現的錯誤,包括語法錯誤、運行時錯誤、編譯錯誤等。需要使用錯誤處理機制來處理這些錯誤,保證程序運行的穩定性和安全性。
5. 代碼復用性:C語言中可以使用函數和模塊化的方式來提高代碼的復用性。需要把相關的功能封裝成函數或模塊,以便在程序的不同部分進行重用,提高代碼效率和可維護性。
除此之外,還需要注意代碼的可讀性和可維護性。編寫清晰易懂的代碼,遵守編程規范,注重代碼注釋,是提高代碼可讀性和可維護性的有效方法。
⑵ McCall提出的軟體質量特性有哪些
1、正確性:系統滿足規格說明和用戶目標的程度,即在預定環境下能正確地完成預期功能的程度。
2、健壯性:在硬體發生故障、輸入的數據無效或操作錯誤等意外環境下,系統能做出適當響應的程度。
3、效率:為了完成預定的功能,系統需要的計算資源的多少。
4、完整性:對未經授權的人使用軟體或數據的企圖,系統能夠控制(禁止)的程度。
5、可用性:系統在完成預定應該完成的功能時令人滿意的程度。
6、風險:按預定的成本和進度把系統開發出來,並且為用戶所滿意的概率。
7、可理解性:理解和使用該系統的容易程度。
8、可維修性:診斷和改正在運行現場發現的錯誤所需要的工作量的大小。
9、靈活性:修改或改進正在運行的系統需要的工作量的多少。
10、可測試性:軟體容易測試的程度。
11、可移植性:把程序從一種硬體配置和軟體系統環境轉移到另一種配置和環境時,需要的工作量多少。
12、可再用性:在其他應用中該程序可以被再次使用的程度。
13、互運行性:把該系統和另一個系統結合起來需要的工作量的多少。
(2)程序的復用性是什麼擴展閱讀:
一個軟體可以正確地運行在不同環境下,則認為軟體可移植性高,也可以叫軟體在不同平台下是健壯的。
一個軟體能夠檢測自己內部的設計或者編碼錯誤,並得到正確的執行結果,這是軟體的正確性標准,但是也可以說,軟體有內部的保護機制,是模塊級健壯的。
軟體健壯性是一個比較模糊的概念,但是卻是非常重要的軟體外部量度標准。軟體設計的健壯與否直接反應了分析設計和編碼人員的水平。即所謂的高手寫的程序不容易死。
參考資料來源:
網路——軟體質量
網路——健壯性
⑶ java中的復用類是什麼意思
代碼復用能夠大大簡化我們的工作。面向對象的語言中一般是通過對類的重復使用來達到代碼復用的目的的,Java也不例外。在Java中,復用類有兩種方式,合成(has-a)與繼承(is-a)。合成就是在新的類中直接創建舊類的對象,這里我們復用的只是代碼的功能而不是它的形式。而繼承是在原有的類的基礎上建立一個新類,新類具有舊類的形式,但也加入了一些新的特性。這一章介紹的主要就是合成與繼承方面的知識。
一、合成所使用的語法
合成的語法很簡單,只要把要復用的類的對象的引用直接放到新類里就可以了。當然僅僅這樣還是不夠的,我們還要創建這個類的對象讓那個引用來指向它。因為Java不會幫我們自動創建一個預設的對象,它只會自動替我們把欄位中的引用初始化為null。為引用賦值可以在三個地方,一個就是在定義這個引用的時候,另一個是在構造函數中,第三個地方就是在即將要使用這個對象之前。為了防止忘記在使用前為引用賦值,我們一般應該在前兩種場合來創建對象。如果我們要創建的這個對象會花費很大開銷,而且又可能不是每次都需要創建它的話,我們可以考慮第三種方式來創建這個對象。
二、繼承所使用的語法
繼承是Java中的重要部分,因為Java是使用單根體系的(C++不是這樣,因為它要保持向C的兼容),所以我們定義的每一個類都是繼承自Java中的根類Object類。在定義一個繼承自已有的類的類時,要使用extends關鍵字,其後跟上基類的名字,這樣表示新定義的這個類是繼承自那個基類。在Java中不允許多重繼承(C++中允許),也就是說它不允許一個類擁有多於一個的基類,這點劣勢可以用介面來彌補,因為Java允許一個類實現任意多個介面。
一個子類會自動獲得基類中的全部欄位與方法(那些由訪問控制符控制的對子類而言不可見的成員也會獲得,只是不可見,用不了),這也就是對基類中代碼的復用。除了自動獲得自基類的代碼外,子類中還可定義新的成員,也可以覆寫基類中的方法(所謂覆寫指的是方法的聲明部分一樣但實現不一樣),這樣可以讓相同簽名的方法擁有不一樣的形為。
因為子類自動擁有了基類的成員,因此在子類中自然就可以調用基類的方法。如果這個方法在子類中被覆寫過,那編譯器知道你是要調用哪個方法呢?Java提供了super關鍵字在類中表示該類的基類的引用,我們可以通過這個關鍵字來明確表示我們要用到的是基類中的成員。如果不寫super的話,那編譯器將會理解為嵌套調用。
這里有個題外話。在Java程序中常常是用public類中的main()方法做為整個程序的入口。這樣的靜態main()方法並不是非得要在public類中才能出現的,靜態的main()方法可以做所有類的入口(但只能是main(),而不能是其它名字的什麼靜態方法)。比如一個程序有多個class組成,我們要對其中的某個class進行單元測試時,我們就可以在這個class文件中加入main(),編譯後生成這個類的.class文件,在控制台通過java來運行它就是了。
子類繼承了一個基類後便擁有了基類中的成員,也就可以通過創建的子類對象來訪問基類中可見的成員。Java是怎樣做到這一點的呢?在我們創建一個子類對象的時候,這里創建的已經不是一個類的對象了,它還會創建這個類的基類的對象,這個基類的對象創建後被包括在子類的對象中。也就是說創建的子類的對象擁有其基類全部的成員(從這就可以知道為什麼可以上傳),但是子類對象只能訪問基類中它可見的成員。那麼在創建一個這樣的對象時,子類和基類對象創建的順序是怎麼樣的呢?為了能夠正確的初始化基類,一般會調用基類的構造函數來進行初始化。Java中在調用子類的構造函數時首先會自動的調用基類的構造函數,並且這樣的過程是層層傳遞的。比如C繼承了B,而B又繼承了A,在創建C的對象時,C的構造函數會首先調用B的構造函數,這時B的構造函數又會首先調用A的構造函數。(如果基類中沒有默認構造函數,編譯時就會報錯。)但是這里自動調用的都是基類的默認構造函數(無參的),如果我們想調用基類的某個帶參數的構造函數又該怎麼辦呢?上面提到可以用super來代替基類的引用,與在構造函數中通過this調用本類其它構造函數的形式一樣,我們可以通過super來調用基類帶參數的構造函數,比如「super(i, j)」。與調用本類的其它構造函數一樣,對基類構造函數的顯示調用也需要放在子類構造函數的最前面,在它之前不能有任何東西,如果基類的構造函數會拋出異常需要捕獲的話,就會比較麻煩。