【大话设计模式-2】UML 类图的绘制(源码案例分析)
文章目录
- 1 UML 基本介绍
- 2 UML 图
- 3 UML 类图
- 4 类图—依赖关系(Dependence)
- 5 类图—泛化关系(generalization)
- 6 类图—实现关系(Implementation)
- 7 类图—关联关系(Association)
- 8 类图—聚合关系(Aggregation)
- 9 类图—组合关系(Composition)
1 UML 基本介绍
- UML——Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用
于帮助软件开发人员进行思考和记录思路的结果 - UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他
们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如下图
- 使用 UML 来建模,常用的工具有 Rational Rose , 也可以使用一些插件来建模
2 UML 图
画 UML 图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,UML 图分类:
- 用例图(use case)
- 静态结构图:类图、对象图、包图、组件图、部署图
- 动态行为图:交互图(时序图与协作图)、状态图、活动图
3 UML 类图
- 用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。
- 类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合。
- 类图简单举例
public class Person{ //代码形式->类图private Integer id;private String name;public void setName(String name){this.name=name;}public String getName(){return name;}
}
4 类图—依赖关系(Dependence)
只要是在类中用到了对方,那么他们之间就存在依赖关系。如果没有对方,连编绎都通过不了。
public class PersonServiceBean {private PersonDao personDao;//类public void save(Person person){}public IDCard getIDCard(Integer personid){}public void modify(){Department department = new Department();}
}
public class PersonDao{}
public class IDCard{}
public class Person{}
public class Department{}
对应的类图:
小结
- 类中用到了对方
- 如果是类的成员属性
- 如果是方法的返回类型
- 是方法接收的参数类型
- 方法中使用到
5 类图—泛化关系(generalization)
泛化关系实际上就是继承关系,他是依赖关系的特例
public abstract class DaoSupport{public void save(Object entity){}public void delete(Object id){}
}
public class PersonServiceBean extends Daosupport{}
对应的类图
小结:
- 泛化关系实际上就是继承关系
- 如果 A 类继承了 B 类,我们就说 A 和 B 存在泛化关系
6 类图—实现关系(Implementation)
实现关系实际上就是 A 类实现 B 接口,他是依赖关系的特例
public interface PersonService {public void delete(Interger id);
}
public class PersonServiceBean implements PersonService {public void delete(Interger id){}
}
=>类图:
7 类图—关联关系(Association)
关联关系实际就是类与类之间的联系,他是依赖关系的特例。
关联具有导航性,即双向关系或单项关系。
关系具有多重性:如“1”(表示有且仅有一个),“0…”(表示0个或者多个),“0,1”(表示0个或者一个),“n…m”(表示n到 m个都可以),“m…*”(表示至少m个)。
//单向一对一关系
public class Person {private IDCard card;
}
public class IDCard{}
//双向一对一关系
public class Person {private IDCard card;
}
public class IDCard{private Person person
}
8 类图—聚合关系(Aggregation)
聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。
聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。
如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示:
9 类图—组合关系(Composition)
组合关系:也是整体与部分的关系,但是整体与部分不可以分开。
再看一个案例:在程序中我们定义实体:Person 与 IDCard、Head, 那么 Head 和 Person 就是 组合,IDCard 和Person 就是聚合。
但是如果在程序中 Person 实体中定义了对 IDCard 进行级联删除,即删除 Person 时连同 IDCard 一起删除,那么 IDCard 和 Person 就是组合了.
应用案例
public class Person{private IDCard card;private Head head = new Head();
}
public class IDCard{}
public class Head{}
对应的类图
案例 2
public class Computer {private Mouse mouse = new Mouse(); //鼠标可以和 computer 不能分离private Moniter moniter = new Moniter();//显示器可以和 Computer 不能分离public void setMouse(Mouse mouse) {this.mouse = mouse;}public void setMoniter(Moniter moniter) {this.moniter = moniter;}
}
public class Mouse {}
public class Moniter {}
对应的类图
【大话设计模式-2】UML 类图的绘制(源码案例分析)相关推荐
- 23种常用设计模式的UML类图
23种常用设计模式的UML类图 本文UML类图参考<Head First 设计模式>(源码)与<设计模式:可复用面向对象软件的基础>(源码)两书中介绍的设计模式与UML图. 整 ...
- 图解Java设计模式之UML类图
图解Java设计模式之UML类图 3.1 UML基本介绍 UML图 UML类图 3.1 UML基本介绍 1)UML – Unified modeling language UML(统一建模语言),是一 ...
- 从零开始单排学设计模式「UML类图」定级赛
阅读本文大概需要 3.5 分钟. 本篇是设计模式系列的开篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了, ...
- 从零开始单排学设计模式「UML类图」定级赛 1
阅读本文大概需要 3.5 分钟. 本篇是设计模式系列的开篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了, ...
- 设计模式之UML类图
在学设计模式的过程中经常碰到各式各样的UML类图.那些眼花缭乱的符号有什么含义呢? 类图含义 类图中的关系 从网上找来一张图作为实例 依赖关系:比如动物依赖氧气和水,这里如学生要依赖自行车.用虚线箭头 ...
- 设计模式:UML类图
UML类图 一.UML基本介绍 UML--Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路 ...
- 各种设计模式的UML类图
一.单一职责原则 就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力.这种耦合会导致脆弱他的设 ...
- MVC设计模式和UML类图
文章目录 一.UML 类图: 二.MVC 设计模式 一.UML 类图: 14中UML图:https://blog.csdn.net/yoyo328/article/details/78009237 二 ...
- 【设计模式】UML类图关系与符号
文章目录 一.UML简介 1.1 UML类图常用关系 1.2 UML模型结构 1.3 UML类的表示 二.类之间的关系 2.1 泛化(Generalization) 2.2 实现(Realizatio ...
最新文章
- 基于地平面的单目视觉里程计绝对尺度估计
- webpack 单独打包指定JS文件
- DellEMC品牌正式启用50%是上一代的R730对比R74
- 《编程珠玑》笔记3 数据结构选择
- HDU 1597 find the nth digit (二分查找)
- 【Python CheckiO 题解】All the Same
- 两个sql交集_sql的高级命令运用
- webpack插件实现自动抽取css中的主题色样式,并动态切换主题色(element-ui)
- VC实现程序重启的做法
- Django 09-2 模型层 字段
- 深入理解JavaScript内部原理(6): 闭包
- 云原生高可用技术体系的构建思路与难点分析
- 【优化预测】基于matlab蝙蝠算法优化SVM预测【含Matlab源码 141期】
- FANUC NC GUIDE PRO 17.1虚拟机(XP系统)
- vue 项目中引入字体文件的正确方式~
- cad墙线打断lisp_autocad 2010怎么打断墙线?
- python中sub函数用法_Python pandas.DataFrame.sub函数方法的使用
- “本地资源检测” 上手指南,玩转最前沿的优化黑科技!
- 解决Excel中使用VBA出现microsoft visual c++ runtime错误
- 用户的虚拟地址 linux 0 4gb,Linux驱动虚拟地址和物理地址的映射
热门文章
- 谷歌如何注册账号?手机号无法验证处理方法!2023年最新教程!
- fiddler CSFF安全漏洞-重点讲解refer字段、token字段
- python里的map是什么意思_map在python中什么意思
- Unity2D:物体旋转方法
- casewhen多条件查询_Mybatis(三)- MyBatis 多条件查询和模糊查询实例
- SAP 检验批决策增强
- C++后端开发面试题精选
- 中兴网络设备交换机路由器查看BGP状态检查命令方法
- Shrinkage: I was in the pool
- 【损失函数系列】softmax loss损失函数详解