UML之类与类图
在所有项目中,类都是最常见的UML模型元素(当然,不可否认,很多项目还没画出类图就直接进入编码实现的阶段了)。类是UML模型与具体实现代码之间的桥梁,随着对UML建模的深入了解,我们也会发现,类(确切说是分析类)其实也是一些模型之间的桥梁。
在真实世界中不同对象通过协同工作完成相关业务。而从软件系统实现层面来说,是系统中的不同对象通过协同工作完成业务系统的相关功能。系统中的对象往往是真实世界中对象的映射。在面向对象的分析、设计(OOAD)与编程(OOPL)中,系统中的对象是类的实例,而类是对现实世界中对象的抽象,它代表了现实世界中被抽象对象的集合。
类对对象的抽象是通过抽取其与业务需求实现相关联的特征而完成的,定义完成的类,可以看作是产生对象实例的工厂或模板。
真实世界中有两类对象:一类是看得见的摸得着的实实在在的实体对象,这些对象比较容易发现,我们可以给予它们名称,可以轻易了解它的一些属性,比如:图书、人、汽车等;另一类是看不见摸不着的抽象的概念,比如:购物网站的订单、日期、时间等。
不同的类拥有不同的特性和行为,类的特性称为属性,类的行为称为操作。
对于图书而言,它的特性由书名、作者、出版年份、ISBN号、印刷批次等组成,而这里的每一项是一个类的属性。我们可以通过这些属性识别出“这是谁写的哪本书”,而如果是在图书馆中的图书则还会有借阅号、借阅状态等属性,这些属性则可以识别出“这是放在哪个书架上的哪本书”。
对于图书而言,它本身不会有主动的行为,如果是在图书馆中的图书,它的行为(即操作)则可能包括借书、还书等。
UML中用类图来描述类,类图通常由三部分组成:类名、属性列表和操作列表,如下图所示。在使用时,类名是必须给出的,而属性列表与操作列表在不同视图中则可以根据需要省略其中的一个或者两者都省略,但如果两者都出现的话,则必须保证属性列表在上操作列表在下。

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

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

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


通常我们会通过工具来描绘UML中的各种图形,对于类图,工具通常支持按照属性的可见性进行筛选展示,例如你可以只展示public的属性而隐藏剩余的其它属性。
类图展示属性的区域,如果你愿意,还可以明确表明这个区域是描述类属性的区域,其具体做法是在类图属性区域的顶端标明“attributes”,但是要注意的是它是小写居中的复数形式。

操作是类实例可以被要求执行、承受、启动的相关行为,或者是可以在对象上被执行的相关行为。如果一个类不是一个活动类,它的实例不会自己主动做任何事情,这些操作将由其它对象进行触发。操作名应该是一个动词,通常其首字母要小写,并且其后要跟随一对小括号“()”。
依然以借阅系统中的代表图书的类Book为例,它应当具备的操作有借书、还书、预订等。添加了这些操作的类Book的类图如下图所示:

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

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

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

UML之类与类图的更多相关文章
- UML简单介绍—类图详解
类图详解 阅读本文前请先阅读:UML简单介绍—类图这么看就懂了 1.泛化关系 一个动物类: /** * 动物类 */ public class Animal { public String name; ...
- 3.UML中的类图及类图之间的关系
统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...
- GOF 的23种JAVA常用设计模式总结 02 UML中的类图与类图之间的关系
统一建模语言UML 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际 ...
- UML中的类图及类图之间的关系
统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...
- UML精粹3 - 类图,序列图,CRC
类图Class diagram 类图描述系统中的对象类型,以及它们之间的各种静态关系.类图也展示类的性质和操作,以及应用于对象连接方式的约束.UML中的特性feature,涵盖了性质property和 ...
- 软件工程 #02# Entity Relationship Diagram VS. 用 UML 中的类图表示 E-R 图
不同的老师叫我们画 E-R 图居然是不一样的,于是我仔细研究了一番.. 通常所说的 E-R 图(外文全称 Entity Relationship Diagram,简称 ERD)长这个样子: 而有时候它 ...
- UML简单介绍—类图这么看就懂了
如何看懂类图 1.类图简介 描述类的内部结构和类与类之间的关系,是一种静态结构图. 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关 ...
- 【UML 建模】类图介绍
1.类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静态模型. 2.类的关系有泛化(Generalization). ...
- UML静态视图——类图、对象图、包图
绘画类的最重要的图是抽象类.让我们回顾一下类的基本内容. 一.分类 1.类的概念: 面向对象编程的类是一个基本概念.类是具有相同特性的.办法.集合语义和一组对象的关系. 2.类分类: 实体类:保存要放 ...
- 使用UML工具分析类图与类的关系-bouml(java和C++)
在分析类之间的关系时可以借助工具来实现. bouml是一个UML分析工具,最新的版本是收费的,但是之前的版本是免费的. 这里使用的是4.23版. Bouml安装: 安装软件就按照流程走就行了.但是第一 ...
随机推荐
- EBS GL 当前职责有访问权限的所有账套
CREATE OR REPLACE VIEW CUX_GL_ACCESS_LEDGER_V AS SELECT L.LEDGER_ID,L.NAME,L.LEDGER_CATEGORY_CODE FR ...
- 在 OpenFunction 中运行 Serverless 应用
除了构建和运行 Serverless 函数之外,OpenFuntion 还支持构建和运行 Serverless 应用.因此,OpenFunction 用户可以不用局限在各语言的 functions-f ...
- 云原生周刊 | 让 ChatGPT 以电子邮件的方式来解释 KubeSphere
过去的一周是 ChatGPT 的狂欢,我猜每一位云原生玩家都很好奇他是如何看待 Kubernetes 的.咱们不防换个方式来提问,让它使用电子邮件的方式来向别人推荐 KubeSphere 和 Open ...
- NebulaGraph 的云产品交付实践
作者:乔雷,Vesoft.Inc 云原生技术专家 NebulaGraph 介绍 NebulaGraph 是由杭州悦数科技有限公司自主研发的一款开源分布式图数据库产品,擅长处理千亿节点万亿条边的超大数据 ...
- Java高并发关于synchronized的8锁讲解
先了解一个概念:synchronized 锁的是这个方法所在的资源类,就是这个对象,也就是同一时间段不可能有两个线程同时进到这个资源类,同一时间段,只允许有一个线程访问资源类里面的其中一个synchr ...
- 深入解析C#异步编程:await 关键字背后的实现原理
C# 异步编程中 await 实现原理详解 在C#中,async 和 await 关键字用于编写异步代码.本文将详细介绍 await 的实现原理,包括状态机的生成.回调函数的注册和触发等关键步骤. 1 ...
- 七、Spring Boot集成Spring Security之前后分离认证最佳实现
二.自定义用户名密码认证过滤器RestfulUsernamePasswordAuthenticationFilter 1.注册过滤器方式 使用httpSecurity.addFilter/addFil ...
- 2.16 Linux挂载详解
前面讲过,Linux 系统中"一切皆文件",所有文件都放置在以根目录为树根的树形目录结构中.在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构) ...
- Myeclipse优化:自动转义字符串中的特殊字符
在Myeclipse或者Eclipse中,将一段带引号(或其他的需要转义)字符串黏贴到引号中,双引号默认不会自动转义,手工一个一个去转义(变成\")的话实在是费事,这里记录一下让Myecli ...
- 游戏修改器之Cheat Engine
下载地址: https://cheatengine.org/downloads.php 游戏修改工具 汉化: 1)找到翻译包并下载 --> Downloads > Translations ...