【转】UML基础: 第 2 部分 - 对象图 (Object Diagram)

对象图是从类图派生的,因此对象图依赖于类图。

对象图表示类图的一个实例。类图和对象图的基本概念是相似的。对象图也表示系统的静态视图,但这个静态视图是系统在特定时刻的快照。

对象图用于呈现一组对象及其关系作为实例。

对象图的目的

图表的目的应该清楚地理解为实际实施。对象图的目的与类图相似。

不同之处在于类图表示由类及其关系组成的抽象模型。然而,一个对象图代表了特定时刻的一个实例,它本质上是具体的。

这意味着对象图更接近实际的系统行为。目的是在特定时刻捕获系统的静态视图。

对象图的目的可以概括为:

  • 正向和逆向工程。
  • 系统的对象关系
  • 交互的静态视图。
  • 从实践角度理解对象行为及其关系

对象图与类图

说明对象图是什么样子的最好方法是显示从相应类图派生的对象图。

以下订单管理系统显示它们之间的关系。这个小类图表明大学部门可以包含许多其他部门,下面的对象图实例化类图,并用一个具体的例子来代替它。

 

 

如何绘制对象图?

我们已经讨论过一个对象图是类图的一个实例。它意味着一个对象图由类图中使用的事物的实例组成。

所以两个图都是由相同的基本元素组成,但形式不同。在类图中,元素以抽象形式表示蓝图,而在对象图中元素以具体形式表示现实世界对象。

为了捕获一个特定的系统,类图的数量是有限的。但是,如果我们考虑对象图,那么我们可以拥有无​​限数量的实例,这些实例在本质上是独一无二的。只考虑那些对系统有影响的实例。

从上面的讨论可以清楚看出,单个对象图不能捕获所有必要的实例,或者不能指定系统的所有对象。因此,解决方案是 -

  • 首先,分析系统并确定哪些实例具有重要的数据和关联。
  • 其次,仅考虑那些将涵盖功能的实例。
  • 第三,由于实例的数量是无限的,因此进行一些优化。

在绘制对象图之前,应该清楚地记住以下事情 -

  • 对象图由对象组成。
  • 对象图中的链接用于连接对象。
  • 对象和链接是用于构造对象图的两个元素。

之后,在开始构建图表之前,需要确定以下事项 -

  • 对象图应该有一个有意义的名称来表明它的用途。
  • 最重要的因素是待确定。
  • 对象之间的关联应该澄清。
  • 需要捕获不同元素的值以包含在对象图中。
  • 在需要更清晰的地方添加适当的注释。

下图是一个对象图的例子。它代表了我们在类图中讨论的订单管理系统。下图是特定购买时系统的一个实例。它有以下几个目的。

  • 顾客
  • 订购
  • 特殊订单
  • NormalOrder

现在客户对象(C)与三个订单对象(O1,O2和O3)相关联。这些订单对象与特殊订单和正常订单对象(S1,S2和N1)相关联。在特定的时间内,客户有以下三个不同号码(12,32和40)的订单。

客户可以增加未来的订单数量,在这种情况下,对象图表会反映这一点。如果观察到订单,特殊订单和正常订单对象,那么您会发现它们有一些值。

对于订单,值为12,32和40,这意味着对象在特定时刻具有这些值(这里是购买时的特定时间被认为是时刻),当实例被捕获时

订单数量为20,30和60的特殊订单和普通订单对象也是如此。如果考虑不同的购买时间,那么这些值将相应地改变。

考虑到上面提到的所有要点,已经绘制了以下对象图

uml_object_diagram.jpg

 

在哪里使用对象图?

对象图可以想象为特定时刻正在运行的系统的快照。让我们考虑一个正在运行的列车的例子

现在,如果你拍下正在运行的火车,那么你会发现它具有以下的静态图片 -

  • 正在运行的特定状态。
  • 特定数量的乘客。如果在不同的时间拍摄,这将会改变

在这里,我们可以想象运行中的列车的捕捉是具有上述值的对象。对于任何现实生活中的简单或复杂系统来说都是如此。

简而言之,可以说对象图用于 -

  • 制作一个系统的原型。
  • 逆向工程。
  • 建模复杂的数据结构。
  • 从实践角度理解系统。

