Visio画UML类图

2023-05-16

用Visio画UML类图
1.首先创建一个类图。接下来我们要做一下准备工作,因为我们这里用了PSDK中的POINT类型,在种数据类型在visio数据类型中找不到,所以我们先得追加这个数据类型。为了便于管理我们会先创建PSDK数据类型包.

创建数据包:菜单->UML->包.打开[UML包]对话框.点击[新建]按钮,在[包]列中输入[PSDK数据类型],并确定

2.追加POINT数据类型:

这时我们可以看到模型资源管理器(若左边窗口没有,可以在从菜单->UML->视图->模型资源管理器调出)中选中刚建的PSDK数据类型,再右击->新建->数据类型,打开UML数据类型属性对话框。选择[数据类型]项目,在名称项目中填写[POINT],选择[确定]结束.

注意:在PSDK中POINT是一个结构体,但是由于我们并不关心POINT的细节,所以把POINT作为简单数据类型来处理。

类:Visio画UML类图时添加一个类很简单,从形状窗口中[UML静态结构]分类中拖动对象就可以了。
在这里插入图片描述

3.设定类的详细信息:设定类的详细信息的大部分工作都是同时属性对话框实现的.对于C++程序员来说,需要设定的内容包括类名,数据成员,成员函数.。

双击类或右击->属性打开UML类属性对话框。在[类别]中选择[类]项目,然后在右面的名称栏目中写入类名就可以了。这里还可以设定类的一些属性,可以暂时先不管。

添加数据成员在右面的表格中追加成员函数。。[特性]栏目中写入变量名,[类型]是用来选择数据类型的。这里我们选择[POINT]。[可见性]栏目选择的是这个成员是公共的(private)。[多重性]是指,在类中,数据成员的个数。[1]代表在这个类中,有而且只有一个数据成员。[0…1]表示,没有或者有一个。可以在[初始值]中输入数据成员的初值。同样添加其它数据成员。

4.添加成员函数:在[类别]窗口中选择[操作]项目。在右边表格中追加成员函数。在[操作]写函数名,在[可见性]中选择函数是,共有,保护还是私有的。[多态]也就是使否是虚函数。[范围]表示一个函数是属于实例,还是属于类,静态函数,也被称为类的成员函数,普通的成员函数也被称为实例的成员函数。所以如过,在这里选中了[分类器],就说明这个函数是静态函数。

Visio画UML类图时,对于上面的操作,只是设定函数的一些基本信息,更详细的信息可以通过选中函数后,点击[属性]按钮,在出现的[UML操作属性]窗口中设定。首先是设定函数的基本信息。和上面的窗口重复的内容,我们不再说明。我们只说明[前缀]和[后缀]。如果我们想要返回的类型是指针类型或者是应用类型的话,只要在[后缀]中填写[*]或[&]就可以了。

下图是用Visio画UML类图完成之后的效果。
在这里插入图片描述

Uml 关系主要有四大类: 依赖,关联,泛化,实现。

其中 依赖和关联是事物之间语义上的横向关系,泛化和实现是事物之间的纵向关系。

一:依赖 Dependency

图示:----->

定义:关系最为松散的,单向的,暂时产生关系的事物之间使用。

使用图例:在静态图、组件图、部署图中两事物的弱依赖关系用此图示。

二:关联 Association

图示:此图为visio中画法(在uml静态结构中,拖动复合图例,然后双击此图例,将出现下图,在关联端list中,聚合列都选择无,然后在isNavigable列中选择划箭头的端。然后点选确定,就出现右侧的关联图例)。
在这里插入图片描述

定义:两事物之间的比较密切关系。

实体之间的一个结构化关系表明对象是相互连接的。箭头是可选的,它用于指定导航能力。如果没有箭头,暗示是一种双向的导航能力。关联转换为一个实例作用域的变量。可为一个关联附加其他修饰符。多重性(Multiplicity)修饰符暗示着实例之间的关系。

使用图例:在静态图中使用,其他图中也有类似的关联关系,但细化为其他关系。

其中具体细分了两种关系:聚合和组合。

1聚合 Aggregation

图示:此图为visio中画法(在uml静态结构中,拖动复合图例,然后双击此图例,将出现下图,在关联端list中,在聚合列中在需划箭头端选择共享选项。然后点选确定,就出现左侧的聚合图例)。
在这里插入图片描述

定义:整体和个体之间的关系,个体生命周期的消亡对整体生命周期没有太大的影响。has a的关系。
聚合是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成一个实例作用域变量。
关联和聚合的区别纯粹是概念上的,而且严格反映在语义上。聚合还暗示着实例图中不存在回路。换言之,只能是一种单向关系。

2组合 Composition

图示:此图为visio中画法(在uml静态结构中,直接拖动复合图例)
在这里插入图片描述

