軟件設(shè)計(jì)是將軟件需求概念化為軟件實(shí)現(xiàn)的過(guò)程。軟件設(shè)計(jì)以用戶(hù)需求為挑戰(zhàn),試圖找到最佳的解決方案。在對(duì)軟件進(jìn)行概念化的同事,還制定了一個(gè)計(jì)劃,以找到實(shí)現(xiàn)預(yù)期解決方案的最佳設(shè)計(jì)。
軟件設(shè)計(jì)有多種辯題,讓我們簡(jiǎn)要地研究它們:
結(jié)構(gòu)化設(shè)計(jì)是將問(wèn)題概念化為幾個(gè)組織良好的解決方案元素。它基本上與解決方案設(shè)計(jì)有關(guān)。結(jié)構(gòu)化設(shè)計(jì)的好處是,它可以更好地了解問(wèn)題是如何解決的。結(jié)構(gòu)化設(shè)計(jì)也讓設(shè)計(jì)師更容易更準(zhǔn)確地專(zhuān)注于問(wèn)題。
結(jié)構(gòu)化設(shè)計(jì)主要基于“分而治之”的策略,其中一個(gè)問(wèn)題分成幾個(gè)小問(wèn)題,每個(gè)小問(wèn)題單獨(dú)解決,直到整個(gè)問(wèn)題被解決了。
小問(wèn)題通過(guò)解決方案模塊解決。結(jié)構(gòu)化設(shè)計(jì)強(qiáng)調(diào)將這些模塊組織得井井有條,以實(shí)現(xiàn)精確的解決方案。
這些模塊按層次排列,相互交流。一個(gè)好的結(jié)構(gòu)化設(shè)計(jì)總是遵循一些規(guī)則來(lái)進(jìn)行多個(gè)模塊之間的通信,即:
一個(gè)好的結(jié)構(gòu)化設(shè)計(jì)具有高內(nèi)聚、低耦合的安排。
在面向功能設(shè)計(jì)中,系統(tǒng)由許多稱(chēng)為功能的較小子系統(tǒng)組成。這些功能能夠執(zhí)行系統(tǒng)中的重要任務(wù)。該系統(tǒng)被視為所有功能的俯視圖。
面向功能設(shè)計(jì)繼承了結(jié)構(gòu)化設(shè)計(jì)的一些特性,其中使用了分而治之的方法。
這種設(shè)計(jì)機(jī)制將整個(gè)系統(tǒng)分成更小的功能,通過(guò)隱藏信息及其操作提供抽象的手段。這些功能模塊之間可以通過(guò)信息傳遞和使用全球可用的信息來(lái)共享信息。
函數(shù)的另一個(gè)特點(diǎn)是當(dāng)程序調(diào)用一個(gè)函數(shù),該函數(shù)更改了程序的狀態(tài),這有時(shí)是其他模塊所不能接受的。面向功能的設(shè)計(jì)是在系統(tǒng)無(wú)關(guān)緊要并且程序/功能針對(duì)輸入而不是針對(duì)狀態(tài)工作的情況下效果很好。
面向?qū)ο笤O(shè)計(jì)(OOD,Object Oriented Design)圍繞實(shí)體及其特性而不是軟件系統(tǒng)中所涉及的功能工作。這種設(shè)計(jì)策略側(cè)重于實(shí)體及其特征。軟件解決方案的整個(gè)概念圍繞著參與的實(shí)體展開(kāi)。
讓我們看看面向?qū)ο笤O(shè)計(jì)的重要概念:
軟件設(shè)計(jì)過(guò)程可以看作一系列明確定義的步驟。雖然它因設(shè)計(jì)方法(面向功能或面向?qū)ο螅┒?,但它可能涉及以下步驟:
以下是軟件設(shè)計(jì)的兩種通用方法:
我們知道一個(gè)系統(tǒng)由多個(gè)子系統(tǒng)組成,它包含多個(gè)組件。此外,這些子系統(tǒng)和組件可以具有它們的子系統(tǒng)和組件的集合并且在系統(tǒng)中創(chuàng)建層次結(jié)構(gòu)。
自頂向下設(shè)計(jì)將整個(gè)軟件系統(tǒng)作為一個(gè)實(shí)體,然后根據(jù)一些特性將其分解為多個(gè)子系統(tǒng)或組件。然后將每個(gè)子系統(tǒng)或組件視為一個(gè)系統(tǒng)并進(jìn)一步分解。這個(gè)過(guò)程一直運(yùn)行,直到達(dá)到自上而下層次結(jié)構(gòu)中最低級(jí)別的系統(tǒng)。
自頂向下設(shè)計(jì)從系統(tǒng)的廣義模型開(kāi)始,并不斷定義其中更具體的部分。當(dāng)所有組件組成時(shí),整個(gè)系統(tǒng)就存在了。
當(dāng)軟件解決方案需要從頭開(kāi)始設(shè)計(jì)并且具體細(xì)節(jié)未知時(shí),自頂向下設(shè)計(jì)更合適。
自底向上設(shè)計(jì)模型從最具體和基本的組件開(kāi)始。它繼續(xù)通過(guò)使用基本或較低級(jí)別的組件來(lái)組合更高級(jí)別的組件。它不斷創(chuàng)建更高級(jí)別的組件,直到所需的系統(tǒng)沒(méi)有演變?yōu)橐粋€(gè)單一的組件。隨著級(jí)別的提高,抽象的數(shù)量也會(huì)增加。
當(dāng)需要從一些現(xiàn)有系統(tǒng)創(chuàng)建系統(tǒng)時(shí),自底向上策略更適合,其中基本原語(yǔ)可以在較新的系統(tǒng)中使用。
自頂向下和自底向上的方法單獨(dú)使用都不實(shí)用。相反,將兩者結(jié)合在一起使用,是個(gè)不錯(cuò)的方法。
更多建議: