软工UML画图
學習如何畫圖,如類圖,順序圖,流程圖,E-R圖和類代碼等
一個一個來
起始
數據流圖(功能模型)
基本符號
加工:命名要用動賓詞組;
外部實體、數據存儲、數據流:命名要用名詞;
題目說明解法
下面用個題來說明:
假設一家工廠的采購部每天需要一張定貨報表,報表按零件編號排序,表中列出所有需要再次定貨的零件。對于每個需要再次定貨的零件應該列出下述數據:零件編號、零件名稱、定貨數量、目前價格、主要供應者和次要供應者。零件入庫或出庫稱為事務,通過放在倉庫中的CRT終端把事務報告給定貨系統。當某種零件的庫存數量少于庫存量臨界值時就應該再次定貨。
采購部是數據起點,然后最后倉庫是數據終點。中間是訂貨系統。
所以基本的畫圖是
然后確定好目標后再進行細化:
確定處理 :
零件入庫或出庫稱為事務,通過放在倉庫中的CRT終端把事務報告給定貨系統。當某種零件的庫存數量少于庫存量臨界值時就應該再次定貨。
“事務的后果是改變零件庫存量,實時統計定貨情況” →必須有一個用于處理事物的處理
工廠的采購部每天需要一張定貨報表,報表按零件編號排序,表中列出所有需要再次定貨的零件。對于每個需要再次定貨的零件應該列出下述數據:零件編號、零件名稱、定貨數量、目前價格、主要供應者和次要供應者。
“采購部需要報表”→必須有一個用于產生報表的處理
確定數據存儲:
對于每個需要再次定貨的零件應該列出下述數據:零件編號、零件名稱、定貨數量、目前價格、主要供應者和次要供應者。
當某種零件的庫存數量少于庫存量臨界值時就應該再次定貨。
“在某個地方要有零件庫存量和臨界值數據” →必須有一個用于保存庫存清單的數據存儲
“產生報表和處理事務這兩個處理在時間上明顯不匹配”→必須有一個用于存放定貨信息的數據存儲
分析完上面畫圖
剛開始畫出來框架:(把系統,起始點和終點畫好)
然后把處理和數據流和數據結構畫上
這里解答下為啥庫存清單是雙向的,因為處理事務(進貨)需要看庫存清單,所以會產生一個指向處理事務的箭頭
細化(第二層)
到這里還可以繼續細化
因為你看
當某種零件的庫存數量少于庫存量臨界值時就應該再次定貨。
這句話中缺貨-》訂貨-》修改庫存量等沒有體現出來
所以:
細化處理事務
- 接收事務
- 按照事務去修改庫存清單
- 如果更新后的庫存量少于臨界值,則應填寫訂貨信息,這就需要一個處理定貨的加工
我畫的不太好,我用下ppt的
這里說明下定貨信息(貨物的名字啥的,數量)。因為處理事務(需要看數量)和生成報表(需要看貨物信息)都用上,所以這樣畫。
然后二層要進行合并
合并
數據流圖中的信息提取
結束其他
我感覺這個視頻講解的還行:
軟件工程數據流圖畫法 我在tyut
鏈接:
然后我使用的ppt:
使用的視頻:數據流圖的繪制
其他例題:
高考錄取統分子系統
結構化系統分析——交通違章處理
房屋中介系統的功能模型
軟件結構圖(模塊層次圖(H圖)和模塊結構圖)
模塊結構圖
模塊結構圖三大成分:模塊、調用、接口數據(純數據和控制信息)
基本符號
三大成分:模塊,調用,數據(純數據◎、控制信息?)
模塊結構圖中的主要成分有:
- 模塊:用長方形表示
- 調用:從一個模塊指向另一模塊的箭頭表示前一個模塊調用后一個模塊。有循環調用和條件調用
- 純數據:用帶圓圈的小箭頭表示從一個模塊傳遞給另一模塊的數據(有實義)
- 控制信息:帶涂黑圓圈的小箭頭表示一個模塊傳送給另一模塊的控制信息
所以模塊結構圖中的調用是有箭頭指向的
題目分析解法
高考錄取統分子系統有如下功能:
(1) 計算標準分:根據考生原始分計算,得到標準分,存入考生分數文件;
(2) 計算錄取線分:根據標準分、招生計劃文件中的招生人數,計算錄取線,存入錄取線文件。
看上面視頻鏈接,數據流圖已經畫出來了。。(后面加個數據終點(->考生))
那么看結構圖
先畫一個基本結構:
一般上面三個是輸入,處理,輸出
他把原始分傳過去,那么下面咋樣計算原始分之類的還要細分
根據原始分得到標準分,說明在分數處理里面使用了,再細分
那么如果使用分數處理,也得細分。
下面加個計算標準分,把原始分傳過去,再標準分傳給分數處理
我們還要計算錄取線等
我們看右邊,先把標準分傳過來
結果輸出要把標準分存入考生分數文件
還差個錄取線,要計算錄取線。
根據標準分、招生計劃文件中的招生人數,計算錄取線,存入錄取線件。
招生人數傳給分數處理
然后根據標準分和招生人數計算錄取線
分數處理得到錄取線,返回給系統
分數處理如何得到錄取線?
要來個計算錄取線模塊
傳入標準分
傳入招生人數
傳回錄取線給分數處理模塊
系統把錄取線,存入錄取線文件。
加一個存入錄取線文件模塊
把從系統來的錄取線0-》結果輸出-》存入錄取線文件
最后自己美化下
標準答案見這篇文章高考錄取統分子系統
其他東西
標準答案見這篇文章高考錄取統分子系統
借用視頻:
數據流圖轉軟件結構圖方法tyut
鏈接:
其他例題:
也可以不像上面那樣輸入輸出處理三個模塊
自己設置模塊
比如這個題:
“工資處理”子系統的結構圖
模塊層次圖(H圖)
這個就比較簡單了
就按照功能模塊往下分層
注意: 模塊層次圖(H圖)二大成分:模塊和調用(調用不要畫箭頭)
還是拿上面那個題為例:
這樣寫就行,如果還有得話可以細化
數據流圖+結構圖綜合題
高考錄取統分子系統
基于Web的房屋中介系統
N-S圖(盒圖)+類C語言PDL
五種結構:順序結構、條件選擇、多重分支選擇、當循環、直到循環。
詳細看這篇文章:
N-S圖詳解
注意:盒圖沒有開始和結束標志,默認從圖的頂部開始,到圖的底部結束,單入口單出口。注意直到循環until的條件,千萬不要搞反了。
題目分析解法
N-S圖
閱讀下面的程序流程圖,試分別用N-S圖和PDL(類C語言描述)表示。
其實前面的都好看,就最后那個結束時候要注意下
你看這個題目
直到i>=50條件成立時候才結束循環
所以使用直到型循環結構 (先執行后判斷,當P1條件不成立的情況下,反復執行A語句,直到P1條件成立為止)
下面畫好:
! 注意:
盒圖沒有開始和結束標志,默認從圖的頂部開始,到圖的底部結束,單入口單出口。注意直到循環until的條件,千萬不要搞反了。
PDL類c語言
注意:使用類C語言的偽代碼形式,注意,直到循環do…while,直到循環的條件,千萬不要搞反了。
比如上面這題
i = 1do{if ( g >=80 )輸出n、 gi = i + 1}while(i<50)比較難的也就是最后一點,直到循環do…while
關鍵在于這里的條件
學過C其實懂的
直到循環do…while
只要后面那個while的條件符合就繼續執行那個框{}里面的內容
所以是while(i<50)
其他題目可以仿照這個寫
其他
其他例子:
例子1
這里舉個他倆一般結合的例子:
閱讀下面的程序算法,試分別用程序流程圖和N-S圖表示。
void SortNum(int num , int flag) {int x = 0; int y = 0;while (num > 0){if (flag = = 0)x = y +2; else if (flag = = 1) x = y + 3; else x = y +4; num--} }畫出程序流程圖
畫出盒圖
這里使用當型循環,先判斷后執行,當P1條件成立的情況下,反復執行A語句,直到P1條件不成立為止
例子2
下面舉下PDL偽代碼:
閱讀下面的程序流程圖,試分別用N-S圖和PDL(類C語言描述)表示
這里使用直到型循環,先執行后循環,當P1條件不成立的情況下,反復執行A語句,直到P1條件成立為止
然后偽代碼:
這里使用do while循環,可以看著上面的盒圖畫,基本一致
基本路徑測試
這個我就直接用題目講解了
int isLeap(int year){if ( year % 4= =0) ----------------------------------------1{if ( year % 100= =0) -------------------------------- 2{if ( year %400= =0) ----------------------------- 3leap=1; ----------------------------- 4elseleap=0; ------------------------------5 //endif -----------------------------6}elseleap=1; --------------------------------7//endif -------------------------------8}elseleap=0; -------------------------------- 9 // endif ---------------------------------10return leap; ---------------------------------11 }請用基本路徑測試技術完成該程序的測試,分別實現:
(1)畫出上述程序的有向流圖,并計算該程序的環形復雜度。(各占5分,共10分)
(2)給出基本路徑集,并給出測試用例。(各占5分,共10分)
注:不能修改程序中已有的程序行號,否則不給分。
流圖
注意:
- 一般流圖給的序號都要用上,
- 記得畫T,F (對錯)
- 那些沒用的當作中轉節點,還要最后終點,最后一個,且路徑一定要寫到程序結束,不要漏掉最后的節點,否則獨立路徑寫不完整。
- 有向流圖的路徑一定要畫箭頭
或者這樣:
環形復雜度
看有幾個環
最后+1(整體是一個環)
或者:注意畫T F
這里 V(G)=邊數13-11節點數+2=4
V(G)=判定節點3個+1=4
基本路徑集+測試
測試用例設計既要寫輸入數據,也要寫預期的輸出數據,其他
可以見我的另一篇概念文章,
或者ppt:
下面的是UML圖,即順序,類,用例,
用例圖
基本符號
參與者(Actor)(活動者)——與應用程序或系統進行交互的用戶、組織或外部系統。用一個小人表示。
用例(Use Case)——用例就是外部可見的系統功能,對系統提供的服務進行描述。(用戶能做什么事情)用橢圓表示。
子系統(Subsystem)——用來展示系統的一部分功能,這部分功能聯系緊密。
關系
用例圖中涉及的關系有:關聯、泛化、包含、擴展。
借用這篇博客的圖片
UML建模——用例圖(Use Case Diagram)
關于它們的具體介紹一定要看上面那篇文章,理解很清楚
這里要特別說明下,我們老師講的關聯是有箭頭指向的,指向用例。
還是要看具體情況的(一般關聯實線無箭頭)
然后來畫用例圖
題目分析解法
可以看一下上面鏈接的文章下面的例題
下面我們看道例題:
學生成績管理系統
需求陳述:
某高校欲開發學生成績管理系統,其基本功能包括:
(1) 基本信息管理
管理員登錄系統后,輸入或修改教學計劃、學生名單和教師名單。
(2) 學生選課
學生登錄系統后,根據教學計劃進行選課。
(3) 分配任課教師
管理員為符合條件的課程分配教師,并打印任課通知單給教師。
(4) 成績管理
每門課程的教師在考試評分結束后,登錄系統錄入成績;管理員維護成績,系統可生成成績單(發給學生),成績統計分數表(發給管理員)。
附:學生成績管理系統的“分配任課教師”用例的描述。
主事件流:
(1) 管理員登錄到“學生成績管理”系統的分配任課教師頁面,如果登錄失敗,轉A1。
(2) 管理員查詢課程庫,查詢符合條件的課程,然后查詢教師信息,為符合條件的課程分配任課教師,并打印任課通知單給教師。如果沒有合適的人選,則放棄則轉入A2。用例結束。
擴展事件流:
A1:管理員身份驗證不合法
若管理員賬號不存在或無效,顯示提示信息,可以重新輸入或終止該用例。。
A2:取消
如果沒有符合條件的課程,則放棄;沒有合適的教師,則按取消按鈕放棄。
要求:用面向對象方法學對該成績管理系統進行分析與設計,分別完成以下工作:
(1) 給出成績管理系統的用例模型 (10分)
1. 先找參與者,從題目中看出有三個參與者(教師,管理員,學生)
先畫上三個小人
2. 一個一個參與者分析用例
先分析管理人員:
這里要從大方面考慮,所以從題目主事件流看出
(1) 基本信息管理
管理員登錄系統后,輸入或修改教學計劃、學生名單和教師名單。
(3) 分配任課教師
管理員為符合條件的課程分配教師,并打印任課通知單給教師。
(4) 成績管理
每門課程的教師在考試評分結束后,登錄系統錄入成績;管理員維護成績,系統可生成成績單(發給學生),成績統計分數表(發給管理員)。
是管理信息,分配任課教師,管理成績
再分析教師:
看題目得到,好像也就這句話提到過教師干嘛
成績管理
每門課程的教師在考試評分結束后,登錄系統錄入成績;
所以教師用例為錄入成績
最后分析學生:
看題目得到,好像也就這句話提到過學生干嘛
(2) 學生選課
學生登錄系統后,根據教學計劃進行選課。
所以學生用例為選課
這樣基本的用例和參與者畫好了
3. 補全關系和漏的東西
看題目:
這幾個功能都涉及到了登錄
某高校欲開發學生成績管理系統,其基本功能包括:
(1) 基本信息管理
管理員登錄系統后,輸入或修改教學計劃、學生名單和教師名單。
(2) 學生選課
學生登錄系統后,根據教學計劃進行選課。
(3) 分配任課教師
管理員為符合條件的課程分配教師,并打印任課通知單給教師。
(4) 成績管理
每門課程的教師在考試評分結束后,登錄系統錄入成績;管理員維護成績,系統可生成成績單(發給學生),成績統計分數表(發給管理員)。
那么這些用例中包含了登錄系統,就選用包含關系
這里為啥錄入成績不包含登錄系統呢?我們往下看就知道了
看題目:
(4) 成績管理
每門課程的教師在考試評分結束后,登錄系統錄入成績;管理員維護成績,系統可生成成績單(發給學生),成績統計分數表(發給管理員)。
成績管理包含了錄入成績
所以它們二個是包含關系
但是我們還有其他漏的關系,還有擴展事件流
繼續分析
(3) 分配任課教師
管理員為符合條件的課程分配教師,并打印任課通知單給教師。
這里說明分配任課教師包含打印任課通知單
/
繼續分析
(4) 成績管理
每門課程的教師在考試評分結束后,登錄系統錄入成績;管理員維護成績,系統可生成成績單(發給學生),成績統計分數表(發給管理員)。
這里說明管理成績包含生成成績單,成績統計表
最后畫出大致:
其他
-
注意參與者和用例規范化的圖形表示,用例之間的《include》、《extend》關系的識別和表示,不要搞反了。尤其虛線箭頭的方向,表示依賴關系,《include》、《extend》的依賴關系是相反的,所以箭頭的指向也是相反的,畫圖時不要畫反了。
-
參與者要命名成名詞,用例要命名成動賓詞組。
-
參與者與用例之間用實線連接。
文章:UML建模——用例圖(Use Case Diagram)
ppt:
其他題目:
圖書館系統的用例圖
用例圖——門診掛號
用例圖——客戶提出申請要求貸款…
用例圖——空調公司維修服務流程
類圖
借鑒教學視頻:
uml圖做題方法(上)tyut
視頻
基本符號
類
這里簡單介紹下
詳細的看類圖詳解
- 名稱
- 特性 (類似于string name這種)
- 操作 (類似于函數方法 void add()這種)
注意類特性操作前面有符號的 + -
”+“ :Public 公有
”-“ : Private 私有
”#“:Protected 保護
接口《interface》
? 一組操作的集合,只有操作的聲明而沒有實現
接口名稱
接口方法
例如: 飛翔接口
public 飛方法()
或者還有另外一種寫法(”棒棒糖表示法“)關聯其他接口
例如:唐老鴨接口
public 講話
但是它會講話是講人話的,需要接口講人話
關系
繼承關系
就是泛化關系,這里叫做繼承關系
- 三角形連接大的方向
比如鳥類屬于動物類
實現關系(類和接口)
實現關系——對應于類和接口之間的關系
例如:大雁飛方法需要接口飛翔
關聯關系(類與類)
關聯關系——描述了類的結構之間的關系。具有方向、名字、角色和多重性等信息。一般的關聯關系語義較弱。
例如:大雁下單與氣候關聯
其實這樣的關聯很弱,如果不確定可以不寫
聚合關系(整體部分)
特殊關聯關系,指明一個聚集(整體)和組成部分之間的關系
- 菱形:連接大的方向
例如:雁陣飛包含大雁飛
組合關系(擁有)(聲明周期一樣)
組合關系——語義更強的聚合,部分和整體具有相同的生命周期
- 菱形:連接大的方向
嚴謹的按照聲明周期一樣
例如:鳥的翅膀和鳥
依賴關系
依賴關系——※描述了一個類的變化對依賴于它的類產生影響的情況。有多種表現形式, 例如綁定(bind)、友元(friend)等
比如:動物依賴水
多重性
題目分析解法
一本書有一個封面、一個目錄、一個前言、若干章、每章有若干節、每節有若干段,有若干句子,有0個或多個插圖,還有0個或多個表格,書最后有一個附錄。試建立該書的對象模型。
書,封面,目錄、前言,前言,節,段,句子,插頭,表格,附錄
組合關系
書包含封面,目錄,前言,章,附錄
章包含節
節包含段
段包含句子,插圖,表格
多重性加上:這里書有若干章,一對多- 1… 1…*
章有若干節 ,一對多- 1… 1…*
節有若干段,一對多- 1… 1…*
段有若干句子,一對多- 1… 1…*
有0個或多個插圖,1… 0… * …
還有0個或多個表格 1… 0… * …
其他
使用的ppt
上面那題書的題目視頻講解:
uml圖解法(下)tyut
其他題目舉例:
酒店預訂
更具體的圖書館系統的類圖
空調維修系統 類圖
學生成績管理系統:
順序圖(時序圖)
顯示一組按時間排列的對象之間進行交互的圖
組成元素
順序圖的元素:
- 參與者
- 對象
- 生命線
- 激活框
- 消息
- 控制框架(分支、循環、可選)
舉例:
下面一個一個講解:
參與者
參與者(Actor): 實例是一個交互過程(用例)的發起者,通常放置在最左邊。
比如上面的圖書管理員。
對象
對象就是類的一個實例,在順序圖中上方以和類相同的圖形符號表示,并帶有一條叫做“生命線”的垂直虛線。
生命線上的矩形條表示對象在特定時間的生存期。
例如:
生命線
說明了對象的生命周期。對象如果被銷毀了,其生命線就會中斷。
激活框
表明交互中對象何時起作用,激活框在順序圖中是可選的。
消息
消息是對象之間的通信,消息傳遞的同時對應活動隨之發生。
→→→→→→→→→→
在順序圖中,消息被表示為從一個對象的生命線到另一個對象的生命線的水平箭頭。
箭頭通過消息名稱及消息參數來標記,箭頭自上至下的垂直位置來表示時間的先后順序。
消息響應后可能會回送結果,發送請求的消息采用實線箭頭,返回結果的消息采用反向的虛線箭頭。
如果事件流較多,可備選流單獨繪制
如果用例的備選事件流的步驟較多,可另外為備選事件流單獨繪制一個順序圖。
利用交互框架來標示.
- 框架可以將順序圖中的某個區域框起,并劃分成若干片斷
- 每個框架有一個操作符。
- 對于循環操作,可以使用loop操作符,條件操作則使用alt操作符
- 每個分支片斷有一個監護條件,滿足該條件才會執行該片斷內的事件流
舉例:
其他
可以看我的另外一篇文章
見ppt
例子:圖書館結借書順序圖:
還書順序圖:
備選事件流可以使用opt框架表示可選
手機撥號順序圖
學生成績管理系統順序圖
活動圖
活動圖描述系統中各種活動的執行順序,通常用于描述一個操作中所要進行的各項活動的執行流程(如業務過程、工作流程等)。
它常被用來描述一個用例的處理流程,具有交互性(利用泳道)。
活動圖由一些活動組成,圖中同時包括了對這些活動的說明。當一個活動執行完畢之后,控制將沿著控制轉移箭頭轉向下一個活動。
活動圖中還可以方便地描述控制轉移的條件以及并行執行等要求。
活動圖是另一種描述交互的方式,它描述采取何種動作,動作的結果是什么(動作狀態改變),何時發生(動作序列),以及在何處發生(泳道)。
組成元素
!注意:一張活動圖只有一個開始,可以有多個終止。
舉例畫圖:
其他
可以看我的另外一篇文章
見ppt
學生成績管理系統活動圖
狀態圖
在UML2.0命名為狀態機圖(state machine diagram),它是表述系統行為的一種技術,在面向對象方法中,對單一的類繪制一個狀態機圖以表示該對象的生命期行為和狀態轉換。
對象可能存在的狀態:
- 初態:是狀態圖的起始點,表示對象的初始狀態,初態只有一個,用實心圓●表示。
- 終態:是狀態圖的終點,表示一個對象完成必要操作后的最終狀態,終態不能是復合狀態。實心圓外加一個圓圈?來表示終態。
- 復合狀態:一種狀態中還嵌套有其它多個狀態(子狀態)。
組成元素
狀態
轉換(transition):指出由一種狀態到另一種狀態的運動。每個轉換上有可選標記,標記含有三部分內容事件:
- 事件[監護條件]/活動(event[guard]/activity)
- 只有發生指定的事件后才有可能引發狀態的改變
- 需要監護條件為真時轉換才會生效
- 活動是在轉換執行中的行為
舉例畫圖:讀者借書&歸還
其他
可以看我的另外一篇文章
見ppt
狀態圖思考題——繪制信用卡的狀態圖
總結
- 上一篇: javascript --- JSON
- 下一篇: 微信小程序怎么取mysql_微信小程序如