以StarUML實作类图

UML 剖析(1) —— 类图实体

0. 简介

UML 就是将软件的各种状态以图表的方式展现出来。因为 UML 涉及的图表非常的多,这里只介绍比较重要的类图、时序图、用例图,为了加深读者的理解,这里会使用 StarUML 来讲解。

1. 类图

1.1 概念

类图就是表示系统中包含了哪些实体,各实体之间如何关联的。

1.2 类图组成

从概念就可以知道类图其实就是由两部分组成的,一个是实体,另一个就是关联。关联会在下一篇文章讲解,这篇文章先讲解实体。

1.2.1 类图实体

类图实体的意思其实就是表示在 UML 当中怎么表示一个类。例如,现在有一个 Dog 类,代码如下:

public class Dog {   

    private int age;

    private String name;

 

    public void printInfo(){

        System.out.println("name: " + name + " " + "age: " + age);

    }

}

如果用类图表示如下图:

Dog

一个类图就是由类名,属性和方法组成的,现在来介绍一下这些元素的细节。

1.2.1.1 类名特性

在 StartUML 中,如果双击类名会看到右边的控制面板出现下图的屬性表格

 

Class Properties

这个就是描述当前类的各項值,那它们分别代表什么意思呢?以下一个个解释。

(1)stereotype构造型:其实就是对类的概念說明。简单的说可以一句话来更加清楚准确描述这个类
现在往 stereotype 添加 Animal,看看类图会发生什么变化?

stereotype

可以发现在类名 Dog 上面会出现 <<Animal>> ,因为在 UML 当中构造型(Stereotype)就是用<< ….>> 符号来表示。

(2)visibility:这个是可见性的意思,这里一共有四个选项,分别是 public、protected、private、package。不过你无论选什么选项类图都不会有什么变化的,不过要注意的是 Java 中只能使用 public package 来修饰类

(3)isAbstract:顾名思义,这个选项就代表是否为抽象类。如果选上这个选项类名就会变成斜体字,如图:

isAbstract

(4)isFinalSpecialization:是否为 final ,如果选上这个选项,类图并没有什么变化。

(5)isLeaf:代表选上都代表这个类为 leaf类。如果选上这个选项类图会有如下变化。

isLeaf

可以看到类名的右下角出现 {leaf}

(6)isActive:是否为主动对象。那什么是主动对象呢?主动对象就是可主动启动某些流程,而被动对象就是要其它对象来调用它。如果选上这个选项类图会有如下变化:

isActive

可以看到类图左右两边加多了一条线

1.2.1.2 属性特性

Attribute Properties

有些选项与前述类名的选项是一样的,这里就不重复讲解了,说一些类名没有或特有的属性。

(1) visibility:有些人可能会问了,类名那一节不是已经说了这个属性吗?为什么还要说。没错,类名那里确实说过了,而且这个属性的值和类名也是一样的,但在这里如果选不同的选项,类图是会相应有不同的变化的

visibility

看上图,可以知道选择不同访问控制符,age 前的符号是不一样的,总结如下表:

访问控制符

UML 符号

public

+

protected

#

private

-

package

~

(2)isStatic:是否为静态。如果选择了这个选项后,类图会有如下变化

isStatic

age 属性下面会出现一道横线。

(3)type:代表该属性的資料类型

(4)multiplicity:这个代表该类实例与其他类实例连接时所需要的数量范围。这里有几种表达方式,总结如下表:

符号

说明

0..1

零个或一个

1

一个

0..*

零个或多个

1..*

一个或多个

*

任意數

如果选择了 0..1 选项类图就会变成如下图:

multiplicity

age 后面就会出现 [0..1]

(5)isReadOnly:代表只能读取。选择了这个选项类图会有如下变化

isReadOnly

在属性的后面会出现 {readOnly}

(6)isOrdered:如果选择了 multiplicity,再选择了 isOrdered。证明这个多个属性值是可排序的,选择了这个选项类图会有如下变化

isOrdered

在属性的后面会出现 {ordered}

(7)isUnique:如果选择了 multiplicity,再选择了 isUnique。证明这个多个属性具唯一性,选择了这个选项类图会有如下变化

 

isUnique

在属性的后面会出现 {unique}

(8)defaultValue:默认值,设置的话,类图会有如下变化

 

defaultValue

age 后面 增加了 “= 18” 符号。

(9)isDerived:代表这个值是由其它模型计算出来的。选择了这个选项类图会有如下变化

 

isDerived

可以看到会 age 前增加 “/” 符号

(10)aggregation:这里面有三个选项如下图:

 

 

类型

作用

none

不是聚合状态

shared

可独立存在

composite

没有这个属性,整个类就不能存在

设置了这几个值类图并不会有什么变化

(11)isID:代表这个属性值是否具这个类实例的唯一标识码。选择了这个选项类图会有如下变化

 

isID

可以看到会 name 属性后面增加 “{id}” 符号

1.2.1.3 方法特性

 

Opeartion Properties

(1)raisedExceptions:添加引发的异常
如这里我定义了一个新 MyException 类,然后在 printInfo() 方法中添加此异常,添加后如图所示:

 

raisedExceptions

添加后,类图并不会有变化

(2) concurrency:代表这个方法的并发性,这里有三个选项,作用下表总结:

 

 

类型

作用

sequential

按顺序执行

guarded

后台执行

concurrent

并发执行

改变后,类图并不会有变化

(3)isQuery:代表此方法是否為查詢方法。选择了这个选项类图会有如下的变化

 

isQuery

会在 printInfo() 方法后出现 “{query}” 符号

