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

摘要类图(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)考试类与其他类是怎样的关系?

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

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

image034.jpg


图 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 创办人

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张传波

打赏的朋友很帅噢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值