UML类图和关系

  • 类图 - 依赖关系(Dependence)
    • **应用案例**
      • **Java代码**
      • **UML类图 + PlantUML代码**
    • **小结**
  • 类图 - 泛化关系(generalization)
    • **应用案例**
      • **Java代码**
      • **UML类图 + PlantUML代码**
    • **小结**
  • 类图—实现关系(Implementation)
    • **应用案例**
      • **Java代码**
      • **UML类图 + PlantUML代码**
  • 类图—关联关系(Association)
    • **应用案例**
      • **Java代码**
      • **UML类图 + PlantUML代码**
  • 类图—聚合关系(Aggregation)
    • **应用案例**
      • **Java代码**
      • **UML类图 + PlantUML代码**
    • **小结**
  • 类图—组合关系(Composition)
    • **应用案例1**
      • **Java代码**
      • **UML类图 + PlantUML代码**
    • **应用案例2**
      • **Java代码**
      • **UML类图 + PlantUML代码**

注释:资料根据尚硅谷设计模式课程中的UML使用整理,老师使用的是eclipse的插件手动画的,这里使用idea的PlantUML自动生成类图

UML——Unified modeling language UML (统一建模语言),是一种用于软件系统 分析和设计的语言工具,它用于帮助软 件开发人员进行思考和记录思路的结果 。UML本身是一套符号的规定,就像数学 符和化学符号一样,这些符号用于描 述软件模型中的各个元素和他们之间的 关系,比如类、接口、实现、泛化、依 赖、组合、聚合等

类图 - 依赖关系(Dependence)

只要是在类中用到了对方,那么他们之间就存在依赖关系。

应用案例

Java代码

public class PersonDao{}
public class IDCard{}
public class Person{}
public class Department{}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();}
}

UML类图 + PlantUML代码

@startumlclass PersonDao
class IDCard
class Person
class Department
class PersonServiceBean{- PersonDao personDao+ void save(Person person)+ IDCard getIDCard(Integer personid)+ void modify()
}
PersonDao <.. PersonServiceBean
IDCard <.. PersonServiceBean
Person <.. PersonServiceBean
Department <.. PersonServiceBean@enduml

小结

  1. 类中用到了对方
  2. 如果是类的成员属性
  3. 如果是方法的返回类型
  4. 是方法接收的参数类型
  5. 方法中使用到(局部变量)

类图 - 泛化关系(generalization)

泛化关系实际上就是继承关系,他是依赖关系的特例

应用案例

Java代码

public abstract class DaoSupport {public void save(Object entity) {}public void delete(Object id) {}
}
public class PersonServiceBean extends DaoSupport{}

UML类图 + PlantUML代码

 @startumlabstract class DaoSupport{+ void save(Object entity)+ void delete(Object id)
}
class PersonServiceBeanDaoSupport <|-- PersonServiceBean@enduml

小结

  1. 泛化关系实际上就是继承关系
  2. 如果A类继承了B类,我们就说A和B存在泛化关系

类图—实现关系(Implementation)

实现关系实际上就是A类实现B接口,他是依赖关系的特例

应用案例

Java代码

public interface PersonService {public void delete(Interger id);
}
public class PersonServiceBean implements PersonService {public void delete(Integer id) {}
}

UML类图 + PlantUML代码

@startuml
interface PersonService
class PersonServiceBeanPersonService <|... PersonServiceBean
@enduml

类图—关联关系(Association)

  1. 关联关系实际上就是类与类之间的联系,他是依赖关系的特例
  2. 关联具有导航性:即双向关系或单向关系
  3. 关系具有多重性:如“1”(表示有且仅有一个),“0…”(表示0个或者多个), “0,1”(表示0个或者一个),“n…m”(表示n到 m个都可以),“m…*”(表示至少m 个)。

应用案例

Java代码

public class Person {private IDCard idCard;
}
public class IDCard {private Person person;
}

UML类图 + PlantUML代码

@startuml
class Person{- IDCard idCard
}
class IDCard{- Person person
}
Person <-- IDCard
Person --> IDCard
@enduml

类图—聚合关系(Aggregation)

聚合关系表示的是整体和部分的关系整体与部分可以分开聚合关系是关联关系的特例,所以他具有关联的导航性与多重性

应用案例

如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个 配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示:

Java代码

public class Monitor {}
public class Mouse {}
public class Computer {private Mouse mouse;//鼠标可以和Computer分离private Monitor monitor;//显示器可以和Computer分离public void setMouse(Mouse mouse) {this.mouse = mouse;}public void setMonitor(Monitor monitor) {this.monitor = monitor;}
}

UML类图 + PlantUML代码

@startuml
class Monitor
class Mouse
class Computer{- Monitor Monitor- Mouse mouse
}
Computer o-- Monitor
Computer o-- Mouse@enduml

小结

如果A类使用了B类但是不是必须使用到B类,并不是创建A时B类必须被创建/马上被创建(并不是同生共死)。那么他们就是聚合关系

类图—组合关系(Composition)

组合关系:也是整体与部分的关系,但是整体与部分不可以分开

再看一个案例:在程序中我们定义实体:Person与IDCard、Head, 那么 Head 和 Person 就是 组合,IDCard 和 Person 就是聚合。

应用案例1

Java代码

public class IDCard{}
public class Head{}public class Person{//IDCard并不是必须存在/实例化/创建的,是聚合关系private IDCard idCard;//Person 类创建的时候,Head类就会被实例化那么他们是同生共死的关系,他们就是组合关系private Head head = new Head();
}

UML类图 + PlantUML代码

