軟件工程之面向對象分析深度解析

前文基礎:

1.軟件工程學概述:軟件工程學概述-CSDN博客?

2.軟件過程深度解析:軟件過程深度解析-CSDN博客?

3.軟件工程之需求分析涉及的圖與工具:軟件工程之需求分析涉及的圖與工具-CSDN博客?

4.軟件工程之形式化說明技術深度解析:https://lzm07.blog.csdn.net/article/details/147803429?

5.軟件工程之詳細設計深度解析:https://blog.csdn.net/lzm12278828/article/details/147807034?

一、面向對象分析的基本過程

(一)概述

面向對象分析(Object-Oriented Analysis, OOA)是通過抽象問題域中的實體及其關系,建立系統精確模型的過程。其核心思想是將現實世界中的事物映射為對象(Object),通過封裝、繼承、多態等機制描述系統行為。與傳統結構化分析相比,OOA更貼近人類認知方式,能有效降低復雜系統的開發難度。

OOA的目標是形成軟件需求規格說明書,主要由三個子模型構成:

(1)對象模型描述系統靜態結構(類、對象及其關系)。

(2)動態模型描述系統動態行為(狀態變化、事件交互)。

(3)功能模型描述系統數據變換和處理邏輯

實際分析過程需反復迭代,通常遵循“理解→表達→驗證”的循環:

(1)理解需求:與用戶、領域專家協作,明確系統邊界和功能。

(2)建立模型:通過三個子模型逐步細化需求,形成可驗證的規格說明。

(2)驗證模型:檢查模型的一致性、完整性和可實現性,確保符合用戶需求。

(二)3 個子模型與 5 個層次

1. 三個子模型

(1)對象模型:
以類圖為核心,描述系統中對象的靜態結構。例如,在線購物系統中的“用戶”“商品”“訂單”等類,以及它們之間的關聯(如“用戶下單”“訂單包含商品”)。對象模型是系統的基礎,其他模型依賴其提供的類和關系。

(2)動態模型:
以狀態圖和事件跟蹤圖為工具,描述對象的狀態變化和事件交互。例如,訂單的狀態從“已提交”變為“已支付”再到“已發貨”,需通過狀態圖明確觸發狀態轉換的事件(如“用戶支付”“倉庫發貨”)。

(3)功能模型:
以數據流圖(DFD)為核心,描述系統的數據處理邏輯。例如,在線購物系統的“訂單處理”功能可分解為“驗證庫存”“計算總價”“生成發票”等子處理,通過數據流圖展示數據流動和處理過程。

2. 五個層次

復雜系統的對象模型通常包含五個層次,形成逐層細化的結構:

(1)主題層將系統劃分為若干主題(如“用戶管理”“訂單管理”),便于理解大型模型。

(2)對象類層識別系統中的類與對象(如“用戶”“商品”)。

(3)結構層定義類之間的關系(如繼承、關聯)。

(4)屬性層為類添加屬性(如“用戶”的姓名、郵箱)。

(5)服務層定義類的操作(如“用戶”的登錄、注冊)。

二、需求陳述

(一)書寫要點

需求陳述是OOA的起點,需清晰、準確地描述系統功能和約束。關鍵要點包括:

(1)問題范圍:明確系統邊界,區分系統內外部實體。

(2)功能需求:列出系統必須完成的任務(如“用戶可查詢訂單狀態”)。

(3)性能需求:定義響應時間、吞吐量等指標(如“訂單查詢響應時間≤2 秒”)。

(4)應用環境:描述系統運行的軟硬件環境(如“支持 Windows 和 macOS”)。

(5)假設條件:說明未經驗證的前提(如“用戶輸入數據格式正確”)。

書寫時應避免歧義,采用結構化語言(如“系統應允許用戶……”),并優先使用動詞短語描述功能。例如,“用戶提交訂單后,系統應發送確認郵件”比“系統要處理訂單”更明確。

(二)例子:在線購物系統需求陳述

項目背景:
某電商平臺需開發在線購物系統,支持用戶瀏覽商品、下單、支付,以及管理員管理商品庫存和訂單。

需求陳述:

1.功能需求:

用戶可注冊、登錄系統,瀏覽商品列表,查看商品詳情。

用戶可將商品加入購物車,修改購物車中商品的數量或刪除商品。

