UML之——关系

1、关联

当类之间在概念上有连接关系时,这种关系叫关联(association)。
例如,队员与球队之间的关联,可以用一个短语“队员为篮球队效力(plays on)”来刻画这个关联。

关联的可视化表示法是用一条线连接两个类,并把关联的名字(例如“plays on”)放在这个连接线之上。表示出关联的方向是很有用的,关联的方向用一个箭头来指明。
在这里插入图片描述
当一个类和另一个类发生关联时,每个类通常在关联中扮演着某种角色。可以在图中靠近每个类的地方的关联线上标明每个类的角色。
在这里插入图片描述
关联还可以从另一个方向发生:篮球队雇佣(Employs)队员。可以把这两个方向上的关系表示在一个图中,用实心三角形箭头指明各自关联的方向。
在这里插入图片描述
好几个类可以连接同一个类。如果考虑Guard、Forward、Canter类和Team类之间的关联:
在这里插入图片描述

1.1、关联上的约束

有时,两个类之间的一个关联有一个规则。可以通过关联线附近加注一个约束来说明这个规则。例如,一个BankTeller(银行出纳员)为一个Customer(顾客)服务(Serves),但是服务的顺序要按照顾客的排队的次序进行。
在模型中可以通过在Customer类附近加上一个花括号括起来的“ordered(有序的)”来说明这个规则(也就是指明约束)。
在这里插入图片描述
另一种类型的约束是or(或)关系,通过在两条关系联线之间连一条虚线,虚线之上标注“{or}”来表示这种约束。下图是高中生(High school student)选(Choose)专业(Academy)课,或者选商务(Commercial)课时的模型。
在这里插入图片描述

1.2、关联类

和类一样,关联也可以有自己的属性和操作。此时,这个关联实际上是个关联类。关联类的可视化表示方式与一般的类相同,但是要用一条虚线把关联类和对应的关联线连接起来。关联类也可以与其他类关联。

下图是Player类和Team类之间的Plays on关联对应的关联类:Contract(契约)关联类。它同时和GeneralManager(总经理)类发生关联。
在这里插入图片描述

1.3、链

正如对象是类的实例一样,关联也有自己的实例。如果我们想象要一个特定的队员效力一个特定的球队,那么两者之间的Plays on关系就叫做一个链(link),可以用两个对象之间的连线来表示它。和对象的名字要加下划线一样,链的名字也要加下划线。链是关系的实例,链连接的是对象而不是类。
在这里插入图片描述

2、多重性

到目前为止,在Player类和Team类之间所建立的关联似乎是一对一的关系,然而常识告诉我们则并不一定正确,一支篮球队有5名队员。因此Has(拥有)关系必须考虑到这一点。在另一个方向上,一个队员只能为一只球队效力,Plays on关联也必须考虑这一点。

上面说的这就是多重性的例子:某个类有多少个对象可以和另一个类的单个对象关联。表示多重性的方法是在参与关联的类附近的关联线上注明多重性数值。
在这里插入图片描述
UML使用星号(*)来代表许多(more)或多个(many)。在一种语境中,两点(..)代表or(或)关系,例如“1.. *”表示一个或多个。在另一种语境中,or关系用逗号来表示,“5,10”代表5或者10’
在这里插入图片描述

3、限定关联

当关联的多重性是一对多时,就产生了一个特殊的问题:查找问题。当一个类的对象必须要选择规则中另一个类的对象来满足关联中的角色时,第一个类必须要依赖一个具体的属性值来找到正确的对象。 这个属性值通常是一个标记符号,例如一个ID号。例如,当你预定了一个旅馆房间,旅馆工作人员就会指定一个许可号。

在UML中,ID信息被称为限定符(qualifier)。它的符号是一个和要执行查找的类连接在一起的小矩形框。引进限定符的基本思想是要将一对多多重性转为一对一多重性。
在这里插入图片描述
在这里插入图片描述

4、自身关联

有时,一个类可能与它自己发生关联,这样的关联被称为自身关联。当一个类的对象可以充当多种角色时,自身关联就可能发生。一个CarOccupant(车上的人)既可能是一个司机(Driver)也可能是一个乘客(Passenger)。如果是司机,那么他可以载(Drives)零到多个乘客。自身关联用从类框出发又回到自身的关联线表示,在关联线上也可以指明角色名、关联名、关联的方向以及多重性。
在这里插入图片描述

5、继承和泛化

继承是面向对象术语,UML中也称它为泛化。在泛化关系中,子类可以代替父类。也就是说,父类出现的地方,子类都可以出现。反之不行。

在UMl中,用父类到子类之间的连线来表示继承关系,指向父类的一端带一个空心三角形箭头。这种连接类型的短语的含义为is a kind of(属于…的一种)。lieu,哺乳动物是动物中的一种,而马又是哺乳动物的一种。
在这里插入图片描述

5.1、找出继承关系

