UML类图
UML 基本介绍
- UML——Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果
- UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如下图
- 使用UML来建模,常用的工具有 RationalRose , 也可以使用一些插件来建模
因为不会URML类图软件的使用,索引参考了该博客进行学习:参考博客
StartUML的使用
目前官网http://staruml.io上的最新版本是4.X系列,可进入官网进行下载。下载后理论上是要付费使用的,但是不付费也不太影响使用。我用的是新版本,可能与有的老版本不太一致
说明:默认打开starUML后,会默认进入类图模式,各模块区域功能如下:
1.菜单栏: 最上方是菜单栏,新建工程啥的,具体不详细介绍;
2.已经建类图列表: 左上方列表显示已经创建的图,比如类图,时序图等;
3.工具箱: 左下方工具箱,显示当前类型的图可以使用的工具,主要是各种连线或者图形,是最常用的区域;
4.绘图区域: 中间白色格子区域,就是绘图区域;
5.工程区: 右上方区域是工程区,显示工程,model和各种已经绘出的图形;
6.属性编辑区域: 当画出来一个图形或者一根线时,这个区域会显示这个图形的各种属性,可以修改;
画图种类介绍
- 类图(Class Diagram)
打开starUML工具时,默认进入的就是类图模式,右上角工程区如下显示:
默认创建了一个名字为【Untitled】的工程,工程下面有个模块,名字叫【Model】,模块下有个类图,名字叫【Main】。这3个名字是默认的,都可以修改为你自己想要的名字。
比如修改工程名,只需要鼠标选中工程名字,然后右下方属性编辑区域会如下显示:
输入你想要的名字即可。模块和类图名字,用同样的方法也可以修改。
创建类图
工程区-》选择Model-》右键-》选择【Add Diagram】,然后如下图:
接下来我们,就可以画类图了,现在左下角工具箱显示了在类图模式下,可以使用的工具列表:
类组件的基本操作介绍:
单击选择Class,至工作区域内单机左键,即可创建一个class实例。创建实例后,周围会出现一堆,功能按钮,去描述这个类,如图所示。图后会有介绍各个租价功能的介绍。
功能介绍:
- 用来标识Class的可见性(默认为public)
- 用来添加note的,比如:类的说明
- 增加类的属性
- 增加类的操作方法。
- 增加Reception
- 增加子类
- 增加父类
- 添加已有的接口
- 添加需要的接口
- 添加关联
- 添加聚合
- 添加组合
- 添加端口
- 添加部件
入门案例
`创建一个User类,并且用URML类图描述出来
代码:
/** 用户实体类
* @author compass
* @version 1.0
* @date 2021-07-05 18:59
*/
public class User {
int id;
private String username;
public String password;
public String email;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
1.泛化关系|继承Generalization)
泛化关系实际上就是继承关系,他是依赖关系的特例
UML图中实现泛化管理的描述,在类图中使用带空心三角箭头的实线表示,箭头从子类、子接口指向父类、父接口。具体如图所示。
/** 泛化关系|继承(Generalization)
* @author compass
* @version 1.0
* @date 2021-07-05 19:30
*/
public abstract class DaoSupport{
public void save(Object entity){
}
public void delete(Object id){
}
}
class PersonService extends DaoSupport{
}
2.实现关系(Implementation)
实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。在类图中使用带空心三角箭头的虚线表示,箭头从实现类指向接口。如图。
/** 实现关系(Implementation)
* @author compass
* @version 1.0
* @date 2021-07-05 19:46
*/
public interface OrderDao {
int deleteById(String id);
}
class OrderDaoImpl implements OrderDao{
@Override
public int deleteById(String id) {
return 0;
}
}
3.依赖关系(Dependence)
只要是在类中用到了对方, 那么他们之间就存在依赖关系。 如果代码中没有对方, 连编绎都通过不了 。
依赖关系小结:类中用到了对方,他们就存在依赖关系
类的成员属性
方法的返回类型
方法接收的参数类型
方法中使用的局部变量
/**
* @author compass
* @version 1.0
* @date 2021-07-05 19:12
*/
public class PersonServiceBean {
private PersonDao personDao;//类
public void save(Person person){}
public IDCard getIDCard(Integer personId){
return null;
}
public void modify(){
Department department = new Department();
}
}
class PersonDao{}
class IDCard{}
class Person{}
class Department{}
聚合
4.关联关系(Association)
关联关系是一种拥有的关系, 它使一个类知道另一个类的属性和方法;
如:老师与学生
关联关系又分为单项关联和双向关联,关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头
,单向的关联有一个箭头。
单项关联:
/**
* 关联关系 单项关联
* @author compass
* @version 1.0
* @date 2021-07-05 22:54
*/
// 单向一对一关系
public class Student {
private Teacher teacher;
}
class Teacher{
}
URML类图
双向关联关系
// 双向一对一关系
public class Student {
private Teacher teacher;
}
class Teacher{
private Student student;
}
URML类图
自关联(自己跟自己关联)
// 自关联关系
class Employee{
// 员工id
int employeeId;
// 员工的上级领导Id
String leadId;
}
**Dirtected Association:当向关联**
**Association: 相互关联**
5.聚合关系(Aggregation)
- 聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。 聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。
- 如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的, 使用带空心菱形的实线来表示:
/** 聚合关系
* @author compass
* @version 1.0
* @date 2021-07-05 23:14
*/
public class Computer {
private Mouse muse; // 鼠标可以和Computer分离
private Monitor monitor;// 显示器可以和Computer分离
public void setMouse(Mouse muse) {
this.muse = muse;
}
public void setMonitor(Monitor monitor) {
this.monitor = monitor;
}
}
class Monitor{
}
class Mouse{
}
6.组合关系(Composition)
- 组合关系:也是整体与部分的关系,但是整体与部分不可以分开。
- 在程序中我们定义实体: Person与IDCard、 Head,那么 Head 和Person 就是组合关系, IDCard 和 Person 就是聚合关系。
- 但是如果在程序中Person实体中定义了对IDCard进行级联删除,即删除Person时连同IDCard一起删除, 那么IDCard 和 Person 就是组合了
// 组合关系
class Person {
private IDCard card; // 聚合关系
private Head head = new Head(); // 组合关系
}
class Head{
}
class IDCard{
}