要達到軟體的擴充性、預留面對需求變動的彈性,「抽象」非常重要。
比如說,我想顯示一行文字到螢幕上,可以怎麼寫?
1.
printf("This is a string\n");
2.
Display("This is a string\n");
void Display(char *c){
printf("%s", char);
}
是不是第二個比較好呢?為什麼?
因為有一天這行字可能不顯示到螢幕上了,
而是改用USB介面輸出。
那麼豈不是要搜尋所有printf呢?
使用第二種方法,
只要改寫Display的內容就好了。
如果是C++的話就更棒了,
利用多型可以更進一步的抽象化。
例如:
void Display(int value){
LEDBlink(value);
}
void Display(char* c){
printf("%s\n", c);
}
void Display(void){
// Do nothing (dummy)
}
所謂抽象,就是用更高的角度去思考程式架構。
好的架構會透過抽象函數,把介面都留出來,與底層的實作全部分開。
如此一來,未來實作方式改變的時候,上層的code可以完全不變。
比如說
Speak會比SpeakEnglish來得抽象,而Communicate會比Speak來得抽象。
void Communicate (...){
// Maybe speak something
// Maybe hand singnals
// Maybe burn some woods and make smoke
}
void Speak (...){
// Maybe speak english, japanese....
}
void SpeakEnglish(...){
// Only english....
}
運用抽象函數是寫好程式的重要一步!
沒有留言:
張貼留言