参考:http://www.cnblogs.com/damsoft/archive/2016/10/24/5993602.html
文章目录
一、UML基础知识
1.UML简介
Unified Modeling Language (UML)又称统一建模语言或标准建模语言。
各个箭头的含义:
简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是他们的主要用途简介:
1.用例图:对系统的使用方式分类.
2.类图:显示类和它们的相互关系。
3.对象图:只显示对象及它们的相互关系。
4.活动图:显示人或对象的活动,其方式类似于流程图。
5.状态机图:显示生命周期比较有趣或复杂的对象的各种状态。
6.通信图:显示在某种情形下对象之间发送的消息。
7.顺序图:显示与通信图类以的信息,但强调的是顺序,而不是连接。
8.包图:显示相关的类如何组合,对开发人员有用。
9.部署图:显示安装已完成系统的机器、过程和部署制品。
10.组件图:显示可重用的组件(对象或子系统)及期接口。
11.交互总图:使用顺序图喧赤活动的务个步骤。
12.时间图:显示消息和对象状态的准确时间限制。
13.复合结构图:显示对象在聚合或复合中的相互关系,显示接口和协作的对象
常用的 UML 图可分静(态)图、动(态)图两类,静态图主要描绘软件的静态结构,而动态图主要描绘软件的动态行为。
常用 UML 动态图(5 个):用例图,活动图,状态机图,序列图,通信图。
常用 UML 静态图(4 个):类图,包图,部署图,构件图。
2.UML类图
在所有UML图中,类图是使用频率最高的UML图。
类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。
类图主要关系有:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
2.1 泛化
【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种, 即有老虎的特性也有动物的共性.
【箭头指向】:带三角箭头的实线,箭头指向父类
2.2 实现(Realization)
【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现.
【代码体现】:类实现接口成员
【箭头指向】:带三角箭头的虚线,箭头指向接口
2.3 关联(Association)
【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;
【代码体现】:成员变量
【箭头及指向】:带普通箭头的实心线,指向被拥有者
上图,表示企业和员工的关联关系,员工都属于一个企业
除此之外,关联关系允许互相关联,比如夫妻关系,可以互相关联。也允许自关联,即自己也是自己的成员之一。
2.4 聚合(Aggregation)
【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体
2.5 组合(Composition)
【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向整体
2.6 依赖(Dependency)
【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
例如:程序员需要依赖计算机
3.vs2013\2015 中Uml类图的操作
在.NET开发中,我们可以使用VS自有的功能方便设计类图,VS2013旗舰版和VS2015企业版都有建模工程,下面介绍一下如何使用VS建模
(1)在VS中新建,选择”建模项目“,如下:
(2)打开建模项目,增加一个UML类图
(3)打开新建的UML类图文件,通过工具栏建立类、接口等,并创建关系
(4)将设计好的UML类图,生成代码
(5)查看生成代码
(6)逆向(由代码生成类图)
在VS中,我们可以将代码很方便的生成UML类图,如下
3.总结
主要介绍了uml多种图的初步介绍,在着重介绍了下UMl类图,后面会和大家在依次介绍一些常用的Uml图。
二、IDEA如何生成类图
1.安装 PlantUML
安装步骤 File -> Settings -> Plugins 搜索 PlantUML ,找到 PlantUML integration 并安装。
2.安装Graphviz渲染类图
1.在Graphviz官网下载Graphviz;
2.双击安装包直接下一步进行安装;
3.Graphviz环境变量配置
在开始里面搜索编辑系统环境变量
打开电脑系统属性选择高级 -> 环境变量添加path变量,变量值为之前安装路径下的bin目录。
4.cmd验证安装是否成功
环境变量配置完成之后win+Rdot打开 cmd 输入:dot -version,出现版本号则表示安装成功。
5.PlantUML文档创建
重启IDEA 即可创建 PlantUML File。在任意目录下右键–>New–>PlantUML File,以类图为例,先点击“class”,意为要生成的是类图,再输入文件名,回车,puml文件会新建在该目录下,默认有puml代码。
生成的图和代码如下:
6.IDEA与Graphviz集合
打开IDEA,点击FIle–>Settings,搜索PlantUML,点击Browse选择Graphviz–>bin–>dot.exe,点击Apply–>OK。
uml类图的常见语法和功能
详细的见plantuml官网 类图的语法和功能详细教程
uml类图符号
@startuml
abstract abstract
abstract class "abstract class"
annotation annotation
circle circle
() circle_short_form
class class
class class_stereo <<stereotype>>
diamond diamond
<> diamond_short_form
entity entity
enum enum
exception exception
interface interface
metaclass metaclass
protocol protocol
stereotype stereotype
struct struct
@enduml
uml语言对应的图:
类和类之间的关系:
类之间的关系是用以下符号定义的。
示例:
关系上的标签
在关系之间使用标签来说明时, 使用 :后接 标签文字。
对元素的说明,你可以在每一边使用 “” 来说明.
在标签的开始或结束位置添加< 或 >以表明是哪个对象作用到哪个对象上。
详情见官网文档。
三、chatGPT辅助生成UML类图教程
今天笔试的时候碰到一道让画类图的题目,按照以前的老方法用visio画太慢, chatGPT又不能直接生成图,所以用这个IDEA的插件试试,自己写UML语句太麻烦,用chatGPT辅助试试。题目如下:
XXX是我们公司的重要客户,它主要生产制造X产品, X产品主要的特征是宽度和颜色。当客户下单时,订单会包含产品类型信息,以及承诺交期信息。生产信息
X产品的生产包括3个步骤:cutting->folding-> packaging。
每个步骤可以使用的机器:cutting(CM1,CM2),folding(FM-IV, FM-X, FM-IX),packaging(PM)
每个步骤必须完成后才能开始下一个步骤
各订单从上工序设备转移至下工序设备的运输时间是10分钟
设备上的切换时间取决于当期订单类型与该设备处理的上一个订单类型(宽度和颜色)的差异,宽度或颜色变化都会导致工艺切换时间5分钟
排产决策:
确定订单的各生产步骤应该在那个设备上加工
确定各设备上订单的生产加工顺序
主要业务指标:
提高按时交货率
提高设备利用率
减少设备空闲时间和工艺切换时间
1.告诉chatGPT帮我生成PlantUML的类图
chatGPT生成的语句:
@startuml
class Customer {
+ 名称: String
}
class Order {
+ 订单类型: String
+ 承诺交期: Date
+ 获取订单信息(): OrderInfo
+ 客户: Customer
}
class Product {
+ 产品类型: String
+ 特征: String
+ 获取产品信息(): ProductInfo
}
class Machine {
+ 设备名称: String
+ 设备状态: String
- 当前订单: Order
+ 开始生产订单(order: Order): void
+ 结束生产(): void
+ 计算工艺切换时间(previousOrder: Order): int
}
class ProductionStep {
+ 步骤名称: String
+ 所需设备: Machine
+ 订单: Order
+ 分配订单到设备(machine: Machine): void
+ 计算加工时间(): int
+ 转移订单至下一步骤(nextStep: ProductionStep): void
}
class ProductionSchedule {
+ 订单列表: List<Order>
+ 设备列表: List<Machine>
+ 生产步骤列表: List<ProductionStep>
+ 生成生产计划(): ProductionPlan
+ 计算交货率(): float
+ 计算设备利用率(): float
+ 减少设备空闲时间和工艺切换时间(): void
}
class Transportation {
+ 运输时间: int
+ 计算运输时间(): int
}
class SwitchingTime {
+ 切换时间: int
+ 计算切换时间(previousOrder: Order, currentOrder: Order): int
}
class Metrics {
+ 按时交货率: float
+ 设备利用率: float
+ 设备空闲时间: int
+ 计算业务指标(): MetricsInfo
}
Customer --|> Order : 下订单
Order --|> Product : 包含产品
Machine --|> Order : 处理订单
ProductionStep --|> Machine : 使用设备
ProductionStep --|> Order : 包含订单
ProductionSchedule --|> Order : 包含订单
ProductionSchedule --|> Machine : 包含设备
ProductionSchedule --|> ProductionStep : 包含生产步骤
Metrics --|> ProductionSchedule : 包含生产排程
Transportation --|> Order : 包含订单
SwitchingTime --|> Order : 包含订单
@enduml
复制到IDEA中:
保存图片导出为png格式。
版权归原作者 微莱羽墨 所有, 如有侵权,请联系我们删除。