摘要:类图(Class Diagram)可能是用得最多的一种UML图。类图的基本语法并不复杂,你可能最多学习两三天就可以掌握,然而要真正做到活用类图则可能需要几年的功力。类图是锻炼面向对象分析(OOA:Object-Oriented Analysis)和面向对象设计(OOD:Object-Oriented Design)思想的重要的工具,是业务结构建模的重要工具。本章将会有大量的实战练习,你的OOA思想将会接受极大的考验和提升。

3.2 类图的基本知识

类图有什么用?

某项目客户提供的原始需求文档中,有下面这样的一段话,请你仔细阅读,看看能不能将你搞晕?
“本项目是在一期的基础上增加对电缆通讯工程的管理和施工详细数据的记录和统计,使整个系统更好的管理各工程项目中标开始到竣工验收的全部过程和资料和分析施工过程的数据。 本系统将一条或一个标段的架空电力线路工程定为一个单位工程,即系统中的一个工程项目;每个单位工程分为若干个分部工程;每个分部工程分为若干个分项工程;每个分项工程中又分为若干相同单元工程。”

这段话中带下划线的文字,可能是本系统的一些关键业务概念。

如果你还没有晕的话,请回答下面的问题:
1) 你能用一句话描述这个系统是做什么的吗?
2) 这段话有什么业务概念?每个业务概念是什么意思?
3) 这些业务概念之间是怎样的关系?

上面那段文字充斥了大量的术语、概念(带下划线的字),如果你不是专业人士,恐怕难以读懂上述文字。项目初期,我们往往对业务一无所知,我们最急迫需要解决的问题就是理清楚这些业务概念以及它们的关系。
每个软件系统都会涉及到很多人、业务概念和物品等,这些东西之间可能会有很多关系,发生很多事情。类图能帮助我们识别出这些人、业务概念、物品和事情等,并理清它们的关系。

什么是类?

你大概了解了类图的用途了吧?我们暂时不去深究那段让人头晕的业务描述,我们先看看什么是类?
需求中提到的各种业务概念、人物等,经过抽象后我们都可以视之为类。为了更好地体验什么是类,请看下面这个练习。

练习:如果对本书的读者进行分类,你会如何分类呢?

强烈建议你先思考写下答案后才继续往下看。

男人、女人?
人无非就是男人和女人两种,所以本书的读者不是男人就是女人。这样分类合适吗?
男人和女人在看这本书的时候,会有什么差异吗?将书的读者分为男人和女人,有什么好处?
如果不分为男人和女人,分为老人与年轻人,这样合适吗?

学生、在职人员?
学生和在职人士读本书的时候应该是有所差异的,毕竟两者的基础不太一样。如果你是本书的作者,你觉得本书的目标读者是谁呢?编写本书时,你会更照顾学生还是在职人士呢?我们对读者进行分类,并不是为了分类而分类,而是希望通过对读者这个群体进行分析,写出一本内容更精彩销量更好的书。

将某类东西归纳为一起,可以称为一个类。类有很多种提炼角度,我们需要根据系统的目标、业务的场景等,选取合适的角度对事物进行归纳。
什么是类图?

只有一个类的类图,可能就是最简单的类图了,请看下图:
 
图 3.1 只有一个类的类图

一个类就是一个矩形的方框,最上面是类的名字,中间是属性(Attribute),最下面是操作(Operation)。表示一个类时,可只显示类名,也可以只显示类名和属性,或者是类名和操作。
我们看看这个属性:+属性1:int。
前面的“+”号表示这个属性是public类型的,实际上在需求分析时,不需要管属性是public还是private,全部画成public就可以了。
冒号后面的int,表示属性的类型是int型(整数型),往往在需求分析初始阶段,可不必标识属性的类型。
至于操作,用类图进行业务建模时,一般不需要标识出来。

一个类图通常不止有一个类,有多个类时,我们还需要表达出类之间的关系,后面我们将介绍类之间的关系。

如何识别类?

用类图获取需求的大致步骤如下:
1) 识别出类。
2) 识别出类的主要属性。
3) 描绘出类之间的关系。
4) 对各类进行分析、抽象、整理。
我们通过下面这个练习来体验一下步骤1、2。

练习:你需要做一个培训管理系统,请你用类图识别出课室中有什么人?这些人有什么关键属性?

强烈建议你先独立完成才继续阅读下文。
课室中有以下两类人:
 
图 3.2 学生与讲师1
说明:该图是类图的简单画法,只表达了类名。

这两个类有这样的关键属性:
 
图 3.3 学生与讲师2
说明:上面的类图同时表达了类名和类的属性。属性没有标记public还是private,也没有被标记属性的类型。业务建模时类图的属性可以看成全部是公开的,也不必标记属性的类型。

