UML 类图概念、规范、实现

2024-03-30

我目前正在阅读 Martin Fowler 的《UML Distilled》。我刚刚介绍了有关类图的部分,他在其中强调了在对类图进行建模之前理清自己的观点的必要性。然而,在实际绘制类图时,我对它的实际外观有点困惑。例如,我理解理论含义会改变关联的含义从一个角度到下一个角度。

我想我的主要问题是,如果我像他在书中那样建模一个简单的排序系统,那么从一个角度到另一个角度,类图看起来会有所不同并且包含不同数量的符号。例如,从概念的角度来看,我只会显示类和一些模糊的关联及其多重性,然后在规范角度进行建模时包括可导航性和基本的类操作和字段。

我真的很感谢对此的一些指导,因为我真的很想更好地掌握这个主题。


好问题。以下是我根据自己的经验得出的一些想法;不能说马丁是否会同意(!)但希望仍然有用。

总之:主要区别来自于关系的形式和设计选择。

我发现以下有用:

  • 基本结构:大致映射到Fowler的UML作为草图,并在白板上交互地完成。主要目的是了解整体结构。非常不正式。特别是,对关系的关注只是为了识别它们,而不是形式化 - 因此没有基数、删除行为、容器类的选择等。

  • 域模型。一个精确的模型,专注于形式化关系。具体来说,命名关联结束、定义基数并确认删除行为。不考虑可导航性或基数 >1 的容器类选择。我所知道的学习问题领域的最佳技术之一。

我几乎总是会使用以上两者。领域模型的关键是使用基于动词的命名而不是基于角色的命名 - 因为它描述了关系存在的原因(有效地表达了业务规则:例如“订单必须由一个客户下达”)。我使用中描述的命名模板西姆森和维特 https://rads.stackoverflow.com/amzn/click/com/0126445516's book.

将领域模型转换为工作代码还有很多工作要做,特别是在关系方面。编程语言不能很好地支持关系,因此必须将关联转换为参与类的属性。正是在这一点上,可导航性以及多重性 >1 的集合类型的选择开始发挥作用。这也是需要指定所有操作的地方。我个人并不认为这种类型的图表特别有用。领域模型加上代码给了我所需的一切。

如果我使用可执行的 UML 工具,我只会使用“UML 作为编程语言”。

如果说得有点啰嗦,请见谅,希望对你有帮助……

PS:如果你想要一个更好的基于动词的命名的例子,我有一个在我的博客上发帖 http://randomcognition.blogspot.com/2009/03/relationships-are-more-fun.html。请不要将此视为自我推销,这里没有必要重复。

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