用戶提交訂單后,系統應生成唯一訂單號,并發送確認郵件。

管理員可添加、修改、刪除商品信息,查看訂單狀態并更新物流信息。

2.性能需求:

商品搜索響應時間≤1 秒(數據量≤10 萬條)。

訂單處理吞吐量≥100 筆 / 分鐘。

3.應用環境:

服務器端:Linux 操作系統,MySQL 數據庫,Tomcat 應用服務器。

客戶端:支持 Chrome、Firefox 等主流瀏覽器,移動端適配 iOS 和 Android。

4.假設條件:

用戶已安裝最新版本瀏覽器,網絡連接穩定。

支付接口由第三方支付平臺提供,系統無需處理支付安全問題。

三、建立對象模型

(一)確定類與對象

從需求陳述中提取名詞短語,篩選出與問題域相關的類。例如,在線購物系統中的候選類包括“用戶”“商品”“購物車”“訂單”“支付”等。需排除冗余(如“系統”)、無關(如“網絡”)或籠統(如“數據”)的類。

篩選原則:

(1)冗余類:重復表示同一概念的類(如“顧客”和“用戶”)。

(2)無關類:與系統功能無關的類(如“操作系統”)。

(3)籠統類:過于抽象的類(如“實體”)。

(4)屬性類:應作為屬性而非類的概念(如“商品顏色”)。

(5)操作類:應作為方法而非類的概念(如“支付處理”)。

(二)確定關聯

識別類之間的關系,如“用戶下單”(用戶與訂單的關聯)、“訂單包含商品”(訂單與商品的關聯)。關聯需明確重數(如“一個訂單包含多個商品”)和方向(如“用戶提交訂單”)。

關聯類型:

(1)普通關聯:如“用戶擁有購物車”。

(2)聚合關聯:如“購物車由多個商品項組成”。

(3)繼承關聯:如“管理員是特殊用戶”。

(三)劃分主題

將類分組為主題,降低模型復雜度。例如,在線購物系統可劃分為“用戶管理”“商品管理”“訂單管理”三個主題。主題應具有高內聚性,組內類關系緊密,組間耦合度低

(四)確定屬性

為類添加描述性屬性。例如,“用戶”類的屬性包括姓名、郵箱、地址;“商品”類的屬性包括名稱、價格、庫存。屬性應滿足原子性(不可再分)和完整性(無遺漏關鍵信息)。

常見錯誤:

(1)誤把對象當屬性:如將“地址”作為“用戶”的屬性,而非獨立類。

(2)屬性冗余:如“訂單總價”可通過“商品價格 × 數量”計算,無需存儲。

(3)屬性不一致:如“商品價格”在不同類中單位不統一(元 / 美元)。

(五)識別繼承關系

通過泛化 - 特化關系(繼承)簡化類結構。例如,“管理員”是“用戶”的子類,繼承“用戶”的屬性和方法,并添加“權限管理”等特有功能。繼承可減少代碼冗余,提高可維護性。

繼承策略:

(1)自底向上:從具體類中提取公共屬性和方法,形成父類。

(2)自頂向下:從抽象父類逐步細化為具體子類。

(六)反復修改

對象模型需多次迭代優化。例如,初始模型中“訂單”和“支付”是獨立類,后續發現“支付”可作為“訂單”的一個狀態,從而合并為“訂單”類的屬性或子狀態。

優化方法:

(1)分解復雜類:如將“現金兌換卡”分解為“卡信息”和“交易記錄”。

(2)合并冗余類:如“分行”和“分行計算機”可合并為“分行”類。

(3)調整關聯關系:如將三元關聯拆分為二元關聯。

四、建立動態模型

(一)編寫腳本

描述系統典型交互場景(如“用戶下單流程”),明確事件順序和參與者。腳本需覆蓋正常流程和異常情況,例如:
用戶下單腳本:

(1)用戶登錄系統,瀏覽商品列表。

(2)用戶選擇商品,添加到購物車。

(3)用戶確認訂單信息,提交訂單。

(4)系統驗證庫存,若庫存不足,提示用戶;否則生成訂單。

(5)用戶選擇支付方式,完成支付。

(6)系統更新訂單狀態為“已支付”,并發送確認郵件。

(二)設想用戶界面

