C++建模实战-高考录取系统报名功能
扫描二维码
随时随地手机看文章
接下来就是报名了。实际的高考报名是在前一年的年底,为了简化我们移到考试之前。以下是时序图。
Student通过调用AdmissionOffice的registerStudent方法来实现报名。如果成功会返回一个考生号。Student会将这个考生号保存在数据成员m_id中以备将来使用。以下这部分功能的类图。
上图中,StudentManager作为AdmissionOffice的一部分(组合关系,关注实心菱形)而存在,它的主要职责是负责管理高考报名信息。以下是register的主要处理内容:
检查是否允许报名。比如重复报名(等),如果检查不能通过则处理终止并返回失败。
生成唯一的考生号,并与考生信息一起保存。
返回成功并通知考生号码。
目前StudentManger的功能只有一个报名,将来还要负责查询工作。它的功能将会随着各种流程的深入而不断加强。
只要定义好角色,不一定要马上就把所有的方法一次定义完全。
值得注意的是AdmissionOffice没有进行任何处理而是直接将登陆请求转发给StudentManger类。这么做的原因就是AdmissionOffice功能太多,太复杂了。所以将它的功能分配给多个下级模块,而本身只留下信息转接的功能。外面的利用者都是和AdmissionOffice进行交互,不用关注内部真正的功能模块。
这种结构就是Facade设计模式。
如果你比较细心,应该已经看到StudentManager继承于QMap
你猜对了,这样做是为了利用QMap的功能来管理考号和考生的对应关系。其实这是一个私有继承,它的好处就是:允许StudentManger可以方便地利用QMap的功能,同时又可以防止外部的利用者使用。
私有继承就是不告诉你孩子亲爹是谁!让你找不着!
但是你又说了,线上也看不出来是私有继承啊?这里确实有点小遗憾,EA是通过属性决定的,就像下面这样。
最后告诉你一个小秘密:作用域(scope)只有在派生类的语言属性指定为C++是才会表示出来。
今天你学到什么没有?今天你练习了没有?