2013年9月26日 星期四

模組化(Modular)

這學期開始的Data Structure課程所要寫的程式架構勢必比上學期的Program Language課程大上很多,為了使得龐大的程式能夠被切割、分組成容易維護的小單位,模組化的概念顯的重要許多。C語言中,模組化的時候我們通常搭配header file來實作,下面做簡單講解。

模組化(Modular)

模組化本身是一種把實體抽象化的過程,把原本實際存在的東西轉換成概念、定義、模型、範本、架構的過程。

打個比方好了,我們常常在寫報告的時候會參考一些範本,我們會在範本當中找到一些寫報告的格式、必備內容等等通則。

像是普物實驗報告基本具備格式:Topic、Abstract、Introduction、Experimental Design、Data Analysis & Discussion、Conclusion

每一份普物實驗報告基本上都脫離不了這種格式,他們之間的差異只在於內容

若我們從程式的structure概念來看,他們都擁有屬性(資料)種類都一樣,差異在於屬性(資料)被設定的值(value)

因此我們可以想成定義一個structure就好比先行建立好一個沒有內容的報告的格式。

我們可以把報告格式想成是一個模組,而定義structure就是在建立模組(Module)



報告格式本身是不具有任何意義的,我們最後所要交出去的是一份真正的報告,而不是報告的格式。

每當我們想要寫報告的時候,就依照格式把資訊填入,一份報告就完成了

同樣的,我們依照structure所規定的資料格式填入值,而產生一個實際真正儲存資料的結構變數,在程式的概念當中我們稱為實體(instance)。

程式語言課曾經提過,function是一種模組化的手段。不知道各位當時是否有完全體會到這句話的意思,這邊簡單說明一下:

試著回想一下,會被獨立成為function的程式碼,大部分都是具有一些固定且單一用途,例如資料排序、交換位置、計算平方、印出資料、搜尋重複等等。

獨立出來的function就點類似特定功能的SOP一般,呼叫function就會去執行特定的功能,而這樣建立function的行為也是一種模組化的表現。也因為是一種模組化表現,因此我們在建立function都會追求「功能單一化、簡單化」的目標,避免建立一個功能複雜的function。


模組化的實作

在C/C++當中,建立模組時通常都是 1個 header file(*.h) + 1個 Source file (*.cpp)。

一般狀況下這兩個檔案會取一樣的名稱,只有副檔名不同。而檔案名稱通常是模組的名字。

I.header file(*.h) 

通常在header file當中我們會寫下類似下列資訊:
  1. struct的定義
    ex.
    struct Demo {
     int demoInt;
    };
    
  2. 函式原型prototype
    ex.
    int add_function(int, int);
  3. 定義常數
    ex.
    #define NUMBER_OF_STUDENT 5
  4. library的載入
    ex.
    #include <stdio.h>

II.Source file (*.cpp)

在cpp的部分則是撰寫函式的定義(definition),在這邊我們只把管方法怎麼做,不管實際資料如何。
ex.
int add_function (int a, int b) {
 return a+b;
}

寫完了.h和.cpp,到這邊為止模組就算完成建立了。

III.模組的套用

在一個新開的專案當中,我們要使用已經建立的模組時,只要遵循兩個步驟:
  1. 將.h和.cpp加入到專案當中
  2. 在要使用模組的原始碼最開頭利用「#include "header file名稱.h"」將他載入
例如這次的作業

做完了上述兩個動作,你就可以如往常使用function和structure的方式去使用已經被模組化的function和structure。

沒有留言:

張貼留言