问答题
阅读下列说明和图,回答下面问题。
[说明]某高校图书馆欲建设一个图书馆管理系统,目前已经完成了需求分析阶段的工作,功能需求均使用用例进行描述,其中用例“借书(Check Out Books)”的详细描述如下。
参与者:读者<Patron>
典型事件流:
(1)输入读者ID。
(2)确认该读者能够借阅图书,并记录读者ID。
(3)输入所要借阅的图书ID。
(4)根掘图书目录中的图书ID确认该书可以借阅,计算归还时间,生成借阅记录。
(5)通知读者图书的归还时间。
重复步骤(3)~(5),直到读者结束借阅图书。
备选事件流:
(1)若读者不能借阅图书,说明读者违反了图书馆的借书制度(例如,没有支付借书费用等)。
①告知读者不能借阅,并说明拒绝借阅的原因。
②本用例结束。
(2)读者要借阅的书无法外借。
①告知读者本书无法借阅。
②回到步骤(3)。
说明:图书的归还时间与读者身份有关,如果读者是教师,图书可以借阅一年;如果是学生,则只能借阅3个月,读者ID中包含读者的身份信息。
现采用面向对象方法开发该系统,得到如图1所示的系统类模型(部分),以及如图2所示的系统操作。

图1 系统类模型
问答题
根据说明中的描述,以及图1和图2,给出图1中C1~C4处所对应的类名(类名使用图1和图2中给出的英文词汇)。
【正确答案】
【答案解析】C1:Patron;C2:Book;C3:Catalog;C4:CheckoutSessioncontroller。
[解析] 根据系统类模型,我们可以在各个类之间关联关系。
首先从类Accouts中的canCheckOut(patronID:string)方法,可以看出Accouts关联Patron,因此图中C1为Patron。
C1为Patron,则C2必会与书关联,从C1中的recordBookLoad(b,C2)可以看出,C1关联C2,因此C2为Book。
C2为Book,根据系统操作checkOut的通信图,可以看出与Book关联的是Catalog,因此C3为Catalog。
结合两图,则可以得出C4为CheckoutSessioncontroller。
问答题
根据说明中的描述,以及图1和图2,给出图2中M1~M4处所对应的方法名(方法名使用图1和图2中给出的英文词汇)。
【正确答案】
【答案解析】MI():getforcheck(booklD);M2():isFacultyo;M3():circulateso:M4():recordBookLoan。
[解析] 结合典型事件流:
(1)输入读者ID。
(2)确认该读者能够借阅图书,并记录读者ID。以上两步实际上就是判断读者是不是老师,也就是isFaculty(),因此M2为isFaculty()。
(3)输入所要借阅的图书ID,对应的操作就是M1:getforcheck(bookID)。
(4)根据图书目录中的图书ID确认该书可以借阅,计算归还时间,生成借阅记录,对应的操作就是M3:circulates()。
(5)通知图书归还时间,对应的操作就是M4:recordBookLoan()。
问答题
用例“借书”的备选事件流4a中,根据借书制度来判定读者能否借阅图书,图书馆的借书制度会不断地扩充,并需要根据图书馆的实际运行情况来调整具体使用哪些制度,为满足这一要求,在原有类设计的基础上,可以采用何种设计模式?简要说明原因。
【正确答案】
【答案解析】应采用策略模式,策略模式的优势在于可以灵活地添加对同一问题的不同处理方案,这与题目要求非常吻合。