问答题 阅读下列说明和Java代码,在 (n) 处填入适当的字句。
[说明]
已知某企业欲开发一家用电器遥控系统,即用户使用一个遥控器即可控制某些家用电器的开与关。遥控器如图10.33所示。该遥控器共有4个按钮,编号分别是0至3,按钮0和2能够遥控打开电器1和电器2,按钮1和3则能遥控关闭电器1和电器2。由于遥控系统需要支持形式多样的电器,因此,该遥控系统的设计要求具有较高的扩展性。现假设需要控制客厅电视和卧室电灯,对该遥控系统进行设计所得类图如10.34所示。
【正确答案】(1) commands[button] (2) turnLight(0) (3) setChannel(1)
(4) lightCommand (5) RemoteController (6) Light (7) TV
【答案解析】[解析] 本题用Java开发的家用电器遥控系统为背景,考查考生对面向对象程序设计类的用例和继承,程序解释如下.
(1)commands[button]=command;//设置每个按钮对应的命令对象,在RemoteController类中定义的Command []commands=new Command[4];即用来存储对应四个按钮的Command对象。再由此行注释可知,应将命令即command存入数组commands[button]当中。*/
public void off() {light.(2)turnLight(0);}/*重载了抽象命令类Command类中的函数。Light类中turnLight(int degree)方法用于调整电灯光的强弱,参数degree值为0时表示关灯,值为100时表示开灯并且将灯光亮度调整到最大;由此题中所给信息可知这是实现关灯的函数,应填turnLight(0);*/
public void on() {tv.(3)setChannel(1);/*(TV类中setChannel(int channel)方法表示设置电视播放的频道,参数channel值为0时表示关闭电视,为1时表示开机并将频道切换为第1频道。由此题中信息可知,此处实现开电视机的函数,应填setChannel(1)。*/
remoteController.setCommand(0,(4)lightCommand);/*在RemoteController类中定义的具有公有属性的成员函数void setCommand(int button,Command command),由于该函数的第二个参数是个Command类型的对象,而Command类的子类为LightCommand和TVCommand,相应的对象分别为lightCommand和tvCommand。*/
耦合性是程序结构中各个模块之间相互关联的度量,它取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。本题中问的是应用命令模式使某三个类之间的耦合性降至最小,因此只需将定义的所有类中去除命令类及其子类(Command LightCommand TVCommand),剩下的类即为答案。再由图17-5设计类图可知是Command类将RemoteController、Light、TV这三个类关联起来,故没有Command类,此三类的关联程度是很小的,即耦合性小。