UML学习笔记
Posted coding涛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UML学习笔记相关的知识,希望对你有一定的参考价值。
UML,全称是Unified Modeling Language统一建模语言。UML通过文字、图形、符号来描述事物、事物的活动以及事物间关系的语言。在软件开发中,常用来协助完成需求分析、软件设计。
UML 2.0规范定义的UML组成结构,如下图所示:
说明:
1、上图中的各个节点,我都同时列出了中文和英文,因为UML是由美国人提出的,当中的一些名词如果只看中文翻译可能容易误解,比如,Thing事务,这里的“事务”与软件开发中的“事务”不是一个含义,应该翻译成“元素”更贴切,但中文资料中都用“事务”这个词,为避免冲突,这里仍然使用“事务”一词。
2、UML的各种图(结构图/行为图)是由Things事务和Relationships关系组成的。
3、UML中定义了14中图,分类如上图所示,图中带红色小旗的为常用图。
4、几个比较好的免费UML画图工具:
draw.io 一个免费开源的画图工具
ProcessOn 在线作图网站,免费用户有保存文件数量的限制
visio 这个大家比较熟悉了,微软的产品,visio有个方便的地方时,我们可以直接将visio图复制粘贴到word中。
(本文中涉及的样例图使用的都是draw.io画图工具)
一、UML中的Structural things结构事物(UML静态元素)
包括7种类型:
1、类 Class
类是对一组具有相同属性、方法的对象的抽象。类的表示法如下图中的“模板”
说明:
1、属性或方法前可以加上一个可见性修饰符,+ 表示public;-表示private;#表示protected;~ 表示package/default;
2、若为抽象类,在类名前加«Abstract» 且类名使用斜体。
3、示例1为详细设计的类图,图中可以描述类的字段名、字段类型、字段默认值、字段可见性、字段注释、方法名、方法参数名及参数类型、方法返回值类型、方法注释
4、示例2为简单设计的类图,很多情况下,比如项目初期,我们只需要简单地描述类中的字段或方法,不需要描述可见性、类型这些详细信息,此时我们可以省略这些内容。
2、接口 Interface
接口用于向外界声明了类或组件提供的服务。接口中,定义了一组操作的规范,它有3种表示法:
1)矩形表示法,含关键字 «interface»
2)“棒棒糖”表示法。
下面的示例中展示了这两种表示法的使用。
3)“球形-凹面”表示法。这种表示法用于描述组件Component的接口,其中“球形”表示组件对外提供或组件实现了的接口,“凹面”表示组件需要的接口。
下图的例子中,订单Order组件实现了或提供了OrderEntry接口和AccountPayable接口,它需要一个实现了Person接口的对象。
3、协作 Collaboration
指的是有意义的交互,一组对象为了完成某个任务,相互间进行的交互;“协作”是“用例”的实现。
4、用例 Use Case
用例用于描述为完成某个任务而执行的一系列动作,这些动作会产生一个可观察到的结果。表示法如下图所示:
5、活动类 Active Class
一种可执行的类,一般是线程类或进程类。使用类图表示,但外边框加粗。
6、组件Component
一个相对独立的、比“类”更大的软件部件。表示法如下:
7、节点Node
一种可以运行的资源或物理部件,通常具有存储空间(记忆能力)或处理能力。例如,服务器、打印机、路由器等。
二、UML中的Structural things结构事物(UML动态元素)
包括2中类型:
1、交互 Interaction
对象间交换消息的动作,用一条带箭头的直线表示。
2、状态机 State Machine
用于描述对象在生命周期内,在事件驱动下,所经历的状态序列。一个状态机由多个状态组成。
三、UML中的关系Relationships
UML关系中,按关系的由弱到强如下图所示:
依赖关系(Dependency)
依赖指的是两个对象之间,一个对象发生变化会引起另一个的对象的变化。用带有箭头的虚线表示。
图中的“依赖关键字”根据依赖关系类型定。UML定义了4种依赖关系:使用依赖、抽象依赖、授权依赖、绑定依赖。详细说明如下:
1、使用依赖。表示A使用了B提供的服务。使用“use”关键字。它可以细分为下面4种类型的使用依赖;
使用依赖 |
描述 |
关键字 |
调用依赖 |
A调用了B的方法 |
call |
参数依赖 |
A方法使用了B作为参数 |
parameter |
发送依赖 |
A接收B发送的信号 |
send |
实例化依赖 |
A的方法创建了B的实例 |
instantiate |
2、抽象依赖。指的是从不同抽象级别或不同视角表示相同概念的模型之间的相互关系,它包括3种类型:
抽象依赖 |
描述 |
关键字 |
跟踪依赖 |
声明表示相同概念的不同模型之间存在一些比较模糊的联系 |
trace |
精化依赖 |
声明表示相同概念的不同模型之间存在映射关系 |
refine |
派生依赖 |
声明某个实例可以从其他实例推导得出。例如Person类的生日和年龄属性,年龄可以推导得出年龄。 |
derive |
3、授权依赖。表示一个元素限制了另一个元素的访问权限,它包括3种类型:访问依赖(access)、导入依赖(import)、友元依赖(friend)
授权依赖 |
描述 |
关键字 |
访问依赖 |
允许一个包访问另一个包 |
access |
导入依赖 |
允许一个包访问另一个包的内容并为被访问包的组成部分添加别名 |
refine |
友元依赖 |
允许一个元素访问另一个元素,不管访问元素是否限制了可见性 |
derive |
4、绑定依赖。表示模板元素与模板实例之间的依赖关系。关键字“bind”。例如,java中List<T>这个泛型类与List<String>实例类。
关联关系(Association)
1、关联关系是一种结构性的关系,它的表示法可以包括以下3个元素:
1)关联名(Name),用来描述关联关系的性质
2)角色(Role),用于标注关系中两方在关联关系中所承担的角色。
3)多重性(Multiplicity),用于描述有多少对象参与关联关系。可以有1对1、1对多、多对1、多对多、一对n等多种类型。使用“*”表示大于等于0个,使用“1..*”表示大于等于1个,“n, m”表示n或m;“n..m”表示n到m
2、关联关系的类型,包括单向关联、双向关联、自关联以及两个特殊的关联关系,聚合与组合。
1)单向关联:实线箭头表示,如下图所示,单向关联中Class A知道Class B,但Class B不知道Class A。一般是A类引用了B类作为它的一个属性字段。
2)双向关联:实线无箭头表示。
3)自身关联:由自身出发,回到本身
4)聚合关联:用于描述两个独立的类之间的整体与部分的关系。
5)组合关联:组合是一种特殊的聚合关系,不同的是,组合关系中,各个类的创建和撤销都在同一个周期内。
泛化关系(Generalization)
指的是子类和父类之间的继承关系
实现关系(Realization)
指的是类与接口之间的实现关系
以上是关于UML学习笔记的主要内容,如果未能解决你的问题,请参考以下文章
(转载)[机器学习] Coursera ML笔记 - 监督学习(Supervised Learning) - Representation