问答题

【说明】
在一栋m层楼的大厦里,用电梯内和每个楼层的按钮来控制n部电梯的运作。当按下电梯内按钮请求电梯在指定楼层停下时,按钮指示灯亮,当电梯到达指定楼层时,指示灯熄灭。除了大厦的最底层和最高层之外,每层楼都有两个按钮分别指示电梯上行和下行,当这两个按钮之一被按下时相应的指示灯亮,当电梯到达此楼层时灯熄灭,电梯向要求的方向移动。当电梯无升降运动时,关门并停止在当前楼层。
软件设计师火云龙采用面向对象分析的方法,经过三次逐步求精设计之后,得到如图 13-19所示的类图。


【问题1】
按钮类有一个重要的属性,请将该属性填入图13-19中的(a)处。
【问题2】
识别关联的多重性是面向对象建模重要的一步,请根据题目说明填空(1)~(6)。
【问题3】
软件设计师火云龙在初步设计类时,将门(的状态)作为电梯的属性,后经思考,将电梯门设计成一个独立的类,这么做的好处是什么
软件设计师火云龙在初步设计类时,并没有设计“请求”类,后来又加入了该类,这么做的原因是什么

【参考答案】

[问题1]
(a)指示灯
[问题2]
(1)mn (2)mn (3)2m-2
......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

问答题
【说明】 有时我们希望给某个对象而不是整个类添加一些功能。例如,一个图形用户界面工具箱允许你对任意一个用户界面组件添加一些特性,例如边框,或是一些行为,例如窗口滚动。使用继承机制是添加功能的一种有效途径,从其他类继承过来的边框特性可以被多个子类的实例所使用。但这种方法不够灵活,因为边框的选择是静态的,用户不能控制对组件加边框的方式和时机。 一种较为灵活的方式是将组件嵌入另一个对象中,由这个对象添加边框。我们称这个嵌入的对象为装饰。这个装饰与它所装饰的组件接口一致,因此它对使用该组件的客户透明。它将客户请求转发给该组件,并且可能在转发前后执行一些额外的动作(例如画二个边框)。透明性使得你可以递归地嵌套多个装饰,从而可以添加任意多的功能。 装饰对象结构模式的意图就是动态地给一个对象添加一些额外的职责。就增加功能来说,该模式相比生成子类更为灵活。其示意类图如图13-22所示。 程序代码13-5是该模式的一个示例,说明了如何实现用户接口装饰,函数的实现全部省略。程序中定义了VisualComponent的一个子类Decorator,我们将生成Decorator的子类以获取不同的装饰。VisualComponent类是一个描述可视对象的抽象类,它描述了绘制和事件处理的接口。Decorator的子类定义了特殊的装饰功能,BorderDecorator子类给可视组件添加一个边框,ScrollDecorator给可视组件添加滚动功能。 【程序代码13-5】 (1) ; class Window public: roid SetContents (VisualComponent * contents); ; VisualComponent类是一个描述可视对象的抽象类 class VisllalComponent public: VisualComponent(); (2) void Draw(); Virtual void Resize(); ; class Decorator:public VisualComponent public: Decorator() … ; Decorator(VisualComponent * vcom) … ; virtual vold Draw(); virtual vold Resize(); private: * Decorator装饰由VisualComponent的指针实现,其在Decorator的构造函数中初始化* VisualComponent (3) ; ; vold Decorator::Draw() (4) ; 缺省实现 void Decorator::Resize() component->Resize(); 缺省实现 BorderDecorator 子类为它所包含的组件添加一个边框 class BorderDecorator:public Decorator public: BorderDecorator(VisualComponent * vcom,int borderWidth) … ; Virtual Void Draw(); private: void DrawBorder(int); private: int borderWidth; ; void BorderDecorator::Draw() Decorator::Draw(); DrawBorder(_width); Void BorderDecorator::DrawBorder(int Width) … ) Void Window::SetConterlts(VlsualComponent * contents) … SerollDecorat 给可视组件添加滚动功能 class ScroliDecoratOr:public Decorator public: ScrollDecorator(VlsualComponent * vcom) … ; … ); class TextView:public VisualComponent … ; void main(void) 创建一个正文视图以及放入这个正文视图的窗口 Window * window=new Window; TcxtView * textView=new TextView; TextView是一个VisualComponent,它可以放入窗口中 window->SetContents(textView); 得到一个有边界的和可以滚动的TextView,边界宽为1 window->SetContents( (5) );