設計系統的交互界面,確定用戶操作方式(如按鈕、菜單)和反饋機制(如提示信息)。例如,訂單提交后顯示“訂單已提交,預計 24 小時內發貨”。

(三)畫事件跟蹤圖

以豎線表示對象,箭頭表示事件,展示對象間的交互順序。例如,用戶下單的事件跟蹤圖如下:

用戶 → 購物車:添加商品 ?

購物車 → 商品:查詢庫存 ?

商品 → 購物車:返回庫存信息 ?

用戶 → 系統:提交訂單 ?

系統 → 訂單:生成訂單 ?

系統 → 支付接口:發起支付 ?

支付接口 → 系統:返回支付結果 ?

系統 → 用戶:發送確認郵件 ?

以下是一個示例:

(四)畫狀態圖

為關鍵類繪制狀態圖,描述其狀態轉換。例如,“訂單”類的狀態圖:

初始狀態 → 已提交 ?

已提交 → 已支付 [用戶支付] ?

已支付 → 已發貨 [管理員發貨] ?

已發貨 → 已完成 [用戶確認收貨] ?

已提交 → 已取消 [用戶取消訂單] ?

以上是一個示例:

(五)審查動態模型

檢查狀態圖和事件跟蹤圖的一致性,確保事件觸發的狀態轉換符合邏輯。例如,“已取消”狀態不能直接轉換為“已支付”,需通過“重新提交訂單”事件觸發。

五、建立功能模型

(一)畫出基本系統模型圖

用數據流圖(DFD)描述系統與外部實體的交互。例如,在線購物系統的基本模型圖:

外部實體:用戶、管理員、支付平臺 ?

處理:訂單處理 ?

數據流:商品信息、訂單請求、支付結果 ?

數據存儲:商品庫、訂單庫 ?

(二)畫出功能及數據流圖

逐層分解基本模型,細化處理邏輯。例如,“訂單處理”可分解為“驗證庫存”“計算總價”“生成發票”等子處理,并用數據流連接各處理框。

0層數據流圖:

用戶 → 驗證庫存:商品ID、數量 ?

驗證庫存 → 商品庫:查詢庫存 ?

商品庫 → 驗證庫存:庫存信息 ?

驗證庫存 → 計算總價:商品價格、數量 ?

計算總價 → 生成發票:訂單金額 ?

生成發票 → 訂單庫:保存訂單 ?

以下是數據流圖的一個示例:

(三)描述處理框功能

用結構化語言或判定表詳細說明每個處理框的邏輯。例如,“驗證庫存”處理框的邏輯:

IF 庫存 ≥ 訂單數量 THEN ?

????返回庫存充足?

ELSE ?

????返回庫存不足?

ENDIF ?

六、定義服務

(一)常規行為

為類定義通用操作,如“用戶”類的“登錄”“注冊”,“訂單”類的“提交”“取消”。這些操作直接對應動態模型中的事件和狀態轉換。

(二)從事件導出的操作

根據事件跟蹤圖中的交互,確定對象需提供的方法。例如,“用戶添加商品到購物車”事件對應“購物車”類的“添加商品”方法。

(三)與數據流圖對應

將數據流圖中的處理框映射為對象的操作。例如,“計算總價”處理框對應“訂單”類的“計算總價”方法,該方法調用“商品”類的“獲取價格”方法。

(四)利用繼承減少冗余

通過繼承機制復用父類服務。例如,“管理員”類繼承“用戶”類的“登錄”方法,并添加“修改商品信息”等特有方法。

java代碼示例:

// 父類:用戶 ?public class User { ?private String name; ?private String email; ?public void login(String username, String password) { ?// 登錄邏輯 ?} ?} ?// 子類:管理員 ?public class Admin extends User { ?public void updateProduct(Product product) { ?// 修改商品信息邏輯 ?} ?} 

?

七、結語

面向對象分析通過三個子模型和五個層次,將用戶需求轉化為可執行的系統模型。實際應用中需注意:

(1)模型迭代:分析過程需反復優化,避免過早陷入細節。

(2)工具輔助:使用 UML 類圖、狀態圖、DFD 等工具提高建模效率。

(3)跨模型關聯:確保對象模型、動態模型、功能模型的一致性,例如對象的屬性和操作需在數據流圖中體現。

