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

3.6 考试管理系统(类图综合训练)

做这综合练习有以下几个目的:
1)让你巩固所学到的类图知识。
2)演练用类图分析需求的基本步骤。
3)学习一些提炼类的新知识。

本练习我们将会演练类图分析需求的基本步骤:
1)识别出类。
2)识别出类的主要属性。
3)描绘出类之间的关系。
4)对各类进行分析、抽象、整理。

本综合训练的题目如下:
某学校打算做一套考试管理系统,当前情况如下:
1)讲师会讲很多门课,大部分的课程需要安排一次考试,有些就不需要。
2)考试题目由讲师出。
3)学生需要参加很多考试,每门考试都有成绩。

请你思考:
1)考试是一个类吗?如果是,考试这个类代表怎样的意思?
2)分析出与考试直接相关的类都有哪些?
3)考试类与其他类是怎样的关系?

本系统围绕考试开展,我们首先要确定考试是怎样的一个类,考试类代表考试试卷吗?还是代表考试这个事情?这是考试管理系统,不是考试试卷管理系统(当然试卷也需要在本系统中管理),需要对考试这个事情进行管理,所以考试类代表的是考试这个事情。
将需求分析中遇到的人、物、概念识别为类,这是比较容易做到的,而对于事情,例如考试,我们就不一定能将其识别为类。因为普遍认为,类代表的是一些静态东西,而事情是动态的,不适合用类来表示。这并不是绝对的,由系统的目标出发,有时候我们需要将某些事情、动作等动态内容,识别为类。当我们做某某管理系统,而某某是指某个事情时,其实最终系统是通过管理该事情的记录来实现对该事情的管理。例如:考试管理系统,其实最终系统管理的是考试记录;请假管理系统,其实系统最终管理的是请假记录。为了能让这些事情能被管理,将这些事情识别为类是很必要的。

考试类的意义基本确定了,它的属性有考试时间、地点等内容,现在要思考与考试直接相关的类有哪一些呢? 课程、试卷、讲师、成绩、学生这些合适吗?
请你先列出与考试直接相关的类,并尝试画出它们与考试的关系,然后才继续往下看。
请注意只需要找出与考试直接相关的类就可以了,不需要找间接相关的,另外只需要画出其他类与考试的关系就可以了,至于其他类之间的关系暂不用考虑。


图 1.35 考试类与其他类的关系

说明:此图并没有画出课程、讲师、学生之间的关系,此图重点表达的是其他类与考试类的关系。

此图表达了这样的情况:
1)每个课程要么安排一次考试,要么没有考试,而每个考试只对应一门课程。
2)一名讲师作为出题者对应零到多次考试,而每一次考试必有对应的一位出题的老师。
3)一名学生需要参加零到多次的考试,而每个考试有一到多个学生参加。
至于成绩和试卷,要重点说明一下。

作为一名学生,他参加一门考试就会得到一个成绩,他参加多门考试就得到多门成绩,于是就可以计算出该名学生的平均分、最高分、分数排名等,这些内容可以列为学生的属性。
作为考试来说,一次考试有很多学生参加,这样这门考试就会产生很多个成绩,根据这些成绩,我们可以算出这次考试的平均分、最高分、优秀率、合格率等等,注意平均分、最高分这些也可以叫做这次考试的成绩,这些内容可以列为考试的属性。
学生的分数排名、考试的优秀率这些东西如果列为属性,这些属性可以成为“导出属性”,意思就是通过其他基础数据算出来的属性。需求分析时,我们要重点识别基础属性,基础属性是指“原生”的属性,不根据其他东西计算出来,而是直接得到的。

图3.35中所定义的成绩类是指一名学生参加一次考试所得到的成绩,这个成绩是原生的,通过这个成绩,系统可以从考试的角度或者从学生的角度导出很多其他统计数据。
理解了成绩这个类,应该就比较容易理解试卷这个类了。一次考试对应一名出题老师,老师为这次考试设计了一份题目,这份题目就是试卷。

