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

0. 简介

UML 中文翻译为统一建模语言,其实说白了 UML 就是将软件的各类状态以图表的方式展示出来。由于 UML 涉及的图表很是的多,这里只介绍比较重要的类图、时序图、用例图,为了加深读者的理解,这里会使用 StarUML 来说解。html

1. 类图

1.1 概念

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

1.2 类图组成

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

1.2.1 类图实体

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

public class Dog {
    
    private int age;
    private String name;

    public void printInfo(){
        System.out.println("name: " + name + " " + "age: " + age);
    }
}
复制代码

若是用类图表示以下图: post

Dog

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

1.2.1.1 类名

在 StartUML 中,若是双击类名会看到右边的控制面板出现下图的表格: 翻译

Class Properties

这个就是描述当前类的值,那它们分别表明什么意思呢?如下一个个解释。3d

(1)stereotype:这个中文翻译也叫构造型,其实就是对类的概念的精化。简单的说加一句话来更加清楚准确描述这个类。 如今往 stereotype 添加 Animal,看看类图会发生什么变化? code

stereotype
能够发如今类名 Dog 上面会出现 <> ,由于在 UML 当中构造型(Stereotype)就是用<< >> 符号来表示。

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

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

isAbstract

(4)isFinalSpecialization:是否为 final 类,若是选上这个选项,类图并无什么变化。

(5)isLeaf:其实这个的意思和 isFinalSpecialization 基本上都是同样的,都表明选上都表明这个类为 final 类。若是选上这个选项类图会有以下变化。

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,在选择了 isOrdered。证实这个属性多个值是否惟一,选择了这个选项类图会有以下变化:

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

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

defaultValue

会在 age 后面 增长了 “= 18” 符号。

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

isDerived
能够看到会在 age 前增长 “/” 符号。

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

aggregation

类型 做用
none 不设置聚合状态
shared 能够独立存在
composite 没有这个属性,整个类就不能存在

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

(11)isID:表明这个属性值是不是这个类实例的惟一标识码。选择了这个选项类图会有以下变化:

isID
能够看到会在 name 属性后面增长 “{id}” 符号

1.2.1.3 方法

Opeartion Properties

(1)raisedExeptions:添加可能会引起的异常。 这里我定义了一个 MyException 类,而后在 printInfo() 方法中添加异常,添加后如图所示:

raisedExeptions

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

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

concurrency

类型 做用
sequential 按顺序执行
guarded 后台执行
concurrent 并发执行

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

(3)isQuery:表明此方法若是并无改变系统的状态。选择了这个选项类图会有以下的变化:

isQuery

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

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

基本上咱们日常能用到的类图实体的元素都讲解的差很少了,下一篇文章咱们继续讲解类图关联

下篇文章在此:UML 剖析(2) —— 类图关联和时序图

参考书籍与文章:

《UML和模式应用》

《大象:Thinking in UML》

在Java中保留Stereotype

Active class versus passive class

快速上手UML類別圖的初級概念:類別(一)

Composite Vs Shared

UML Operation