什么是UML类图
UML是统一建模语言[Unified Modeling Language]
,可以表示对象/类之间的关系、结构、层次、属性等。
类之间的关系
泛化(Generalization)
泛化关系其实就是Java中的继承,继承就没啥好说的了,OOP的基础,对象关系中耦合度最高,子类持有父类所有属性。
以空心箭头的实线来表示,从子类指向父类,是is-a
关系。若A是B的子类,那么A肯定属于B的一种,B包括A,A在B之内。
eg:狗是动物的一种,所以狗是动物的子类。狗继承自动物,即狗->动物。
@startuml
class Animal {
-String name;
-int age;
+void dead();
+void birth();
}
class Dog extends Animal{
-String name;
-int age;
+void dead();
+void birth();
}
@enduml
实现(Realization)
实现关系其实也和Java中的实现是一样的。
以空心箭头的虚线来表示,由实现类指向抽象类。即Java中的实现类impl
与接口interface
。
eg:每个动物拥有行为,但是不同动物之间的行为又不尽相同,所以抽象出接口Action
。由子类去实现这个接口来定义具体的行动方式。
@startuml
interface Action {
+void move();
+void sleep();
+void eat();
}
note bottom of Bird : Move is fly, sleep in tree, eat worm.
class Bird implements Action {
+void move();
+void sleep();
+void eat();
}
note bottom of Horse : Move is run,sleep standing, eat grass.
class Horse implements Action {
+void move();
+void sleep();
+void eat();
}
note bottom of Flash : Move is swim,sleep in water, eat worm.
class Flash implements Action {
+void move();
+void sleep();
+void eat();
}
@enduml
依赖(Dependency)
依赖关系是对象之间最弱的一种关联方式,是use-a
关系,它属于临时性关系,一般在运行时产生,并且可能随着状态的变化,依赖关系也有可能变化,即临时知道对方后,还使用对方的属性。依赖也是有方向的,但是双向依赖是一种非常糟糕的关系,不应该出现,因此我们要保证单向依赖,防止双向依赖。
它以箭头虚线表示,由依赖者指向被依赖中。
eg:A类中使用了B类的静态成员变量或者调用了B类的静态方法。过河的时候,人需要坐船,过完河就不需要用船了。
Person..>Boat
关联(Association)
关联关系描述了不同类对象之间的结构。一般用于定义不同对象之间天然的、静态的结构关系,属于强依赖关系。
它以直线表示,并且关联关系默认是不强调方向的,表示对象间相互知道。如果强调了方向,则由使用类指向被关联的类。
多数情况下由常识、客观因素等决定。
eg:1. 小明参军了,所以他是一名军人。小王在学校读书,所以他是一名学生。
学生-老师
聚合(Aggregation)
聚合在新华字典中的意思是聚集到一起。所以聚合关系表示整体由部分构成,是has-a
的关系,父类包含子类,子类也可以独立于父类存在。所以整体与部分的关系较强于一般关联,但并非强依赖。即使整体不存在了,部分仍然存在,不因此消失。
它以空心菱形箭头的实线表示,从部分指向整体。
eg:项目组解散了,员工依然存在。班级可以有学生,也可以没有学生,毕业了班级就解散了,但是学生这些人还会继续存在着。雁群由大雁组成,但是雁群解散后或大雁脱离雁群也能存货。
Student -o Class
组合(Composition)
组合的字面意思就是把独立的东西组织成一个整体。但是这种关系是contains-a
的关系,是一种强依赖关系。组合类负责被组合类的生命周期,部分不能脱离整体存在。
它以实心菱形箭头的实线表示,从部门指向整体。
eg:公司倒闭了,项目组自然也解散了。学校没有了,自然也不会有班级这个概念了。
Team -* Company
关系总结
- 聚合和组合其实也是关联的一种,无法直接区别,只能从语义上进行区分。
- 依赖关系程度由强到弱:泛化=实现>组合>聚合>关联>依赖。
什么是时序图
时序图(Sequence Diagram),也叫序列图,循序图,是一种UML行为图,可以表示用例的行为顺序。
其主要建模元素有以下几种:
1. 角色Actor
2. 对象Object
3. 生命线Lifeline
4. 控制焦点Focus Of Control
5. 消息Message
@startuml
actor 用户
boundary 客户端
control 接口
database 数据库
用户 -> 客户端: 进行登录
客户端 -> 接口: 发送请求
接口 -> 数据库:查询数据
数据库 -> 接口:返回数据
接口 ->客户端:返回结果
客户端->用户:展示页面
@enduml