UML类图简明教程

病大虫
• 阅读 17675

UML类图是用于构建和可视化的面向对象的系统的图形表示法。统一建模语言(UML)中的类图是一种静态结构图,它通过显示系统的结构来描述系统的结构:

  • 类,
  • 他们的属性
  • 操作(或方法),
  • 以及对象之间的关系。

什么是类 (Class)?


类是对象的蓝图。对象和类齐头并进。我们不能不谈论另一个就谈论一个。面向对象设计的重点不是对象,而是类,因为我们使用类来创建对象。因此,一个类描述了一个对象将是什么,但它不是对象本身。

实际上,类描述对象的类型,而对象是类的可用实例。每个对象都是根据相同的蓝图构建的,因此包含相同的组件(属性和方法)。标准含义是对象是类和对象的实例-对象具有状态和行为。

例子

狗有状态-颜色,名字,品种和行为-摇摆,吠叫,进食。对象是类的实例。

UML类图简明教程

UML类符号 (Symbols)


一个类代表一个概念,它封装了状态(属性)和行为(操作)。每个属性都有一个类型。每个操作都有一个签名。_类名是唯一的必填信息_。

UML类图简明教程

类名称 (Class Name):

  • 类的名称出现在第一个分区中。

类属性 (Attribute):

  • 属性显示在第二个分区中。
  • 属性类型显示在冒号后面。
  • 属性映射到代码中的成员变量(数据成员)。

类操作 Operation(方法 Method):

  • 操作显示在第三个分区中。它们是班级提供的服务。
  • 方法的返回类型显示在方法签名末尾的冒号后面。
  • 方法参数的返回类型显示在参数名称后的冒号后面。操作映射到代码中的类方法

UML类图简明教程

类可见性 (Visibility)

类中属性和操作名称前面的+,-和#符号表示该属性和操作的可见性。

UML类图简明教程

  • +表示公共属性或操作
  • -表示私有属性或操作
  • #表示受保护的属性或操作

参数方向性 (Parameter Directionality)

操作(方法)中的每个参数都可以表示为in,outinout,它们指定了相对于调用者的方向。该方向性显示在参数名称之前。

UML类图简明教程

类图的观点 (Perspectives of Class Diagram)

透视图的选择取决于您在开发过程中走了多远。例如,在制定领域模型的过程中,您很少会超越概念观点分析模型通常将概念和规范观点混合在一起。设计模型的开发通常会从着重于规范角度开始,然后演变为实现角度

可以从多种角度解释图:

  • 概念 (Conceptual):表示领域中的概念
  • 规范 (Specification):重点是软件中的抽象数据类型(ADT)的接口
  • 实现 (implementation):描述类将如何实现其接口

视角会影响要提供的详细信息的数量以及值得呈现的关系的种类。如上所述,类名是唯一的必填信息。

UML类图简明教程

类之间的关系 (Relationships)


UML不仅仅是漂亮的图片。如果使用正确,UML可以准确传达如何从图中实现代码。如果经过精确解释,所实现的代码将正确反映设计者的意图。您能否描述每种关系相对于您的目标编程语言的含义,如下图所示?

如果您还不能识别它们,那么本节不会帮助您了解UML类关系。一类可能涉及与其他类的一个或多个关系。关系可以是下列类型之一:

UML类图简明教程

继承 Inheritance(或泛化 Generalization):

概括是更一般的分类器和更具体的分类器之间的分类学关系。特定分类器的每个实例也是通用分类器的间接实例。因此,特定分类器继承了更通用分类器的特征。

  • 表示“是”关系。
  • 抽象类名称以斜体显示。
  • SubClass1和SubClass2是超类的专业​​。

下图显示了继承层次结构的示例。SubClass1和SubClass2派生自SuperClass。关系显示为带有空心箭头的实线,该空心箭头从子元素指向父元素。

UML类图简明教程

继承 (inheritance) 示例-形状

下图显示了具有两种样式的继承示例。尽管连接器的绘制方式不同,但它们在语义上是等效的。

UML类图简明教程

关联 (Assoication)

关联是UML类图中的类之间的关系。它们由类之间的实线表示。关联通常使用反映真实世界问题域的动词或动词短语来命名。

简单关联

  • 两个对等类之间的结构链接。
  • Class1和Class2之间存在关联

下图显示了简单关联的示例。有一个连接<< control >>类Class1和<< boundary >>类Class2的关联。关系显示为连接这两个类的实线。

UML类图简明教程

基数 (Cardinality)

基数表示为:

  • 一对一
  • 一对多
  • 多对多

UML类图简明教程

聚合 (Aggregation)

一种特殊类型的关联。

  • 它代表关系的“一部分”。
  • Class2是Class1的一部分。
  • Class2的许多实例(用*表示)可以与Class1相关联。
  • Class1和Class2的对象具有单独的生存期。

