UML中各种图的画法全Word文档格式.docx
《UML中各种图的画法全Word文档格式.docx》由会员分享,可在线阅读,更多相关《UML中各种图的画法全Word文档格式.docx(29页珍藏版)》请在冰点文库上搜索。
类方法列表:
name(parameterlist):
typeofvaluereturned
注意:
在业务类图中,属性类型通常与单位相符,这对于图的可能读者是有意义的(例如,分钟,美元,等等)。
然而,用于生成代码的类图,要求类的属性类型必须限制在由程序语言提供的类型之中,或包含于在系统中实现的、模型的类型之中。
2.继承的表示:
为了在一个类图上建模继承,从子类(要继承行为的类)拉出一条闭合的,单键头(或三角形)的实线指向超类。
类名BankAccount和withdrawal操作使用斜体。
这表示,BankAccount类是一个抽象类,而withdrawal方法是抽象的操作。
换句话说,BankAccount类使用withdrawal规定抽象操作,并且CheckingAccount和SavingsAccount两个子类都分别地执行它们各自版本的操作。
3.接口的表示:
一个类和一个接口不同:
一个类可以有它形态的真实实例,然而一个接口必须至少有一个类来实现它。
在UML2中,一个接口被认为是类建模元素的特殊化。
因此,接口就象类那样绘制,但是长方形的顶部区域也有文本“interface”。
继承用带箭头或三角形的实线表示,实现用带箭头或三角形的虚线表示
4.可见性的表示:
在面向对象的设计中,存在属性及操作可见性的记号。
UML识别四种类型的可见性:
public,protected,private及package。
UML规范并不要求属性及操作可见性必须显示在类图上,但是它要求为每个属性及操作定义可见性。
为了在类图上显示可见性,放置可见性标志于属性或操作的名字之前。
虽然UML指定四种可见性类型,但是实际的编程语言可能增加额外的可见性,或不支持UML定义的可见性。
表4显示了UML支持的可见性类型的不同标志。
UML支持的可见性类型的标志
标志
可见性类型
+
Public
#
proteted
-
private
~
package
5.关联的表示:
双向(标准)的关联
关联是两个类间的联接。
关联总是被假定是双向的;
这意味着,两个类彼此知道它们间的联系,除非你限定一些其它类型的关联。
一个双向关联用两个类间的实线表示。
在线的任一端,你放置一个角色名和多重值。
图6显示Flight与一个特定的Plane相关联,而且Flight类知道这个关联。
因为角色名以Plane类表示,所以Plane承担关联中的“assignedPlane”角色。
紧接于Plane类后面的多重值描述0...1表示,当一个Flight实体存在时,可以有一个或没有Plane与之关联(也就是,Plane可能还没有被分配)。
图6也显示Plane知道它与Flight类的关联。
在这个关联中,Flight承担“assignedFlights”角色;
图6的图告诉我们,Plane实体可以不与flight关联(例如,它是一架全新的飞机)或与没有上限的flight(例如,一架已经服役5年的飞机)关联。
关联的一方关联对象位于直线的上端,关联数目位于同侧的直线下端,另一方则相反
多重值和它们的表示
可能的多重值描述
表示
含义
0..1
0个或1个
1
只能1个
0..*
0个或多个
*
1..*
1个或多个
3
只能3个
0..5
0到5个
5..15
5到15个
单向关联
在一个单向关联中,两个类是相关的,但是只有一个类知道这种联系的存在。
一个单向的关联,表示为一条带有指向已知类的开放箭头(不关闭的箭头或三角形,用于标志继承)的实线。
如同标准关联,单向关联包括一个角色名和一个多重值描述,但是与标准的双向关联不同的时,单向关联只包含已知类的角色名和多重值描述。
简单的说就是OverdrawAccountReport中包含了BankAccount属性,而BankAccount中不需要包含OverdrawnAccountsReport对象
6.聚合的表示:
聚合是一种特别类型的关联,用于描述“总体到局部”的关系。
在基本的聚合关系中,部分类的生命周期独立于整体类的生命周期。
举例来说,我们可以想象,车是一个整体实体,而车轮轮胎是整辆车的一部分。
轮胎可以在安置到车时的前几个星期被制造,并放置于仓库中。
在这个实例中,Wheel类实例清楚地独立于Car类实例而存在。
然而,有些情况下,部分类的生命周期并不独立于整体类的生命周期--这称为合成聚合。
举例来说,考虑公司与部门的关系。
公司和部门都建模成类,在公司存在之前,部门不能存在。
这里Department类的实例依赖于Company类的实例而存在。
让我们更进一步探讨基本聚合和组合聚合。
聚合与普通的关联的区别在于:
普通的关联可能只是一个简单的“包含、引用”关系,关联和被关联类之间在逻辑概念上不一定有紧密的联系,而聚合则不同,它表示的是一种内在关系紧密,相互依存,相互包含的概念,其中的一部分是构成另外一部分的不可或缺的成分。
基本聚合
有聚合关系的关联指出,某个类是另外某个类的一部分。
在一个聚合关系中,子类实例可以比父类存在更长的时间。
为了表现一个聚合关系,你画一条从父类到部分类的实线,并在父类的关联末端画一个未填充棱形。
图中清楚的表明了类Car对象包含了另一类Wheel的4个实例,这两者在概念上是密不可分的,其中的一个类是另一个类的构成成分。
菱形表示“包含”,箭头表示被包含的对象,数字4表示包含的数目。
组合聚合
组合聚合关系是聚合关系的另一种形式,但是子类实例的生命周期依赖于父类实例的生命周期。
注意:
组合关系如聚合关系一样绘制,不过这次菱形是被填充的。
7.反射关联的表示:
类也可以使用反射关联与它本身相关联。
起先,这可能没有意义,但是记住,类是抽象的。
当一个类关联到它本身时,这并不意味着类的实例与它本身相关,而是类的一个实例与类的另一个实例相关。
图描绘的关系说明一个Employee实例可能是另外一个Employee实例的经理。
然而,因为“manages”的关系角色有0..*的多重性描述;
一个雇员可能不受任何其他雇员管理。
三、UML中的对象图:
实例的记号和类一样,但是取代顶端区域中仅有的类名,它的名字是经过拼接的:
InstanceName:
ClassName如Donald:
Person
因为显示实例的目的是显示值得注意的或相关的信息,没必要在你的模型中包含整个实体属性及操作。
相反地,仅仅显示感兴趣的属性及其值是完全恰当的。
UML2也允许在实体层的关系/关联建模。
绘制关联与一般的类关系的规则一样,除了在建模关联时有一个附加的要求。
附加的限制是,关联关系必须与类图的关系相一致,而且关联的角色名字也必须与类图相一致。
四、UML中的角色图:
建模类的实例有时比期望的更为详细。
有时,你可能仅仅想要在一个较多的一般层次做类关系的模型。
在这种情况下,你应该使用
角色
记号。
角色记号类似于实例记号。
为了建立类的角色模型,你画一个方格,并在内部放置类的角色名及类名,作为实体记号,但是在这情况你不能加下划线。
角色图和对象图的一个明显区别就是:
对象图每个对象名称下面都加了下划线,而角色图没有
以下是:
序列图
序列图主要用于按照交互发生的一系列顺序,显示对象之间的这些交互。
很象类图,开发者一般认为序列图只对他们有意义。
然而,一个组织的业务人员会发现,序列图显示不同的业务对象如何交互,对于交流当前业务如何进行很有用。
除记录组织的当前事件外,一个业务级的序列图能被当作一个需求文件使用,为实现一个未来系统传递需求。
在项目的需求阶段,分析师能通过提供一个更加正式层次的表达,把用例带入下一层次。
那种情况下,用例常常被细化为一个或者更多的序列图。
组织的技术人员能发现,序列图在记录一个未来系统的行为应该如何表现中,非常有用。
在设计阶段,架构师和开发者能使用图,挖掘出系统对象间的交互,这样充实整个系统设计。
序列图的主要用途之一,是把用例表达的需求,转化为进一步、更加正式层次的精细表达。
用例常常被细化为一个或者更多的序列图。
序列图除了在设计新系统方面的用途外,它们还能用来记录一个存在系统(称它为“遗产”)的对象现在如何交互。
当把这个系统移交给另一个人或组织时,这个文档很有用。
Java应用程序由许多类所构成,是Java实现面向对象应用程序的核心。
类图主要描述Java应用程序中各种类之间的相互静态关系,如类的继承、抽象、接口以及各种关联。
要利用UML设计Java应用程序,仅仅使用类图来描述这些静态关系,利用可视化工具,要实现Java应用程序的代码自动生成,是远远不够的。
我们还必须描述各种类相互之间的协作关系、动态关系,如时间序列上的交互行为。
其中UML序列图就是用来描述类与类之间的方法调用过程(或消息发送)是如何实现的。
一、UML中的新元素-框架:
在UML2中,框架元件用于作为许多其他的图元件的一个基础,但是大多数人第一次接触框架元件的情况,是作为图的图形化边界。
当为图提供图形化边界时,一个框架元件为图的标签提供一致的位置。
在UML图中框架元件是可选择的。
除了提供一个图形化边框之外,用于图中的框架元件也有描述交互的重要的功能,例如序列图。
在序列图上一个序列接收和发送消息(又称交互),能通过连接消息和框架元件边界,建立模型(如图2所见到)。
对于序列图,图的标签由文字“sd”开始。
当使用一个框架元件封闭一个图时,图的标签需要按照以下的格式:
图类型图名称。
UML规范给图类型提供特定的文本值。
(举例来说,sd代表序列图,activity代表活动图,usecase代表用例图)。
二、UML中的序列图:
那种情况下,用例常常被细化为一个或者更多的序列图。
序列图除了在设计新系统方面的用途外,它们还能用来记录一个存在系统(称它为“遗产”)的对象现在如何交互。
序列图的主要目的是定义事件序列,产生一些希望的输出。
重点不是消息本身,而是消息产生的顺序;
不过,大多数序列图会表示一个系统的对象之间传递的什么消息,以及它们发生的顺序。
图按照水平和垂直的维度传递信息:
垂直维度从上而下表示消息/调用发生的时间序列,而且水平维度从左到右表示消息发送到的对象实例。
1.生命线:
生命线画作一个方格,一条虚线从上而下,通过底部边界的中心(图3)。
生命线名字放置在方格里。
UML的生命线命名标准按照如下格式:
实体名:
类名
生命线名称带下划线。
当使用下划线时,意味着序列图中的生命线代表一个类的特定实体,不是特定种类的实体(例如,角色)。
序列图的实例名称有下划线,而角色名称没有。
一个生命线能用来表现一个匿名的或未命名的实体。
当在一个序列图上,为一个未命名的实例建模时,生命线的名字采用和一个命名实例相同的模式;
但是生命线名字的位置留下空白,而不是提供一个例图名字。
2.消息体:
为了显示一个对象(例如,生命线)传递一个消息给另外一个对象,你画一条线指向接收对象,包括一个实心箭头(如果是一个同步调用操作)或一个棍形箭头(如果是一个异步讯号)。
消息/方法名字放置在带箭头的线上面。
正在被传递给接收对象的消息,表示接收对象的类实现的一个操作/方法。
返回消息是可选择的;
一个返回消息画作一个带开放箭头的虚线,向后指向来源的生命线,在这条虚线上面,你放置操作的返回值。
为了要画一个调用本身的对象,如你平时所作的,画一条消息,但是不是连接它到另外的一个对象,而是你把消息连接回对象本身。
三、UML中的约束:
约束的符号很简单;
格式是:
【BooleanTest】
四、UML中的新元素-组合碎片(变体方案、选择项、循环):
一个组合碎片用来把一套消息组合在一起,在一个序列图中显示条件分支。
1.变体:
变体用来指明在两个或更多的消息序列之间的、互斥的选择。
一个变体的组合碎片元件使用框架来画。
单词“alt”放置在框架的namebox里。
然后较大的长方形分为UML2所称的操作元。
操作元被虚线分开。
每个操作元有一个约束进行测试,而这个约束被放置在生命线顶端的操作元的左上部。
如果操作元的约束等于“true”,然后那个操作元是要执行的操作元。
图8作为一个变体的组合碎片如何阅读的例子,显示序列从顶部开始,即bank对象获取支票金额和帐户结余。
此时,序列图中的变体组合碎片接管。
因为约束“[balance>
=amount]”,如果余额超过或等于金额,然后顺序进行bank对象传递addDebitTransaction和storePhotoOfCheck消息给account对象。
然而,如果余额不是超过或等于金额,然后顺序的过程就是bank传递addInsuffientFundFee和noteReturnedCheck消息给account对象,returnCheck消息给它自身。
因为“else”约束,当余额不大于或者等于金额时,第二个序列被调用。
在变体的组合碎片中,不需要“else”约束;
而如果一个操作元,在它上面没有一个明确的约束,那么将假定“else”约束。
2.选择项:
一个选择项用来为简单的“ifthen”表达式建模。
(例如,如果架上的圈饼少于五个,那么另外做两打圈饼)。
选择项组合碎片符号与变体组合碎片类似,除了它只有一个操作元并且永不能有“else”约束以外(它就是如此,没有理由)。
要画选择项组合,你画一个框架。
文字“opt”是被放置在框架的namebox里的文本,在框架的内容区,选择项的约束被放置在生命线顶端上的左上角。
然后选择项的消息序列被放在框架的内容区的其余位置内。
变体用于为ifthenelse建模,选择项用于为ifthen建模,因为只有一个分支,所以不能出现[else]
3.循环:
循环组合碎片表面非常类似选择项组合碎片。
你画一个框架,在框架的namebox中放置文本“loop”。
在框架的内容区中,一个生命线的顶部,循环约束被放置在左上角。
然后循环的消息序列被放在框架内容区的其余部分中。
在一个循环中,除了标准的布尔测试外,一个约束能测试二个特定的条件式。
特定的约束条件式是写作“minint=[thenumber]”(例如,“minint=1”)的最小循环次数,或写作“maxint=[thenumber]”(例如,“maxint=5”)的最大循环次数。
通过最小循环检验,循环必须运行至少指定次数,而循环执行次数不能达到约束指定的最大循环次数。
用例图:
用例图主要用来图示化系统的主事件流程,它主要用来描述客户的需求,即用户希望系统具备的完成一定功能的动作,通俗地理解用例就是软件的功能模块,所以是设计系统分析阶段的起点,设计人员根据客户的需求来创建和解释用例图,用来描述软件应具备哪些功能模块以及这些模块之间的调用关系,用例图包含了用例和参与者,用例之间用关联来连接以求把系统的整个结构和功能反映给非技术人员(通常是软件的用户),对应的是软件的结构和功能分解。
用例是从系统外部可见的行为,是系统为某一个或几个参与者(Actor)提供的一段完整的服务。
从原则上来讲,用例之间都是独立、并列的,它们之间并不存在着包含从属关系。
但是为了体现一些用例之间的业务关系,提高可维护性和一致性,用例之间可以抽象出包含(include)、扩展(extend)和泛(generalization)几种关系。
共性:
都是从现有的用例中抽取出公共的那部分信息,作为一个单独的用例,然后通后过不同的方法来重用这个公共的用例,以减少模型维护的工作量。
1、包含(include)
包含关系:
使用包含(Inclusion)用例来封装一组跨越多个用例的相似动作(行为片断),以便多个基(Base)用例复用。
基用例控制与包含用例的关系,以及被包含用例的事件流是否会插入到基用例的事件流中。
基用例可以依赖包含用例执行的结果,但是双方都不能访问对方的属性。
包含关系对典型的应用就是复用,也就是定义中说的情景。
但是有时当某用例的事件流过于复杂时,为了简化用例的描述,我们也可以把某一段事件流抽象成为一个被包含的用例;
相反,用例划分太细时,也可以抽象出一个基用例,来包含这些细颗粒的用例。
这种情况类似于在过程设计语言中,将程序的某一段算法封装成一个子过程,然后再从主程序中调用这一子过程。
例如:
业务中,总是存在着维护某某信息的功能,如果将它作为一个用例,那新建、编辑以及修改都要在用例详述中描述,过于复杂;
如果分成新建用例、编辑用例和删除用例,则划分太细。
这时包含关系可以用来理清关系。
2、扩展(extend)
扩展关系:
将基用例中一段相对独立并且可选的动作,用扩展(Extension)用例加以封装,再让它从基用例中声明的扩展点(ExtensionPoint)上进行扩展,从而使基用例行为更简练和目标更集中。
扩展用例为基用例添加新的行为。
扩展用例可以访问基用例的属性,因此它能根据基用例中扩展点的当前状态来判断是否执行自己。
但是扩展用例对基用例不可见。
对于一个扩展用例,可以在基用例上有几个扩展点。
例如,系统中允许用户对查询的结果进行导出、打印。
对于查询而言,能不能导出、打印查询都是一样的,导出、打印是不可见的。
导入、打印和查询相对独立,而且为查询添加了新行为。
因此可以采用扩展关系来描述:
4、泛化(generalization)
泛化关系:
子用例和父用例相似,但表现出更特别的行为;
子用例将继承父用例的所有结构、行为和关系。
子用例可以使用父用例的一段行为,也可以重载它。
父用例通常是抽象的。
在实际应用中很少使用泛化关系,子用例中的特殊行为都可以作为父用例中的备选流存在。
例如,业务中可能存在许多需要部门领导审批的事情,但是领导审批的流程是很相似的,这时可以做成泛化关系表示:
上面是我参考的一篇文章,觉得将三种关系的区别讲得很清晰,在此基础上结合自己的系统,对项目(在线购物系统)的用例做了整体的描绘。
*****************************************************************
(1)系统整体用例图
(商品用例图)
(购买信息用例)
(用户资料用例)
按照先整体用例,后子系统用例来进行描绘的,欢迎大家提出好的建议!
转:
UML中扩展和泛化的区别
泛化表示类似于OO术语“继承”或“多态”。
UML中的UseCase泛化过程是将不同UseCase之间的可合并部分抽象成独立的父UseCase,并将不可合并部分单独成各自的子UseCase;
包含以及扩展过程与泛化过程类似,但三者对用例关系的优化侧重点是不同的。
如下:
●泛化侧重表示子用例间的互斥性;
●包含侧重表示被包含用例对Actor提供服务的间接性;
●扩展侧重表示扩展用例的触发不定性;
详述如下:
既然用例是系统提供服务的UML表述,那么服务这个过程在所有用例场景中是必然发生的,但发生按照发生条件可分为如下两种情况:
⒈无条件发生:
肯定发生的;
⒉有条件发生:
未必发生,发生与否取决于系统状态;
因此,针对用例的三种关系结合系统状态考虑,泛化与包含用例属于无条件发生的用例,而扩展属于有条件发生的用例。
进一步,用例的存在是为Actor提供服务,但用例提供服务的方式可分为间接和直接两种,依据于此,泛化中的子用例提供的是直接服务,而包含中的被包含用例提供的是间接服务。
同样,扩展用例提供的也是直接服务,但扩展用例的发生是有条件的。
另外一点需要提及的是:
泛化中的子用例和扩展中的扩展用例均可以作为基本用例事件的备选择流而存在。
活动图
UML活动图记录了单个操作或方法的逻辑,单个用户案例,或者单个业务流程的逻辑。
在很多方面,活动图是结构化开发中流程图和数据流程图(DFD)的面向对象等同体,要创建一个UML活动图,您需要反复执行下列步骤。
第一步,定义活动图的范围首先应该定义您要对什么建模。
单个用户案例力?
一个用户案例的一部分?
一个包含多个用户案例的商务流程?
一个类的单个方法?
一旦您定义了您所作图的范围,您应该在其顶部,用一个标注添加标签,指明该图的标题和唯一的标示符。
您有可能也想要包括该图的时间甚至作者名。
第二步,添加起始和结束点每个活动图有一个起始点和结束点,因此您也要马上添加它们。
在《UML精粹》(UMLDistilled)(参见参考资料),Fowler和Scott认为结束点是可选的。
有时