天天看點

第三篇——軟體工程之結構化設計方法

   軟體工程有很大的一個章節介紹結構化分析方法。對于結構化分析,我認為它是整體和細節的橋梁,把一個軟體整體分成幾個塊,不同的塊負責不同的内容,比如資料輸入,資料處理,資料輸出;然後在塊的基礎上敲定細節,需要讀入哪些資料,資料的類型,怎麼讀入資料,資料輸入後的計算、查詢、添加、删除、修改,資料輸出的格式等等。一個軟體可能是一個很大的工程,但是它也是由許多小部件搭建起來的,如何确定這些小部件,這時候就需要用到結構化分析方法。對于結構化的具體知識,結合書上的内容,做了一個整理。可能不完善,但是對于基本概念的掌握很有幫助。

  結構化分析方法是在子產品化,自頂向下逐漸細化及結構化程式設計基礎之上發展起來的,可以分為兩類:一類是根據系統系統的資料流進行設計,還有一類是根據系統的資料結構進行設計。

   軟體設計的5個原則:

1 分而治之:将大型複雜的問題分解成許多容易的小問題,軟體的體系設計,子產品化設計都是分而治之的具體政策。

2 子產品獨立性:指軟體系統中每個子產品隻設計軟體要求的具體子功能,與軟體系統中其他子產品的借口是簡單的。耦合性越高,子產品獨立性越若弱。

3 提高抽象層次:抽象是指護士一個主題中與目前目标無關的方面,以便更注意與目前目标有關的方面。軟體設計時,盡量提高軟體的抽象層次,按抽象級别從高到低進行軟體設計,将軟體的體系結構,按自頂向下方式,對各個層次的過程細節和資料細節逐層細化,直到用程式設計的語句能夠實作為止。當然實作這個過程需要我們對軟體的接口,子產品的運作等等有足夠的熟悉。

4 複用性設計:指在構造新的軟體的時候,不必從零做起,可以直接使用已有的軟構件即可組裝成新的系統。

5 靈活性設計:引入靈活性的方法有,降低耦合并提高内聚(易于提高替換功能);建立抽象(建立有多态操作的接口和父類);不要将代碼寫死(消除代碼中的常數);抛出異常(由操作的調用者處理異常);使用并建立可複用的代碼。

   子產品結構及表示:

   一個軟體系統需要很多子產品(包括程式設計中的函數和子程式)組成,稱不能再分解的子產品為原子子產品。如果一個軟體系統的全部實際加工(資料處理或計算)都有原子子產品來完成,而其他所有非原子子產品僅僅執行控制或協調功能,這樣的系統就是完全因子分解的系統,但是大多數系統做不到完全因子分解。

子產品一般分為四類:傳入子產品、傳出子產品、變換子產品(從上級調用子產品取得資料,進行特定的處理,轉換成其他形式,再将加工結果傳回給調用子產品)、協調子產品。

   傳入子產品:取得輸入資料,經過某些處理,再将其傳送給其他子產品;

 傳出子產品:輸出資料,在輸出之前可能進行某些處理,資料可能被傳輸到系統的外部,也可能會輸出到其他子產品進行進一步的處理,但最終目的是輸出到系統的外部;

 變換子產品:也叫加工子產品,從上級調用子產品取得資料,進行特定的資料處理,轉換成其他形式,再将加工結果傳回給調用子產品;

 協調子產品:通過調用,協調和管理其他子產品來完成特定的功能;

子產品的結構有樹狀結構和網狀結構。

 在樹狀結構中,位于最上層的根部是頂層子產品,它是程式的主子產品,與其聯系的有若幹下屬子產品,各下屬子產品還可以進一步引出更下一層的下屬子產品;

 網狀結構則完全不同,在網狀結構中,任意兩個子產品之間都可以有調用關系,任何兩個子產品都是平等的,沒有從屬關系;

結構圖(SC):清楚地反映軟體子產品之間的層次調用關系和聯系,它不僅嚴格地定義了各個子產品的名字,功能和接口,而且還集中地反映了設計思想。

 在結構圖中,兩個子產品之間用單向箭頭聯結。箭頭從調用子產品指向被調用子產品,表示調用子產品調用了被調用子產品,但是被調用子產品執行完成後,控制又傳回到調用子產品;為了表示在子產品之間傳遞的資料或者控制資訊,在聯合子產品的箭頭旁邊給出短箭頭,并且用尾端帶有空心圓的短箭頭表示資料資訊,用尾端帶有實心圓的短箭頭表示控制資訊。通常在短箭頭的附近應注有資訊的名字。當子產品A有條件地調用另一個子產品B時,在子產品A的箭頭尾部标以一個菱形符号。當一個子產品A反複地調用子產品C和子產品D時,在調用箭頭尾部則标以一個弧形符号。

 在多層次的結構圖中,子產品結構的層次數成為結構圖的深度。結構圖的深度在一定意義上反映了程式結構的規模和複雜程度。對于中等規模程度的程式,其結構圖的深度約為10左右。結構圖中同一層子產品的最大子產品數稱為結構圖的寬度。子產品的扇入和扇出:扇出表示一個子產品直接調用或控制下屬子產品的數目,扇入則定義為調用或控制一個給定子產品的調用子產品的數目。多扇入的子產品通常是公用子產品。

 在軟體工程這門課程中,結構化是比較實用的一章,掌握結構化設計的方法,對于我們在軟體程式設計中有流程指導作用。