类图

在系统的逻辑视图中,类图用于表示类和它们之间的关系, 单张类图表示了系统类结构的一个视图。在分析时,我们

采用类图来说明实体共同的角色和责任,这些实体提供了系统的行为。在设计时,我们采用类图来记录类的结构,这

些类构成了系统的架构。


类图中的两个基本元素:类和它们的基本关系。


基本概念:类表示法


类图标由三部分组成:第一部分用于放置类名,第二部分用于放置属性,第三部分用于放置操作(行为)。

如下图所示:


每个类都需要一个名称,而且此名称必须在它的命名空间中是唯一的。并且,按照命名规范,类的名称以大写字母开

头,省略多个单词之间的空格。属性和操作的名称以小写字母开头,后续单词的首字母大写,并且像类名一样省略空

格。类是它的属性和操作的命名空间,属性名称与操作名称在类的范围内必须无二义。


属性规格说明格式:

可见性 属性名称:类型【多重性】=默认值 {特性字符串}


操作规格说明格式:

可见性 操作名称(参数名称:类型)返回值 {特性字符串}


对于特定的类图,显示一个类的某些属性和操作是有用的。对于凡是具有一点重要性的类,在一张类图中显示它的所

有属性既不方便,也不必要。一般只显示重要的属性和行为。


抽象类是不能创建实例的类,但是这种类对于构建良好的类层次结构非常重要,所以提供了一种特殊的方式来表示抽

象类。具体来说,用斜体来显示其类名,表明只能为它的子类创建实例。当然,为了表明一个操作是抽象的,同样采

用斜体来显示操作名称。意味着这个操作可以在它的子类中以不同的方式实现。如下图所示:




基本概念:类关系


在UML类图中,常见的类关系有:泛化(Generalization),实现(Realization),关联(Association),聚合

(Aggregation),组合(Composition),依赖(Dependency)。


泛化(Generalization):


【泛化关系】:是一种继承关系,是"是一种"关系的体现 ,表示一般与特殊的关系,它指定了子类如何特化父类的所

有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性


箭头指向 :带三角箭头的实线,箭头指向父类,如下图所示:


实现(Realization):


【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现。、、

【箭头指向】:带三角箭头的虚线,箭头指向接口,如下图所示:

关联(Association):


【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以

是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。


【代码体现】:成员变量


【箭头及指向】:带普通箭头的实心线,指向被拥有者,如下图所示:

上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,

一名学生可能要上多门课程,课程是个抽象的东西它不拥有学生。


下图为自身关联: 

聚合(Aggregation):


【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开

车仍然可以存在。


聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。


【代码体现】:成员变量


【箭头及指向】:带空心菱形的实心线,菱形指向整体,如下图所示:

组合(Composition):


【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公

司就不存在部门。


组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的

对象的生命周期。选择聚合通常是分析或架构设计时的决定,选择组合(物理包容)通常是具体的、战术的问题。区

分物理包容是有必要的,因为在构建和销毁聚合体的部分时,它的语义会起作用。


【代码体现】:成员变量


【箭头及指向】:带实心菱形的实线,菱形指向整体,如下图所示:

依赖(Dependency):


【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖。


【代码表现】:局部变量、方法的参数或者对静态方法的调用


【箭头及指向】:带箭头的虚线,指向被使用者,如下图所示:


 各种关系的强弱顺序:


泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖 


下面这张UML图,比较形象地展示了各种类图关系:

在类图上,大家可能看到1或者n的字样,实际上这是“多重性”的体现,多重性就是是否存在多个的体现。多应用于关

联的目标端,说明源类和目标类实例的连接个数。通常最好显示多重性,避免造成误解。



高级概念:模板(参数化)类


模板类代表了一个类家族,它们的结构和行为与形式化的类参数是分别定义的。我们必须将这些形式化的参数映射到

某一个具体类(绑定的过程),然后才能得到这个类家族中的一个具体的类。所谓具体的类,指的是它能够拥有实

例。


模板类 与普通类有很大的不同,在UML类图中,我们采用一种特殊的修饰来表示模板类。在它的右上角我们给定一个

虚线框,其中包含了它的形式化参数。绑定的类也表现为一个简单的类。模板类和绑定类之间的绑定关系用一个虚线

箭头来表示,箭头指向模板类,带有关键词《bind》.实际的参数和模板的形式参数绑定,它会单独显示,带有形如

<Formal Parameter->Actual Paramerter>的关键词。如下图所示,PlanSet类与Set模板类绑定,GardeningPlan类是

实参,代替了形参Item.




模板类不能够拥有任何实例,也不能单独使用。绑定类定义了一种新类,与同一家族中其他类都不同,这些类具有不

同的实参。


高级概念:可见性


可见性主要是指包中包含的元素能否在包外可见。对于类中包含的元素,类也提供了封闭的命名空间。几乎所有的对

象编程语言都提供了类接口和类实现的清晰分离。在UML类图中,我们利用以下的符号指定相应元素的可见性:


公有可见性(+)对能看到这个类的任何元素都可见。

保护可见性(#)对这个类及其子类的其他元素可见。

私有可见性(-) 对这个类的其他元素可见。

包可见性(~)    对同一包中的其他元素可见。


如下图所示:

位于CropDatabase类和GrainCrop类之间的关联端名称(database和crop)都是公有的,这意味着每个类都可以访问

另一个类。与之不同的是,GrainCrop类和GrainYieldPredictor类之间的关联端名称的可见性,表示GrainCrop对于

GrainYieldPredictor类是私有的。


关联是分析类之间的双向逻辑连接。当然这些可见性符号也适用于嵌套的实体,形式完全一样。具体来说,在类的图

标中,我们可以在属性和操作名称前面加上可见性符号,说明属性和操作的可访问性。如上图中的Crop类具有一个公

有属性(scientificName)、一个保护属性(yield)及一个私有属性(nutrientValue)。


高级概念:注解


很多时候,在分析和设计时,存在大量似乎是随意的假定和决定,每个开发者都可能收集这些假定和决定。但是没有

方便的地方存放这些信息,只能记在开发者的脑子里。导致这些见解常常会丢失。因此,对图中的任意元素添加任意

的注解是有用的,注解的文字记录了这些假定和决定。


在UML图中,大家使用特别的注解形状的图标,用虚线将它与它影响的元素连起来。注解可能包含任何信息,包括纯

文本、代码片段或对其他文档的引用。注解可能不与任何图中的元素相连,这表示它适用于整张图。


如下图所示:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值