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}
}
对应的图形
组合
区别与聚合,组合的整体和部分之间不能独立存在。
如: 人由手、脚、头等身体部位组成,但是手离开人和人离开手都不能做相应的方法。
表示图形: 实心菱形 + 实线箭头。
这个我就不画了。