文档介绍:2019年下半年(下午)《软件设计师》真题
注意:图片可根据实际需要调整大小
卷面总分:6分
答题时间:240分钟
试卷题量:6题
练习次数:0次
问答键可以唯一标识元组,外键是其他关系的主键。
根据题干说明“员工号唯一标识员工关系中的每一个元组”,因此员工关系的主键(g)为员工号,又因为“部门号唯一标识部门关系中的每一个元组”,即部门号是部门关系的主键,在员工关系中,是作为外键(h)的。
根据题干说明和图示可知,讲授关系是培训师与课程之间多对多的联系转换,此时主键应该是二者的主键组合,即主键(i)(培训师,课程号),又因为培训师是培训师的主键,课程号是课程的主键,所以二者又是讲授关系的外键(j)。本题由于培训地点是否固定并没有给出描述,所以无法判断是否属于主键组合的一部分,因此给出主键(i)(培训师,课程号,培训地点)组合键也可以得分。
【问题4】
(本题预估3分,判断1分,理由2分)
本题存在传递函数依赖。
在员工关系中,员工的岗位有新入职员工,培训师,部门负责人,不同岗位设置不同的基本工资,即存在传递函数依赖,员工号→岗位,岗位→基本工资。
。当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态。现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图6-1所示。
正确答案:
本题解析:
(1)virtual void update()=0
(2)Observer*
(3)(*iter)->update()
(4)Subject*
(5)Attach(this)
本题考查设计模式中的观察者(Observer)模式的基本概念和应用。
观察者模式的意图是,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式的结构图如图5-2所示。
其中:
Subject(目标)知道它的观察者,可以有任意多个观察者观察同一个目标;提供注册和删除观察者对象的接口。
Observer(观察者)为那些在目标发生改变时需获得通知的对象定义一个更新接口。
ConcreteSubject(具体目标)将有关状态存入各ConcreteObserver对象;当它的状态发生改变时,向它的各个观察者发出通知。
ConcreteObserver(具体观察者)维护一个指向ConcreteSubject对象的引用;存储有关状态,这些状态应与目标的状态保持一致;实现Observer的更新接口,以使自身状态与目标的状态保持一致。
观察者模式适用于:
当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立地改变和复用。
当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时。
当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即不希望这些对象是紧耦合的。
本题中的