解释

一个专门的图形表示的语言来管理和维护对象。UML提供了一套图形标准,通过使用UML可以让编程人员能够阅读和交流系统架构图、设计图。

例子

1.两个类之间的线条箭头代表对象之间的关联关系

如下图,代表类Student通过major属性关联了类Major。这两个类是在同一个包中,如果不在同一个包中,就需要在类Student中用import导入类Major,否则会报错“找不到符号”。
student_major_2.svg

2.访问控制修饰符用UML类图表示

下图中,正方形表示private,圆形表示public,菱形表示protected。需要注意的是修饰符只和形状有关,和颜色以及是否是实心没有关系,因为不同的UML软件颜色有可能不同。
user1.svg
写成代码如下:

  1. package com.qq.model;
  2. public class User {
  3. private String id;
  4. private String name;
  5. public void printName(){
  6. }
  7. }

3.UML 类图表示封装

封装就是把对象的属性隐藏起来,一般使用private控制符,这个时候救出现了getter、setter的方法规范。如下图表示。
setter3.svg
写成代码如下:

  1. public class User{
  2. private String id;
  3. //定义了一个关于名称的实例变量
  4. private String name;
  5. public String getId(){
  6. return this.id;
  7. }
  8. public void setId(String id){
  9. this.id = id;
  10. }
  11. /**
  12. * 获取 name 的值
  13. */
  14. public String getName(){
  15. return this.name;
  16. }
  17. /**
  18. * 设置 name 的值
  19. */
  20. public void setName(String name){
  21. this.name = name;
  22. }
  23. }

4.UML表示常量

如下,常量的表示就是有一条下划线。
userservice1.svg
代码如下:

  1. public static String USER_KEY = "m_key";
  2. //有时我们会加一个关键字final,代表这个变量不可以被再修改来保证代码安全
  3. public static final String USER_KEY = "m_key";

5.UML表示继承

如下图所示,这个三角形箭头就表示下面的三个类继承父类Animal。
dog2.svg

6.UML接口的定义

下图中,紫色的圆圈里面一个大写的“I”就表示interface接口。定义了一个RoleService接口类,依赖Role类。
RoleService.svg
代码如下:

  1. package com.youkeda.service;
  2. import com.youkeda.model.Role;//不再一个包中就需要导入
  3. import java.util.ArrayList;
  4. public interface RoleService {
  5. public void addRole(Role role);
  6. public ArrayList<Role> getRoles();
  7. }

8.UML接口实现图

下图中,RoleServiceImpl实现了RoleService接口。
RoleService1.svg
代码如下:

  1. package com.youkeda.service.impl;
  2. import com.youkeda.service.RoleService;
  3. import com.youkeda.model.Role;
  4. import java.util.ArrayList;
  5. //实现类要实现接口中的所有方法
  6. public class RoleServiceImpl implements RoleService{
  7. private static ArrayList<Role> ROLES = new ArrayList<>();
  8. public void addRole(Role role){
  9. }
  10. public ArrayList<Role> getRoles(){
  11. return null;
  12. }
  13. }

9.抛出异常的表示

UserServiceException.svg
代码如下:

  1. package com.youkeda.service;
  2. public interface UserService {
  3. //在这里抛出,调用者需要捕获
  4. User login(String userName,String password) throws NullPointerException;
  5. }

10.内部类UML表示

InnerTool.svg
代码如下:

  1. package com.youkeda.util;
  2. public class OuterUtil {
  3. public class InnerTool { // 内部类
  4. public int add(int a,int b){
  5. return a+b;
  6. }
  7. }
  8. private InnerTool tool = new InnerTool();
  9. public int add(int a,int b,int c){
  10. return tool.add( tool.add(a,b) , c );
  11. }
  12. }

11.抽象类的UML图

weapon.svg
代码如下:

  1. // 定义一个武器的抽象类
  2. public abstract class Weapon{
  3. // 抽象方法:攻击
  4. public abstract void attack();
  5. }
  1. public class GoldenBar extends Weapon{
  2. public void attack(){
  3. System.out.println("blablabla...");
  4. }
  5. }

12.对象的关系UML图表示

1)聚合关系的UML图(注意箭头)
aggregation.svg
2)组合关系的UML图
composition.svg
3)依赖关系的UML图(一个类的引用作另一个类的方法参数)
dependency.svg
4)继承/实现关系的UML图(子类继承父类/实现类实现接口)
bar.svg
5)关联关系(例子1)
UML类图 - 图15