結構化方法與面向對象化方法的比較

来源:http://www.cnblogs.com/lewkesy/archive/2016/12/13/6170537.html
-Advertisement-
Play Games

1、導語 編程思想之於軟體開發,正如建築結構之於一磚一瓦。不同的編程思想對於軟體如何構在某些地方略有相似,在很多地方又有著顯著的差異,而這些差異不僅僅在於語言的不同,而是編程開發思想的區別。本片文章將分別介紹結構化方法中的結構化設計和結構化分析,面向對象方法中的面向對象分析並分別總結優缺點。 2、結 ...


 

1、導語

編程思想之於軟體開發,正如建築結構之於一磚一瓦。不同的編程思想對於軟體如何構在某些地方略有相似,在很多地方又有著顯著的差異,而這些差異不僅僅在於語言的不同,而是編程開發思想的區別。本片文章將分別介紹結構化方法中的結構化設計和結構化分析,面向對象方法中的面向對象分析並分別總結優缺點。

2、結構化方法

上世紀60年代,由於電腦計算能力和處理的問題複雜度的急速增長,爆發了眾所周知的軟體危機。為了應對軟體危機帶來的危害,解決管理大型複雜軟體的難題,學術界與工業界共同研究並提出了許多有效的軟體開發方法。而其中影響最為深遠的,分支最為龐大的方法就是結構化方法。目前,很多軟體開發工作組對於結構化方法依舊情有獨鍾。結構化方法著重強調對現實世界的應用問題進行分解,面向過程設計問題空間的解域,強調自頂向下、逐步求精、模塊化設計,這與傳統軟體開發模式在一定程度上有所契合。結構化分析由結構化分析、結構化設計以及結構化程式設計三部分有機組合而成,接下來筆者將對結構化分析和結構化設計進行介紹。

2·1、結構化分析

結構化分析Structured Analysis)是軟體工程中的一種方法,結構化分析和結構化設計可以分析軟體需求,將軟體設計和需求轉換為規格文件,最後生成軟體、硬體配置及相關的手冊及程式。結構化分析以數據在不同模塊中移動的觀點來看待一個系統,系統的功能可以用轉換數據流的程式來表示;其善用功能拆解(或由上到下設計)的信息隱藏特性,因此可以關註在重要的細節,而不會被無關的細節干擾。當細節的層級提高時,信息的廣度也隨之減少。結構化分析的結果是一組相關的圖,程式描述以及數據定義,這些數據描述一個程式為符合機能性需求所需要的數據以及需進行的轉換。

目前較為通用的結構化分析方法是由湯姆·狄馬克於1978年在著作《結構化設計和系統規格》中提出,其中包括的內容為:

a)      系統關係圖

b)      數據流程圖

c)      數據字典

 

系統關係圖是表示系統和外界環境之間的作用,系統關係圖可以表示一個系統和外界相關係統的輸入及輸出。系統關係圖將系統放在整個圖的中心,不描述其內部結構,周圍則是和其有關的系統、活動及環境,環境圖的目的是專註在哪些會影響系統需求及限制的外部因素及事件。

 

 

    數據流程圖(DFD)是結構化分析方法中使用的工具,它反映了系統必須完成的邏輯功能,是一種功能模型,描述了程式中各個功能點的數據變化。在描述複雜的軟體系統的信息流向時,通常使用分層DFD來對數據流進行描述。分層DFD分為頂層、中層和底層,從圖中可以明顯看出自頂向下的設計特點

 

   

數據字典是指對數據的數據項、數據結構、數據流、數據存儲、處理邏輯、外部實體等進行定義和描述,其目的是對數據流程圖中的各個元素做出詳細的說明,使用數據字典為簡單的建模項目。在結構化分析中,數據字典的作用是給數據流圖上每個成分加以定義和說明,數據流圖上所有的成分的定義和解釋的文字集合就是數據字典,而且在數據字典中建立的一組嚴密一致的定義很有助於改進分析員和用戶的通信。

2·2、結構化設計

