资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,聚合,聚合(,Aggregation,)关系是用来表示整体与部分关系的关联。在聚集中,部分类可以没有整体类而存在,但是当它们聚集成一个整体,就用来组成该整体类。在,UML,中,聚合关系用带空心的菱形头的实线表示,其头部指向整体。,从图,6-23,可以看到,计算机由,CPU,、显示器、键盘、鼠标、扬声器等组成。,组合,组合(,Composition,)关系是聚合关系中的一种特殊情况,是更强形式的聚合,又被称为强聚合。在组合中,用来组成整体类的部分类不能独立存在。,UML,中,组合关系用带实心菱形的实线来表示,其中头部指向整体。,图,6-24,所示,咖啡桌是一个组合体,它的部分有桌面和桌腿。,实现,(Realization),实现是规格说明和其实现之间的关系,它将一种模型元素与另一种模型元素连接起来,比如类和接口。,对象图,对象图,(Object diagram),描述的是参与交互的各个对象在交互过程中某一时刻的状态。对象图可以被看作是类图在某时刻的实例。,在,UML,中,对象图使用的是与类图相同的符号和关系。,包图,一个最古老的软件方法问题是:怎样将大系统拆分成小系统。解决这个问题的一个思路是将许多类进行分组,形成一个高内聚、低耦合的类的集合。,UML,中这种分组机制叫包,(Package),,如下图。,包可以拥有其他的元素,这些元素可以是类、接口、组件、节点、协作、用例和图,甚至可以是其他包。拥有是一种组成关系,这意味着模型元素被声明的包中,而且一个模型元素不能被一个以上的包所拥有。如果包被撤销,其中的元素也要被撤销。在,UML,中,最有用的和强调最多的启发性原则就是依赖。,包图主要显示类的包以及这些包之间的依赖关系。有时还显示包和包之间的继承关系和组成关系。包间的依赖用虚线表示。,UI,包中的类如下,主要有,Function,包图,,Information,包图和,Maintenance,包图。,Function,类图:这部分是系统运行界面的基本功能部分,包括借书,还书,预定书籍和取消预定的界面,如表,6-3,Information,包图:这部分类图是系统的信息显示部分,包括书籍信息,读者信息的显示,查询各种信息的对话框等界面。,Maintenance,包图:这部分类图是系统运行界面的维护部分,包括读者信息,书籍信息的修改,更新和查询的内容。,构件图和部署图,构件图和部署图显示系统实现时的一些特性,包括源代码的静态结构和运行时刻的实现结构。构件图显示代码本身的结构,部署图显示系统运行时刻的结构。,构件图,构件图,(Component diagram),显示软件构件之间的依赖关系。在构件图中通常包含了,3,种元素:构件、接口和依赖关系。,类的接口和软件实体(构件)的接口概念是相同的。构件实现一些接口,并使用另一些接口。如果构件间的依赖关系与接口有关,那么可以被具有同样接口的其他构件所替代。构件图描述软件构件以及它们之间的依赖关系,从而便于人们分析和发现当修改某个构件时可能对那些构件产生影响,以便对它们做相应的修改或更新。构件可以是源代码构件、二进制目标码构件、可执行构件或文档构件。,构件图可以对实现环境中的真实软件建模;通过依赖关系展示软件的构造情况;在对系统进行改变或升级之前,提供对现有系统的精确描述;有了构件图,不用阅读所有的代码就可以发现实现中的瓶颈问题。构件是定义了良好接口的物理实现单元,是系统中可替换的物理部分。构件图中的接口、依赖关系与类图中的相同。图所示为,UML2.0,中,表示构件的一种图标,其是顶部带有关键字,component,的矩形。,如果构件属于一个包,可以在构件名称前加上包名,还可以另外一个隔开的区域里绘出构件的操作。,接口可以用一个小圆圈来代表,用实线和构件连接起来。这表示的实现关系。,另外还可在图中表示出依赖关系,构件和它用来访问其他构件的接口之间的关系。用一个“球窝”符号。其中“球”表示提供的接口,“窝”代表了所需要的接口。,如图,6-30,所示,构件,A,与构件,B,之间通过接口连接。,部署图,部署图(,Deployment Diagram,)描述系统硬件的物理拓扑结构以及在此结构上执行的软件。部署图可以显示计算结点的拓扑结构和通信路径、节点上运行的软件构件、软件构件包含的逻辑单元,(,对象、类,),等。部署图常用于帮助理解分布式系统。,节点是在运行时用于代表计算资源的物理元素。它就像是类,代表的是某种类型的设备,却不是专指某个特定的设备,因为实际上它们代表的是设备的特征。另外,节点也使用关联来表示它们之间的关系。图,6-31,表示部署图中的节点。,部署图可以对系统的硬件平台建模,还可以描述影响系统运行和软件配置的硬件性能。如图,6-32,,是一个网络系统中有线猫和无线路由之间的部署图。,6.2.4 UML,的动态建模机制,对于一个系统的各个对象之间如何进行相互作用来实现系统功能就是这个系统中动态的行为。对于动态行为的描述通过动态建模来完成。,UML,的动态建模包括状态图,顺序图,协作图,活动图。,状态图是由状态和迁移组成的图,描述类实例对接受事件的响应。状态描述对象生命周期的一段时间,可以是等待其它事件时所处的时间,或是执行某一活动时所处的时间。,状态,状态由一个带圆角的矩形表示,状态图的图标可分为,3,部分:名称、活动,如图,6-33,、,6-34,所示。,转换,转换用带箭头的直线表示,一端连接源状态,即转出状态,一端连接目标状态,即转入状态。转换可以标注与此转换相关的选项,如事件、动作和监护条件。,初始状态,每个状态图都应该有一个初始状态用于代表状态图的起始位置。,初始状态只能作为转换的源,而不能作为转换的目标。初始状态在一个状态图中只允许有一个,用一个实心的圆表示,如图,6-35,所示。,终止状态,终止状态是模型元素的最后状态,是一个状态图的终止点。终止状态只能作为转换的目标,而不能作为转换的源。终止状态与初始状态不同的是,在一个状态图中,终止状态可以有多个,它用一个含有实心圆的空心圆表示,如图,6-36,所示。,图,6-37,中显示了使用计算机时如果不打字或不碰鼠标,则过一段时间屏幕保护程序就会运行,它可以保护显示器屏幕免受损坏。图中的方括号是,UML,表示“,if,”,的方式。,内部转换,在内部转换中可以包含进入或者走出此状态应该执行的活动或动作,它们将响应对象所接收到的事件,但是不改变对象的状态。,子状态,一个状态可以进一步地细化为多个子状态,将可以进一步细化的状态称作组合状态。或关系说明在某一时刻仅可到达一个子状态。在组合状态的嵌套状态图部分包含子状态有两种情况,即顺序子状态和并发子状态。,1),顺序子状态,如果一个组成状态的自状态对应的对象在其生命期内的任何时刻都只能处于一个子状态,即多个子状态之间是互斥的,不能同时存在。,从图,6-38,中可以看到一个物体移动,其“向前”和“向后”运动两个状态必须在前一个状态完成之后才能进行下一个状态,不可能同时进行。,2),并发子状态,有时组合状态有两个或者多个并发的子状态机。顺序子状态与并发子状态的区别在于后者在同一层次给出两个或多个顺序子状态,对象处于同一层次中来自每个并发子状态的一个时序状态中。,例如,一个处于行驶状态的汽车,在“行驶”这个复合状态中有向前和向后两个不同的子状态,在某一时刻汽车要么向前,要么向后。与关系说明复合状态中在某一时刻可同时到达多个子状态,(,称为并发子状态,),。具有并发子状态的状态图称为并发状态图。,顺序图,顺序图,(,Sequence Diagram,),的关键思想是对象之间的交互是按照特定的顺序发生的,这些按特定顺序发生的交互序列从开始到结束需要一定的时间。当建立一个系统时,必须要指明这种交互序列,顺序图就是用来完成这项工作的。,顺序图包含了,4,个元素,分别是对象、生命线、消息和激活。,顺序图存在两个轴:水平轴表示不同的对象,垂直轴表示时间。,对象,用一个矩形框表示,并标有对象名和类名。对象从左到右布置在顺序图的顶部。布局以能够使图尽量简洁为准。,时间,顺序图中垂直方向代表时间,时间流逝的方向为自顶向下。靠近顶部的消息发生的时间要比靠近底部的消息早。,生命线,垂直虚线是对象的生命线,用于表示在某段时间内对象是存在的。,消息,一个对象到另一个对象的消息用跨越对象生命线的消息来表示对象还可以发送消息给它自己,即消息从自己的生命线出发又回到自己的生命线。,UML,用一条生命线开始到另一条生命线结束的箭头来表示一个消息。箭头的形状代表消息的类型。,其中:,同步消息,一个来自消息发送者对象的请求,它被传递给消息的接收者对象。它请求接收者对象执行其(接收者对象的)某种操作。通常,这需要发送者等待接收者来执行该操作。由于发送者等待接收者,即发送者和接收者同步。,UML,用一个带有实心箭头的实线来表示这种类型的消息。,返回同步消息,通常,发送同步消息还包含了来自接收者的返回消息,尽管建模者经常忽略这个返回消息。这个返回消息的符号是一条带有两条箭头的虚线。,异步消息,另一种消息是异步消息。在这种消息中,发送者把控制权转交给接收者,但不等待操作完成。这种消息的符号是一个两条线的箭头。,激活,激活表示对象正在执行某个操作。激活在,UML,图中是用生命线上的窄矩形条来表示。激活矩形的长度表示出激活的持续时间,持续时间通常以一种大概的、普通的方式来表示。这意味着生命线中的每一段虚线通常不会代表具体的时间单元,而是试图表示一般意义上的持续时间。,UML2.0,中,用一个边框包围它并在左上角添加一个间隔区,这个间隔区包含了识别该顺序图的信息。其中的一小段信息是操作符,就是描述图的类型的表达式。对于一个顺序图,其操作符是,sd,(,sequence diagram,)。,图,6-40,表示的“锁车”事件的顺序图。,汽车的遥控钥匙可以锁车和开锁,并且可以打开后备箱。如果汽车自动上锁,闪动一下车灯,并发出一声鸣叫,告诉车主它已经把车门上锁了。以上就是一个给汽车上锁的事件的顺序图。可以看到其中有车主(,CarOwner,)、汽车(,Car,)和车钥匙(,CarKey,)这几个对象。其活动为:,1,)车主向车钥匙发送消息,要求车钥匙实现,getButtonPress,(),操作(其参数,b,为,ButtonNam,,即为处理该消息并实现和所按下的按钮名相应的操作如“上锁”、“开锁”、“打开后备箱”等),登记下车主按下的按钮,b,,并且把控制权传递给了车钥匙,2,)车钥匙发送消息给车,通知车实现其,proccessKeyMessage,()操作,这个操作取决于具体的按钮。处理完来自车钥匙的消息后,汽车给自己发送一条消息,以实现和按下的按钮相应的操作。如果按下的按钮是“,lock,”,,汽车就会向自己发送执行,lock(),操作的请求。然后,汽车发送闪动车灯(,BlinkLights,(),)和汽车鸣叫,(Beep(),这两个信号给车主。,
展开阅读全文