在官Ҏ档中用例囑含六个元素,分别是:执行?/span>(Actor)、用?/span>(Use Case)、关联关p?/span>(Association)、包含关p?/span>(Include)、扩展关p?/span>(Extend)以及泛化关系(Generalization)。但是有?/span>UML的绘囑ַ具多提供了一U直接关联关p?/span>(DirectedAssociation)?/span>
用例囑֏一个包含注释和U束Q还可一个包含包Q用于将模型中的元素l合成更大的模块。有Ӟ可以用例的实例引入到图中。用例图模型如下所C,执行者用人Ş图标来标识,用例用椭圆来表示Q连U表C它们之间的关系?/span>
一、执行者(ActorQ?/span>
1、执行者概?/span>
是指用户在系l中扮演的角艌Ӏ如?/span>1-1是一个用L理的用例图,图中的用戗管理员是用例的执行者?/span>
?/span>1-1
2、从业务中找出执行?/span>
获取pȝ用例首先要找出系l的执行者。我们可以通过用户回答一些问题的{案来识别执行者。可以参考以下问题:
3、执行者之间关p?/span>
因ؓ执行者是c,所以多个执行者之间可以具有与cȝ同的关系。在用例图中Q用了泛化关系来描q多个执行者之间的公共行ؓ。如果系l中存在几个执行者,它们既扮演自w的角色Q同时也扮演更具一般化的角Ԍ那么q泛化关系来描q它们。这U情况往往发生在一般角色的行ؓ在执行者超cM描述的场合。特D化的执行者承了该超cȝ行ؓQ然后在某些斚w扩展了此行ؓ。执行者之间的泛化关系用一个三角箭头来表示Q指向扮演一般角色的类。这?/span>UML中类之间的返q关pȝL同。图1-2
?-2
二、用例(Use CaseQ?/span>
1、用例概?/span>
用例是外部可见的系l功能,对系l提供的服务q行描述?/span>
2、从业务中找出用?/span>
扑ևpȝ的用例,我们从执行者入手,Ҏ个执行者提Z些问题,然后从执行者对q些问题的答案中获取用例。可以参考以下问题:
3、用例之间关p?/span>
二、用例之间关p?/span>
1、关联关p(AssociationQ?br />
兌关系是连接执行者和用例Q表C执行者代表的外部pȝ实体与该用例描述的系l需求有兟?/span>
?-3
2、包含关p(IncludeQ?br />
包含关系是来自于用例的抽象,即从C不同的Use Case中,分离出公q部分Q而成为可以复用的用例?br />
?/span>1-4
3、扩展关p(ExtendQ?br />
扩展关系表示某一个用例的对话程中,可能会根据条件时插入另外一个用例,而前者称为基用例后者称为扩展用例?br />
?-5
4、泛化关p(GeneralizationQ?br />
一个用例可以被特别列DZ个或多个用例Q这被称为用例泛化,如果pȝ中一个或多个用例是某个一般用例的Ҏ化时Q就需要用用例的泛化关系?br />
指的是一个类Q称为子cR子接口Q承另外的一个类Q称为父cR父接口Q的功能Qƈ可以增加它自q新功能的能力Q承是cMcL者接口与接口之间最常见的关p;在Java中此cdp通过关键字extends明确标识Q在设计时一般没有争议性;
指的是一个classcd现interface接口Q可以是多个Q的功能Q实现是cM接口之间最常见的关p;在Java中此cdp通过关键字implements明确标识Q在设计时一般没有争议性;
可以单的理解Q就是一个类A使用C另一个类BQ而这U用关pLh偶然性的、、时性的、非常弱的,但是Bcȝ变化会媄响到AQ比如某q河Q需要借用一条船Q此时h与船之间的关pd是依赖;表现在代码层面,为类B作ؓ参数被类A在某个methodҎ中用;
他体现的是两个类、或者类与接口之间语义别的一U强依赖关系Q比如我和我的朋友;q种关系比依赖更强、不存在依赖关系的偶然性、关pM不是临时性的Q一般是长期性的Q而且双方的关pM般是q等的、关联可以是单向、双向的Q表现在代码层面Qؓ被关联类B以类属性的形式出现在关联类A中,也可能是兌cA引用了一个类型ؓ被关联类B的全局变量Q?br />
聚合是关联关pȝ一U特例,他体现的是整体与部分、拥有的关系Q即has-a的关p,此时整体与部分之间是可分ȝQ他们可以具有各自的生命周期Q部分可以属于多个整体对象,也可以ؓ多个整体对象׃nQ比如计机与CPU、公怸员工的关pȝQ表现在代码层面Q和兌关系是一致的Q只能从语义U别来区分;
l合也是兌关系的一U特例,他体现的是一Ucontains-a的关p,q种关系比聚合更强,也称为强聚合Q他同样体现整体与部分间的关p,但此时整体与部分是不可分的,整体的生命周期结束也意味着部分的生命周期结束;比如你和你的大脑Q表现在代码层面Q和兌关系是一致的Q只能从语义U别来区分;
对于l承、实现这两种关系没多疑问,他们体现的是一U类与类、或者类与接口间的纵向关p;其他的四者关pd体现的是cMcR或者类与接口间的引用、横向关p,是比较难区分的,有很多事物间的关p要惛_备定位是很难的,前面也提刎ͼq几U关p都是语义别的Q所以从代码层面q不能完全区分各U关p;但ȝ来说Q后几种关系所表现的强q度依ơؓQ组?gt;聚合>兌>依赖Q?/p>