結構化方法與面對對象方法之比較

結構化方法與面對對象方法之比較

 

軟件開發經常使用的兩種方法即是結構化方法和麪對對象方法。咱們在以前的學習中也接觸了這兩種軟件開發方法,它們各有利弊,這也是它們共同存在的緣由,下面就來分別介紹一下這兩種軟件開發方法。算法

結構化方法

結構化方法對現實世界的應用問題進行分解,面向過程設計問題空間的解域,強調自頂向下、逐步求精、模塊化設計。這是一種傳統的軟件開發方法,由結構化分析、結構化設計和結構化程序設計三部分組合而成。它把一個複雜的問題分階段求解,自頂向下、逐層分解的方法使每一個階段都控制在人們容易處理的範圍內。併發

結構化分析SA

結構化分析包括將系統概念轉換爲用數據及控制的來表示,也就是轉換爲數據流程圖。數據流程圖中的程序以泡泡來表示,所以也稱爲「泡泡圖」。不過完整的數據流程圖中可能有許多的「泡泡」,使得很難去追蹤數據流動的情形。此時能夠先定義外界須要系統迴應的事件,每個事件指定一個泡泡,當系統定義完成後,再將事件的泡泡和迴應的程序的泡泡相鏈接。也能夠將程序對應泡泡加以分組,組合成較高級的程序。數據字典用來描述數據和指令的流動,而用程序規格來描述交易或數據轉換的相關信息。模塊化

系統關係圖

系統關係圖將系統放在整個圖的中心,不描述其內部結構,周圍則是和其有關的系統、活動及環境,環境圖的目的是專一在哪些會影響系統需求及限制的外部因素及事件。它有助於瞭解系統和外界的關係。函數

數據流程圖DFD

它是描述系統數據流程的工具,它將數據獨立抽象出來,經過圖形方式描述信息的實際流程。工具

對於複雜的軟件系統,DFD可分層描述:學習

頂層。決定系統範圍,說明系統的邊界,體現了系統的各方面功能。測試

中間層。中間層有若干,是上層加工的分解,也是下層若干加工的抽象。spa

底層。若DFD中沒有加工可分解,即是底層DFD。體現了系統的基本加工。設計

DFD基本成分:對象

外部實體

外部實體指不在系統中但和系統有聯繫的事物,它說明了數據的外部來源和去處,屬於系統的外部和系統的界面。外部實體中支持系統數據輸入的實體稱爲源點,支持系統數據輸出的實體稱爲終點。一般外部實體在數據流程圖中用正方形框表示,框中寫上外部實體名稱,爲了區分不一樣的外部實體,能夠在正方形的左上角用一個字符表示,同一外部實體可在一張數據流程圖中出現屢次,這時在該外部實體符號的右下角畫上小斜線表示重複。

處理過程

處理指對數據邏輯處理,也就是數據變換,它用來改變數據值。而每一種處理又包括數據輸入、數據處理和數據輸出等部分。在數據流程圖中處理過程用帶圓角的長方形表示處理,長方形分三個部分,標識部分用來標識一個功能,功能描述部分是必不可少的,功能執行部門表示功能由誰來完成。

數據流

數據流是指處理功能的輸入或輸出。它用來表示中間數據流值,但不能用來改變數據值。數據流是模擬系統數據在系統中傳遞過程的工具。在數據流程圖中用一個水平箭頭或垂直箭頭表示,箭頭指出數據的流動方向。

數據存儲

數據存儲表示數據保存的地方,它用來存儲數據。系統處理從數據存儲中提取數據,也將處理的數據返回數據存儲。與數據流不一樣的是數據存儲自己不產生任何操做,它僅僅響應存儲和訪問數據的要求。在數據流程圖中數據存儲用右邊開口的長方條表示。在長方條內寫上數據存儲名字。

數據字典

數據字典是結構化分析方法的核心。數據字典是對全部與系統相關的數據元素的一個有組織的列表,以及精確嚴格的定義,使用戶和系統分析員對輸入、輸出、存儲和中間結果有共同的理解。數據字典的做用是對DFD中出現的被命名的圖形元素的確切解釋,一般數據詞典包含的信息有:名稱、別名、何處使用/如何使用、內容描述、補充信息等。

結構化設計SD

結構化設計主要是把結構化分析過程當中獲得的數據流程圖轉化爲系統結構圖,並使它儘量反映要解決的問題。

抽象化

經常使用的抽象化手段有過程抽象、數據抽象和控制抽象

過程抽象:任何一個完成明確功能的操做均可被使用者看成單位的實體看待,儘管這個操做時機上可能由一系列更低級的操做來完成。

數據抽象:與過程抽象同樣,容許設計人員在不一樣層次上描述數據對象的細節。

控制抽象:與過程抽象和數據抽象同樣,控制抽象能夠包含一個程序控制機制而無須規定其內部細節。 

自頂向下,逐步細化

