`
alanland
  • 浏览: 641212 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

UML之类图与时序图

    博客分类:
  • Java
阅读更多

 

 

1  当一个操作有参数时,参数被放在操作的括号内;每个参数都使用这样的格式:“参数名:参数类型”。UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 3:Flight类操作参数,包括可选择的“in”标识。

当文档化操作参数时,你可能使用一个可选择的指示器,以显示参数到操作的输入参数、或输出参数。这个可选择的指示器以“in”或“out”出现,如图3中的操作区域所示。一般来说,除非将使用一种早期的程序编程语言,如Fortran ,这些指示器可能会有所帮助,否则它们是不必要的。然而,在 C++和Java中,所有的参数是“in”参数,而且按照UML规范,既然“in”是参数的默认类型,大多数人将会遗漏输入/输出指示器。

继承

在面向对象的设计中一个非常重要的概念,继承 ,指的是一个类(子类)继承 另外的一个类(超类)的同一功能,并增加它自己的新功能(一个非技术性的比喻,想象我继承了我母亲的一般的音乐能力,但是在我的家里,我是唯一一个玩电吉他的人)的能力。为了在一个类图上建模继承,从子类(要继承行为的类)拉出一条闭合的,单键头(或三角形)的实线指向超类。考虑银行账户的类型:图 4 显示 CheckingAccount 和 SavingsAccount 类如何从 BankAccount 类继承而来。UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 4: 继承通过指向超类的一条闭合的,单箭头的实线表示。

在图 4 中,继承关系由每个超类的单独的线画出,这是在IBM Rational Rose和IBM Rational XDE中使用的方法。然而,有一种称为  树标记 的备选方法可以画出继承关系。当存在两个或更多子类时,如图 4 中所示,除了继承线象树枝一样混在一起外,你可以使用树形记号。图 5 是重绘的与图 4 一样的继承,但是这次使用了树形记号。UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 5: 一个使用树形记号的继承实例

抽象类及操作

细心的读者会注意到,在图 4 和 图5 中的图中,类名BankAccount和withdrawal操作使用斜体。这表示,BankAccount 类是一个抽象类,而withdrawal方法是抽象的操作。换句话说,BankAccount 类使用withdrawal规定抽象操作,并且CheckingAccount 和 SavingsAccount 两个子类都分别地执行它们各自版本的操作。

然而,超类(父类)不一定要是抽象类。标准类作为超类是正常的。

关联

当你系统建模时,特定的对象间将会彼此关联,而且这些关联本身需要被清晰地建模。有五种关联。在这一部分中,我将会讨论它们中的两个 -- 双向的关联和单向的关联,而且我将会在Beyond the basics 部分讨论剩下的三种关联类型。请注意,关于何时该使用每种类型关联的详细讨论,不属于本文的范围。相反的,我将会把重点集中在每种关联的用途,并说明如何在类图上画出关联。

双向(标准)的关联

关联是两个类间的联接。关联总是被假定是双向的;这意味着,两个类彼此知道它们间的联系,除非你限定一些其它类型的关联。回顾一下Flight 的例子,图 6 显示了在Flight类和Plane类之间的一个标准类型的关联。UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 6:在一个Flight类和Plane类之间的双向关联的实例

一个双向关联用两个类间的实线表示。在线的任一端,你放置一个角色名和多重值。图 6 显示Flight与一个特定的Plane相关联,而且Flight类知道这个关联。因为角色名以Plane类表示,所以Plane承担关联中的“assignedPlane”角色。紧接于Plane类后面的多重值描述0...1表示,当一个Flight实体存在时,可以有一个或没有Plane与之关联(也就是,Plane可能还没有被分配)。图 6 也显示Plane知道它与Flight类的关联。在这个关联中,Flight承担“assignedFlights”角色;图 6 的图告诉我们,Plane实体可以不与flight关联(例如,它是一架全新的飞机)或与没有上限的flight(例如,一架已经服役5年的飞机)关联。

由于对那些在关联尾部可能出现的多重值描述感到疑惑,下面的表3列出了一些多重值及它们含义的例子。

表 3: 多重值和它们的表示

表示 含义
可能的多重值描述
0..1 0个或1个
1 只能1个
0..* 0个或多个
* 0个或多个
1..* 1个或我个
3 只能3个
0..5 0到5个
5..15 5到15个

单向关联

在一个单向关联中,两个类是相关的,但是只有一个类知道这种联系的存在。图 7 显示单向关联的透支财务报告的一个实例。UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 7: 单向关联一个实例:OverdrawnAccountsReport 类 BankAccount 类,而 BankAccount 类则对关联一无所知。

一个单向的关联,表示为一条带有指向已知类的开放箭头(不关闭的箭头或三角形,用于标志继承)的实线。如同标准关联,单向关联包括一个角色名和一个多重值描述,但是与标准的双向关联不同的时,单向关联只包含已知类的角色名和多重值描述。在图 7 中的例子中,OverdrawnAccountsReport 知道 BankAccount 类,而且知道 BankAccount 类扮演“overdrawnAccounts”的角色。然而,和标准关联不同,BankAccount 类并不知道它与 OverdrawnAccountsReport 相关联。  2

软件包

不可避免,如果你正在为一个大的系统或大的业务领域建模,在你的模型中将会有许多不同的分类器。管理所有的类将是一件令人生畏的任务;所以,UML 提供一个称为  软件包 的组织元素。软件包使建模者能够组织模型分类器到名字空间中,这有些象文件系统中的文件夹。把一个系统分为多个软件包使系统变成容易理解,尤其是在每个软件包都表现系统的一个特定部分时。  3

在图中存在两种方法表示软件包。并没有规则要求使用哪种标记,除了用你个人的判断:哪种更便于阅读你画的类图。两种方法都是由一个较小的长方形(用于定位)嵌套在一个大的长方形中开始的,如图 8 所示。但是建模者必须决定包的成员如何表示,如下:

  • 如果建模者决定在大长方形中显示软件包的成员,则所有的那些成员  4  需要被放置在长方形里面。另外,所有软件包的名字需要放在软件包的较小长方形之内(如图 8 的显示)。
  • 如果建模者决定在大的长方形之外显示软件包成员,则所有将会在图上显示的成员都需要被置于长方形之外。为了显示属于软件包的分类器属于,从每个分类器画一条线到里面有加号的圆周,这些圆周粘附在软件包之上(图9)。
UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 8:在软件包的长方形内显示软件包成员的软件包元素例子

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 9:一个通过连接线表现软件包成员的软件包例子

了解基础重要性

在 UML 2 中,了解类图的基础更为重要。这是因为类图为所有的其他结构图提供基本的构建块。如组件或对象图(仅仅是举了些例子)。

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

5  UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 10:Professor类和Student类实现Person接口的类图实例

在图 10 中显示的图中,Professor和Student类都实现了Person的接口,但并不从它继承。我们知道这一点是由于下面两个原因:1) Person对象作为接口被定义 -- 它在对象的名字区域中有“interface”文本,而且我们看到由于Professor和Student对象根据画类对象的规则(在它们的名字区域中没有额外的分类器文本)标示,所以它们是  对象。 2) 我们知道继承在这里没有被显示,因为与带箭头的线是点线而不是实线。如图 10 所示,一条带有闭合的单向箭头的   线意味着实现(或实施);正如我们在图 4 中所见到的,一条带有闭合单向箭头的 线表示继承。

更多的关联

在上面,我讨论了双向关联和单向关联。现在,我将会介绍剩下的三种类型的关联。

关联类

在关联建模中,存在一些情况下,你需要包括其它类,因为它包含了关于关联的有价值的信息。对于这种情况,你会使用  关联类   来绑定你的基本关联。关联类和一般类一样表示。不同的是,主类和关联类之间用一条相交的点线连接。图 11 显示一个航空工业实例的关联类。UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 11:增加关联类 MileageCredit

在图 11 中显示的类图中,在Flight类和 FrequentFlyer 类之间的关联,产生了称为 MileageCredit的关联类。这意味当Flight类的一个实例关联到 FrequentFlyer 类的一个实例时,将会产生 MileageCredit 类的一个实例。

聚合

聚合是一种特别类型的关联,用于描述“总体到局部”的关系。在基本的聚合关系中,  部分类   的生命周期独立于整体类   的生命周期。

举例来说,我们可以想象,   是一个整体实体,而  车轮   轮胎是整辆车的一部分。轮胎可以在安置到车时的前几个星期被制造,并放置于仓库中。在这个实例中,Wheel类实例清楚地独立地Car类实例而存在。然而,有些情况下,  部分   类的生命周期并    独立于  整体   类的生命周期 -- 这称为合成聚合。举例来说,考虑公司与部门的关系。公司和部门   都建模成类,在公司存在之前,部门不能存在。这里Department类的实例依赖于Company类的实例而存在。

让我们更进一步探讨基本聚合和组合聚合。

基本聚合

有聚合关系的关联指出,某个类是另外某个类的一部分。在一个聚合关系中,子类实例可以比父类存在更长的时间。为了表现一个聚合关系,你画一条从父类到部分类的实线,并在父类的关联末端画一个未填充棱形。图 12 显示车和轮胎间的聚合关系的例子。UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 12: 一个聚合关联的例子

组合聚合

组合聚合关系是聚合关系的另一种形式,但是子类实例的生命周期依赖于父类实例的生命周期。在图13中,显示了Company类和Department类之间的组合关系,注意组合关系如聚合关系一样绘制,不过这次菱形是被填充的。UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 13: 一个组合关系的例子

在图 13 中的关系建模中,一个Company类实例至少总有一个Department类实例。因为关系是组合关系,当Company实例被移除/销毁时,Department实例也将自动地被移除/销毁。组合聚合的另一个重要功能是部分类只能与父类的实例相关(举例来说,我们例子中的Company类)。

反射关联

现在我们已经讨论了所有的关联类型。就如你可能注意到的,我们的所有例子已经显示了两个不同类之间的关系。然而,类也可以使用反射关联与它本身相关联。起先,这可能没有意义,但是记住,类是抽象的。图 14 显示一个Employee类如何通过manager / manages角色与它本身相关。当一个类关联到它本身时,这并不意味着类的实例与它本身相关,而是类的一个实例与类的另一个实例相关。UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 14:一个反射关联关系的实例

图 14 描绘的关系说明一个Employee实例可能是另外一个Employee实例的经理。然而,因为“manages”的关系角色有 0..*的多重性描述;一个雇员可能不受任何其他雇员管理。

可见性

在面向对象的设计中,存在属性及操作可见性的记号。UML 识别四种类型的可见性:public,protected,private及package。

UML 规范并不要求属性及操作可见性必须显示在类图上,但是它要求为每个属性及操作定义可见性。为了在类图上的显示可见性,放置可见性标志于属性或操作的名字之前。虽然 UML 指定四种可见性类型,但是实际的编程语言可能增加额外的可见性,或不支持 UML 定义的可见性。表4显示了 UML 支持的可见性类型的不同标志。

表 4:UML 支持的可见性类型的标志

标志 可见性类型
+ Public
# Protected
- Private
~ Package

现在,让我们看一个类,以说明属性及操作的可见性类型。在图 15 中,所有的属性及操作都是public,除了 updateBalance 操作。updateBalance 操作是protected。UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

图 15:一个 BankAccount 类说明它的属性及操作的可见性

1 delayFlight没有返回值,因为我作出了设计决定,不要返回值。有一点可以争论的是,延迟操作应该返回新的到达时间,而且,如果是这种情形,操作属性将显示为

delayFlight(numberOfMinutes : Minutes) : Date。

2可能看起来很奇怪, BankAccount 类不知道 OverdrawnAccountsReport 类。这个建模使报表类可以知道它们报告的业务类,但是业务类不知道它们正在被报告。这解开两个对象的耦合,并因此使系统变得更能适应变化。

3 软件包对于组织你的模型类是庞大的,但是记住重要的一点是,你的类图应该是关于建模系统的容易交流的信息。在你的软件包有许多类的情况下,最好使用多个主题类图,而不是仅仅产生一个大的类图。

4 要理解重要一点,当我说“所有的那些成员”时,我仅仅意味着在当前图中的类将显示出来。显示一个有内容的软件包的图,不需要显示它的所有内容。它可以依照一些准则,显示包含元素的子集,这个准则就是并非所有的软件包分类器都是必需的。

5 当画一个类图时,在 UML 规范中,全部要做的只是把类放入长方形的顶部区域,而你同理处理接口;然而,UML 规范认为,在这个区域放置“class”文本是可选的,如果类没有显示,那么它应该被假设。

 

--------------------------------------------------------------------

1  生命线画作一个方格,一条虚线从上而下,通过底部边界的中心(图 3)。生命线名字放置在方格里。

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

2

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

3  变体支持经典的“if then else”逻辑的建模(举例来说,如果 我买三个,然后 我得到 我购买的20% 折扣;否则 我得到我购买的 10% 折扣)。

就如你将会在图 8 中注意到的,一个变体的组合碎片元件使用框架来画。单词“alt”放置在框架的namebox里。然后较大的长方形分为 UML 2 所称的操作元。  4  操作元被虚线分开。每个操作元有一个约束进行测试,而这个约束被放置在生命线顶端的操作元的左上部。  5  如果操作元的约束等于“true”,然后那个操作元是要执行的操作元。

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

6  被放置在左上角。然后循环的消息序列被放在框架内容区的其余部分中。在一个循环中,除了标准的布尔测试外,一个约束能测试二个特定的条件式。特定的约束条件式是写作“minint = [the number]”(例如,“minint = 1”)的最小循环次数,和写作“maxint = [the number]”(例如,“maxint = 5”)的最大循环次数。通过最小循环检验,循环必须运行至少指定次数,而循环执行次数不能达到约束指定的最大循环次数。

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜  

在图 10 中显示的循环运行,直到 reportsEnu 对象的 hasAnotherReport 消息返回false。如果循环序列应该运行,这个序列图的循环使用一个布尔测试确认。为了阅读这个图,你和平常一样,从顶部开始。当你到达循环组合碎片,做一个测试,看看值 hasAnotherReport 是否等于true。如果 hasAnotherReport 值等于true,于是序列进入循环片断。然后你能和正常情况一样,在序列图中跟踪循环的消息。

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

7  在 UML 2 中开始,引进“交互进行”元件。追加交互进行的可以说是 UML 2 交互建模中的最重要的创新。交互进行增加了功能,把原始的序列图组织成为复杂的序列图。由于这些,你能组合(重用)较简单的序列,生成比较复杂的序列。这意味你能把完整的、可能比较复杂的序列,抽象为一个单一的概念单位。

一个交互进行元件使用一个框架绘制。文字“ref”放置在框架的 namebox 中,引用的序列图名字放置在框架的内容区里,连同序列图的任何参数一起。引用序列图的名字符号如下模式:

序列图名[(参数)] [: 返回值]

两个例子:

1.

Retrieve Borrower Credit Report(ssn) : borrowerCreditReport

或者

2.

Process Credit Card(name, number, expirationDate, amount : 100)

在例子 1 中,语法调用叫做Retrieve Borrower Credit Report的序列图,传递给它参数 ssn。序列Retreive Borrower Credit Report返回变量 borrowerCreditReport 。

在实例 2 中,语法调用叫做Process Credit Card的序列图,传递给它参数name,number,expiration date,和 amount。然而,在例子 2 中,amount参数将会是值100。因为例子2没有返回值标签,序列不返回值(假设,建模的序列不需要返回值)。

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜

UML之类图与时序图 - 雨晨弟弟 - 雨落凡晨_周瑜  

序列图是一个用来记录系统需求,和整理系统设计的好图。序列图是如此好用的理由是,因为它按照交互发生的时间顺序,显示了系统中对象间的交互逻辑。

 

原文:http://blog.163.com/chen_lovtime/blog/static/100098749200952571312277/

分享到:
评论

相关推荐

    UML之类图

    《UML之类图详解》 在软件开发领域,UML(Unified Modeling Language,统一建模语言)是一种标准化的建模语言,用于可视化、构建和文档化软件系统的设计。类图是UML中的一种核心图,它清晰地表示了系统的静态结构,...

    UML建模之时序图(SequenceDiagram)

    时序图(SequenceDiagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序。时序图中包括的建模元素主要有:对象(Actor)、生命线(Lifeline)、...

    UML智能停车场设计图

    本文将深入探讨一个基于UML设计的智能停车场系统,主要关注时序图、用例图和类图,这些都是UML中的关键元素。 首先,时序图(Sequence Diagram)展示了对象间的交互顺序,它强调时间轴,描述了事件发生的顺序。在...

    UML课程设计之留言板系统

    **类图(Class Diagram)**是UML中最重要的图之一,它描述了系统中的类、接口、继承关系和关联。在留言板系统中,类图可能包括“留言类”,“用户类”,“管理员类”等,同时定义它们的属性和操作,以及它们之间的...

    UML-时序图总结.doc

    ### UML时序图知识点详解 #### 一、UML时序图概述 **时序图**(Sequence Diagram)是UML(Unified Modeling Language,统一建模语言)中的一种交互图,主要用于展示系统中对象之间的交互关系及其发生的顺序。通过...

    OmniGraffle UML模板型版下载

    时序图,又称序列图,是UML的动态行为图之一,着重描绘对象间的交互,尤其是消息传递的时间顺序。在软件开发中,时序图用于描述系统中对象如何协作完成特定用例。使用OmniGraffle的时序图模板,设计师可以轻松地构建...

    eclipse中AmaterasUML工具,Eclipse绘制UML图的插件之一,支持类图、时序图等的绘制。

    eclipse中AmaterasUML工具,Eclipse绘制UML图的插件之一,支持类图、时序图等的绘制。支持UMLactivity图,class图,sequence图,usecase图等;支持与Java class/interface之间的相互导入导出。

    超市进销存之销售部分UML

    时序图展示了不同对象在特定场景下的交互顺序。顾客购买商品时,顾客先挑选商品,然后付款,输入商品条形码,收银系统反馈信息,找零,并存储销售信息。退货时,顾客提交退货单,输入条形码,收银员处理退款,存储...

    UML-看懂UML类图和时序图.pdf

    在本文中,我们将深入探讨UML中的两类重要图表——类图和时序图。 首先,类图是UML中用于表示类和类之间关系的静态结构图。类图主要包含以下几个关键元素: 1. 泛化关系(Generalization):这是一种继承关系,用...

    UML期末大作业戏剧推荐系统(用例图、类图、时序图、协作图、状态图、活动图...)

    UML提供了多种模型图,例如用例图、类图、时序图、协作图、状态图、活动图等。 2.1 用例图 用例图是一种描述系统的功能需求的模型图。它由参与者、用例和关系组成。参与者是系统的用户或其他外部实体,例如游客、...

    网上商城UML图参考模板

    系统需求是网上商城UML图的核心组件之一。它描述了网上商城的功能需求和非功能需求。功能需求包括网上商城的业务功能,如浏览商品、下订单、付款等,而非功能需求则包括网上商城的性能、安全性、可扩展性等方面。 ...

    基于UML时序图的自动化验证方法与应用.pdf

    UML的时序图就是其中一种非常重要的图表,主要用于描述对象之间如何随时间交互以完成特定任务。尽管UML在提高软件设计的可理解性方面非常有用,但它在逻辑严密性上存在一定的不足,这在面对复杂系统时尤其明显。因此...

    uml学习总结-类图、序列图

    它主要展示了系统中的类、类的属性、操作以及类与类之间的关系。 - **类的表示**:在类图中,一个类通常由三个部分组成: - 第一层:类名,如果是抽象类则字体通常为斜体。 - 第二层:类的属性(即数据成员),...

    电影院售票管理系统UML.pdf

    - 随着社会的发展和生活水平的提高,看电影成为了人们休闲娱乐的主要方式之一。传统的购票方式已不能满足现代人的需求,因此需要一个自动化、人性化的售票系统。 - 系统的目标是在发布后的6个月内,使电影院的收入...

    StarUml类图、时序图的缔造者。

    在本文中,我们将深入探讨StarUML的核心功能、如何使用它来创建类图和时序图,以及与之相关的文件。 1. **类图(Class Diagram)**: 类图是UML中用来表示系统静态结构的图形,包括类、接口、协作等元素。在...

    Eclipse插件之UML反向类图生成工具

    UML是一种标准化的建模语言,用于软件设计和系统分析,包括类图、序列图、用例图等多种图表类型。类图是UML中的一种,它显示了类、接口以及它们之间的关系,是理解和组织代码结构的有效方式。 在Eclipse中,通过...

    UML2.x之序列图详解

    ### UML2.x之序列图详解 #### 一、序列图概述 **序列图**是UML(统一建模语言)的重要组成部分之一,主要用于描述系统中对象间如何交互以及交互发生的顺序。相比于之前的版本UML1.x,UML2.x在语言定义上更加精确,...

    UML建模案例之图书管理系统

    UML基本模型是UML建模的核心部分,包括用例图、时序图、协作图、状态图、活动图等。 用例图是UML的一种静态模型,用于描述系统的功能需求。系统的参与者主要有三类:读者(也可称为借阅者)、图书馆管理员、图书馆...

Global site tag (gtag.js) - Google Analytics