@startumlclass IDCard
class Head
class Person{- IDCard idCard- Head head = new Head()
}Person o-- IDCard
Person *-- Head@enduml

应用案例2

Java代码

public class Mouse {}
public class Monitor {}///Computer被创建时,Mouse和Monitor会马上被new/实例化出来,组合关系
public class Computer {private Mouse mouse = new Mouse();//鼠标和Computer不能分离private Monitor monitor = new Monitor();//显示器和Computer不能分离public void setMouse(Mouse mouse) {this.mouse = mouse;}public void setMonitor(Monitor monitor) {this.monitor = monitor;}
}

UML类图 + PlantUML代码

@startumlclass Monitor
class Mouse
class Computer{- Monitor Monitor = new Monitor()- Mouse mouse = new Mouse)(
}Computer *-- Monitor
Computer *-- Mouse@enduml

UML类图和关系--idea使用PlantUML插件画类图相关推荐

  1. Mac下安装 PlantUML 插件画时序图、UML类图

    1. 安装 PlantUML 插件 安装完 PlantUML 就可以画时序图.流程图了. 但是,不能画 UML 类图,还少了一个图形渲染的工具 Graphviz. 2.在 Mac 上安装 Graphv ...

  2. 使用PlantUml插件画类图

    一.PlantUml简介 二.类与类之间关系汇总整理 三.PlantUml类图语法介绍 四.类图 五.类图 PlantUml 代码 本文介绍如何使用 PlantUml 插件来画 Uml 图 一.Pla ...

  3. AndroidStudio插件之PlantUML integration 画时序图

    编写程序文档,往往需要画一些核心时序图,下面介绍一款AndroidStudio 的插件PlantUML integration,可用于画时序图. 1.打开AndroidStudio,依次点击Andro ...

  4. 使用PlantUML插件来做图

    我们日常在写开发文档的时候需要画一些时序图或者流程图来做逻辑说明.之前一直使用亿图之类的图形化界面直接画,我的导师就建议我使用PlantUML,于是简单学习了一下它的语法,发现用起来感觉比直接画省事多 ...

  5. 用计算机绘制函数图象教案,信息技术应用 用计算机画函数图象教学设计(教案)...

    庞丹 地区: 四川省 - 广元市 - 昭化区 学校:广元民盟烛光初级中学 共1课时 信息技术应用 用计算机画函数图象">信息技术应用 用计算机- 初中数学       人教2011课标 ...

  6. iMeta | 复杂热图(ComplexHeatmap)可视化文章最新版,画热图就引它

    点击蓝字 关注我们 复杂热图可视化 https://doi.org/10.1002/imt2.43 PROTOCOL ●2022年8月,德国癌症研究中心顾祖光在iMeta在线发表了题为"Co ...

  7. idea安装plantuml插件画流程图

    1.idea插件菜单栏搜索"plant",安装如下两项: 2.安装完成之后重启idea,然后新建一个文件,以.puml结尾,如login.puml 3.开始编写代码流程图吧,如下: ...

  8. 用计算机绘制函数图象教案,信息技术应用 用计算机画函数图象优质课教案设计...

    李微 地区: 吉林省 - 通化市 - 辉南县 学校:辉南县朝阳镇高集岗中学 共1课时 信息技术应用 用计算机画函数图象">信息技术应用 用计算机- 初中数学       人教2011课 ...

  9. 用计算机绘制函数图象教案,信息技术应用 用计算机画函数图象教案设计(一等奖)...

    王俊峰 地区: 湖北省 - 潜江市 - 学校:湖北省潜江市张金镇初级中学 共1课时 信息技术应用 用计算机画函数图象">信息技术应用 用计算机画- 初中数学       人教2011课 ...

最新文章

  1. linux 列出特定时间内修改的文件
  2. upload-labs-master文件上传靶场第七关详解
  3. C语言再学习 -- 再论数组和指针
  4. jQuery实现星星评分功能
  5. 根据id删除localstorage数据_原生js利用localstorage实现简易TODO list应用
  6. Java动态追踪技术--BTrace
  7. graphpad7.04多组比较p值_同是折线图为何你却这么优秀,这才是多组数据作图应该有的样子...
  8. 坑爹的uint32_t
  9. mysql proxy 多主_mysql多主多从架构与mysql-proxy读写分离
  10. QQ音乐全新上线HiRes高解析音质 听歌体验再升级
  11. python UI/API 环境配置
  12. windows上vscode 安装Fortran-language-server
  13. php获取文件名和后缀名
  14. nrf51822 按键蓝牙通知 例程 加入 串口 打印 log
  15. 获取淘宝订单的解决方案——转
  16. C/C++ __builtin 超实用位运算函数总结
  17. macOS 13 如何更新?macOS Ventura抢先更新
  18. html圣诞快乐英文,圣诞快乐英语,圣诞快乐英语简写?
  19. 开源技术可以解决贸易战?Richard Stallman 给微软的十条公开建议等;开源之道每周评论(2019 10 08))...
  20. D-U-N-S Number 邓白氏编码申请流程

热门文章

  1. 45A--Codecraft III
  2. padStart ( ) 方法、padEnd ( )方法 的用法
  3. matlab 中medfilt2报错,关于matlab使用medfilt2报错
  4. Android Studio 清理缓存方法
  5. QGIS经纬度坐标转投影xy
  6. MyDLNote - Enhancement: Fast Single Image Rain Removal via a Deep Decomposition-Composition Network
  7. java输出和opensl,OpenSL ES范例,无java代码,纯C
  8. 误删库后的恢复方法分享
  9. 关于为什么gateway网关用webflux
  10. 年后玩玩php,顺便发发牢骚