在所有项目中,类都是最常见的UML模型元素(当然,不可否认,很多项目还没画出类图就直接进入编码实现的阶段了)。类是UML模型与具体实现代码之间的桥梁,随着对UML建模的深入了解,我们也会发现,类(确切说是分析类)其实也是一些模型之间的桥梁。

在真实世界中不同对象通过协同工作完成相关业务。而从软件系统实现层面来说,是系统中的不同对象通过协同工作完成业务系统的相关功能。系统中的对象往往是真实世界中对象的映射。在面向对象的分析、设计(OOAD)与编程(OOPL)中,系统中的对象是类的实例,而类是对现实世界中对象的抽象,它代表了现实世界中被抽象对象的集合。

类对对象的抽象是通过抽取其与业务需求实现相关联的特征而完成的,定义完成的类,可以看作是产生对象实例的工厂或模板。

真实世界中有两类对象:一类是看得见的摸得着的实实在在的实体对象,这些对象比较容易发现,我们可以给予它们名称,可以轻易了解它的一些属性,比如:图书、人、汽车等;另一类是看不见摸不着的抽象的概念,比如:购物网站的订单、日期、时间等。

不同的类拥有不同的特性和行为,类的特性称为属性,类的行为称为操作。

对于图书而言,它的特性由书名、作者、出版年份、ISBN号、印刷批次等组成,而这里的每一项是一个类的属性。我们可以通过这些属性识别出“这是谁写的哪本书”,而如果是在图书馆中的图书则还会有借阅号、借阅状态等属性,这些属性则可以识别出“这是放在哪个书架上的哪本书”。

对于图书而言,它本身不会有主动的行为,如果是在图书馆中的图书,它的行为(即操作)则可能包括借书、还书等。

UML中用类图来描述类,类图通常由三部分组成:类名、属性列表和操作列表,如下图所示。在使用时,类名是必须给出的,而属性列表与操作列表在不同视图中则可以根据需要省略其中的一个或者两者都省略,但如果两者都出现的话,则必须保证属性列表在上操作列表在下。



类名应该是一个名词,通常其首字母要大写。对于图书,我们可以将它的类名定义为Book。

属性名应该是一个名词,通常其首字母要小写,属性类型可以是基本数据类型、自定义的数据类型或者类。类Book的属性一般会包含有书名、作者、出版年份等信息,而如果类Book是为图书馆的借阅系统建立的,则类Book还应包含索书号等信息。添加了这些属性的类Book的类图如下所示:



在上图中,我们可以看到属性以“属性名:类型”的形式展现。在建模阶段,我们也可以先不考虑属性的类型,即“:类型”部分可以省略,省略属性类型的类图如下所示。



观察以下两个表示类Book的类图,可以发现这两个类图都省略了属性accessionNo,第一个类图在最后通过添加省略号(…)表示还有未显示出来的属性,如果在类图的属性区域出现省略号,则表示至少有一个属性在类图中没有被展示出来。





通常我们会通过工具来描绘UML中的各种图形,对于类图,工具通常支持按照属性的可见性进行筛选展示,例如你可以只展示public的属性而隐藏剩余的其它属性。

类图展示属性的区域,如果你愿意,还可以明确表明这个区域是描述类属性的区域,其具体做法是在类图属性区域的顶端标明“attributes”,但是要注意的是它是小写居中的复数形式。



操作是类实例可以被要求执行、承受、启动的相关行为,或者是可以在对象上被执行的相关行为。如果一个类不是一个活动类,它的实例不会自己主动做任何事情,这些操作将由其它对象进行触发。操作名应该是一个动词,通常其首字母要小写,并且其后要跟随一对小括号“()”。

依然以借阅系统中的代表图书的类Book为例,它应当具备的操作有借书、还书、预订等。添加了这些操作的类Book的类图如下图所示:



与属性类似,类图中的操作也可以在展示时省略,省略号表示至少有一个操作被隐藏。而展示操作的区域,也类似可以在顶端标明“operations”,它同样也是小写居中的复数形式。



操作可能会需要参数,添加了操作参数名称的类图如下所示:

为操作添加参数时,也可以明确说明各参数的类型,这可以通过在参数名后添加“:类型”来实现。类似地,如果建模者要说明操作的返回值类型,可以在跟随操作参数列表右侧的“)”后添加“:类型”来进行说明。为类Book的操作添加参数类型与返回类型的类图如下图所示:



需要补充说明的是,这里提及的“操作”在类的实例外是可见的,它可能会由一系列“方法”具体实现,这些“方法”在类的实例外是不可见的。通常,我们并不会刻意用“操作”与“方法”来区分这种差别,而是都称为“方法”,然后再通过可见性的约束来实现上述目的。

最后,再次提醒,如果在类图中要同时展示属性与操作,必须属性在上而操作在下。