这个练习的场景是:你需要做一个培训管理系统,所以你识别出类以及他们的属性的时候,务必从这个角度出发。如果你得到的类是男人和女人,那就可能没有什么意义了。

如果你识别出来的属性是身高、体重,这些属性无论是属于学生还是老师,对于培训管理系统来说,可能是没有什么价值的。思考你识别出来的类的属性,能帮助你判断这个类是否合适。每一个类应该具备能表征它核心特点的关键属性,而一般的无特别意义的属性,可不必标记进去。
类图的基本语法是很简单的,但要体会什么是类,准确识别出类就不是那么简单了。实际工作中,我们需要将需求调研中了解到的所有业务对象、人物等列出来,画出他们的关系,反复推敲,逐步才能得到合适的业务模型。下面我们将开始学习类之间的关系。

请看下一节……

作者:张传波

创新工场创业课堂讲师

软件研发管理资深顾问

《火球——UML大战需求分析》作者

www.umlonline.org 创办人

《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.2 类图的基本知识相关推荐

  1. 《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.7 关于对象图

    摘要:类图(Class Diagram)可能是用得最多的一种UML图.类图的基本语法并不复杂,你可能最多学习两三天就可以掌握,然而要真正做到活用类图则可能需要几年的功力.类图是锻炼面向对象分析(OOA ...

  2. 《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.6 考试管理系统(类图综合训练)

    摘要:类图(Class Diagram)可能是用得最多的一种UML图.类图的基本语法并不复杂,你可能最多学习两三天就可以掌握,然而要真正做到活用类图则可能需要几年的功力.类图是锻炼面向对象分析(OOA ...

  3. 分析业务模型 - 类图 新书《火球 UML大战需求分析》试读 第3章

    摘要:类图(Class Diagram)可能是用得最多的一种UML图.类图的基本语法并不复杂,你可能最多学习两三天就可以掌握,然而要真正做到活用类图则可能需要几年的功力.类图是锻炼面向对象分析(OOA ...

  4. 《火球——UML大战需求分析》(第2章 耗尽脑汁的需求分析工作)——2.3 给客户带来价值,需求分析之正路...

    第2章 耗尽脑汁的需求分析工作 摘要:怎么又变了?当初就应该让客户书面签字确认!你可能会经常发这样的牢骚,可是就算客户书面确认,客户还是会"赖账"的!软件项目的其中一项不变真理:人 ...

  5. 《火球——UML大战需求分析》(第1章 大话UML)——1.5 小结和练习

    说明: <火球--UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...

  6. 《火球——UML大战需求分析》(第1章 大话UML)——1.1 UML基础知识扫盲

    说明: <火球--UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...

  7. 《火球——UML大战需求分析》——详细介绍及样章下载

    简介: 本书融合UML.非UML.需求分析及需求管理等各方面的知识,帮助读者解决UML业界问题.需求分析及需求管理问题.全书主要介绍UML的基本语法.面向对象的分析方法.应用UML进行需求分析的最佳实 ...

  8. 《火球——UML大战需求分析》(0.1)——开篇废话

    说明: <火球--UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...

  9. 《火球——UML大战需求分析》(0.2)——目录

    说明: <火球--UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...

最新文章

  1. 文本分类的目的和分类的方法
  2. BeagleBone Black项目实训手册(大学霸内部资料)
  3. Ubuntu下搜狗输入法乱码(二)
  4. windows内核试验05_中断现场
  5. Android6 0权限机制(一):介绍
  6. 23种设计模式之观察者模式
  7. Linux开关命令(shutdown,reboot,halt,init)
  8. jsp session
  9. javascript this
  10. 多线程之旅七——GUI线程模型,消息的投递(post)与处理
  11. dell 虚拟linux,戴尔:Linux是轻松构建虚拟主机的关键
  12. linux系统下sed切割日志
  13. 董承非: 如何从各种类型的错误中学习
  14. Matplotlib入门详细教程
  15. python详细教程#2下载python
  16. html 伸缩布局,CSS3弹性伸缩布局(下)——flex布局
  17. Nginx学习八:虚拟主机
  18. SpringBoot官方开发工具,热部署和远程调试真带劲
  19. Excel 快速合并多行数据为一行
  20. 小程序页面排版样式例子

热门文章

  1. 解决missing 2 required positional arguments问题
  2. python中的loop啥意思_Python forloop列表理解
  3. 设置TRANSPORT-GUARANTEE=CONFIDENTIAL保护敏感资源
  4. vue将qrcodejs生成的二维码下载到本地
  5. 销售季度汇报总结PPT模板
  6. 朋友圈的广告展示和一般的广告展示有什么区别
  7. js runat=server 冲突
  8. Wind量化接口常见错误码
  9. Cesium:地形剖面图
  10. 【玩转CSS】渐变色