結構化設計方法給出一組幫助設計人員在模塊層次上區分設計質量的原理與技術。它通常與結構化分析方法銜接起來使用,以數據流圖為基礎得到軟體的模塊結構。SD方法尤其適用於變換型結構和事務型結構的目標系統。在設計過程中,它從整個程式的結構出發,利用模塊結構圖表述程式模塊之間的關係。結構化設計的步驟如下:

a)  評審和細化數據流圖;

b)  確定數據流圖的類型;

c)  把數據流圖映射到軟體模塊結構,設計出模塊結構的上層;

d)  基於數據流圖逐步分解高層模塊,設計中下層模塊;

e)  對模塊結構進行優化,得到更為合理的軟體結構;

 

 

2·3、結構化設計的優缺點

結構化開發的優點在於著重開發過程的整體性和局部功能的局部性,在整體優化的條件下考慮具體的分析設計,同時強調各個開發過程的完整性和順序性,嚴格的按照系統規格設計,及時總結反饋,這與傳統的軟體開發模式一致,也因此導致了結構化開發需要在早期開發中做好充足的數據調查,完備的規格設計,較為合理的管理以及對可能發生的問題具有一定的預見性,儘管自頂向下的設計模式符合大部分開發者的開發習慣,然而對於早期的準備要求相對苛刻,比較容易在開發過程中出現瑕疵而導致開發進度緩慢甚至推翻整個開發計劃。

 

3、面向對象方法

面向對象方法(Object-Oriented Method)是一種把面向對象的思想應用於軟體開發過程中,指導開發活動的系統方法,簡稱OO (Object-Oriented)方法,是建立在“對象”概念基礎上的方法學。與客觀實體有直接對應關係,一個對象類定義了具有相似性質的一組對象。而每繼承性是對具有層次關係的類的屬性和操作進行共用的一種方式。所謂面向對象就是基於對象概念,以對象為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟體系統。與結構化方法相比,面向對象方法提出的時間相對較晚,然而由於面向對象方法的特點讓其在軟體開發領域迅速被認可和接受。其特點為使用現實世界的概念抽象的思考問題,強調模擬現實中的概念而不是強調過程和演算法。

3·1、面向對象分析

面向對象分析(object-oriented analysis)一種新的系統分析方法,它是採用面向對象的風格進行系統分析和需求定義的重要方法。面向對象分析的關鍵在於理解問題空間並將其模型化,通過分析模型的屬性,進而對對象進行操作。由於面向對象程式設計課程給學生帶來的衝擊過於強烈深刻,在此不再多餘贅述何為對象何為抽象,感興趣的同學可以登錄北航的mooc網站觀看吳際老師的公開課。

面向對象分析的具體方法如下:

a)      認識對象及其屬性

b)      認識對象的整體及其組成部分

c)      區分整體對象以及組成部分,確定類的關係以及內部結構

d)      對象的形成及類的區分

e)      確定附加的系統約束

f)       對問題空間進行理解並抽象成模型

 

3·2、面向對象設計

面向對象設計是一種軟體設計方法,是一種工程化規範。面向對象設計的主要工作包括:

a)      確定需要的類

b)      給每個類提供一組完整的操作

c) 明確地使用繼承來表現共同點

從面向對象分析到面向對象設計是一個逐步擴充模型的過程。面向對象分析以實際問題為中心,可以不考慮與軟體實現相關的任何問題,主要考慮“做什麼”的問題;面向對象設計則是面向軟體實現的實際開發活動,主要考慮“怎麼做”的問題。

面向對象設計的主要原則如下。

1.模塊化

面向對象開發方法很自然地支持了把系統分解成模塊的設計原則:對象就是模塊。它是把數據結構和操作這些數據的方法緊密地結合在一起所構成的模塊。

2.抽象

面向對象方法不僅支持過程抽象,而且支持數據抽象。

3.信息隱藏

在面向對象方法中,信息隱藏通過對象的封裝性來實現。

4.低耦合

在面向對象方法中,對象是最基本的模塊,因此,耦合主要指不同對象之間相互關聯的緊密程度。低耦合是設計的一個重要標準,因為這有助於使得系統中某一部分的變化對其他部分的影響降到最低程度。

 

3·3、面向對象方法的優缺點