uml建模阅读列表

  • 什么是UML?
  • 为什么使用UML建模?
  • 14个UML图类型概述
  • 什么是类图?
  • 什么是组件图?
  • 什么是部署图?
  • 什么是对象图?
  • 什么是包图?
  • 什么是复合结构图?
  • 什么是轮廓图?
  • 什么是用例图?
  • 什么是活动图?
  • 什么是状态机图?
  • 什么是序列图?
  • 什么是通信图?
  • 什么是交互概览图?
  • 什么是时序图
  • UML协会vs聚合vs组合
  • UML类图教程
  • 状态机图与活动图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外部依赖项很多未定义标识符_从日本编程书籍《我的第一本编程书》中译版看中文例程如何扬长避短——标识符(一)

日本作者平山尚在前言归结了本书的三点独特之处:从始至终只编写一个程序(俄罗斯方块游戏)使用专门的工具绝对面向首次接触程序的人群第一点,优势是一个项目主体贯穿全书,但同时很考验编排顺序,以及技术覆盖…

Qt: QTableView如何获取(行)选中、行切换信息

**情景:**做一个信息表格,需要多个Model切换,必须用QTableView,而不能用QTableWidget,因为后者不可以进行setModel()。 方案: QTableView和选择有关的的信号有: void activated(const QModelI…

动态网站的技术路线_3个好玩实用小网站!闲暇时间不妨打开看看

感谢你关注“最佳应用”每篇文章解决某行业或某人群的一个痛点第八十四期原创文章By:小佳昨天刷抖音听了一首很有魔性的歌曲,结果分享到社交平台,没想到被很多键盘侠喷了,留言全是批判“审美有毒”,这种垃圾歌曲能火就…

【转】1.DThread、ThreadPool、Task、Parallel的基本用法、区别以及弊端

多线程的操作在程序中也是比较常见的,比如开启一个线程执行一些比较耗时的操作(IO操作),而主线程继续执行当前操作,不会造成主线程阻塞。线程又分为前台线程和后台线程,区别是:整个程序必须要运行完前台线程才会退出&a…

vue传值到后端_Vue.js快速入门就从这儿开始特别是后端程序员

自从前后端分离开始变成主流后,曾经的Jsp、FreeMarker、Velocity、Thymeleaf貌似慢慢被遗忘了,取而代之的是兴起的前端主流语言,比如Vue、React和AngularJS介绍VueVue其实是借鉴了 Angular,目前GitHubstar数最多,建议后…

unity3d collider自动调整大小_自动网格组合建模工具Unity游戏素材资源

分享最新的CG教程与素材资讯!人人素材RRCG-专业的CG艺术交流网站点击上方蓝字关注人人素材本游戏资料是自动网格组合建模工具Unity游戏素材资源,大小:735 KB ,格式:unitypackage,使用软件:unity…

【转】2.2[译]async/await中阻塞死锁

这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁。内容主要是从作者Stephen Cleary的两篇博文中翻译过来. 原文1:DontBlock on Async Code 原文2:why the AspNetSynchronizationContext was remove…

Java运用自身排序算法将数组或容器进行随机打乱。

基本思路&#xff1a;数组调用Arrays.sort(T[] a,Comparator<? super T> c),对Comparator进行重写。运用Random类 &#xff0c;实现对数字的随机排序。 对数字进行随机排序。代码如下&#xff1a; import java.util.Arrays; import java.util.Comparator; import java…

文本编码解释

一张图解释字符集 举例说明什么是编码&#xff1a; UTF-8编码 等长编码对于英文来说浪费空间&#xff0c;所以出现了变长编码UTF系列&#xff0c;如UTF8&#xff0c;UTF16&#xff0c;UTF32。 UTF8的编码对象是整个Unicode字符集&#xff0c;所以可以表示所有国家的语言而不会…

tkinter label_tkinter做一个简易提词板

我们看综艺的时候&#xff0c;经常能看到现场的提词板。今天我们就用tkinter做一个简单的提词板&#xff0c;用到了tkinter的label来动态显示文字。我们就以最近火爆的《想见你》这首歌为例&#xff0c;按照歌词时间来显示歌词。首先我们要准备好歌词文件&#xff0c;一般是lrc…

web前后端 http转https

1.转换前准备 http转https需要一个证书、本文已ssl证书举例&#xff0c;只有认证的证书才能被认可。阿里云可以申请免费的证书&#xff0c; 但是生成证书需要域名。且域名要绑定ip。故ssl申请前需要域名。可上阿里云购买。 证书申请教程:证书申请 绑定ip:如果没有服务器、也…

Qt开发技巧:编写.pro文件,在构建流程中加入命令行的方法

1、在项目构建前执行命令 在项目构建前执行命令cmd存在问题system(cmd)存在执行多次的问题&#xff0c;可以参考message函数的QMake Manual说明 优化后的表达式如下&#xff0c;这样此命令只会在构建前执行一次&#xff1a; !build_pass:system(cmd) 2、在链接前后执行&#x…

c++清空输入缓冲区_干货 | C++的输入输出方法

C和C并没有将输入与输出实现在语言中&#xff0c;而是在类库中实现。作为C的超集&#xff0c;C继承了C的输入输出方法。同时将输入与输出视为字流。流充当了程序和流源流目标之间的桥梁。本文将介绍C的输入输出方式&#xff0c;并且浅谈C与C均有的输入输出方式对C有一定学习的同…

Qt应用程序发布:Qt应用程序添加版本版权生产商等信息

设置方法 在QMake Manual手册中搜索关于QMAKE_TARGET内容可以看到有如下QMake变量&#xff1a; QMAKE_TARGET_COMPANY&#xff1a;用于指定生产商QMAKE_TARGET_DESCRIPTION&#xff1a;用于描述应用程序QMAKE_TARGET_COPYRIGHT&#xff1a;用于声明版权QMAKE_TARGET_PRODUCT&…

stl源码剖析_STL源码剖析 阅读笔记(二)allocator

一、空间分配器 allocator从使用上看&#xff0c;空间分配在任何语言的任何组件都不需要我们去过多关心&#xff0c;因为语言、组件的底层肯定都比较完整的做了这件事情。从实现上看&#xff0c;学习 allocator 的原理在源码学习中是首当其冲。因为没有空间分配&#xff0c;则无…

easyexcel将对象处理为多列,自增序列

概述 主要记录在开发中遇到的问题&#xff1a;使用easyexcel导出excel&#xff0c;一般数据都是保存在数据库中&#xff0c;如果查询返回的是一个实体类&#xff0c;且里面有嵌套的实体类对象&#xff0c;这时导出的时候要先对查询出的数据进行业务逻辑处理&#xff0c;让它符…

python做excel表格代码_python操作excel表格

我们在写测试用例的时候&#xff0c;是创建一个表格.xlsx&#xff0c;然后把各种条件加到这张表格中去&#xff0c;所以&#xff0c;如何对excel表格操作&#xff0c;是相当重要的一环&#xff0c;那么&#xff0c;接下来&#xff0c;这篇博客就直接教会大家如何通过python去处…

Windows 查看程序ip地址(面对小白)

前言&#xff1a;Windows自带资源管理器可以查看程序的IP地址。下面以微信通话为例&#xff0c;详细步骤如下(面向小白)&#xff1a; 打开任务管理器 打开方法(以下方法都可以)&#xff1a; 键盘按住 【ctrl】 【alt】 【delete】 ,选择【任务管理器】Windows 10 以下系统…

【转】C#中相同不同程序集存在相同的命名空间的时候的冲突解决办法

快速解决办法描述描述: 1.将相同命名空间的不同程序集分别进行取别名&#xff1a;【具体操作:右击相同程序的引用&#xff0c;在别名上修改&#xff0c;默认的为global】。 2.调用&#xff1a;在所在调用文件里面最前面写 extern alias 别名&#xff0c;然后using 别名.Names…

chrome webdriver_(最新版)如何正确移除Selenium中的 window.navigator.webdriver

摄影&#xff1a;产品经理产品经理的三文鱼炒饭在《一日一技&#xff1a;如何正确移除Selenium中window.navigator.webdriver的值》一文中&#xff0c;我们介绍了在当时能够正确从Selenium启动的Chrome浏览器中移除window.navigator.webdriver的方法。后来时过境迁&#xff0c;…