定义:整体和个体之间的关系,contains a 的关系。
组合是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。组合也是非共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。

在visio中 聚合和组合关系被分别称之为共享和复合关系。主要在静态图中使用。菱形为整体一端,另一端为个体。

三:泛化 Generalization

图示:此图为visio中画法(在uml静态结构中,直接拖动归纳图例)
在这里插入图片描述

定义:特殊到一般的关系。在软件开发中被称为继承关系,is a 的关系。

四:实现 Realization

图示:此图为visio中画法(右击类,然后选择形状显示选项,然后再勾选如左边所示的实现链接,点选确定,此时选择此类例图,将出现黄色菱形,点选黄色菱形,然后划线到要关联的事物中。即出现此虚箭头线)。
在这里插入图片描述

定义:类元之间的实现关系,在软件开发中被称为实现接口,或者抽象类之间的实现关系。

另外在用例图中,存在3种关系

1:参与者与参与者之间泛化关系,即visio中的归纳图例。

2:参与者与用例之间用依赖关系。即visio中的通信图例。

3:用例与用例之间用关联关系,即拖拽visio中的扩展图例。有时也可以用泛化关系。

其中关联分为两类:include关系,extends关系。

1)包含关系:把几个用例的公共步骤分离成一个被包含的用例,用例间的包含关系允许包含提供者用例的行为到客户用例中.把包含用例称为客户用例,被包含用例称为提供者用例.包含用例提供功能给客户用例。通俗一点讲就是把一个复杂的事物,拆分成几部分,整体和部分之间用包含关系。
在这里插入图片描述

2)扩展关系:是把新行为插入到已有用例中的方法.基础用例提供了一组扩展点.这些扩展点可以添加新的行为.而扩展用例提供了一组插入片段.这些片段能插入到基础用例的扩展点。将基用例中一段相对独立并且可选的动作,用扩展(Extension)用例加以封装,再让它从基用例中声明的扩展点(Extension Point)上进行扩展,从而使基用例行为更简练和目标更集中,做基事件之后,我可能做扩展事件,也可能不做(在特殊情况下需要的新功能,扩展点就是特殊情况)。通俗一点讲就是一个操作,可以有多种选择方式,每种方式都可以实现此功能。多个实现和功能接口之间是一种扩展关系。
在这里插入图片描述

3)泛化关系:用例的泛化关系与类的泛化关系相似,即在用例泛化中,子用例表示父用例的特殊形式,子用例从父用例继承了行为和属性,还可以添加行为和属性,改变已继承的行为。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。在实际应用中很少使用泛化关系,子用例中的特殊行为都可以作为父用例中的备选流存在。
在这里插入图片描述

包含以及扩展过程与泛化过程类似

共性:都是从现有的用例中抽取出公共的那部分信息,作为一个单独的用例,然后通后过不同的方法来重用这个公共的用例,以减少模型维护的工作量

但三者对用例关系的优化侧重点是不同的。如下:
●泛化侧重表示子用例间的互斥性;
●包含侧重表示被包含用例对Actor提供服务的间接性;
●扩展侧重表示扩展用例的触发不定性;详述如下:

既然用例是系统提供服务的UML表述,那么服务这个过程在所有用例场景中是必然发生的,但发生按照发生条件可分为如下两种情况:

⒈无条件发生:肯定发生的;

⒉有条件发生:未必发生,发生与否取决于系统状态;

     因此,针对用例的三种关系结合系统状态考虑,泛化与包含用例属于无条件发生的用例,而扩展属于有条件发生的用例。进一步,用例的存在是为Actor提供服 务,但用例提供服务的方式可分为间接和直接两种,依据于此,泛化中的子用例提供的是直接服务,而包含中的被包含用例提供的是间接服务。同样,扩展用例提供的也是直接服务,但扩展用例的发生是有条件的。

另外一点需要提及的是:泛化中的子用例和扩展中的扩展用例均可以作为基本用例事件的备选择流而存在。

备注:默认情况下visio没有include关系,可以通过一下方式来添加,选择工具栏uml,再选择构造型,添加如图所示的一行,点选确定。此后将可以引用此include关系。
在这里插入图片描述