面向對象方法與結構化方法最大的不同點在於對問題分析的角度。面向對象方法更加傾向於從問題出發,分析所需的對象的實質特性並構建其結構,這樣更加符合人的思維,同時面向對象的特點更加適合於不著眼於規格的增量型開發,因而更加受到敏捷性開發團隊的青睞。同樣,面向對象方法可以大大提高代碼的復用率,減少開發的工作量,同時由於面向對象語言的特點保證了代碼的安全性和可修改性。然而這種開發模式有一個較為明顯的缺陷,由於對象的構建基於開發人員對於對象特點的認知而不是根據一定的規格,在代碼整合的過程中會由於不同人的認知差異而導致代碼合併的困難,降低開發效率。

4、總結

結構化開發和麵向對象開發都是目前相對流行的開發方式,選擇正確的開發方式將對整個開發計劃有著至關重要的作用。正如上文所提到的,不同的開發模式可能有不同的方法選擇,如何審慎的分析哪種開發方法更加適合自己的項目將是每一個開發團隊終將直面的問題,而如何解決這個問題也會很大程度上影響整個開發計劃的相率和軟體的保障。

5、引用

1、Tom DeMarco (1978). Structured Analysis and System Specification. Yourdon Press, New York, 1978.

2、《Object Oriented Programming》,中科永聯高級技術培訓中心。

3、CN博客http://blog.csdn.net/dql1982/article/details/2048748

4、維基百科 面向對象方法、結構化方法

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在Salesforce中,常常要對各種數據進行處理,已滿足業務邏輯。本篇文章會介紹如何實現從object獲取數據,然後將取得的數據進行一系列簡單處理。 第一步:SongName__c 是一個新建的object,向SongName__c object中插入數據: 列印出SongName__c obje ...
  • 設計文檔模板: 一些其他的思考: 去除一切花俏的建模技巧,我覺得最重要的方向就是去努力分析問題和事物的本質,針對這個本質進行領域建模。這個領域建模,最主要的還是鍛煉的人的事物抽象能力。10個人,建出來的領域模型都不同。本質原因就是大家對同一個問題的理解不同,對事物的本質的理解不同。雖然最終都能解決當 ...
  • package test05;import test06.Car1;public class DuoTai_Test02 { /**多個對象,一個形態 * Tiger、Lion、Snake → Animal *、多個對象,一種形態(類型)。 * 不同對象,表現出同一種形態之後。 * 可以實現同樣的功 ...
  • /** * 內部類 ?? * 定義在一個內部的類,被稱為內部類。 * 內部類里有類體,方法體 * 內部類所在的類,被稱為外部類。 * * ①內部類的意義 * 在一定程度上,起到了代碼的有效保護。 * ②語法 * class Outer{////外部類 * 成員變數 * 成員方法 * class In ...
  • 1.什麼是裝飾者模式 動態給對象增加功能,從一個對象的外部來給對象添加功能,相當於改變了對象的外觀,比用繼承的方式更加的靈活。當使用裝飾後,從外部系統的角度看,就不再是原來的那個對象了,而是使用一系列的裝飾器裝飾過後的對象。 2.結構 3.示例 下麵我們用裝飾者模式實現如下的功能: 要求用戶輸入一段 ...
  • 建造者模式:將一個複雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表示的設計模式。 設計場景: 有一個用戶的UserInfo類,創建這個類,需要創建用戶的姓名,年齡,愛好等信息,才能獲得用戶具體的信息結果。 創建一個UserBuilder 用戶建造者類,這個類,將UserInfo複雜的創 ...
  • 1. 引言 正如我們所知,NGINX採用了非同步、事件驅動的方法來處理連接。這種處理方式無需(像使用傳統架構的伺服器一樣)為每個請求創建額外的專用進程或者線程,而是在一個工作進程中處理多個連接和請求。為此,NGINX工作在非阻塞的socket模式下,並使用了epoll 和 kqueue這樣有效的方法。 ...
  • 獲取下載地址 QQ 313596790 A 調用攝像頭拍照,自定義裁剪編輯頭像 B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,開發利器)+快速構建表單; 技術:313596790freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本,處理類,serv ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...