类图
abstract class ParentClass {
int field1;
static char field2;
abstract void methodA();
double methodB() {
return 0.0;
}
}
class ChildClass extends ParentClass{
@Override
void methodA() {
}
static void methodC(){
}
}
该图展示了ParentClass和ChildClass两个类之间的关系,其中空心箭头表明了两者之间的层次关系。箭头由子类指向父类。这是表示继承的箭头。
图中的长方形表示类,长方形内部被横线自上而下分为了如下3哥区域。
- 类名
- 字段名
- 方法名
其他信息的表示方式
- abstract类的名字以斜体方式显示
- static字段的名字带有下划线
- abstract方法的名字以斜体方式显示
- static方法的名字带有下划线
可见性
- “+”表示public方法和字段
- “-”表示private方法和字段
- “#”表示protected方法和字段
- “~”表示只有同一包中的类才能访问的方法和字段
接口与实现
interface Printable{
void print();
void newPage();
}
class PrintClass implements Printable{
@Override
void print(){
}
@Override
void newPage(){
}
}
带有空心三角的虚线箭头代表了接口与实现类的关系,箭头从实现类指向接口。
聚合
class Color{
}
class Fruit{
Color color;
}
class Basket{
Fruit[] fruits;
}
只要在一个类中持有另外一个类的实例——无论是一个还是多个——它们之间就是聚合关系。
在UML中,我们使用带有空心菱形的实线表示聚合关系,我们可以将聚合关系想象为在空心菱形的器皿中装有其他物品。
关联
时序图
class Client{
Server server;
void work(){
server.open();
server.print("Hello");
Server.close();
}
}
class Server{
Device device;
void open(){
}
void print(String s){
device.write(s);
}
void close(){
}
}
class Device{
void write(String s){
}
}
该图中共有三个实例,如图中最上方的3个长方形所示。在长方形内部写有类名,类名跟在冒号之后,并带有下划线。
如有需要,还可以在冒号之前表示出实例名。
每个实例都带有一条向下延伸的虚线,我们称之为生命线。我们可以理解为时间从上向下流逝,上面是过去,下面是未来。生命线仅存在于实例的生命周期内。
在生命线上,有一些细长的长方形,它们表示实例处于某种活动中。
带有open字样的箭头。黑色实线箭头表示方法的调用。
虚线箭头表示返回open方法。
时序图的阅读顺序是沿着生命线从上至下阅读。