在与客户交谈的过程中,可以通过多种方式发现类之间的继承关系。作为候选的类有可能和它的父类、子类在谈话中同时被发现。某个类的属性和操作也许能被运用到其他多个类当中去;此外,这几个类(子类)还有属于自己的特定属性和操作。

5.2、抽象类

拥有属性、方法,但不提供实例对象的被称为抽象类。表明一个类是抽象类的方法是类名用斜体书写
在这里插入图片描述

6、依赖

另一种类间关系是一个类使用了另一个类,这种关系叫做依赖。最通常的依赖关系是一个类操作的型构中用到了另一个类的定义

假设你正在设计一个能显示公司全体成员的制表系统,公司的员工可以填写这个系统中的电子表格。在设计中,有一个System(系统)类和一个Form(表单)类。System类的众多操作中有一个DisplayForm(f : Form),系统所要显示的表格。

这种设计的UML表示法是在有依赖关系的类之间画上一条带箭头的虚线来表示。
在这里插入图片描述

7、聚集(聚合 Aggregate)

一个类有时是由几个部分类组成的。这种特殊类型的关系被称为聚集。部分类和由他们组成的类之间是一种整体与部分的关联。

在这里插入图片描述
按照聚集关系的表示法,聚集关系构造成了一个层次结构。“整体”类
位于层次架构的最顶部,以下依次是各个“部分”类。整体和部分之间用带空心的菱形箭头的连线连接,箭头指向整体。

8、组成(复合)

组合是强类型的聚集。组合中的每个部分体只能属于一个整体。例如,咖啡桌(Coffee Table)是一个组合体,它的部分体有桌面(TableTop)和桌腿(Leg)。组成的表示法和聚集的表示法类似,但是菱形的箭头是实心的。
在这里插入图片描述

9、组成结构图(Composite Structure Diagram)

在对系统建立模型时,类通常以类族的形式出现,这些类族中的类之间常常有聚集或组成关系。有时可能需要集中考察其中的某个类族,UML语境图提供了这种建模特征。语境图有点像一幅大图中某个局域的子图。有时需要将一个大图中的某些局部“放大”来获取详细信息。

例如,假设你要建立一个衬衫(Shirt)的类模型,并要说明衬衫的尺寸和组成。一种类型的组成结构图就是将衬衫类画成一个大矩形框,里面嵌套了该衬衫的各个组成部分的类图。在这里插入图片描述
组成结构图重点关注衬衫和衬衫的内部构成。如果要展示衬衫加上衣挂,挂在衣架上,放在衣柜中的情形,那么必须要扩大建模范围。系统语境图(System Context Diagram)可以用来为此建模。它可以说明衬衫类如何与全部服装(Wardrobe)和服装类(Outfit)关联。
在这里插入图片描述

10、接口和实现

我们建立了几个类之后,可能会发现这些类并不与某个特定的父类相关,但是它们的行为中可能包括同样的操作和同样的型构,可以对其中的某个类编码,然后在其他的类中重用这些编码。另一种可能的情况是开发了一个系统中类的一组操作并在另一个类中可以重用这些操作。

不管是哪种方式,都需要这些可重用的操作集。接口可以达到此目的。

接口(interface)是描述类的部分行为的一组操作,也是一个类提供给另一个类的一组操作。

接口的模型表示法和类大致相同,都是用一个矩形图标来代表,和类的不同之处在于,接口只是一组操作,没有属性。类和接口之间的关系被称为实现。实现关系用一个带空心三角形箭头来表示,箭头的方向指向接口。
在这里插入图片描述
另一种表示法(省略表示法)是将接口表示为一个小圆圈,并和实现它的类用一条线连起来。
在这里插入图片描述
一个类可以实现多个接口,一个接口也可以被多个类实现。

11、可见性(visibility)

可见性可应用于属性或操作,它说明在给定类的属性和操作(或接口的操作)的情况下,其他类可以访问到的属性和操作的范围。

可见性有3种层次(级别):

  • 在公有(public)层次上,其他类可以直接访问这个层次中的属性和操作。
  • 在受保护(protected)的层次上,只有继承了这些属性和操作的子类可以访问最初类的属性和操作。
  • 在私有(private)层次上,只有最初的类才能访问这些属性和操作。

UML中,属性或操作名前面带个“+”号,则指明该操作或属性是公有的。同样,“#”号和“-”号分别代表受保护的和私有的。
在这里插入图片描述

12、小结

离开了类之间的关系,类模型仅仅只是一堆代表领域词汇的杂乱矩形方框。
关系说明了这些词汇所表达的概念之间的连接,这样才能完整说明被建模型。关系是类之间最基础的概念性连接。

抽象类只是为了提供其他类继承的基类之用,它本身不产生对象实例。

类之间的属性有组合关系,则称为关联;
类的操作(方法)用到了其他类,则称为依赖。

猜你喜欢

转载自blog.csdn.net/weixin_46356818/article/details/115220050
今日推荐