【UML】UML元素的几种关系

UMLUnified Modeling Language),即统一建模语言或标准建模语言,始于OMGObject Management Group,对象管理组织),是OOADObject Oriented Analysis Design,面向对象的分析与设计)高潮时期的产物。UML是一门统一的可视化建模语言,主要表现形式是图,自然就会有许多不同种类的图,下面介绍一下类图及其它们之间的关系。


类图是一种静态图,用于描述系统中所包含的类以及它们之间的关系,是面向对象系统的建模中最为常见的一种图。在UML类图中,类通常可以分为实体类、控制类和边界类,具体由类名、类的属性和类的操作三部分组成,类与类之间的关系有不同的表示方式,下面一一介绍,需要特别注意的是各关系中的箭头形状及指向。


1、关联(association

------


关联关系是用一条直线表示的,它表示不同类的对象之间的结构关系,它在一段时间内将多个类的实例连接在一起,这与依赖关系是不同的,依赖关系通常表示两个实例之间的临时关联关系。我们可以使用关联关系表示一个对象了解其它对象,简单一点说,关联关系描述了一个对象在一段时间内一直知道另一个对象的存在。有时为了区分对象间的相互关系,还可以使用带一个箭头的直线,表示单向关联。


关联是一种结构化关系,表示一类对象与另一类对象之间有联系,可以是单向关联,如CarPosition的关系,也可以是双向关联,如DriverCar的关系,还可以是自关联,如GasGas的关系。另外,关联还可以是多重性关联,表示两个关联对象在数量上的对应关系,在UML类图中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围表示。


--


--


2、依赖(dependency

-----


依赖关系是用一条带箭头的虚线表示的,它描述一个对象的修改会导致另一个对象的修改这样的关系,与关联关系不同的是,依赖关系除了知道其它对象的存在,还会使用其它对象的属性和方法,从这个角度讲,依赖是一种特殊的关联关系。同样的,依赖也有单向依赖和双向依赖之分,但虚线都带有箭头,由于双向依赖是一种不好的数据结构,要避免使用双向依赖。


依赖是一种使用关系,表示一种事物对另一种事物的使用,例如CarWheel的关系,使用方式通常是把Wheel作为Car中方法的参数,也可以是局部变量或静态方法的调用。


--


--


3、扩展(extends)

-----


扩展关系是用一条带箭头的虚线加<<extends>>来表示的,它特别用于在用例模型中说明向基本用例中的某个扩展点插入扩展用例,一般来说,扩展用例是带有抽象性质的,Java中就有这样的关键字,它表示了用例场景中的某个支流,由特定的扩展点触发而被启动。与包含关系不同的是,扩展表示的是可选,而不是必需,这意味着即使没有扩展用例,基本用例也是完整的,但如果没有基本用例,扩展用例是不能单独存在的,如果有多个扩展用例,同一时间用例实例也只会使用其中的一个。


--

--


4、包含关系(include)

-----


包含关系是用一条带箭头的虚线加<<include>>来表示的,它特别用于用例模型,说明在执行基本用例的用例实例过程中插入的行为段。包含用例也总是带有抽象性质的,基本用例可控制与包含用例的关系,并可依赖于执行包含用例所得的结果,但基本用例和包含用例都不能访问对方的属性,从这种意义上,包含用例是被封装的,它代表可在不同基本用例中可复用的行为。与扩展用例不同的是,包含用例表示的是必需而不是可选,这意味着如果没有包含用例,基本用例是不完整的,同时如果没有基本用例,包含用例也是不能单独存在的。


5、实现(realization

-----


实现关系是用一条带空心箭头的虚线表示的,它特别用于在用例模型中连接用例和用例实现,说明基本用例的一个实现方式,每种实现途径都可以实现基本用例的业务目标。


实现是一种接口继承关系,是接口的具体实现,例如CarICar的关系,ICar声明一些抽象操作,Car完成这些操作的实现。


--



--


6、精化(refine)

-----

精华关系是用一条带箭头的虚线加<<refine>>来表示的,它特别用于用例模型,一个基本用例可以分解出许多更小的关键精化用例,这些更小的关键精化用例更细致地展示了基本用例的核心业务。精化关系用例连接基本用例和精化用例,说明精化用例是由基本用例精化得来的。与泛化关系不同的是,精化关系表示由基本对象可以分解出更明确、更精细的子对象,这些子对象并没有增加、减少、改变基本对象的行为和属性,仅仅是更加细致和明确化了。在泛化关系中,基本对象被泛化称为子对象后,子对象继承了基本对象的所有特征,并且子对象可以增加、改变基本对象的行为和属性。另一方面,精化关系仅仅用于建模阶段,在实现语言中是没有精化这一语义的,泛化则等同于实现语言中的继承语义。


7、泛化(generalization

-----


泛化关系是用一条带空心箭头的直线表示的,泛化关系可以用于建模过程中的任意一个阶段,说明两个对象之间的继承关系。


泛化是一种继承关系,是一般与特殊的关系,例如BMW继承自Car,是Car的一个品牌,有Car的共性,但也有BMW自己的特性。


--


--


8、聚合(aggregation)

-----


聚合关系是用一条带空心菱形箭头的直线表示的,用于类图,特别用于表示实体对象之间的关系,表达整体由部分构成的语义,与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在。


聚合表示整体与部分的关系,但部分可以独立于整体而单独存在,如CarGlass的关系,GlassCar的一部分,一个成员对象,Glass可以不依赖于Car而独立存在。


--


--


9、组合(composition

-----


组合关系是用一条带实心菱形箭头的直线表示的,组合关系用于类图,特别用于表示实体对象关系,表达整体用于部分的语义。组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也将消亡。


组合表示整体与部分的关系,但部分不可以独立于整体而单独存在,如CarSmoke的关系,SmokeCar的一部分,一个成员变量,Smoke不可以独立于Car而单独存在,一旦Car的生命周期结束时,Smoke也就不存在了。


--


--


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值