上述只是参考答案,这个题目并没有标准答案,识别出怎样的类以及画出类之间的关系,从不同的角度就会有不同的结果,关键还是要从系统的目标出发,做出合适的分析。如果你的答案与参加答案很不一致,不代表你画得不好,只要你能有条理地解释这些类和它们的关系,就是合适的!

通过这个综合训练的过程(而不是结果),总结以下几点实践建议供你参考:
1)从系统的目标出发来思考问题。
2)用类图分析需求的基本步骤:识别类、识别属性、画出关系、整理和提炼,只是大致的参考步骤,并不是绝对的。
3)识别类的关键属性,能让我们思考类是否合适,尝试画出类的关系也会让我们再次思考这些类是否合适。
4)多读图,从两个方向来读两个类的关系,能帮助你发现更多问题。
5)只需要表达出的类直接关系就可以了。例如:A和B有关系,B和C有关系,这样其实A和C也是有关系的,它们有间接关系,间接关系不需要直接画出来,只需要画出所有的直接关系,我们可以通过类图的关系网络看到类之间的间接关系。
6)不要试图用一个类图表达所有的内容。考试系统这个题目其实已经简化不少了,实际系统的类图可能有几十个甚至上百个类,要规划好用多个类图来表达不同的内容,每个类图有不同的表达重点。
7)注意识别“原生”的内容,并且根据这些“原生”内容能导出什么“导出内容”,不要将“导出内容”当成“原生内容”的。
8)识别关联类是难点也是关键点,分离出关联类会让我们更加看清楚事务的本质。
9)没所谓绝对正确的答案,关键是要有自己的合理分析,逐步求精、持续优化你的想法。
10)多练习、多讨论,逐步增强你的面向对象分析素养。

请看下一节……

作者:张传波

创新工场创业课堂讲师

软件研发管理资深顾问

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

www.umlonline.org 创办人

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

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

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

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

    摘要:类图(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. 【iOS】iOS10.3新增API:应用内评分
  2. android oppo 权限,OPPO Reno可尝鲜Android Q:教程如下
  3. directx最终用户运行时_运维定位服务故障时,前5分钟都在忙啥?
  4. ubuntu java 1.6 安装,ubuntu 中安装java jdk 1.6
  5. double和float的误区!
  6. html 游戏首页,30个让人玩上瘾的HTML5游戏
  7. C++模板类之pair
  8. XCode下的iOS单元测试
  9. C 中的左值(Lvalues)和右值(Rvalues)
  10. 几种常用的电机控制法
  11. 系统漏洞是威胁计算机网络安全的形式,系统漏洞是威胁计算机网络安全的形式_网络 安全 银行 漏洞 川企_https 安全受到 威胁(2)...
  12. 阿里 P7 到底是怎样的水平?
  13. 优秀LOGO设计的规则
  14. 智云通CRM:销售就是讲故事?
  15. macos支持exfat吗_你需要黑苹果吗?
  16. iOS上应用如何兼容32位系统和64位系统
  17. 基于微信小程序的家教管理系统源码
  18. Android中的多点触摸
  19. 竞品分析——崩坏3 战双帕弥什
  20. shiro的学习使用

热门文章

  1. 浅析RocketMQ-CommitLog异步刷盘
  2. a disk read error occurred——展开windows文件99%——解决办法
  3. 案例一:JTS-计算点到线的垂线
  4. 我的2022-工程师文化的思考
  5. 软件测试周刊(第03期):质量回溯、自动验证埋点、故障度量指标、产品质量指标
  6. 诺亚财富Q3财报表现不佳:业绩增速放缓,营收、利润规模持续下降
  7. 一款简洁的虚拟按键助手
  8. table设置列宽度
  9. 阿里云联合易客CRM等发布金盾宣言
  10. 奥鹏C语言程序设计考试,C语言程序设计_题库_201903_A 更新20春北理工复习题