类图
类图就是描述系统中的类和各个类之间的关系的静态图形,能够在编写代码之前让我们对系统有一个全面的了解,类图就是一个静态模型类型。
类图的组成有三部分分别是:类、接口、关系
类
类有三部分组成:
- 类名:放到第一部分
- 属性:放到第二部分,[-属性名:类型]
- 方法:放到第三部分,[+方法名(参数):返回值类型]
注意:如果有内部类可以添加到第四部分
上面的“+”、“-”是代表的修饰符:
- +:public(公开的)
- -:private(私有的)
- #:protected(受保护的)
例子:
class Classname{
private String name;
public void show(String name){
}
}
接口
一般接口只有方法,很少会设置属性,而接口被子类继承,被继承的必须由接口方法所以接口的类图很好画
接口实现:
interface InterfaceName{
public void show();
}
class Classname1 implements InterfaceName{
public void show(){
}
}
class Classname2 implements InterfaceName{
public void show(){
}
}
关系
在系统中类与类之间存在很多关系,并不是单独的。
关联(Association)关系
关联关系是一种常见的关系,它是一种结构化关系,就是一个类对象与另一个类对象有关联,比如师傅与徒弟、主页与按钮等。在UML中是用实线表示的,可以在实线上面写上关联的名称或者动词,在java中通常就是用另一个类对象当做本类的成员变量。
比如:我有一个(Form)页面,里面包含一个(Button)按钮,这样就存在了关联在页面里面声明是一个按钮类型的成员变量。
class Form{
public Button button;
}
class Button{
}
关联关系又存在很多种形式
双向关联
双线关联就是两个类分别都有另一个类对象的成员变量。
- 顾客(Customer)
- 商品(Product)
如:顾客购买商品并拥有商品,反过来,商品被顾客买了,这样就两边都存在了关联
不用箭头
class Customer{
public Product product;
}
class Product{
public Customer customer;
}
单向关联
单向关联就是一个类用另一个类对象的成员变量,而另一个类没有。
- 按钮(Button)
- 页面(Form)
比如:我有一个页面,里面包含一个按钮,但是按钮不能包含页面。
用箭头指向关联的类
class Form{
public Button button;
}
class Button{
}
自关联
有一些类需要在自身类中声明以自身类作为类的属性,这就叫做自关联。
class Person{
public Person person;
}
多重性关联
表示两个关联对象中的数量的关系,在uml中,可以在关联的直线上用数字表示或者数字的范围表示。
表示列表:
数字 | 关系 |
---|---|
1…1 | 表示另一个类的一个对象只与该类的一个对象有关系 |
0…* | 表示另一个类的一个对象与该类的零个或多个对象有关系 |
1…* | 表示另一个类的一个对象与该类的一个或多个对象有关系 |
0…1 | 表示另一个类的一个对象没有或只与该类的一个对象有关系 |
m…n | 表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n) |
比如一个页面可以有零个或多个按钮,而按钮只能有一个页面
class Fonr{
public Button[] buttons;
}
class Button{
}
聚合关系
表示整体和部分的关系。在聚合关系中,成员对象也是整体的一部分,但是成员对象可以脱离整体独立存在。在UML中,聚合关系用带空心菱形的直线表示。
例如:汽车和汽车发动机,汽车发动机(Engine)是汽车(Car)的一部分也可以独立出来
class Car{
private Engine engine;
//构造注入
public Car(Engine engine){
this.engine = engine;
}
//设置注入
public void setEngine(Engine engine){
this.engine = engine;
}
}
class Engine{
}
组合关系
也是表示整体和部分关系,和上面不一样的是整体对象可以控制成员对象的生命周期,一旦整体对象不存在了那么成员对象也会不存在,简单来说就是一体的。在UML中,组合关系用带实心菱形的直线表示。
例如:人的头(Head)与嘴巴(Mouth),头不在了嘴巴自然不在了。
class Head{
private Mouth mouth;
public Head() {
mouth = new Mouth();
}
}
class Mouth{
}
类与类之间的关联
依赖关系
表示一个事物使用另一个事物,依赖关系体现在某个类的方法使用另一个类的对象作为参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
例如:在一个页面中需要一个按钮进行跳转页面,这样就形成了一种依赖关系
class Fonr{
public void get(Button button){
button.show();
}
}
class Button{
public void show(){
}
}
泛化关系
泛化关系就是用子类继承父类,在继承父类的属性和方法同时子类也声明了其他方法和属性,泛化关系用带空心三角形的直线来表示。
例如:人(Person)类拥有名字年龄,还能走路。由学生(Student)类和老师(Teacher)类去继承人类也就拥有了名字和年龄,不过学生还有学号还要上学而老师也有教师编号和教课,还要在学生类和老师类中加上。
class Person{
String name;
int age;
public void walk(){
System.out.println("走路");
}
}
class Student extends Person{
public int strId;
public void get(){
System.out.println("上学");
}
}
class Teacher{
public int teaId;
public void get(){
System.out.println("教课");
}
}
时序图
时序图的元素:角色(Actor)、对象(Object)、生命线(LifeLine)、控制焦点(Activation)、消息(Message)、自关联消息、组合片段
角色
系统角色,可以是人或者其他系统,子系统。
以一个人型模板表示
对象
对象代表时序图中的对象在交互中所扮演的角色,位于时序图顶部和对象代表对象实例类角色。
对象一般包含以下三种命名方式:
第一种方式包含对象名和类名。
第二种方式只显示类名不显示对象名,即为一个匿名对象。
第三种方式只显示对象名不显示类名。
生命线
生命线代表时序图中的对象在一段时期内的存在。时序图中每个对象和底部中心都有一条垂直的虚线,这就是对象的生命线,对象间 的消息存在于两条虚线间。
控制焦点
控制焦点代表时序图中的对象执行一项操作的时期,在时序图中每条生命线上的窄的矩形代表活动期。它可以被理解成C语言语义中一对花括号“{}”中的内容。
消息
消息是定义交互和协作中交换信息的类,用于对实体间的通信内容建模,信息用于在实体间传递信息。允许实体请求其他的服务,类角色通过发送和接受信息进行通信。
-
同步消息(Synchronous Message)
消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。以一条实线+实心箭头表示。 -
异步消息(Asynchronous Message)
消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。以一条实线+大于号表示。 -
返回消息(Return Message)
返回消息表示从过程调用返回。以小于号+虚线表示。
自关联消息
表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。以一个半闭合的长方形+下方实心剪头表示
例子:
组合片段
组合片段用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。组合片段共有13种,名称及含义如下:
常用的组合片段有:
a. 抉择(Alt)
抉择用来指明在两个或更多的消息序列之间的互斥的选择,相当于经典的if…else…。
抉择在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。
b. 循环(Loop)
片段重复一定次数。 可以在临界中指示片段重复的条件。
c. 并行(Par)
用例图
用例图的定义
由参与者(Actor)、用例(Use Case)以及它们之间的关系构成的用于描述系统功能的动态视图称为用例图。要在用例图上显示某个用例,可绘制一个椭圆,然后将用例的名称放在椭圆的中心或椭圆下面的中间位置。
要在用例图上绘制一个参与者(表示一个系统用户),可绘制一个人形符号。参与者和用例之间的关系使用带箭头或者不带箭头的线段来描述,箭头表示在这一关系中哪一方是对话的主动发起者,箭头所指方是对话的被动接受者
在用例图中会用到注释,可以描述的更清楚
用例图的元素
参与者(Actor)
表示应用程序或系统进行交互的用户、组织或外部组织,用一个小人表示。
用例(Use Case)
用例就是外部可见系统功能,对系统的功能进行描述,用椭圆表示.
子系统(Subsystem)
用来展示系统的一部分功能
关系
用例图的关系:关联、泛化、包含、扩展
如表下:
关系类型 | 说明 | 表示符号 |
---|---|---|
关联 | 参与者与用例间的关系 | ——————————> |
泛化 | 参与者之间和用例之间的关系 | ——————————▷ |
包含 | 用例之间的关系 | -------------------------------> |
扩展 | 用例之间的关系 | -------------------------------> |
关联(Association)
表示参与者与用例之间的通信,任何一方都可发送或接受消息
(箭头指向:指向消息接收方)
泛化(Inheritance)
就是通常理解的继承关系,子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。
(箭头指向:指向父用例)
包含(Include)
包含关系用来把一个较复杂用例所表示的功能分解成较小的步骤。
(箭头指向:指向分解出来的用例)
扩展(Extend)
扩展关系是指用例功能的延伸,相当于为基础用例提供一个附加功能。
(箭头指向:指向基础用例)
依赖(Dependency)
以上4种关系,是UML定义的标准关系。但VS2010的用例模型图中,添加了依赖关系,用带箭头的虚线表示,表示源用例依赖于目标用例。
(箭头指向:指向被依赖的用例)