<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MDA之路

    MDA,UML,XML,Eclipse及Java相關的Blog
    posts - 53, comments - 494, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    程序員眼中的UML(2)--克服用例圖的恐懼

    Posted on 2005-06-15 22:50 wxb_nudt 閱讀(19507) 評論(25)  編輯  收藏 所屬分類: 技術雜談

    程序員眼中的UML(2)

    --克服用例圖的恐懼

    在實際工作中,大部分程序員很少接觸到需求分析,即使有需求分析,也是草草了事,沒有用正規的方式來表達,所以一般程序員使用用例圖的機會是不多的。但是卻又常常在各種媒體上看見用例圖,于是對一種常常出現,自己又不太熟悉的技術,會產生恐懼。如果說對MDA或者CORBA這樣的技術產生恐懼還是值得的話,對用例圖產生恐懼是非常不值的。因為MDACORBA這樣的技術也許要花上半年的時間才能夠初步了解,而克服用例圖恐懼癥,則只要不到一天的時間。

    用例圖初感

    UML是一組圖示符號的標準。所謂圖示符號,就是一組定義好的圖示,它們可以表達定義好的各種意思。用UML進行軟件建模,就是用規定好的符號畫圖,這些圖表達了開發人員腦中的軟件系統。用UML進行軟件建模,其難度并不比我們小時候上的美術課更難。在美術課上,一個圓形加上四根線條表示太陽,一個三角形加上一個矩形表示房子;同理,在UML的用例圖中,一個橢圓表示用例,一個小人表示參與者。我并不認為它們之間有質的區別,想到我對這種小學生畫圖課恐懼了幾年,不由得感到羞愧。

    用例圖是UML的九個圖中較為重要和常用的一種圖。常常用于軟件開發的需求分析階段,也能用于軟件的系統測試階段。簡單的來說,用例圖是描述系統的外部視圖。

    在開始設計一個軟件系統時(更廣義的情況下,可以用來設計任何系統),需要一種手段來發現系統的功能,用例圖雖然是圖示,但是這些圖示隱含了一種啟發系統功能的手段。其實所有的UML圖都只包含圖示和標準,并不包含方法,但是它們往往隱含了某種方法。UML和軟件開發方法的關系,很類似于漢字和語文的關系。

    用例圖包含了三種基本的概念:用例、角色和系統。它們可以組合起來表達系統的外部視圖。而且這種表達方式是如此直觀和簡單。

    第一張用例圖

    畫用例圖是一件很簡單的事情,而且感覺還很舒適,因為用例圖簡潔、直觀。雖然用例圖不能像HelloWorld一樣運行,也不能生成代碼,不過畫一張清晰的用例圖還是很有成就感的。

    我使用的工具是Eclipse+EclipseUML插件,功能不如Rose,但是是開源而且免費的(EclipseUMLfree版也有企業版),而且效果也不錯。第一張用例圖如下:

    第一張用例圖.jpg可以看出圖中有一個系統(保險商務系統),兩個角色(客戶和保險銷售員)以及三個用例(簽訂保險單、銷售統計資料、客戶數據資料),另外還有四個連接線以及一個注釋。如果在紙上或者合適的工具中,畫這樣一張用例大概只需要五分鐘吧。不過僅僅畫出來是沒有意義的,需要弄清楚其背后真正的含義才行。

    理解用例圖

    可以這樣簡單的理解用例圖中的一些概念,系統System)指的是軟件系統,它可以包含一些用例,并界定系統的邊界,邊界之內的屬于系統的功能和行為,邊界之外的則不是系統所關心的內容。系統規定了一個具有某些功能的黑盒子,在系統之外看到的僅僅是這個系統的功能,而不能看到系統的內部細節。這一點也是用例圖經常被用來做系統測試的原因。當然這些測試一般是黑盒測試。

    角色Actor)是與系統中的用例交互的一些實體,在實際情況中,角色可以是人,也可以是其他系統或者硬件設備。在畫用例圖的過程中,角色往往是第一個被確定的,因為系統或者用例在開始時是模糊的,但是參與系統的角色是最容易明晰的。有了角色之后,根據角色與系統的交互,以及角色要求的功能,可以進一步確定系統和用例。

    用例Use case)指的是系統的功能,它是系統某個功能的所有執行動作的集合。在UML圖示中它是一個橢圓,但是具體分析用例的時候需要給出這個用例的所有執行動作的步驟。例如上圖中的“簽訂保險單”用例,就可以分為幾個步驟:第一,客戶發出保險單請求;第二,系統給出保險單樣式表;第三,用戶填寫保險單樣式表;第四,系統檢查用戶提交的保險單格式是否規范;第五,如果不規范則返回第二步,如果規范則給保險單銷售員發出消息;第六,保險單銷售員填寫保險單;第七,保險單銷售員將填寫好的保險單加入數據庫,并將客戶資料輸入客戶數據庫。當然,以上步驟僅僅是我想象的,我還從來沒有見過什么“保險單”,這次過了一把癮。

    連接Assocation)是角色與用例的連接,表達此角色可以初始化此用例。 

    注釋Note)可以添加到任何地方,對用例圖的不同部分加以說明。

    泛化、包含和擴展

    泛化Generalization)在面向對象的技術中無處不在,它的另一個名字也許更為著名,就是“繼承”。下圖給出了一個使用泛化的用例圖:

    繼承關系用例圖.jpg由此可知,在用例圖中,角色和用例都能夠泛化。角色的泛化/繼承很容易理解,因為角色本來就是類(Class),它是一種版型(stereotype)為Actor的類,所以角色的繼承直觀而自然。但是用例的繼承實際上分為兩種情況,并不是簡單的使用泛化,而是使用擴展(extended)和包含(include)兩種泛化的特例。

    擴展用于子用例的動作步驟基本上和父用例的動作步驟相同,只是增加了另外的一些步驟的情況下。包含用于子用例包含了所有父用例的動作,它將父用例作為了自己的一個大步驟,子用例常常包含一個以上的父用例。如下圖:

    用例的擴展和包含.jpg小結

    關于用例圖基本上也就是上面提到的這些內容了。當然,用例圖還常常和類圖、活動圖聯合使用,不過那些知識還是等其他知識完備了以后再說比較好。

    我總結的畫用例圖的步驟如下:

    l         確定系統,擬出系統的名稱,這個不難,例如電信計費系統;

    l         找出所有與系統打交道的角色,角色要進行一些精簡和整合;

    l         站在角色的立場想象系統應該提供的功能,將這些功能畫成系統中的用例;

    l         對于每個用例給出詳細的動作步驟;

    l         找出用例圖中角色、用例之間可能有的繼承、擴展或者是包含關系;

    以我現在的理解能力,認為用例圖到此為止了。當然,我還可以想象,用例圖會用來啟發類圖的構建,例如用例圖中的某些部分(角色或者用例)會變成類圖中的類或者接口。另外,可以想象用例圖還可能會影響活動圖中的流程。

    后記

    讓我恐懼了好久的用例圖在今天便土崩瓦解了,心中卻彷佛有一點茫然,因為我記得自己無數次的對自己說“好忙啊,這個技術肯定要花很多時間,還是以后再學吧”類似的話。當我用C的時候對C++這樣說過,然后是JavaCORBA、JSP、XML、MDA、XMI、UML……

    blog不僅僅是一種愛好,對我來說,更是一種最好的學習方法,當我讀小學的時候,班主任常常對我說“好記性不如爛筆頭”,我當時的理解是把事情用筆記下來比用腦袋背下來更加持久(腦袋是內存?紙筆是數據庫?)。但是,現在我理解到,要學習某個東西,最好的方法是用自己的語言把它表達出來,如果你能讓別人理解這個技術,你自己當然已經精通了。在我寫blog的過程中,常常會出現寫到一半的時候猛然領悟的情況,這是因為當你在選擇最佳的表達方式的時候,將你自己頭腦中一團亂麻的線索都理清了的結果。

    有朋友留言說,自己計算機本科畢業,在計算機領域學習了八年,竟然看不懂我的blog。這個我認為很正常,讀本科的時候,所有同學都可以在一起討論問題、實習;等到上研的時候,同學對我說他的課題,我只能模糊的聽個大概,因為專業方向已經分開了;現在讀博了,同學要拉著我說他的課題,我只能明白是哪個領域里面的問題,往往對這個問題的描述都聽不懂了。這是因為研究方向已經非常精細的原因。我自問我的方向已經很大眾化了,如果研究圖像壓縮算法的話,那滿篇都是數學公式了;如果研究微電子技術,那么滿篇都是集成電路圖了。

    還有一點,如果我感興趣的技術在網上已經能夠找到很好的資源,那么我不會動筆去寫blog了,我會把資料下載到硬盤就好了。例如XML技術,我的blog中只有兩篇,第一篇是“XML的本質討論”,總結出了別人看不到的XML本質,提出了一些新觀點;第二篇是“XSL:轉換從哪里開始”。其實XML技術淺顯易懂,我也有很多感想和心得,不過其中只有XSL在網上不能找到很好的總結資料,因此我寫了那一篇。這也是我堅持原創和創新的一點反映吧。對于那種狂貼別人資料的blog,我是不以為然的。我只喜歡原創或者第一手翻譯資料的blog


    評論

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2005-06-16 00:12 by hexuzhong
    請問一個題外話,你用eclipseUML做好圖后(包含中文),
    生成圖像時會不會產生亂碼?

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2005-06-16 08:48 by 88888
    厲害!

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2005-06-16 08:53 by hnlylyly@tom.com
    如果需要ROSE的破解檔,可以給我發郵件:hnlylyly@tom.com。

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2005-06-16 10:04 by wxb_nudt
    當EclipseUML畫的圖中包含中文的時候,如果用生成jpeg的功能生成圖像,則會出現亂碼。
    我用的版本是Eclipse3.01,EclipseUML3.0。
    所以我是用截屏取的圖。

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2005-06-20 11:41 by 風中的石頭
    很不錯,保持關注

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2005-10-24 15:35 by 一點糾正
    可以這樣簡單的理解用例圖中的一些概念,系統(System)指的是軟件系統,它可以包含一些用例,并界定系統的邊界,邊界之內的屬于系統的功能和行為,邊界之外的則不是系統所關心的內容。

    上面一段話,你提出的系統兩個字,其實不一定指的是軟件系統。
    uml的用例圖是用來解釋系統的動態需求,那么這個系統可能會是現實生活中的一個范圍而不是軟件系統,如果你的用例分析是處于業務分析階段,那么還不存在軟件系統,這個系統就不能指軟件系統,而是你分析的問題領域!
    只有當你的業務用例分析完備后,有了業務對象模型后。你要使用軟件來解決你的問題領域的時候,你需要建立軟件系統,來完成你剛才業務模型所描述的需求的時候,這時候,可以寫軟件系統!

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2005-12-29 20:51 by jeffrey
    極度贊成這句話:

    “要學習某個東西,最好的方法是用自己的語言把它表達出來,如果你能讓別人理解這個技術,你自己當然已經精通了”

    # 這段話說的不清楚  回復  更多評論   

    2006-01-04 09:53 by laodaoo
    擴展用于子用例的動作步驟基本上和父用例的動作步驟相同,只是增加了另外的一些步驟的情況下。包含用于子用例包含了所有父用例的動作,它將父用例作為了自己的一個大步驟,子用例常常包含一個以上的父用例。如下圖:

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2006-02-14 09:34 by songyangaaron
    受益匪淺,謝謝樓主。

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2006-02-16 11:56 by 風神
    寫的不錯,我很贊同你的觀點,
    能不能給我看看你的這兩篇。例如XML技術,我的blog中只有兩篇,第一篇是“XML的本質討論”,總結出了別人看不到的XML本質,提出了一些新觀點;第二篇是“XSL:轉換從哪里開始”。
    我的油箱是xiongzhewen@163.com

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2006-02-16 22:33 by wxb_nudt
    在我的blog中就有,原來我的blog沒有管理,所以比較凌亂,可能不好找。
    我今天將blog整理了一下,你看看應該好找了。謝謝關注我的blog!

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2006-02-23 12:07 by wycg_cnh20
    寫得很好

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2006-03-28 19:52 by hdli
    thank you !

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2006-04-04 17:06 by bonnn
    寫得很棒,謝謝!

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2006-09-21 17:07 by ssg
    寫的很好 很容易明白

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2006-10-17 12:44 by dl
    寫得真不錯。

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2006-11-19 23:58 by lxm
    寫得清楚明了啊,希望更多跟我一樣初識uml的兄弟能夠看到。 另外后記中“要學習某個東西,最好的方法是用自己的語言把它表達出來,如果你能讓別人理解這個技術,你自己當然已經精通了”
    這句話也讓我收益匪淺,謝謝。

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2007-01-20 00:28 by
    集團計費查詢就不用計費員去連嗎?奇怪

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2007-04-03 21:40 by longsee
    我是專業開發人員和技術講師,拜讀后感悟頗多,非常贊同作者的"現在我理解到,要學習某個東西,最好的方法是用自己的語言把它表達出來,如果你能讓別人理解這個技術,你自己當然已經精通了。"

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2007-05-23 09:45 by 花生米
    寫的不錯
    很誠懇,也很實用,希望有機會多交流

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2007-07-17 11:13 by poson
    good!

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2007-10-10 15:33 by worm_me
    淺顯易懂,謝謝。

    問個小問題:第一個用例圖中的“簽訂保險單”的用戶是客戶還是保險銷售員?詳細步驟中的第一步看起來似乎是系統外的事情,只有系統的直接使用者才應體現在用例圖中吧?

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2009-04-04 09:25 by 想成功的人
    寫的不錯??!,我一定向你學習!

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2009-04-22 11:18 by Java和VC的初學者
    謝謝樓主,感覺你寫的東西簡單易懂,真應該出本書啊~~,再一次表示感謝~

    # re: 程序員眼中的UML(2)--克服用例圖的恐懼  回復  更多評論   

    2013-10-24 00:45 by 2864667376@qq.com
    數據庫在UML用例圖是用例還是用戶@hexuzhong
    主站蜘蛛池模板: 亚洲va久久久噜噜噜久久狠狠| 亚洲人成影院在线无码观看| 两性色午夜视频免费网| 亚洲人成小说网站色| 亚洲好看的理论片电影| 国产偷国产偷亚洲清高动态图| 国产无遮挡色视频免费视频| 一二三四免费观看在线视频中文版| 日韩av无码免费播放| 久久99精品免费一区二区| 曰韩无码AV片免费播放不卡| 亚洲精品中文字幕无码A片老| 亚洲精品一卡2卡3卡三卡四卡| 亚洲人成色7777在线观看| 亚洲成av人影院| 亚洲国产精品自在在线观看| 亚洲av不卡一区二区三区 | 亚洲精品tv久久久久久久久| 亚洲无线一二三四区手机| 亚洲人成人网站色www | 四虎精品成人免费视频| 日韩少妇内射免费播放| 一区二区三区免费视频网站 | 亚洲午夜国产精品无码老牛影视 | 无码的免费不卡毛片视频| jizz免费观看视频| 黄+色+性+人免费| 日韩一区二区在线免费观看| 国产福利电影一区二区三区,亚洲国模精品一区| 成人黄页网站免费观看大全| 成人性生活免费视频| 国产美女无遮挡免费网站| 亚洲精品国产精品乱码不99 | 午夜免费国产体验区免费的| 精品无码无人网站免费视频| 无码人妻一区二区三区免费手机 | a级午夜毛片免费一区二区| 精品国产免费一区二区| 国产精品亚洲av色欲三区| 免费在线观看理论片| 中美日韩在线网免费毛片视频|