(4)specification:对这个方法的作用进行说明
增加内容后,类图并不会有变化

基本上我们平常能用到的类图实体的元素都讲解的差不多了,下一篇文章我们继续讲解类图关联。

UML 剖析(2 —— 类图关联和时序图

上篇文章讲解完类图实体,现在讲解类图关联

1. 类图关联

 

Classes(Basic)

下面一个一个讲解上图的关联属性。

1.2 Association

Association 是双向关联的意思,比如老师与学生就是一个双向关联的关系。举例如下:

Association

上面这个图 Student 的 1..* 的意思一个到多个的意思,也就是代表一个 Teacher 对象可对应多个 Student。

1.3 Directed Association

这个关联是有方向关联的意思,举例图如下:

 

Directed Association

这个的意思是就是被关联类 B 會以属性成員出现在类 A

1.4 Aggregation

这个是聚合的意思,体现了整体和部分的关系。

 

Aggregation

上图的意思就是一个 School 类拥有一个或多个 Student 类。

1.5 Composition

是一种比 Aggregation 更强的聚合关系,类似于孕妇与胎儿的关系,胎儿是依附于孕妇的,如果孕妇死了,胎儿也不能生存。举例如图:

 

Composition

1.6 Dependency

这个的意思其实就是一个类依赖另一个类,举例来说就是一个类作为另一个类的方法中之参数调用。

 

Dependency

1.7 Generalization

这个的意思是泛化关系,表示一个类对另一个类的继承。下图就是 A 继承 B 的意思。

 

Generalization

1.8 Interface Realization

这个也非常简单,就是類实现接口的意思。举例如下图:

 

Interface Realization

2. 时序图

2.1 定义

时序图其实就是对象之间传递消息的时间顺序

2.2 Lifeline

这个的意思就是一个对象之生命週期,举例如下图:

Lifeline

2.3 Message

这个的意思就是发送一条普通消息,比如用户发送一条登录的消息给服务器,举例如下图:

Message

2.4 Self Message

这个的意思就是自己发送消息给自己,比如一个对象的一个方法调用了自己本身的另一个方法,举例如下图:

Self Message

2.5 Async Message

这个的意思是异步消息,举例如下图:

Async Message

这个图的意思就是 User 发出 Login 的消息给 Server,Server 发送保存用户消息给到数据库(但須注意这里的消息是异步消息,不是一般消息)。

2.6 Reply Message

这里的意思是回调消息,举例如下图:

Reply Message

上图的意思就是 User 发出 Login 的消息给 Server 后,Server 同时发出异步消息给数据库和回傳登录结果给到用户。

2.7 Create Message

这个的意思就是创建一个新消息,举例如下图:

Create Message

2.8 Delete Message

这个的意思是销毁一个对象,举例如下图:

Delete Message

2.9 Async Signal Message

这个的意思就是发送一个信号消息,意思就是当某个对象达到某个条件后就会自动发送一个信号消息给另一个对象,类似于观察者模式。

Async Signal Message

2.10 Found Message

这个的意思就是发送一个不知道来源的消息,举例如下图:

Found Message

2.11 Lost Message

这个的意思就是消息发送到一个不知道目的之地方,也可以说消息没有目的地,举例如下图:

Lost Message

2.12 Endpoint

这个的意思就是一个結束的消息对象,如下图:

Endpoint

2.13 Gate

这个的意思用于在时序图之閘腳与图内的消息交互,举例如下图:

Gate

上图的小正方形就是 Gate閘腳。

2.14 State Invariant

这个的意思就是约束某个对象要處在某一个状态下,举例如下图:

State Invariant

这个的意思就是说 start 开始前,Task 必须要在 Finish 状态

2.15 Combined Fragment

这个的翻译叫组合片段,它是用来解决交互执行的条件和方式
组合片段常用的有这么几种:

类型

名称

说明

alt(alternatives)

选择

包含一个片段列表,这个片段列表有备选的消息序列,每次只能走一个消息序列

opt(option)

选项

包含一个可能会发生的消息序列

loop(iteration)

重复

包含一个可以重复的消息序列

par(parallel)

并行

包含一个可以并行的消息序列

break(break)

中断

如果执行了此部分则放弃了序列的其他部分的执行,可用于中断 loop 片段

以下来各自举例说明:

2.15.1 alt(alternatives)

alt(alternatives)

上图的意思就是当满足了 a > 1 条件后,就会执行 Message1,否则执行 Message2

2.15.2 opt(option)

opt(option)

上图的意思就是当满足了 a > 1 条件后,才会执行 Message1

2.15.3 loop(iteration)

loop(iteration)

上图的意思是不停重复发送 Message1 消息。如果要限定 loop 的次数的话也可以按下图这样:

loop(10)

这样就代表这个循环重复了 10 次。

2.15.4 par(parallel)

par(parallel)

上图的意思就是并行发送三条消息

2.15.6 break(break)

break(break)

上图的意思就是 a > 0 时,就会跳出循环,发送消息到 ClassC

常用的组合片段大概就是这些,如果各位对其他片段有兴趣的话,可以自行研究,这里就不再细说了。

2.16 Continuation

Continuation

这个的意思用来表示这个序列的作用

2.17 Interaction Use

这个的意思就是用来描述两个对象的交互现象,举例如下:

Interaction Use

这个的意思就是 User 和 UserManager 的交互结果,User 使用 id 和 password 作为参数,UserManager 返回 result 作为结果

 

参考书籍与文章:
《UML和模式应用》
在Java中保留Stereotype
Active class versus passive class
快速上手UML類別圖的初級概念:類別(一)
Composite Vs Shared
UML Operation

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值