軟件工程 設(shè)計(jì)策略

2021-10-27 10:53 更新

軟件設(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ì)

結(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è)模塊之間的通信,即:

  • 內(nèi)聚: 所有功能相關(guān)元素的分組。
  • 耦合: 不同模塊之間的通信。

一個(gè)好的結(jié)構(gòu)化設(shè)計(jì)具有高內(nèi)聚、低耦合的安排。

面向功能設(shè)計(jì)

在面向功能設(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)工作的情況下效果很好。

設(shè)計(jì)過(guò)程

  • 整個(gè)系統(tǒng)通過(guò)數(shù)據(jù)流圖被看作是數(shù)據(jù)在系統(tǒng)中的流動(dòng)方式。
  • DFD 描述了功能模塊如何改編自哼歌系統(tǒng)的數(shù)據(jù)和狀態(tài)。
  • 根據(jù)它們?cè)谙到y(tǒng)中的操作,整個(gè)系統(tǒng)在邏輯上被分解為更小的單元,稱(chēng)為功能。
  • 探后對(duì)每個(gè)功能進(jìn)行全面描述。

面向?qū)ο笤O(shè)計(jì)

面向?qū)ο笤O(shè)計(jì)(OOD,Object Oriented Design)圍繞實(shí)體及其特性而不是軟件系統(tǒng)中所涉及的功能工作。這種設(shè)計(jì)策略側(cè)重于實(shí)體及其特征。軟件解決方案的整個(gè)概念圍繞著參與的實(shí)體展開(kāi)。

讓我們看看面向?qū)ο笤O(shè)計(jì)的重要概念:

  • 對(duì)象:解決方案設(shè)計(jì)中涉及的所有實(shí)體被都稱(chēng)為對(duì)象。例如,人、 銀行、 公司和客戶(hù)都被視為對(duì)象。每個(gè)實(shí)體都有一些與之關(guān)聯(lián)的屬性,并有一些方法可以對(duì)這些屬性執(zhí)行。
  • 類(lèi):類(lèi)是對(duì)對(duì)象的概括描述,對(duì)象是類(lèi)的實(shí)例。類(lèi)定義了對(duì)象可以具有的所有屬性和方法,這些方法定義了對(duì)象的功能。
    在解決方案設(shè)計(jì)中,屬性存儲(chǔ)為變量,功能通過(guò)方法或程序來(lái)定義。
  • 封裝:在 OOD,降屬性(數(shù)據(jù)變量)和方法(對(duì)數(shù)據(jù)的操作)捆綁在一起稱(chēng)為封裝。封裝不僅將一個(gè)對(duì)象的重要信息捆綁在一起,而且限制了外界對(duì)數(shù)據(jù)和方法的訪(fǎng)問(wèn)。
  • 繼承:OOD 允許類(lèi)似的類(lèi)以分層方式堆疊,其中較低的類(lèi)或子類(lèi)可以從它們的直接超類(lèi)中導(dǎo)入、實(shí)現(xiàn)和重用允許的變量和方法。OOD 的這個(gè)屬性被稱(chēng)為繼承。這使得定義特定類(lèi)和從特定類(lèi)創(chuàng)建通用類(lèi)變得更容易。
  • 多態(tài):OOD 語(yǔ)言提供了一種機(jī)制,其中執(zhí)行類(lèi)似任務(wù)但參數(shù)不同的方法可以分配相同的名稱(chēng)。這稱(chēng)為多態(tài)性,它允許單個(gè)接口為不同類(lèi)型執(zhí)行任務(wù)。根據(jù)函數(shù)的調(diào)用方式,代碼的相應(yīng)部分被執(zhí)行。

設(shè)計(jì)過(guò)程

軟件設(shè)計(jì)過(guò)程可以看作一系列明確定義的步驟。雖然它因設(shè)計(jì)方法(面向功能或面向?qū)ο螅┒?,但它可能涉及以下步驟:

  • 解決方案設(shè)計(jì)是根據(jù)需求或以前使用的系統(tǒng)或系統(tǒng)序列圖創(chuàng)建的。
  • 代表屬性特征的相似性來(lái)識(shí)別對(duì)象并將其分組到類(lèi)中。
  • 定義了類(lèi)層次結(jié)構(gòu)和它們之間的關(guān)系。
  • 定義了應(yīng)用程序框架。

軟件設(shè)計(jì)方法

以下是軟件設(shè)計(jì)的兩種通用方法:

自頂向下設(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ì)

自底向上設(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ò)的方法。

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)