?
目錄
1.設(shè)計父類時考慮不周到,等到設(shè)計或者編寫子類的時候,才發(fā)現(xiàn)父類需要修改、增加功能等等,都很平常
2.盡量避免多次寫同樣的代碼
3. 持續(xù)改進(jìn)
4.評價軟件設(shè)計的高低的幾個基本原則
內(nèi)容
1.軟件設(shè)計/編程中,有一門基本技術(shù)叫“面向?qū)ο缶幊獭?。面向?qū)ο缶幊痰幕舅悸肥菍ο蠓庋b和繼承。繼承的基本思路是,所有子類共同的部分,提取、抽象后,放到父類中。
這是一個說起來容易,做起來難的事情。父類總是先設(shè)計,先實現(xiàn)。一個父類一般都有多個子類。沒有人能夠先知先覺。設(shè)計父類時考慮不周到,等到設(shè)計或者編寫子類的時候,才發(fā)現(xiàn)父類需要修改、增加功能等等,都很平常。例如
public class RequestInfo{
??? public DataItem getDI(String name){
??? }
}
public class DataItem{
??? public String getValue() {
??? }
}
當(dāng)我們經(jīng)常寫
String cycCode = info.getDI("cycCode") == null ? null : info.getDI("cycCode").getValue();
的時候,我們自然會想,如果在 class?RequestInfo 中增加一個函數(shù) getDIValue() 就可以寫更短的代碼了:
String cycCode = info.getDIValue("cycCode");
這樣做的好處,代碼更簡潔,更易懂,也更容易維護(hù)。
同樣的道理,當(dāng)我們經(jīng)常需要從 info 中取 int value 的時候,我們自然會知道,應(yīng)該往 class RequestInfo 中增加 getIntValue().
2.在軟件開發(fā)的過程中,最基本的原則是,避免多次寫同樣的代碼。舉例來說:

這是很常見的基類設(shè)計時考慮不周導(dǎo)致的問題,每個子類有同樣的代碼,。解決方法也很簡單,將共同的部分放在 base class 中就可以了:
?
3.軟件行業(yè)和其他行業(yè)一樣,要想做出質(zhì)量好的產(chǎn)品,關(guān)鍵在于“持續(xù)改進(jìn)”。持續(xù)改進(jìn)的意思是,如果發(fā)現(xiàn)了不好的設(shè)計,就應(yīng)該修改。然而,很多時候事情并不這樣簡單。
例如,一個公司有兩百個同樣的生產(chǎn)線,現(xiàn)在有人發(fā)現(xiàn)了一個改進(jìn)辦法,可以提高效率。我們都知道,不可能把所有的生產(chǎn)線同時進(jìn)行改造,那樣對于現(xiàn)有的生產(chǎn)造成很大的影響,并且從人力物力方面,也有很大問題。更好的辦法是,對于新的生產(chǎn)線,采用新的改進(jìn)辦法。原有的生產(chǎn)線,既然還能工作,就不用立即修改,可以在以后逐步改進(jìn)。
這個例子換成軟件行業(yè)的話:
一個公司有兩百個類似功能的軟件模塊/類(比如 xxxBPI),現(xiàn)在有人發(fā)現(xiàn)了一個改進(jìn)辦法,可以在子類中寫更少的代碼,提高效率,代碼更易于維護(hù)。我們都知道,不可能把所有 xxxBPI同時進(jìn)行改造,那樣對于現(xiàn)有的開發(fā)造成很大的影響,并且從人力物力方面,也有很大問題。更好的辦法是,對于新的xxxBPI,采用新的改進(jìn)辦法。原有的代碼,既然還能工作,就不用立即修改,可以在以后逐步改進(jìn)。
因此,大型的軟件中,新老方法并用的情況很多。比如, MS SQL Server, 很多原有的代碼是從 Sybase 購買,MS 的技術(shù)專家發(fā)現(xiàn)了一些提高性能的辦法,在經(jīng)過多年,多個版本更新后,才逐步完成了改進(jìn)老的代碼。在開源的項目上面,也有很多項目版本說明中申明,計劃采用某某技術(shù)改寫原有的代碼,目前完成哪些模塊,計劃增加哪些模塊。改進(jìn)和增加新功能永遠(yuǎn)是同時進(jìn)行的。
上面的例子,采用持續(xù)改進(jìn)的方法后,變成下面的樣子:

4.評價軟件設(shè)計的高低的幾個基本原則
評價軟件設(shè)計的高低的幾個基本原則依次為:易懂,易用,穩(wěn)定性,功能。
易懂:VB 的用戶之所以比 VC 多,在于它易懂。用 Word 寫設(shè)計文檔的人比用 Rose 的人多,也在于懂 Word 的人更多。易懂意味著可以用更短的時間學(xué)會。
易用:如果 class A 和 class B 完成同樣的功能,但使用 class A 需要寫的代碼更少,我們就說 class A 設(shè)計得比 class B 更好。因為使用 class A 寫代碼,代碼更短,開發(fā)效率更高。代碼短對于以后的維護(hù)也更容易。
穩(wěn)定性,功能:軟件的賣點在于穩(wěn)定性,功能。之所以這兩項排在前面亮項后面,同樣有事實為證:Unix/Linux 的穩(wěn)定性、功能超過于 Windows,但是它的用戶反而少,原因就在于它輸在 “易懂,易用”這兩項上面。