(4)領域知識:結合行業經驗識別關鍵類和關系,例如金融系統需重點關注“賬戶”“交易”等類。

未來,隨著AI輔助建模工具的發展,面向對象分析將更高效、智能化,進一步降低復雜系統的開發門檻。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80054.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80054.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80054.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

需求分析階段測試工程師主要做哪些事情

在軟件測試需求分析階段,主要圍繞確定測試范圍、明確測試目標、細化測試內容等方面開展工作,為后續測試計劃的制定、測試用例的設計以及測試執行提供清晰、準確的依據。以下是該階段具體要做的事情: 1. 需求收集與整理 收集需求文檔&#x…

vLLM部署Qwen2-7B模型推理

vllm簡介 vLLM是一個高效的大語言模型推理和部署服務系統,專為大型語言模型的高效執行而設計。它不僅支持多種量化技術以減少模型大小和加速推理過程,還提供了與OpenAI API兼容的服務接口,使得現有的應用程序能夠無縫對接。 一、前提環境 …

【STM32 學習筆記】GPIO輸入與輸出

GPIO詳解 一、GPIO基本概念 GPIO(通用輸入輸出)是微控制器與外部設備交互的核心接口,具有以下特性: 可編程控制輸入/輸出模式支持數字信號的讀取與輸出集成多種保護機制復用功能支持片上外設連接 二、GPIO位結構解析 2.1 保護二…

安科瑞光伏綜自系統在新能源電站中的應用及調度上傳方案研究

摘要 隨著全球對清潔能源需求的不斷增長,光伏發電作為一種可持續的能源解決方案,正迅速發展。光伏綜合自動化系統(綜自系統)在確保光伏電站高效、穩定運行方面起著關鍵作用。本文詳細介紹了安科瑞光伏綜自系統,包括其背…

[python] 函數2-匿名函數

一 匿名函數 格式: 函數名 lambda 形參 : 返回值(表達式) 調用: 結果 函數名(實參) 一般只有一行代碼,他是對def定義函數的一種簡化,只能實現簡單的邏輯 邏輯復雜時不要使用lambda add lambda a,b: ab # a,b就是形參 print(add(2,5)) 1.1 無參數 noargs_func lambda…

深入理解C/C++內存管理:從基礎到高級優化實踐

一、內存區域劃分與基礎管理機制?? ??棧(Stack)?? 棧由系統自動管理,用于存儲函數調用時的局部變量、參數及返回地址。其特點是高效但空間有限(通常1-8MB),遵循后進先出(LIFO)…

kafka 面試總結

Kafka的冪等性是一種機制,確保生產者發送的每條消息在Broker端只被持久化一次,即使生產者因網絡問題等原因重試發送,也不會導致消息重復。 實現原理 生產者ID(PID) 每個生產者實例在初始化時,會被分配一個…

uniapp|實現多終端聊天對話組件、表情選擇、消息發送

基于UniApp框架,實現跨平臺多終端適配的聊天對話組件開發、表情選擇交互設計及消息發送,支持文本與表情混合渲染。 目錄 聊天界面靜態組件實現消息列表布局消息氣泡雙向布局輔助元素定位與樣式靜態數據模擬與擴展性設計表情選擇器靜態模塊浮層實現符號網格排列多端樣式適配方…

LabVIEW超聲波液位計檢定

在工業生產、運輸和存儲等環節,液位計的應用十分廣泛,其中超聲波液位計作為非接觸式液位測量設備備受青睞。然而,傳統立式水槽式液位計檢定裝置存在受建筑高度影響、量程范圍受限、流程耗時長等問題,無法滿足大量程超聲波液位計的…

C++漫步結構與平衡的殿堂:AVL樹

文章目錄 1.AVL樹的概念2.AVL樹的結構3.AVL樹的插入4.AVL樹的旋轉4.1 左單旋4.2 右單旋4.3 右左雙旋4.4 左右雙旋 5.AVL樹的刪除6.AVL樹的高度7.AVL樹的平衡判斷希望讀者們多多三連支持小編會繼續更新你們的鼓勵就是我前進的動力! 二叉搜索樹有其自身的缺陷&#xf…

Verilog Test Fixture 時鐘激勵

