UML类图(Unified Modeling Language Class Diagrams)
统一建模语言(UML) | 类图
什么是UML?
UML是一种用于可视化描述系统,具有广泛用途的建模语言。作为一种标准化的图形语言,在软件工业中被用于软件系统部件的具体化,可视化,结构化描述以及撰写文档,同样在商业模型中也得到应用。
UML的优点:
- 使复杂的软件设计更为简单,也能够实现像OOP(面向对象编程)这一类被广泛应用的概念。
- 用理解起来可能更容易的图来描述,避免了大量的文字。
- 是表达和交流概念或系统结构变得更容易。
- 在一张图中就能够描绘出整个系统。
- 程序员实用类图来描述实际需求时,可让问题更加清晰明了,实现起来更容易。
UML的分类
UML通常分为两类:描述结构的UML图(Structural UML diagrams)和描述行为的UML图(Behavioral UML diagrams),具体见下表:
| 描述结构的UML图 | 描述行为的UML图 |
|
|
UML | 类图
类图展示出OOP中的类,接口,及其中存在的关系,关联与协作。UML在类图中是标准化的。类是OOP的主要构件模块,而类图用恰当的结构展示OOP中遇到的一切,包括类,继承关系,类关系。它能够描述各种对象和它们之间的静态关系。使用类图的主要目的:
- 类图是唯一能够恰当的展示出OOP中各种不同概念的UML。
- 利用类图来对应用程序做出优化的设计与分析高效而快速。
- 类图是部署图和组件图的基础。
类图一般的规则如下:
- 每个类用一个矩形框表示,框内由类名,属性,及定义的操作三个子部件构成。
- 三种表示可见性的修饰符:
- + 表示public
- # 表示protected
- - 表示private
- ~ 表示default(无修饰符)
一些常用的构成模型的组件:
- 类(Class){名(name),属性(attribute),方法(method)
- 对象(Object)
- 接口(Interface)
- 关系(Relationships) { 继承(inheritance),关联(association),泛化(generalization)}
- 关联(association){双向,单向(unidirectional,aggregation)}
常用表示关系的组件:

关于绘制类图:
一些在线或离线的软件都能够完成类图的制作,比如Edraw max, lucid chart等。如果能在相关网站软件找到模板,制作类图更为方便。
推荐网站https://www.draw.io/,可制作各种各样的diagram,使用很快捷,可保存文件到本地,免费无需登录。之前也经常用来画流程图。
例子:
下图为实现interface和aggregation的类图描述。MovablePoint, MovableCircle实现Movable。MovablePoint成为MovableCircle一部分。

如下是一张类图,父类Animal有两个子类dog,cat。d1为子类dog的对象。

以下为对应代码:
import java.io.*;
class GFG {
public static void main(String[] args)
{
dog d1 = new dog();
d1.bark();
d1.run();
cat c1 = new cat();
c1.meww();
}
}
class Animal {
public void run()
{
String name;
String colour;
System.out.println("animal is running");
}
}
class dog extends Animal {
public void bark()
{
System.out.println("wooh!wooh! dog is barking");
}
public void run()
{
System.out.println("dog is running");
}
}
class cat extends Animal {
public void meww()
{
System.out.println("meww! meww!");
}
}
参考资料:
[1]. Unified Modeling Language (UML) | Class Diagrams - GeeksforGeeks https://www.geeksforgeeks.org/unified-modeling-language-uml-class-diagrams/
[2]. UML Class Diagrams Tutorial, Step by Step – Salma – Medium https://medium.com/@smagid_allThings/uml-class-diagrams-tutorial-step-by-step-520fd83b300b
UML类图(Unified Modeling Language Class Diagrams)的更多相关文章
- 设计模式学习笔记(详细) - 七大原则、UML类图、23种设计模式
目录 设计模式七大原则 UML类图 设计模式分类 单例模式 工厂设计模式 简单工厂模式 工厂方法模式(使用抽象类,多个is-a) 抽象工厂模式(使用接口,多个like-a) 原型模式 建造者模式 适配 ...
- UML(Unified Modeling Language)统一建模语言
什么是模型 模型是对现实的简化 模型是提供系统的蓝图,模型可是包括详细计划.也可是是从更高程度考虑系统的总体计划,每个系统可以从不同的方面用不通过的模型来描述.因而每个模型都是在语义上闭合的抽象系统. ...
- 终于明白六大类UML类图关系了
UML,全称Unified Modeling Language,统一建模语言.而UML图分为用例图.类图.对象图.状态图.活动图.时序图.协作图.构件图.部署图等9种图. 在面向对象语言中,我们经常看 ...
- 统一建模语言(UML,Unified Modeling Language)
Something about UML: 统一建模语言(UML,英语:Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建 ...
- 学习笔记之UML ( Unified Modeling Language )
Unified Modeling Language - Wikipedia https://en.wikipedia.org/wiki/Unified_Modeling_Language The Un ...
- UML 类图介绍
UML 类图介绍 一. UML 简介 UML ( Unified Modeling Language )即统一建模语言,是 OMG ( Object Management Group )发表的图标式软 ...
- UML类图还不懂?来看看这版乡村爱情类图,一把学会!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.码场心得
- UML类图与面向对象设计原则
1. 引言 从大一开始学习编程,到如今也已经有两年了.从最初学习的Html,Js,JaveSe,再到JavaEE,Android,自己也能写一些玩具.学习过程中也无意识的了解了一些所谓的设计模 ...
- UML类图的6大关系
<小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...
随机推荐
- CCNA学习笔记(1) IOS操作系统 路由器 交换机 启动 自检 以及部分命令
注意:以下内容是以思科为学习环境 IOS操作系统启动: 路由和交换机和个人电脑启动没有区别,都会发送新号表示启动状态,也会进入系统自检.只得注意的是:1.一长两短的响声是显卡报警. 2.一声长鸣是内存 ...
- 关于初步搭建完成SSH环境之后,JUnit test 测试成功,页面测试时:@Resource 注入的dao为null
这个问题研究了一天,还是因为配置的时候没有认真,一不小心,酿成了大错.当发现的时候感觉好尴尬啊::>_<:: CostAction: package com.tenni.action; i ...
- SD从零开始38-40
[原创]SD从零开始38 创建Billing Document 根据需要BillingBilling On Request 你可以通过手工输入凭证的号码(订单号码和Delivery note,依赖于你 ...
- Oracle查询时15分钟划分
select to_date(to_char(sysdate, 'yyyy-MM-dd hh24') || ':' || floor(to_number(to_char(s ...
- Unity Profiler连接Android真机调试
Profiler在Editor模式就可以观看性能消耗,但是毕竟电脑配置高,跟手机真机环境还是有区别.实际开发中的优化还是推荐用真机测试. 因为IOS一般比Android手机的配置高,在Android平 ...
- Flex自动回收导致监听不到ModuleEvent.READY事件
Flex中可以动态载入模块,以达到延迟加载,减小主程序体积的效果.通常可以使用如下代码: var iminfo:IModuleInfo = ModuleManager.getModule(" ...
- mysql中删除同一行会经常出现死锁?太可怕了
之前有一个同事问到我,为什么多个线程同时去做删除同一行数据的操作,老是报死锁,在线上已经出现好多次了,我问了他几个问题: 1. 是不是在一个事务中做了好几件事情? 答:不是,只做一个删除 ...
- 万恶的浏览器缓存 Vuex state里面的成员改名后浏览器不会马上更新
今天在用Vuex的时候,在state里面加了个名叫rootUrl的属性 但是怎么都取不到值,重新启动程序,ctrl+f5浏览器刷新都不行,纠结了大半上午,于是用console.log(store.ge ...
- QT的初步学习笔记
一.Qt简介 1.Qt是什么:图形用户界面程序框架 能做界面的还有什么:MFC.GTK+ 2.Qt的由来和发展 3.为什么选择Qt 二.Qt环境与工具 1.工具 a.Qt助手:里面详细说明了Qt ...
- 设置联想键盘恢复F1~F12默认按键的操作办法
背景 默认都是笔记本键盘才有Fn组合功能键,台式机很少有.今天领到的是联想键盘,给我的台式机使用后F12很麻烦,必须Fn+F12才可以. 需求 恢复默认的F1~F12功能 方案 只需要下载驱动安装: ...