﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-joe --专注java,开源,架构,项目管理-随笔分类-UML</title><link>http://www.blogjava.net/freeman1984/category/48926.html</link><description>         
        STANDING ON THE SHOULDERS OF GIANTS</description><language>zh-cn</language><lastBuildDate>Mon, 27 Jun 2011 03:28:50 GMT</lastBuildDate><pubDate>Mon, 27 Jun 2011 03:28:50 GMT</pubDate><ttl>60</ttl><item><title>UML用例图</title><link>http://www.blogjava.net/freeman1984/archive/2010/09/25/332818.html</link><dc:creator>@joe</dc:creator><author>@joe</author><pubDate>Sat, 25 Sep 2010 06:22:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/09/25/332818.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/332818.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/09/25/332818.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/332818.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/332818.html</trackback:ping><description><![CDATA[<span>前些时间参加了潘加宇老师的技术讲座，</span><span>UML</span><span>建模技术受益匪浅。我也把平时的一些积累和上次的收获总结在这篇文章中，主要讲解用例图相关的知识。</span><span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>用例图是软件需求分析到最终实现的第一步，它描述用户如何使用系统及使用系统什么样的功能。用例图从业务角度上体现谁来使用系统、用户希望系统提供什么样的服务，以及用户需要为系统提供的服务，也便于软件开发人员最终实现这些功能。用例图在开发中被广泛的应用，但是它最常用来描述系统提供了什么样的功能给什么样的用户使用。</span><span><br />
</span>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>在官方文档中用例图包含六个元素，分别是：执行者</span><span>(Actor)</span><span>、用例</span><span>(Use Case)</span><span>、关联关系</span><span>(Association)</span><span>、包含关系</span><span>(Include)</span><span>、扩展关系</span><span>(Extend)</span><span>以及泛化关系</span><span>(Generalization)</span><span>。但是有些</span><span>UML</span><span>的绘图工具多提供了一种直接关联关系</span><span>(DirectedAssociation)</span><span>。</span><span><br />
</span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>用例图可一个包含注释和约束，还可一个包含包，用于将模型中的元素组合成更大的模块。有时，可以将用例的实例引入到图中。用例图模型如下所示，执行者用人形图标来标识，用例用椭圆来表示，连线表示它们之间的关系。</span><span><br />
</span></span></p>
<p>&nbsp;<br />
&nbsp;</p>
<p><span><strong><span>一、执行者（</span><span>Actor</span><span>）</span></strong><span><br />
</span></span></p>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span> 1</span><span>、执行者概念</span><span><br />
</span></strong></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>是指用户在系统中扮演的角色。如图</span><span>1-1</span><span>是一个用户管理的用例图，图中的用户、管理员就是用例的执行者。</span><span><br />
</span></span></p>
<p><img alt="" src="http://www.alisdn.com/wordpress/wp-content/uploads/2009/03/030609-0708-uml1.png" /><span><br />
</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>图</span><span>1-1<br />
</span></span></p>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2</span><span>、从业务中找出执行者</span><span><br />
</span></strong></span></p>
<p><span><span><strong>&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span>获取系统用例首先要找出系统的执行者。我们可以通过用户回答一些问题的答案来识别执行者。可以参考以下问题：<br />
</span></span></p>
<ol>
    <li><span>谁使用系统的主要功能（主要使用者）？<br />
    </span></li>
    <li><span>谁需要系统支持他们日常工作？<br />
    </span></li>
    <li><span>谁来维护、管理系统使其正常工作（辅助使用者）？<br />
    </span></li>
    <li><span>系统需要控制哪些硬件？<br />
    </span></li>
    <li><span>系统需要其他哪些系统交互？这里包含其他计算机系统或者应用程序。<br />
    </span></li>
    <li><span>对系统产生结果感兴趣的是哪些人和哪些事物？<br />
    </span></li>
</ol>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</span><span>、执行者之间关系</span><span><br />
</span></strong></span></p>
<p><span><span>因为执行者是类，所以多个执行者之间可以具有与类相同的关系。在用例图中，使用了泛化关系来描述多个执行者之间的公共行为。如果系统中存在几个执行者，它们既扮演自身的角色，同时也扮演更具一般化的角色，那么就用泛化关系来描述它们。这种情况往往发生在一般角色的行为在执行者超类中描述的场合。特殊化的执行者继承了该超类的行为，然后在某些方面扩展了此行为。执行者之间的泛化关系用一个三角箭头来表示，指向扮演一般角色的超类。这与</span><span>UML</span><span>中类之间的返还关系符号相同。图1-2<br />
</span></span></p>
<p><img alt="" src="http://www.alisdn.com/wordpress/wp-content/uploads/2009/03/030609-0708-uml2.png" /><span><br />
</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>图1-2<br />
</span></span></p>
<p>&nbsp;</p>
<p><span><strong><span>二、用例（</span><span>Use Case</span><span>）</span></strong><span><br />
</span></span></p>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</span><span>、用例概念</span><span><br />
</span></strong></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>用例就是外部可见的系统功能，对系统提供的服务进行描述。</span><span><br />
</span></span></p>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2</span><span>、从业务中找出用例</span><span><br />
</span></strong></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span>找出系统的用例，我们从执行者入手，对每个执行者提出一些问题，然后从执行者对这些问题的答案中获取用例。可以参考以下问题：</span><span><br />
</span></span></p>
<ol>
    <li><span>执行者要求系统提供哪些功能（执行者需要做什么）？<br />
    </span></li>
    <li><span>执行者需要读、产生、修改、删除或者存储系统中的信息有哪些类型？<br />
    </span></li>
    <li><span>执行者必须提醒系统事件有哪些？把这些事件表示成系统用例。<br />
    </span></li>
</ol>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</span><span>、用例之间关系</span></strong><span><br />
</span></span></p>
<p><span><strong><span>二、用例之间关系</span><span><br />
</span></strong></span></p>
<p><span><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1</span><span>、关联关系（</span><span>Association</span>）<br />
</strong></span></p>
<p><span><span>关联关系是连接执行者和用例，表示该执行者代表的外部系统实体与该用例描述的系统需求有关。</span><span><br />
</span></span></p>
<p><img alt="" src="http://www.alisdn.com/wordpress/wp-content/uploads/2009/03/030609-0708-uml3.png" /><span><strong><br />
</strong></span></p>
<p><span>图1-3<br />
</span></p>
<p><span><strong><span>&nbsp;&n