UML之类与类图的更多相关文章

  1. UML简单介绍—类图详解

    类图详解 阅读本文前请先阅读:UML简单介绍—类图这么看就懂了 1.泛化关系 一个动物类: /** * 动物类 */ public class Animal { public String name; ...

  2. 3.UML中的类图及类图之间的关系

    统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...

  3. GOF 的23种JAVA常用设计模式总结 02 UML中的类图与类图之间的关系

    统一建模语言UML 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际 ...

  4. UML中的类图及类图之间的关系

    统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...

  5. UML精粹3 - 类图,序列图,CRC

    类图Class diagram 类图描述系统中的对象类型,以及它们之间的各种静态关系.类图也展示类的性质和操作,以及应用于对象连接方式的约束.UML中的特性feature,涵盖了性质property和 ...

  6. 软件工程 #02# Entity Relationship Diagram VS. 用 UML 中的类图表示 E-R 图

    不同的老师叫我们画 E-R 图居然是不一样的,于是我仔细研究了一番.. 通常所说的 E-R 图(外文全称 Entity Relationship Diagram,简称 ERD)长这个样子: 而有时候它 ...

  7. UML简单介绍—类图这么看就懂了

    如何看懂类图 1.类图简介 描述类的内部结构和类与类之间的关系,是一种静态结构图. 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关 ...

  8. 【UML 建模】类图介绍

    1.类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静态模型. 2.类的关系有泛化(Generalization). ...

  9. UML静态视图——类图、对象图、包图

    绘画类的最重要的图是抽象类.让我们回顾一下类的基本内容. 一.分类 1.类的概念: 面向对象编程的类是一个基本概念.类是具有相同特性的.办法.集合语义和一组对象的关系. 2.类分类: 实体类:保存要放 ...

  10. 使用UML工具分析类图与类的关系-bouml(java和C++)

    在分析类之间的关系时可以借助工具来实现. bouml是一个UML分析工具,最新的版本是收费的,但是之前的版本是免费的. 这里使用的是4.23版. Bouml安装: 安装软件就按照流程走就行了.但是第一 ...

随机推荐

  1. 基础控件(ListView,RecyclerView,单位和尺寸,ViewPager,ViewPager2)

    ListView list_item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa ...

  2. vue数据异步加载!坑

    "Error in render: "TypeError: Cannot read property '0' of undefined""渲染错误问题 搭建项目 ...

  3. 蚂蚁图团队GraphRAG支持社区摘要——Token相比微软直降50%

    今年5月份,我们在DB-GPT v0.5.6版本发布了蚂蚁首个开源GraphRAG框架,支持了多种知识库索引底座,并在文章<Vector | Graph:蚂蚁首个开源GraphRAG框架设计解读 ...

  4. 一份阅读量30万+免费且全面的C#/.NET面试宝典

    前言 C#/.NET/.NET Core相关技术常见面试题汇总,不仅仅为了面试而学习,更多的是查漏补缺.扩充知识面和大家共同学习进步.该知识库主要由自己平时学习实践总结.网上优秀文章资料收集(这一部分 ...

  5. 3.21 Linux PATH环境变量及作用(初学者必读)

    在讲解 PATH 环境变量之前,首先介绍一下 which 命令,它用于查找某个命令所在的绝对路径.例如: [root@localhost ~]# which rm /bin/rm [root@loca ...

  6. 利用 Screen 保持 VSCode 连接远程任务持续运行

    在 Linux 上使用 screen 是一种保持进程持续运行的便捷方式,即使用户断开 SSH 连接,进程也不会中断. 我在使用VSCode连接AutoDL时,不知道如何能够使进程保持运行,后查阅资料可 ...

  7. 不容忽视的PCB测试点,关键时刻可以避免批量事故哦!

    ​  PCB测试点是啥子?请看下图: ​ 如果你曾经用过NOKIA手机,每次你打开后盖换电池的时候,每次看到的那两排圆形的点--就是PCB测试点,or you can call it Test Poi ...

  8. Flink CDC 实时同步 Oracle

    Flink CDC 系列文章 Flink CDC 实时同步 MySQL Flink CDC 实时同步 Oracle 准备工作 Oracle 数据库(version: 11g) 开启归档日志 sqlpl ...

  9. 国产数据库oceanBbase,达梦,金仓与mysql数据库的性能对比 一、比对方法和结果

    最近调研了三款国产化数据库与mysql做对比,调研主要性能指标是大数据写入速度.大数据读取速度以及是否支持分表. 一.测试结果 测试结果与预期的差别很大     1.先说oceanBase社区版这款数 ...

  10. 用于自然语言处理的循环神经网络RNN

    前一篇:<人工智能模型学习到的知识是怎样的一种存在?> 序言:在人工智能领域,卷积神经网络(CNN)备受瞩目,但神经网络的种类远不止于此.实际上,不同类型的神经网络各有其独特的应用场景.在 ...