將軟件的體系結構按自頂向下方式,對各個層次的過程細節和數據細節逐層細化,直到用程序設計語言的語句可以實現爲止,從而最後確立整個的體系結構。

模塊化

將一個待開發的軟件分解成若干個小的簡單的部分——模塊,每一個模塊可獨立地開發、測試,最後組裝成完整的程序。這是一種複雜問題的「分而治之」的原則。模塊化的目的是使程序結構清晰,容易閱讀,容易理解,容易測試,容易修改。

控制層次

代表了程序構件(模塊)的組織狀況。控制層次每每用程序的層次結構(樹形或網型)來表示。

深度:程序結構的層次數,能夠反映程序機構的規模和複雜程度。

寬度:同一層模塊的最大模塊個數

模塊的扇出:一個模塊調用(或控制)的其餘模塊數

模塊的扇入:調用(或控制)一個給定模塊的模塊個數

信息屏蔽

將每一個程序的成分隱蔽或封裝在一個單一的設計模塊中,定義每個模塊時儘量少的顯露其內部的處理,能夠提升軟件的可修改性,可測試性和可移植性。

模塊獨立

每一個模塊完成一個相對特定獨立的子功能,而且與其餘模塊之間的聯繫簡單。衡量度量標準有兩個:模塊間的耦合和模塊的內聚。模塊獨立性強時,必須作到高內聚低耦合。

耦合:模塊之間聯繫的緊密程度,耦合度越高模塊的獨立性越差。耦合度從低到高的次序爲:非直接耦合、數據耦合、標記耦合、控制耦合、外部耦合、公共耦合、內容耦合。

內聚:內聚是指內部各元素之間聯繫的緊密程度,內聚度越低模塊的獨立性越差。內聚度從低到高依次是:偶然內聚、邏輯內聚、瞬時內聚、過程內聚、通訊內聚、順序內聚、功能內聚。

面對對象方法

面向對象方法做爲一種新型的獨具優越性的新方法正引發全世界愈來愈普遍的關注和高度的重視,它被譽爲"研究高技術的好方法",更是當前計算機界關心的重點。十多年來,在對OO方法如火如荼的研究熱潮中,許多專家和學者預言:正像70年代結構化方法對計算機技術應用所產生的巨大影響和促進那樣,90年代OO方法會強烈地影響、推進和促進一系列高技術的發展和多學科的綜合。

特徵

封裝性

封裝是一種信息隱蔽技術,它體如今類的說明,是對象的重要特性。封裝使數據和加工該數據的方法(函數)封裝爲一個總體,以實現獨立性很強的模塊,使得用戶只能見到對象的外特性(對象能接受哪些消息,具備那些處理能力),而對象的內特性(保存內部狀態的私有數據和實現加工能力的算法)對用戶是隱蔽的。封裝的目的在於把對象的設計者和對象者的使用分開,使用者沒必要知曉行爲實現的細節,只須用設計者提供的消息來訪問該對象。

繼承性

繼承性是「子類」得到「父類」的數據和方法的機制。它由類的派生功能體現。一個類直接繼承其它類的所有描述,同時可修改和擴充。繼承具備傳遞性。繼承分爲單繼承(一個「子類」只有一個「父類」)和多重繼承(一個類有多個父類)。類的對象是各自封閉的,若是沒繼承性機制,則類中數據、方法就會出現大量重複。繼承不只支持系統的可重用性,並且還促進系統的可擴充性。

多態性

對象根據所接收的消息而作出動做。同一消息爲不一樣的對象接受時可產生徹底不一樣的行動,這種現象稱爲多態性。利用多態性用戶可發送一個通用的信息,而將全部的實現細節都留給接受消息的對象自行決定,如是,同一消息便可調用不一樣的方法。例如:Print消息被髮送給一圖或表時調用的打印方法與將一樣的Print消息發送給一個正文文件而調用的打印方法會徹底不一樣。多態性的實現受到繼承性的支持,利用類繼承的層次關係,把具備通用功能的協議存放在類層次中儘量高的地方,而將實現這一功能的不一樣方法置於較低層次,這樣,在這些低層次上生成的對象就能給通用消息以不一樣的響應。

總結

這兩種方法開發軟件有很大的區別。結構化方法在於模塊化的思想,把系統的功能分解分塊,是對功能的抽象。而面對對象方法的核心是將數據按類別抽象封裝。經過實例能夠發現,面對對象方法更貼合實際,設計、實現、維護中更貼合咱們的思惟,但結構化方法也有它的優點,結構化方法的執行效率更好,也能更好地支持併發。但另外一方面,兩種方法的出現時期也說明了不少問題,面對對象方法也可看做是結構化方法的改造,面對對象方法中有許多結構化方法中的元素。改造後的方法更好地增強了數據與處理數據的方法之間的聯繫,因此當數據量更大時,爲了這些聯繫更加清晰,更適合使用面對對象方法。

相關文章
相關標籤/搜索