【转】UML基础: 第1部分 - 类图 (Class Diagram)

类图

类图是一个静态图。它代表了应用程序的静态视图。类图不仅用于可视化,描述和记录系统的不同方面,还用于构建软件应用程序的可执行代码。

类图描述了一个类的属性和操作,以及对系统施加的约束。类图被广泛用于面向对象系统的建模,因为它们是唯一的可以直接用面向对象的语言进行映射的UML图。

类图显示了类,接口,关联,协作和约束的集合。它也被称为结构图。

类图的目的

类图的目的是模拟应用程序的静态视图。类图是唯一可以直接映射到面向对象语言的图,因此在构建时被广泛使用。

UML图如活动图,序列图只能给出应用程序的顺序流程,但类图有点不同。它是编码器社区中最流行的UML图。

类图的目的可以概括为:

  • 应用程序静态视图的分析和设计。

  • 描述系统的责任。

  • 组件和部署图的基础。

  • 正向和逆向工程。

如何绘制类图?

类图是用于构建软件应用程序的最流行的UML图。学习类图的绘图程序是非常重要的。

类图在绘制时有很多属性需要考虑,但这里将从顶层视图考虑图。

类图基本上是系统静态视图的图形表示,代表了应用程序的不同方面。类图的集合代表整个系统。

在绘制类图时应记住以下几点 -

  • 类图的名称应该对描述系统的方面有意义。

  • 应预先确定每个元素及其关系。

  • 每个班级的责任(属性和方法)应该清楚地确定

  • 对于每个类,应该指定最小数量的属性,因为不必要的属性会使图变得复杂。

  • 根据需要使用注释来描述图表的某些方面。在绘图结束时,开发人员/编码人员应该可以理解。

  • 最后,在制作最终版本之前,应该在普通纸上绘制图表并重复尽可能多次以使其正确。

下图是应用程序的订单系统示例。它描述了整个应用程序的特定方面。

  • 首先,订单和客户被确定为系统的两个要素。他们有一对多的关系,因为客户可以有多个订单。

  • Order类是一个抽象类,它有两个具体的类(继承关系)SpecialOrder和NormalOrder。

  • 这两个继承的类具有作为Order类的所有属性。另外,它们还具有其他功能,如dispatch()和receive()。

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

Visual Paradigm Online       (一键即时打开使用 )

类图示例:汽车

何处使用类图?

类图是一个静态图,它用来模拟系统的静态视图。静态视图描述了系统的词汇表。

类图也被视为组件和部署图的基础。类图不仅用于可视化系统的静态视图,而且还用于构建任何系统的正向和反向工程的可执行代码。

通常,UML图不是直接映射到任何面向对象的编程语言,但类图是一个例外。

类图清楚地显示了与诸如Java,C ++等面向对象语言的映射。从实践经验来看,类图通常用于构建目的。

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

  • 描述系统的静态视图。

  • 显示静态视图元素之间的协作。

  • 描述系统执行的功能。

  • 使用面向对象的语言构建软件应用程序

  • 如何绘制类图?
  • UML类图教程
  • 免费在线UML工具

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

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

相关文章

Qt QSS知识点记录

一、border-image的使用 具体使用方法参考css3的相关说明,这里主要记录一个使用技巧。 使用时发现按照css3指定的方法来设置边缘非拉伸区的宽度并没有效果。如 border-image: url(test.png) 10 10 10 10; 后来在网上搜索到一篇文章,提供了一个解决方…

int转换为cstring_PostgreSQL 隐式类型转换探秘

个人简介何小栋, 从事产品研发和架构设计工作,对Oracle、PostgreSQL有深入研究,ITPUB数据库版块资深版主。现就职于广州云图数据技术有限公司,系统架构师,博客:http://blog.itpub.net/6906/摘要本文通过与O…

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

对象图是从类图派生的,因此对象图依赖于类图。 对象图表示类图的一个实例。类图和对象图的基本概念是相似的。对象图也表示系统的静态视图,但这个静态视图是系统在特定时刻的快照。 对象图用于呈现一组对象及其关系作为实例。 对象图的目的 图表的目…

Qt 界面设计笔记

1、今天遇到一个情形,在QScrollArea中设置一个QLabel的大小和QScrollArea一样大,设置完立即打印,大小的确是相同的。但是程序启动后,却显示出了滚动条,即QLabel比QScrollArea大。程序运行起来之后在事件响应函数中打印…

【转】1.C Task.CompletedTask和Task.Result小记

在任何返回Task的方法中,如果可以在不进行异步的情况下计算结果,则最好避免使用Task.Run。例如,一个简短的计算函数,或者测试中返回了一个预先计算过的结果,则无需使用Task.Run。 例如,定义了一个返回Task的…

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

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

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

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

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

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

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

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

Qt使用导出类报错:error C2491: “ZMapWidget::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义

在使用一个继承自QObject带有Q_OBJECT宏的导出类时,编译报错:不允许 dllimport 静态数据成员 的定义。 原因是自动生成的moc文件带有静态函数,无法导出。 1、在Qt中的解决办法是不将导出宏定义成Q_DECL_IMPORT。 #if defined(ZMAP_LIBRARY…

【转】2.1(译)关于async与await的FAQ

传送门:异步编程系列目录…… 环境:VS2012(尽管System.Threading.Tasks在.net4.0就引入,在.net4.5中为其增加了更丰富的API及性能提升,另外关键字”async”和”await”是在C#5.0引入的。vs2010打 Visual Studio Async …

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

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

Qt全局信号通信

应用场景分析 Qt开发中经常会遇到作用域跨度比较大的对象间通信的场景,如果直接使用信号槽通过对象指针直接连接,首先需要将对象指针互相暴露出来,其中可能涉及到各种复杂的传递过程,导致程序混乱。一种解决方案是建立全局的信号…

Qt创建浮动子窗口

想要实现子窗口在父窗口上方浮动显示,点击父窗口,子窗口不会被父窗口覆盖,有两种方法: 1、使用QDialog,使用show()显示窗口。 2、子类继承自QWidget,并设置窗口标志Qt::Tool。

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…

【转】C#命名空间与java包的区别分析

本文实例分析了C#命名空间与java包的区别。分享给大家供大家参考。具体分析如下&#xff1a; 相同点&#xff1a; 1、都是为了重用性&#xff08;reusebility&#xff09;——软件工程中一个非常重要的目标。 2、C#里面的命名空间和java中的包都属于访问权限的控制机制。 不…