阅读下列说明、图以及Java程序。 [说明] 某订单管理系统的部分UML类图如下图所示。 上图中,Product表示产品,ProductList表示所销售产品的列表,Order表示产品订单,Orderltem表示产品订单中的一个条

admin2008-02-15  45

问题 阅读下列说明、图以及Java程序。
   [说明]
   某订单管理系统的部分UML类图如下图所示。
   
   上图中,Product表示产品,ProductList表示所销售产品的列表,Order表示产品订单,Orderltem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。各个类的部分属性和方法说明如下表所示。
   
   可以使用类java.util.ArrayList<E>米实现对象的聚集关系,如上图中OrderList与 Order之间的聚集关系。
    for-each循环提供了一种遍历对象集合的简单方法。在for-each循环中,可以指定需要遍历的对象集合以及用来接收集合中每个元素的变量,其语法如下:
   for(用来接收集合中元素的变量:需要遍历的对象集合)
   如果要使用for-each循环来遍历对象集合,那么包含该对象集合的类必须实现接口 java.util.Iterable<T>。
   Java程序7-1和Java程序7-2分别给出了类OrderList和方法statistic的Java代码
[Java程序7-1]
      import java.util.*;
     public class OrderList  (1)  {
           private ArrayList<Order> orders;
           public OrderList0 {
                 this.orders = new ArrayList<Order>();
         }
           public void addOrder(Order orde0
                 this.orders.add(order);
        }
           public Iterator<Order> iterator() {
                 return  (2);
        }
           public iht getNumberOfOrders0 {
                 return this.orders.size();
        }
    }
[Java程序7-21]
     import java.u61.*;
     public class SalesSystem {
     private ProductList catalog;
     private OrderList sales;
     private static PrintWriter  stdOut = new  PrintWriter(System.out, true);
     public void statistic() {
          for (Product product:  (3)) {
     iht number = 0;
           for (Order order:  (4)) {
                 for ((5): order) {
                     if (produet.equals(item.getProduct()))
                          number += item. getQuantity();
             }
         }
    stdOut.println(product .getCode() +"  "
                 + product.getDescription() +"  "
                 + number +"  "+ number * product.getPrice());
    }
    }
    //其余的方法末列出
    }

选项

答案(1) implements Iterable<Order> (2) this.orders.iteratorO,或 orders.iterator() (3) this.catalog, 或 catalog (4) this.sales, 或 sales (5) OrderItem item

解析 本题考查的是Java语言中的java.util.ArrayList<E>和for-each循环。
   java.util.ArrayList<E>可以用来实现对象的聚集关系。for-each循环提供了一种遍历对象集合的简单方法。在for-each循环中,可以指定需要遍历的对象集合以及用来接收集合中每个元素的变量,其语法如下:
   for(用来接收集合中元素的变量:需要遍历的对象集合)
   如果要使用for-each循环来遍历对象集合,那么包含该对象集合的类必须实现接口 java.util.Iterable<T>。由此可以得到第(1)空的答案。因为类OrderList中具有一个类型为 ArrayList<Order>的属性,而且从类图也能看出类OrderList和Order之间具有聚集关系。因此第(1)空应填implementslterable<Order>。
   在定义了AnayList<E>的类中,必须实现接口Iterable<Order>中的方法Iterator <Order>∷iterator(),其实现体应为return this.orders.iterator()。因此第(2)空应填this. orders.iterator()。
   空(3)~(5)考查的是for-each循环的使用。使用for-each循环时,关键是要确定所遍历的是哪一个对象集合。在类SalesSystem中已经具有两个对象集合,即属性catalog和 sales。要填写空(3)~(5),首先要将方法statistic的功能及实现流程分析清楚。
   方法statistic的功能是依次统计产品目录中每个产品的订购总量,并打印出每个产品的编号、说明、订购总量和订购金额。若要统计产品目录中每个产品的订购总量,需要对3个对象集合进行遍历:产品目录(ProductList)、订单列表(OrderList)以及Order (需要对订单中的所有订单项进行查询,统计每个订单上所订购的产品的数量)。由此可以得出实现该方法的基本流程:   
   ①从产品目录中取出一个产品,这对应第一条for-each语句,这时被遍历的对象集合为ProductList。根据for-each循环的语法,第(3)空应填写ProductList类的对象,而类 SalesSystem中的catalog就是ProductList的实例。按照Java的程序设计规范,引用类的属性时,应使用this.属性名的形式。因此第(3)空的答案为this.catalog。其实,从前半句 Product product也可以推断出第(3)空的答案,因为从类图上可以看到ProductList和 Product之间具有聚集关系。
    ②在订单目录一次查询每张订单,这里对应第一条for-each语句。根据第(3)空的解题思路,可以很容易地确定第(4)空应填OrderList类的对象,即类SalesSystem的属性 sales。因此第(4)空的答案为this.sales。
    ③逐一查询某个订单中的所有订单项,这里对应第三条for-each语句。由类图上可以看出,与类Order具有聚集关系的类是Orderltem。所以第(5)应填写类OrderItem的对象。类SalesSystem中没有这种类型的属性,在这里定义一个临时对象。另外在if语句中出现了一个标识符item,但是在上下文中并没有出现对它的定义。在这里可以推断item的定义应该在第(5)空提供。因此第(5)空的答案为OrderItem item。
转载请注明原文地址:https://kaotiyun.com/show/PfDZ777K
0

相关试题推荐
最新回复(0)