1.概述
UML是什么?书面化一点的说法是:
UML(Unified Modeling Language),统一建模语言,是一种用于软件工程和系统设计的标准图形化建模语言。它旨在帮助开发人员、设计师和分析师在软件开发过程中更好地理解、设计、交流和文档化系统。UML提供了一组图形符号和规则,可以用于表示软件系统的各个方面,从需求分析到系统设计、实现和测试。
直白点说人话就是:
UML用图形和符号的方式来帮助描述软件系统,让人更加容易看懂整个系统是什么样子的。
正如我们知道的,软件系统是很庞大且复杂的一个东西,想要描述清楚,肯定不可能是一个维度就能描述的很准确,所以UML从几种维度,每个维度提出了一系列的图来用于描述软件系统,包括:
- 用例图
- 静态结构
- 类图
- 组件图
- 部署图
- 动态行为
- 状态图
- 活动图
- 时序图
以上的图在各类型的软件系统的规范化描述中用到的频率都很高,但是不一定都会用到,选取其中需要的图来描述清楚系统即可。这其中UML的类图,是最为常用的,因为描述类关系就是描述好实体间的关系,在当今面向对象的设计和编程为主的系统开发中,这是基础中的基础。本文将先讲UML类图,下一篇文章会一起讲其它的图。
UML类图总结起来就是,提供了一套图形和符号的标准,用来描述系统中各个类之间的关系,以及它们的属性和方法。
2.权限
UML类图中以符号的方式来描述访问权限,有以下权限:
权限 | 符号 | 说明 |
public | + | 公用的,该属性对所有类可见 |
protected |
# | 受保护的,对该类的子孙可见 |
private |
- | 私有的,只对该类本身可见 |
package |
~ | 包的,只对同一包声明的其他类可见 |
3.关系
3.1.连线关系
3.2.依赖
A类中使用到了B类,A和B就产生了依赖关系,下面以一个常见的service中调用dao为例:
public class UserServiceImpl{ private UserDao userDao; public User queryById(int id) {return null;} }
3.3.泛化(继承)
泛化其实指的是is a的关系,A is a B,A和B之间就是泛化关系,在面向对象的编程里,只有继承才能实现这种效果,所以泛化可以理解为就是继承。
public class BaseDao { protected void insert(User user){}; protected void delete(User user){}; protected void update(User user){}; protected void query(User user){}; }
public class UserDao extends BaseDao{ User queryById(int id){ return null; } }
3.4.实现
实现是继承的特例:
接口:
public interface UserService { User queryById(int id); }
实现类:
public class UserServiceImpl implements UserService{ private UserDao userDao; @Override public User queryById(int id) { return userDao.queryById(id); } }
3.5.关联
关联关系,即类与类之间的联系,是依赖关系的特例。
这就是一种关联关系:
为什么说是依赖关系的特例喃,是因为要实现一个driver驾驶一辆car,那么肯定是要driver类持有一个car对象,也就是依赖一个car。其实关联关系也可以用依赖关系的箭头来替代,只是用关联关系表示,能将实体在业务上的关系描述的更清楚,所以到底是用依赖关系表示还是关联关系表示,这个具体情况具体抉择。
3.6.聚合
聚合关系是依赖关系的特例,依赖之间可以分开,即被依赖的类和依赖它的类不同生共死,也就是说被依赖的类的实体需要从外界传入。
3.7.组合
组合关系是依赖关系的特例,依赖之间不可以分开,即被依赖的类和依赖它的类同生共死,也就是说被依赖的类的实体就在依赖它的实体内部生老病死,不需要从外界传入。