模組化(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當中我們會寫下類似下列資訊:
- struct的定義
ex.
struct Demo { int demoInt; };
- 函式原型prototype
ex.
int add_function(int, int);
- 定義常數
ex.#define NUMBER_OF_STUDENT 5
- 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.模組的套用
在一個新開的專案當中,我們要使用已經建立的模組時,只要遵循兩個步驟:
- 將.h和.cpp加入到專案當中
- 在要使用模組的原始碼最開頭利用「#include "header file名稱.h"」將他載入
例如這次的作業
做完了上述兩個動作,你就可以如往常使用function和structure的方式去使用已經被模組化的function和structure。
沒有留言:
張貼留言