当前位置:中级软件设计师题库>面向对象技术题库

问题:

[问答题,案例分析题]

阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
说明:某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图10.43所示。现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中添加新的餐饮形式,得到如图10.44所示的类图。其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。每种菜单中都可以添加子菜单,例如图10.43中的甜点菜单。类Menultem表示菜单中的菜式。

粉针剂 注射用水 等张溶液 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 说明:一个简单的图形编辑器提供给用户的基本操作包括:创建图形、创建元素、选择元素以及删除图形。图形编辑器的组成及其基本功能描述如下。 (1)图形由文本元素和图元元素构成,图元元素包括线条、矩形和椭圆。 (2)图形显示在工作空间中,一次只能显示一张图形(即当前图形,current)。 (3)编辑器提供了两种操作图形的工具:选择工具和创建工具。对图形进行操作时,一次只能使用一种工具(即当前活动工具,active)。 ①创建工具用于创建文本元素和图形元素。 ②对于显示在工作空间中的图形,使用选择工具能够选定其中所包含的元素,可以选择一个元素,也可以同时选择多个元素。被选择的元素成为当前选中元素(selected)。 ③每种元素都具有相应的控制点。拖曳选定元素的控制点,可以移动元素或者调整元素的大小。 现采用面向对象方法开发该图形编辑器,使用UML进行建模。构建出的用例图和类图分别如图10.39和图10.40所示。 阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。 说明:某大型商场内安装了多个简易的纸巾售卖机,自动售出2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态如图10.37所示。采用状态(State)模式来实现该纸巾售卖机,得到如图10.38所示的类图。 其中类State为抽象类,定义了投币、退币、出纸巾等方法接口。类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别对应图10.37中纸巾售卖机的4种状态:售出纸巾、纸巾售完、没有投币、有2元钱。

阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
说明:某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图10.43所示。现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中添加新的餐饮形式,得到如图10.44所示的类图。其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。每种菜单中都可以添加子菜单,例如图10.43中的甜点菜单。类Menultem表示菜单中的菜式。

参考答案:

  参考解析

组合模式将对象组合成树形结构以表示"整体一部分"的层次结构,其中的组合对象使得用户可以组合基元对象以及其他的组合对象,从而形成任意复杂的结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式的结构如图10.46所示。图中各部分说明如下。
类Component为组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为,声明一个接口用于访问和管理Component的子部件。
类Leaf在组合中表示叶节点对象,叶节点没有子节点,并在组合中定义图元对象的行为。
类Composite定义有子部件的那些部件的行为,存储子部件,并在Component接口中实现与子部件有关的操作。
类Client通过Component接口操纵组合部件的对象。下列情况可以使用组合模式。
表示对象的整体一部分层次结构。
希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。本试题将组合模式应用到饭店菜单的构造中。图10.44中的类MenuComponent对应图10.46中的Component,Menultem对应Leaf,Menu对应Composite。在实现时,通常都会把Component定义为抽象类。在Java中,用abstract关键字限定的类即为抽象类,所以空(1)处应填入abstractclass。根据注释,空(2)处应该定义功能为"添加新菜单"的成员函数。在子类Menultem和Menu中都可以看到add成员函数,说明子类中重置了父类中的成员函数。所以空(2)处应填入publicabstractvoidadd(MenuComponentmenuComponent)。由图10.44可以看出,Menu中包含了MenuComponent的对象集合。程序中用Java中的list来实现这个聚合关系,这样就可以利用list中提供的各种方法了。list中用于添加元素的方法是add,所以空(3)处应填入add(menuComponent)。空(4)处出现在方法print中,其功能是打印出所有菜单的信息。这里使用了list中的迭代器类iterator遍历每个子菜单,并调用子菜单中定义的print方法打印该子菜单的信息。空(4)处应填入menuComponent.print()。为了能够在mam中打印出所有的菜单信息,必须使用表示菜单结构中最顶层菜单的对象来调用print,因此空(5)处应填入allMenus.print()。

相关题目:

在线 客服