在所有项目中,类都是最常见的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. 云原生周刊:Kubernetes v1.31 中的移除和主要变更|2024.7.22

    开源项目 Argo Rollouts Argo Rollouts 是一个 Kubernetes 控制器和一组自定义资源定义(CRDs),提供高级部署功能,例如蓝绿部署.金丝雀部署.金丝雀分析.实验以及 ...

  2. 云原生爱好者周刊:KubeSphere 3.3.0 Alpha 版发布

    开源项目推荐 Collection of Linux eBPF slides/documents 这个项目收集了各种与 eBPF 相关的资料,非常全面. magic-trace magic-trace ...

  3. Tony Bai · Go语言第一课 _个人笔记 04|初窥门径:一个Go程序的结构是怎样的?

    Tony Bai · Go语言第一课 _个人笔记 04|初窥门径:一个Go程序的结构是怎样的? 1.配置国内的Go模块的镜像 配置国内镜像代理(使用阿里云镜像) go env -w GOPROXY=h ...

  4. 在 Kubernetes 中运行 Locust 与 Selenium:安装 Chrome 和 ChromeDriver

    在现代软件开发中,性能和用户体验是至关重要的,而负载测试和自动化测试可以帮助我们实现这一目标.在本文中,我们将讨论如何在 Kubernetes 环境中运行 Locust 和 Selenium,并详细介 ...

  5. Selenium操作:测试form表单

    from表单是经常测试的用例,用户登录.注册等都会用到form表单,本文简单设计了一个用户登录的form表单,并对该form表单进行测试 一.自定义form表单 1.用到的组件 如下图,图中定义了一个 ...

  6. My SQL 列转行操作

    原表结构如下,我们可以发现,"日运输量"和"车次"是在同一张表中相互独立的两个字段,即独立的两列数据,下面,我将系统中的测试数据以及代码全部放出来,以解释列转行 ...

  7. 浅谈TiKV集群运维问题排查与修复——磁盘空间占用问题

    作者:来自 vivo 互联网存储团队- Yuan Jianwei 本文介绍了 TiKV 磁盘空间问题的排查思路与解决方案. 一.背景介绍 在业务快速扩张的年代,vivo 内部的很多业务为了可以快速上线 ...

  8. 2.10 破解密码这么简单,Linux是安全的操作系统吗?

    很多人看到系统修复模式这节内容时,都会有所感慨:Linux 的密码破解太容易了,这样的操作系统还安全吗?Linux 不是以安全性著称的吗? 图 1 密码安全 本节,我们结合图 1 解释一下类似的问题. ...

  9. yum 安装软件出现 gpg keys 相关问题

    问题:Public key for *.rpm is not installed 系统中没有能验证该 RPM 数字签名的公钥 安装现有的 gpg 公钥,在 /etc/pki/rpm-gpg/ 下,可以 ...

  10. 如何利用1%的数据优化特定领域LLM预训练? | EMNLP'24

    来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Target-Aware Language Modeling via Granular Data Sampling 论文地址:https:// ...