星期一, 1月 26, 2015

抽象的重要性

要達到軟體的擴充性、預留面對需求變動的彈性,「抽象」非常重要。

比如說,我想顯示一行文字到螢幕上,可以怎麼寫?

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....
}

運用抽象函數是寫好程式的重要一步!

沒有留言: