C語言對結構化程序設計的支持

軟件設計從架構上來說,以下幾點是其基本的指導原則:

1:低耦合、高內聚

2:開閉原則,即對擴展開放,對修改關閉

3:功能的模塊化、正交化

。。。

所有這些原則的根本目的是:提高軟件的可複用性、可擴展性。

各種高級編程語言,爲了實現這一目的,都在自身語言中提供了相應的支持。如 類class,接口interface。在這篇文章裏,我將從最基本的語言:C 談起,來說說C語言對軟件的結構化、模塊化設計的支持。

主要包括一下幾個概念:

1:文件

包括頭文件和源文件,這是最基本的。將函數按功能安排在不同的源文件中,使得每個源文件或每幾個源文件並同頭文件組成一個功能完整的子模塊,源文件之間的信息共享是通過頭文件來完成的。

C中,每個源文件都是一個完整且獨立的編譯單元。而頭文件中的變量和函數聲明用於每個編譯單元之間的共享和最終的鏈接。

要完成以上功能,C語言中提供了以下幾個主要且重要(其他與結構化設計關係不大的概念,這裏將不介紹)關鍵字和概念:

static,extern;作用域(可見性),生命期;全局,局部;

下面進行簡單說明:

static: 將函數或變量(統稱爲標識符)的作用域限制在文件作用域中(如果該標識符原來是external);(如果該標識符原來是塊作用域的,即位於某函數中,則作用域不變)

extern: 在函數外部聲明的標識符默認爲external, extern修飾的標識符用來告訴編譯器該標識符已經在其他源文件中定義了,並且是external的,所以我這裏想要直接拿來用,而不用我自己再定義了。對於一個良好的設計,extern聲明一般都放在頭文件中,對於需要使用該標識符的源文件可以通過包含該頭文件來使用它。

作用域:主要的是:文件作用域和塊作用域。(其他兩種作用域:函數聲明作用域和函數作用域基本沒啥用處,但要知道是什麼東西)

生命期:生命期的長短與標識符(這裏尤其指的是變量或對象)的存儲位置相關,並且也受到static關鍵字的控制。

全局:在函數之外定義的標識符都是在當前文件中是可見的,缺省情況下在整個程序中也是可見的。但使用static可將其可見性只限於當前文件

局部:在函數內定義。

通過上面的介紹,我們將得到這幾個工具來實現一個良好的C程序:static, extern, 頭文件,源文件,函數

指導原則如下:

1:函數的定義全部放在源文件(.CPP)中

2:如果該函數只需要在當前文件中使用,則請務必在前面加static修飾

3:如果希望該函數被其他源文件使用,則將該函數的extern聲明放在一指定頭文件(.h)中,再在需要使用該函數的源文件中包含該頭文件

4:變量的使用規則與函數相同


C語言畢竟相對簡單,沒有提供很多更高級的代碼複用技術,但只要真正理解(要理解底層的內存佈局和分配)了上述的軟件設計原則,一樣可以設計出很好的軟件架構。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章