UML 类图概念、规范、实现 的相关文章

  • 子集约束在 UML 类图中意味着什么

    有subset在部门类和人员类之间 但我不知道比是什么意思 家庭作业机会 查看由子集约束链接的两个关系 每个部门有多名成员 每个部门设经理一名 子集表示这两者之间的约束 如果后一个关系的元素是第一个关系的子集 那么你会如何描述其含义 EDI
  • 在 Visual Studio 2017 中的类图中创建聚合和组合

    我正在考虑在 Visual Studio 中创建类图 我注意到工具箱似乎只允许类之间的关联关系 是否可以在类图中创建更强的关系 即聚合和组合关系 另外 是否可以从代码自动创建类图 好问题 首先 Visual Studio VS 类设计器不是
  • 如何使用 NetBeans 6.8 UML 模块创建类图?

    在我看来 NetBeans 的 UML 模块隐藏得有点太多了 在 NetBeans 6 5 中 创建 UML 图非常容易 无需安装插件或其他东西 喜欢 读my post http karussell wordpress com 2010 0
  • 模板继承的 UML 图

    在我的库的文件中 我有一个继承自模板的类 我的代码示例 class data class dataA public data class dataB public data inheritance from a template templ
  • 如何在重写方法中表示调用基类方法?

    我有一个子类想要向基类函数添加更多功能 我如何表示它也执行基类函数而不仅仅是新添加的功能 有趣的问题 我用 Enterprise Architect 尝试过 它确实让我选择了父级的操作 但图中的显示没有改变 看来您需要为此使用注释 如你看到
  • 主动类与被动类

    在 UML 规范上层结构 2 5 仍为 Beta 第 203 页 中 可以通过将 isActive 设置为 true 来指定类为活动类 即 它的每个实例都是一个活动对象 当 isActive 为 false 时 类是被动的 即 它的每个实例
  • 从 umbrello 中的 java 代码自动创建类图?

    我能够将 java 代码导入到 umbrello 中 但是 如何自动生成类图呢 也许雨伞可以not有那个功能 来自handbook http docs kde org stable en kdesdk umbrello code impor
  • 传统的基于代码的工程和模型驱动的工程方法有什么区别?

    我在文献中找到了这段话 但我不明白它的含义 设计实践正在从传统的基于代码的工程转向 在整个开发生命周期中进行严格的分工 模型驱动的工程方法 其中所有人员都参与设计 流程可以对模型有发言权 任何帮助将不胜感激 基于代码的工程意味着大部分工作是
  • 如何在 UML 活动图上显示异步操作

    我即将绘制 记录一些客户端 服务器连接建立代码 以更好地理解它 有几个操作是在单独的线程中异步完成的 连接线程 数据接收线程等 我应该在单独的图表上显示它们吗 我更愿意将其放在单个图表上以掌握整体视图 但不知道如何在活动图上表示它 我不确定
  • 如何用UML表示通信协议?

    在我的 UML 模型中 我有一个系统及其相互通信的子组件 例如 我有一台计算机和一个遥控机器人 它们通过蓝牙进行通信 目前图中的流程类似于 计算机 触发 遥控车 的 setVelocity 函数 在这一点上 我想通过说以下的话来完善沟通 计
  • Eclipse:如何安装 UML2 工具

    我想尝试 UML2 Tools for Eclipse 如图所示本教程 http www vogella de articles UML article html 我目前拥有面向 Java EE 开发人员的 Eclipse 3 6 Heli
  • 多个参与者,相同的用例 [用例]

    我试图描述一个用例 其中系统内的多个参与者可以执行相同的活动 例如 假设 作为示例 我想要使用 更新客户端 用例 但几个已确定的参与者可以执行此操作 Manager Chief Executive Customer Service Repr
  • 在 Papyrus UML 模型中使用 MARTE GQAM 构造型

    我正在尝试使用 MARTE GQAM 构造型来构造模型的某些元素 但在为其某些属性赋值时遇到麻烦 例如 我将两条生命线之间的消息定型为 我想为其 hostDemand 属性分配一个值 该属性应为 NFP Duration 实例 我看不到如何
  • UML三元关联实现java代码[重复]

    这个问题在这里已经有答案了 三元关联是结构关系 指定一个事物的对象连接到其他两个事物的对象 我理解这种关系 但我不知道如何实现显示这三个类之间关联的方法 让我们考虑下面的例子 项目有许多使用特定编程的开发人员 语言促进发展 开发人员使用特定
  • 如何在 Windows 上使用 Pyreverse

    我想使用pyreverse 创建图表类 我下载它 当我使用这个命令时 pyreverse bat c PyreverseCommand a1 s1 f ALL o png test py 我收到错误 名称 点 无法识别 什么是 点 如何创建
  • 如何在 UML 中正式记录 C# 属性?

    在 UML 类图中记录类的 C 属性的正确方法是什么 我还没有决定这是否是我的答案 但我想我会把它扔在那里以便讨论 这看起来可以接受吗 它是属性类型的实例 其中元数据值放入下面的标记值中 我刚刚弄清楚如何添加自定义立体类型 该箭头只是一个标
  • UML 的 XMI 有 XSD 吗?

    是否有 UML XMI 文件的 XSD 标头仅包含名称空间引用
  • 双向和单向关联 UML

    虽然我以为我明白了aggregation and composition 我很难理解bi directional and uni directional协会 我读过bi directional协会 两个班级都知道 彼此以及与uni dire
  • UML:一对多关系表示?

    我是 UML 新手 还不太理解其表示法 这是我对图的理解 The system has many doctors Doctors can have many patients however patients can only have o
  • UML 状态图中的转换:使用触发器还是防护更好?

    在 UML 状态图的设计中 我似乎可以选择使用triggers or guard实现状态之间转换的逻辑 那么使用哪个更好呢 考虑到相同的转换逻辑 触发器的行为与守卫有什么不同吗 一种相对于另一种的优点 缺点是什么 是否存在取决于特定工具的差

