目錄
1.設計父類時考慮不周到,等到設計或者編寫子類的時候,才發現父類需要修改、增加功能等等,都很平常
2.盡量避免多次寫同樣的**
3. 持續改進
4.評價軟體設計的高低的幾個基本原則
內容
1.軟體設計/程式設計中,有一門基本技術叫「物件導向程式設計」。物件導向程式設計的基本思路是物件封裝和繼承。繼承的基本思路是,所有子類共同的部分,提取、抽象後,放到父類中。
這是乙個說起來容易,做起來難的事情。父類總是先設計,先實現。乙個父類一般都有多個子類。沒有人能夠先知先覺。設計父類時考慮不周到,等到設計或者編寫子類的時候,才發現父類需要修改、增加功能等等,都很平常。例如
public class requestinfo
}public class dataitem
}當我們經常寫
string cyccode = info.getdi("cyccode") == null ? null : info.getdi("cyccode").getvalue();
的時候,我們自然會想,如果在 class requestinfo 中增加乙個函式 getdivalue() 就可以寫更短的**了:
string cyccode = info.getdivalue("cyccode");
這樣做的好處,**更簡潔,更易懂,也更容易維護。
同樣的道理,當我們經常需要從 info 中取 int value 的時候,我們自然會知道,應該往 class requestinfo 中增加 getintvalue().
2.在軟體開發的過程中,最基本的原則是,避免多次寫同樣的**。舉例來說:
這是很常見的基類設計時考慮不周導致的問題,每個子類有同樣的**,。解決方法也很簡單,將共同的部分放在 base class 中就可以了:
3.軟體行業和其他行業一樣,要想做出***的產品,關鍵在於「持續改進」。持續改進的意思是,如果發現了不好的設計,就應該修改。然而,很多時候事情並不這樣簡單。
例如,乙個公司有兩百個同樣的生產線,現在有人發現了乙個改進辦法,可以提高效率。我們都知道,不可能把所有的生產線同時進行改造,那樣對於現有的生產造成很大的影響,並且從人力物力方面,也有很大問題。更好的辦法是,對於新的生產線,採用新的改進辦法。原有的生產線,既然還能工作,就不用立即修改,可以在以後逐步改進。
這個例子換成軟體行業的話:
乙個公司有兩百個類似功能的軟體模組/類(比如 ***bpi),現在有人發現了乙個改進辦法,可以在子類中寫更少的**,提高效率,**更易於維護。我們都知道,不可能把所有 ***bpi同時進行改造,那樣對於現有的開發造成很大的影響,並且從人力物力方面,也有很大問題。更好的辦法是,對於新的***bpi,採用新的改進辦法。原有的**,既然還能工作,就不用立即修改,可以在以後逐步改進。
因此,大型的軟體中,新老方法並用的情況很多。比如, ms sql server, 很多原有的**是從 sybase 購買,ms 的技術專家發現了一些提高效能的辦法,在經過多年,多個版本更新後,才逐步完成了改進老的**。在開源的專案上面,也有很多專案版本說明中申明,計畫採用某某技術改寫原有的**,目前完成哪些模組,計畫增加哪些模組。改進和增加新功能永遠是同時進行的。
上面的例子,採用持續改進的方法後,變成下面的樣子:
4.評價軟體設計的高低的幾個基本原則
評價軟體設計的高低的幾個基本原則依次為:易懂,易用,穩定性,功能。
易懂:vb 的使用者之所以比 vc 多,在於它易懂。用 word 寫設計文件的人比用 rose 的人多,也在於懂 word 的人更多。易懂意味著可以用更短的時間學會。
易用:如果 class a 和 class b 完成同樣的功能,但使用 class a 需要寫的**更少,我們就說 class a 設計得比 class b 更好。因為使用 class a 寫**,**更短,開發效率更高。**短對於以後的維護也更容易。
穩定性,功能:軟體的賣點在於穩定性,功能。之所以這兩項排在前面亮項後面,同樣有事實為證:unix/linux 的穩定性、功能超過於 windows,但是它的使用者反而少,原因就在於它輸在 「易懂,易用」這兩項上面。
軟體設計的真諦
假設我們身邊的一切都是用製造材料加以描述的 空調 不是 空調 而是 由金屬和塑料做成的物體 書 不是 書 而是 由纖維和墨做成的物體 溝通時我們也不用 空調 和 書 這樣的詞彙,而是 金屬和塑料做成的物體 和 纖維和墨做成的物體 可以想象大腦在面對這些資訊時會讓我們覺得多麼的痛苦,顯然這樣的事情在現...
軟體設計的思考
trade off 資源限制 人力 空間 時間 最近有幸參與到新的專案設計開發中,結合工程實踐中的經驗與教訓發掘可從資源調配的角度來思考架構設計問題。工程中的軟體設計是什麼?即在 資源有限的條件下,控制成本並作出 資源整合效率最大化的配置的設計。那麼結合計算機系統可從以下幾個關鍵點考慮 1.人力資源...
軟體設計的作用
1.驗證和補充需求。注意 補充的需求,需要重新確認。為什麼會在設計時還要搞需求工作呢?原因是,需求分析人員是從使用者的角度來考慮問題,給出的是使用者直接想要的需求部分,而對於和使用者關係不是很緊密的部分,可能並沒有給出完整的方案 使用者對軟體的主要使用過程比較簡單,但由此而引起的相關處理過程比較複雜...