1.类图的画法
类
整体是个矩形,第一层类名,第二层属性,第三层方法。
- + :public
- - : private
- # : protected
- 空格: 默认的default
对应的类写法。
public class Student {
public String name;
public Integer age;
protected Integer cardId;
Integer mark;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
抽象类
对比类,就是第1层类名和第3层 方法名用斜体表示。
接口
顶层多了<<interface>>字段,其余好像没啥区别了。
包
里面就是对应包的名字。
对应java写法。
package com.zgxt.demo.domain;
public class Student {
}
2.类图的关系
如果说,类图为了表现java中的类、接口等属性方法,那么类图的关系就代表java中中类、接口之间的关系。
泛化关系
泛化就是Java中的继承。
表示图形:实线 + 空心三角
对应的类关系图。
实现关系
实现就是java中的实现。
表示图形:虚线 + 空心三角。
依赖关系
如果一个类失去一个类代码无法编译,那么说这个类依赖于这个类。
具体表现为:成员变量、局部变量、方法形参,方法返回值。
表示图形:虚线箭头。
对应的类关系。
// 小孩
class Child{
private Hand hand; // 依赖关系:成员变量也成为关联
public void riding(Foot foot){ // 方法形参
Bike bike = new Bike(hand,foot); // 局部变量
}
}
关联关系
2个类依赖关系,并且是依赖中的成员变量,则存在关联关系。
而且再细分,感觉跟MySQL中的外键约束,表设计有异曲同工之妙。
MySQL FOREIGN KEY 外键约束 (w3schools.cn)
表示图形:实线箭头、横线箭头。
单向关联
双向关联
聚合
是在依赖的及基础上(成员变量),但是和关联表现的层级不同,关联表示同层级之间,而聚合表示整体和部分层级之间。
另外: 整体和部分之间可以相互独立存在。
如: 一个公司由老板和员工组成。那么公司和员工关系就是聚合。而老板和员工的关系就是关联。
表示图形:空心菱形 + 箭头。
代码:一个Computer类需要Boss类和Employee类,聚合。
而Employee类中的businessTrip[出差]() 方法需要Boss的同意,这就是关联。
// 聚合和关联
class Computer{
private Boss boss; // 聚合
private Employee employee; // 聚合
}
class Boss{
}
class Employee{
private Boss boss; // 关联
public boolean businessTrip(){
// boss同意 return true
// boss不同意 return false
}
}
对应的图形
组合
区别与聚合,组合的整体和部分之间不能独立存在。
如: 人由手、脚、头等身体部位组成,但是手离开人、人离开手都不能做相应的方法。
表示图形: 实心菱形 + 实线箭头。
这个我就不画了。