随机推荐

  • PHP 生成 UL LI , UL LI

    无法弄清楚如何使用 while 循环生成此菜单 这是我的代码的示例 ul li a href Hoofdmenu 1 a ul class sub li a href Submenu 1 1 a li li a href Submenu 1
  • 如何让 CSS 浮动保持在一行?

    我想使用以下命令将两个项目放在同一行上float left对于左侧的项目 我独自实现这一点没有任何问题 问题是 我想要这两个项目stay在同一条线上即使您将浏览器大小调整得很小 你知道 就像桌子一样 目标是防止右侧的物品缠绕无论 如何使用
  • 如何包装 ui 控件(mapbox 地理定位控件)

    我想扩展 更改具有某些功能的地图框地理定位控件 例如 我想飞到而不是跳到当前位置 我想在打开地理控制按钮时添加一些行为 例如防止拖动 我怎么做 我尝试制作包装纸 但后来遇到了一些问题 按钮的颜色在打开时应变为蓝色 但确实如此 不再工作了 我
  • Flutter/Dart DateTime 解析 UTC 并转换为本地

    我正在尝试将 UTC 日期字符串解析为DateTime然后将其解析为本地时间 但是我在将其转换为本地时间时遇到了麻烦 在英国它应该加一 但是当我打印时 isUtc它返回为 false 这就是我现在所拥有的 print widget asse
  • 升级到 Google 通用分析

    我一直在四处寻找 以找出升级到 Universal Analytics 时需要考虑的任何事项 我找到了这个帖子 Google Analytics 升级到异步代码 https stackoverflow com questions 12060
  • VB.NET 中的“空安全”点表示法...或者它是否存在于任何语言中? “安全解引用运算符”或使用 LINQ 的等效操作?

    我正在 VB net 中寻找 安全 点符号 在 VB NET 或任何语言中是否存在这样的东西 我想要做的是 当使用不可为空遗留对象 解决如下问题 如果有一个计划 如果有一个案例 如果它有一个人 那个人的配偶 否则什么都没有 VBS表示 空
  • 在 Mac OS X Yosemite 上安装 pymssql 时出错

    我在 OS X Yosemite 10 10 3 上安装 pymssql 时收到以下错误 有人解决了以下错误吗 我正在使用 FreeTDS v0 91 112 版本 7 1 和 Python 2 7 6 tsql 实用程序连接到 SQL 数
  • sh 和 bash 中 pgrep 的区别

    这是一个测试 bash c pgrep f novalidname sh c pgrep f novalidname 11202 Why is pgrep运行时给出输出sh 据我所知 我的计算机上没有名为novalidname 这可能是一个
  • 链接到外部 css 文件

    我一直在尝试将我在本地计算机中创建的 css 文件链接到我的 html 代码 但它似乎不起作用 我们应该在 html 代码中保存想要链接的 css 文件 或者我们应该如何链接到该文件 作为一个例子 我发布了这个 html 代码
  • 功能证明 (Haskell)

    我没能读懂 RWH 我命令没有人放弃Haskell 函数式编程的技巧 现在我对第 146 页上的这些功能证明很好奇 具体来说 我试图证明 8 5 1sum reverse xs sum xs 我可以做一些归纳证明 但后来我陷入困境 HYP
  • opencv无法保存视频

    我正在尝试使用 opencv 写入方法保存视频 但视频保存为 0 kb 我的代码出了什么问题 import cv2 cap cv2 VideoCapture k1 mp4 assert cap isOpened fgbg cv2 bgseg
  • 使用 CUDA 进行希尔伯特变换

    为了对一维数组进行希尔伯特变换 必须 对数组进行 FFT 将数组的一半加倍 将另一半归零 反 FFT 结果 我正在使用 PyCuLib 进行 FFTing 到目前为止我的代码 def htransforms data N data shap
  • Firebase 实时数据库的分页

    我一直在尝试寻找一种为 Firebase 实时数据库进行分页的方法 我看到很多关于 Cloud Firestore 分页的教程 文章 但没有看到关于实时数据库的分页 下面是我的代码及其按预期工作 谁能指出我添加分页的正确方向 如果可能的话
  • 使用 Gradle 将模块化库发布到 Maven

    假设我使用 Gradle 进行模块化库开发 在我的根项目中我有子项目geometry algorithms visualizer 我想发布每个的 jar 工件 至于现在在我的根build gradle我有以下部分 apply plugin
  • MVC 模型对象、域对象和 DTO 之间有什么区别

    MVC 模型对象 域对象和 DTO 之间有什么区别 我的理解是 MVC 模型对象 对要由相应视图显示的数据进行建模 它可能不会直接映射到域对象 即可能包含来自一个或多个域对象的数据 客户端 可能包含业务逻辑 例如 验证 计算属性等 没有持久
  • 比较()中的空字段该怎么办?

    在Java中 我使用一个类 其中一些字段可以null 例如 class Foo String bar 我想为这个类写一个BarComparator private static class BarComparator implements
  • 如何使用 VBA sendkeys 打印或发送大括号 ( )

    我有以下代码 但不发送大括号 sendkeys a script sh true 但它作为 a script sh 发送 大括号缺失 Try this SendKeys a script sh True 例如 Sub Sample Dim
  • Adobe Flash Builder 能否用于调试和分析 OpenLaszlo SWF10/SWF11 应用程序?

    我读过 Adob e 的Flash Builder 4 0 支持 ActionScript 3 的分析 http help adobe com en US flashbuilder using WS6f97d7caa66ef6eb1e63e
  • 为什么 Hadoop 中正确的缩减数量是 0.95 或 1.75?

    hadoop 文档指出 正确的归约次数似乎是 0 95 或 1 75 乘以 mapred tasktracker reduce tasks maximum 0 95 所有的减少都可以立即启动并开始 地图完成时传输地图输出 用1 75更快 节
  • UML 类图概念、规范、实现

    我目前正在阅读 Martin Fowler 的 UML Distilled 我刚刚介绍了有关类图的部分 他在其中强调了在对类图进行建模之前理清自己的观点的必要性 然而 在实际绘制类图时 我对它的实际外观有点困惑 例如 我理解理论含义会改变关