1、占空比50%時鐘產生 always begin<clock> 1b0 ;#<PERIOD/2> ;<clock> 1b1 ;#<PERIOD/2> ; end reg <clock> 1b0 ;alwaysbegin#<PERIOD/2> ;<clock> ~<clock> ;end 2…

從人體姿態到機械臂軌跡:基于深度學習的Kinova遠程操控系統架構解析

在工業自動化、醫療輔助、災難救援與太空探索等前沿領域&#xff0c;Kinova輕型機械臂憑借7自由度關節設計和出色負載能力脫穎而出。它能精準完成物體抓取、復雜裝配和精細操作等任務。然而&#xff0c;實現人類操作者對Kinova機械臂的直觀高效遠程控制一直是技術難題。傳統遠程…

探秘數據中臺:五大核心平臺的功能全景解析

數據中臺作為企業數據資產的 “智慧中樞”&#xff0c;通過整合數據處理全流程的核心功能&#xff0c;實現數據價值的深度挖掘與高效應用。以下從五大核心平臺出發&#xff0c;全面拆解數據中臺的功能架構與應用價值。 一、數據可視化平臺&#xff1a;讓數據 “開口說話” 1.…

深度 |提“智”向新,奔向未來——當前機器人產業觀察

機器人踏著“貓步”在T臺走秀、進入工廠協助造車&#xff0c;教育、醫療、城市管理等領域都有了機器人的幫助……今天&#xff0c;機器人已得到廣泛應用&#xff0c;走進你我的生活。 ?? 伴隨著技術日新月異&#xff0c;機器人產業加快提“智”向新。特別是今年以來&#xf…

橋隧坡災害監測報警:用科技筑起生命安全的“智能防線”

.2024年&#xff0c;梅大高速茶陽路段高邊坡塌方事件造成重大傷亡&#xff0c;舉國痛心。這場悲劇再次敲響警鐘&#xff1a;橋梁、隧道、邊坡等高風險區域的實時監測與精準報警&#xff0c;已成為交通安全的生命線。如何用技術手段在災害發生前“搶跑”&#xff0c;第一時間阻斷…

【Python】一鍵提取視頻音頻并生成MP3的完整指南 by `MoviePy`

摘要 昨天&#xff0c; 我在讓一個小朋友給我整理一次培訓的視頻的時候&#xff0c;我看到他把視頻文件放到剪映里面處理。 我以為他要干什么呢&#xff0c; 還很期待&#xff0c;結果他只是為了導出音頻而已。 于是就有了今天的這篇博客。 作為音視頻處理領域的常用需求&…

PDF轉長圖工具

市面上的PDF轉換工具數不勝數&#xff0c;福昕PDF、萬興PDF、Adobe Acrobat&#xff08;DC&#xff09;、PDF24等眾多軟件都具備PDF轉圖片的功能。然而&#xff0c;這些知名軟件大多只能將單頁PDF轉換為單張圖片&#xff0c;若要將PDF整體轉換為一張長圖&#xff0c;似乎并無此…

【Yolo精讀+實踐+魔改系列】Yolov3論文超詳細精講(翻譯+筆記)

前言 前面咱們已經把 YOLOv1 和 YOLOv2 的老底都給掀了&#xff0c;今天輪到 YOLOv3 登場&#xff0c;這可是 Joseph Redmon 的“封神之作”。講真&#xff0c;這哥們本來是搞學術的&#xff0c;結果研究的模型被某些軍方拿去“整點活”——不是做人是做武器的那種活。于是他一…

算法攻略:接雨水問題的深度解析

算法攻略:接雨水問題的深度解析 一、引言 在算法的領域中,“接雨水”問題是一道經典且富有挑戰性的題目。它不僅考查對數組操作的理解,更需要巧妙運用算法思想來解決看似復雜的實際場景問題。通過深入研究這一問題,我們能提升算法思維和編程能力,更好地應對各類算法難題。…

【Linux】Linux工具(1)

3.Linux工具&#xff08;1&#xff09; 文章目錄 3.Linux工具&#xff08;1&#xff09;Linux 軟件包管理器 yum什么是軟件包關于 rzsz查看軟件包——yum list命令如何安裝軟件如何卸載軟件補充——yum如何找到要安裝軟件的下載地址 Linux開發工具Linux編輯器-vim使用1.vim的基…