下图显示了一个聚合示例。该关系以实线显示,在关联端带有未填充的菱形,该菱形连接到表示聚合的类。

UML类图简明教程

组成 (Composition)

  • 一种特殊的聚合,其中的一部分在整体被破坏时会被破坏。
  • Class2的对象与Class1一起生存和死亡。
  • Class2不能自立。

下图显示了组成示例。关系以实线显示,在关联端带有实心菱形,该实线与表示整体或合成的类连接。

UML类图简明教程

相依性 (Dependency)

一个类的对象可能在方法的代码中使用另一个类的对象。如果对象未存储在任何字段中,则将其建模为依赖关系。

  • 一种特殊类型的关联。
  • 如果对一个类的定义进行更改可能会导致对另一类的更改,则该类存在于两个类之间(反之亦然)。
  • Class1取决于Class2

下图显示了依赖性的示例。该关系显示为带有打开箭头的虚线。

UML类图简明教程

下图显示了依赖关系的另一个示例。Person类可能具有带有Book参数的hasRead方法,如果该人已经读过这本书(可能通过检查某些数据库),则该方法返回true。

UML类图简明教程

实现 (Realization)

实现是蓝图类与包含其各自实现级别详细信息的对象之间的关系。据说该对象实现了蓝图类。换句话说,您可以将其理解为接口和实现类之间的关系。

例如,所有者接口可以指定获取属性和处置属性的方法。Person和Corporation类需要以可能完全不同的方式实现这些方法。

UML类图简明教程

类图示例:订单系统

UML类图简明教程

类图示例:GUI

类图可能还具有附加到类或关系的注释。

UML类图简明教程

查找免费的类图工具?


Visual Paradigm在线免费版是免费的在线绘图软件,支持类图,其他UML图,ERD工具和组织图工具。它具有一个简单但功能强大的编辑器,可让您快速轻松地创建类图。免费的UML编辑器没有广告,没有访问期限,也没有限制,例如图表数量,形状数量等。您拥有为个人和非商业目的创建的图表。

UML类图简明教程

快速绘制类图

免费的UML软件

免费绘制供个人使用的类图:

  • 无限制的图表和形状
  • 无限制访问时间
  • 没有广告

绘制任意数量的图表。将图形导出到PNG / JPG / GIF / SVG / PDF。

简单而强大

UML图表可以简单有趣。以下是我们的类图编辑器的一些功能:

  • 拖动以创建形状
  • 连接良好的连接器(无分开)
  • 内联编辑类属性和操作
  • 用自己的形状绘制自己的图
  • 数百个图表示例和模板

令人印象深刻的图画

使用对齐向导精确定位形状。使用一系列格式化工具来格式化类图:形状和线条格式,字体样式,可旋转形状,形状对齐和分布,嵌入图像和URL,阴影效果等

类图 (37个模板)

UML类图简明教程

星空局域网

UML类图简明教程

基于令牌环的局域网

UML类图简明教程

公司结构

UML类图简明教程

了解关系

UML类图简明教程

文件输出(归纳使用)

UML类图简明教程

电话(协会使用)

UML类图简明教程

GoF设计模式-代理

UML类图简明教程

GoF设计模式-Flyweight

UML类图简明教程

GoF设计模式-外立面

UML类图简明教程

GoF设计模式-装饰器

UML类图简明教程

GoF设计模式-复合

UML类图简明教程

GoF设计模式-桥梁

UML类图简明教程

GoF设计模式-适配器

UML类图简明教程

GoF设计模式-Singleton

UML类图简明教程

GoF设计模式-原型

UML类图简明教程

GoF设计模式-工厂方法

UML类图简明教程

GoF设计模式-生成器

UML类图简明教程

GoF设计模式-抽象工厂

UML类图简明教程

GoF设计模式-访客

UML类图简明教程

GoF设计模式-模板方法

UML类图简明教程

GoF设计模式-策略

UML类图简明教程

GoF设计模式-状态

UML类图简明教程

GoF设计模式-观察者

UML类图简明教程

GoF设计模式-Memento

UML类图简明教程

GoF设计模式-中介者

UML类图简明教程

GoF设计模式-迭代器

UML类图简明教程

GoF设计模式-解释器

UML类图简明教程

GoF设计模式-命令

UML类图简明教程

GoF设计模式-责任链

UML类图简明教程

类图-订购流程

UML类图简明教程

类图-类和包的约束

UML类图简明教程

类图-包裹中的类(航空公司)

UML类图简明教程

售票

UML类图简明教程

自我协会

UML类图简明教程

协会等级和自我协会

UML类图简明教程

销售订单系统

UML类图简明教程

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
病大虫
病大虫
Lv1
望阙云遮眼,思乡雨滴心。
文章
4
粉丝
0
获赞
0