拖一个扩展图例,然后双击,如下图,构造型中就多出一个list include,选择include,点选确定。此时右侧扩展图例上的文字将变为include.
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visio画UML类图 的相关文章

  • 用例图中的包含和扩展有什么区别?

    有什么区别include and extend in a 用例图 http en wikipedia org wiki Use case diagram Extend当一个用例向另一个一流用例添加步骤时使用 例如 假设 提取现金 是自动柜员
  • Visual Studio 从 UML 图生成代码?

    我正在研究使用 Visual Studio 2015 从 UML 图生成代码 根据我所做的工作 我在生成代码之前创建了用例 活动 序列和类图 当我生成代码时 我发现 Visual Studio 在生成代码时仅引用我的类图 所以我的问题是 V
  • Visio 形状 - 获取 X、Y 位置

    我已成功使用以下代码以编程方式将形状插入到 Visio 中 ActiveWindow Page Drop VisioApp Documents ORGCH M VSS Masters ItemU Executive 5 433071 7 5
  • UML 的高效替代方案

    我发现 UML 很难快速创建 我想更快地表达我的想法 特别是对于小型开源项目 如果它足够大 我会费心使用 UML 但是这个项目对于这种事情来说太小了 我不想要另一个让我觉得 不 我稍后再做 的工具 有什么建议么 UML 不是一种工具 而是一
  • 是否可以从 MatLab 代码生成流程图? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我继承了一个 MatLab 项目 其中有一堆我需要重构的 MatLab 文件 能够生成流程图或类似的内容对我有很大帮助 我用谷歌搜索了
  • 这是实体关系图还是类图

    嘿 基本上我对类图和 ERD 的区别感到困惑 我创建了一个我认为是 ERD 的东西 但我的室友似乎认为它是一个类图 它是什么 与已接受的答案相反 xmojmr 也注意到这是NOTUML 图 而是实体关系图 ERD 最明显的区别是连接器末端的
  • 子集约束在 UML 类图中意味着什么

    有subset在部门类和人员类之间 但我不知道比是什么意思 家庭作业机会 查看由子集约束链接的两个关系 每个部门有多名成员 每个部门设经理一名 子集表示这两者之间的约束 如果后一个关系的元素是第一个关系的子集 那么你会如何描述其含义 EDI
  • 在序列/类图中将消费/生产事件表示为从微服务到消息队列[Kafka]的UML组件

    我有一个生成一些事件的用例 消费其他微服务生成的事件以及自己生成的事件 如何在序列图 类图中表示 Kafka 系统 运行中的微服务以及生产 消费事件 在 UML 中 我们有一个来自 DB 的特殊图表 我们有 Kafka 和 cron 作业的
  • 将 BPMN 2.0 XML 导入 MS Visio 2010 或从 MS Visio 2010 导出 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想将 BPMN 图表从 Visio 2010 Premium 导出为 BPMN 2 0 XML 格式
  • 用例之间的 UML 关系(扩展/包含)

    我不太理解以下主题 因为它与我读到的内容有点含糊 Inlcude就像对下一部分的引用一样 没有它 用例就不完整 这部分应该从更多地方引用 否则它的使用没有意义 但我见过一个例子 其中 include 仅在某些 IF 语句中为真 例如 添加新
  • 如何绘制java uml类图并在另一个类中创建枚举[重复]

    这个问题在这里已经有答案了 假设我有一个类名 A 在这个类中我定义了枚举 Bpublic enum B AA BB CC 现在我想画一个uml来体现这种关系 应该怎么做呢 在类类图中 表示使用 例如
  • 从 umbrello 中的 java 代码自动创建类图?

    我能够将 java 代码导入到 umbrello 中 但是 如何自动生成类图呢 也许雨伞可以not有那个功能 来自handbook http docs kde org stable en kdesdk umbrello code impor
  • 学习 UML 的最佳来源是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 UML 中建模协变关联类?

    In short 我想对两个类之间的协变关联进行建模 每个类都可以专门化 我需要展示相关关联类的专业化 但我想避免我的模型可能意味着存在冗余关联 即泛化之间的关联和专业化之间的关联 问题的逐步解释 我在 UML 类图中有一个多对多关联Per
  • 如何用UML表示通信协议?

    在我的 UML 模型中 我有一个系统及其相互通信的子组件 例如 我有一台计算机和一个遥控机器人 它们通过蓝牙进行通信 目前图中的流程类似于 计算机 触发 遥控车 的 setVelocity 函数 在这一点上 我想通过说以下的话来完善沟通 计
  • 如何用序列图来展示一个类与另一个类之间的关系,以该类的实例的实例作为输入?

    我将使用之前的相同示例question https stackoverflow com questions 66934927 how to represent the relationship between an instance of
  • Android:从 Android Java 源代码创建 UML [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以从我的 Java Android 源代码自动创建 Uml 的程序 我测试过ArgoU
  • 对 C# 解决方案进行逆向工程

    我知道 Visual Studio 2010 Ultimate 有一些功能 我通常会凭本能这样做 但我的日程安排非常紧张 我还安装了 Visio 2010 并将其集成到 VS 中 但它的逆向工程功能似乎没有多大作用 并且必须在每个项目的基础
  • 这是正确的 UML 活动图吗?

    这是活动图截图 https i stack imgur com 575VU jpg 这是对的吗 如果不是 我做错了什么 从语法上讲 这个带有分区的活动图似乎几乎是正确的 起始节点应该是实心 黑色 圆圈 最终节点应该有一个内部实心 黑色 圆圈
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt

随机推荐