列表

详情


 阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】
某公司的组织结构图如图6-1所示,现采用组合(Composition)设计模式来设计,得到如图6-2所示的类图。
其中Company为抽象类,定义了在组织结构图上添加(Add)和删除(Delete)分公司/办事处或者部门的方法接口。类ConcreteCompany表示具体的分公司或者办事处,分公司或办事处下可以设置不同的部门。类HRDepartment和FinanceDepartment分别表示人力资源部和财务部。

图6-1  组织结构图

图6-2  类图

 【Java代码】

import java.util.*;
(1)Company {
  protectedString    name;
  public Company(String name) { (2)= name; }
  public abstract  void Add(Company  c); //增加子公司、办尊处或部门
  public abstract  void Delete(Company  c);    //删除子公司、办事处或部门
}
 
class  ConcreteCompany  extends  Company {
   private List<(3)> children = new ArrayList<(4)>();
//存储子公司、办事处或部门
   public  ConcreteCompany(String  name)  {  super(name); }
   public  void  Add(Company c)   {  (5).add(c);    }
   public  void  Delete(Company  c)   {(6).remove(c);    }
}
 
class HRDepartment extends Company {
   public  HRDepartment(String  name)  { super(name);  }
   //其他代码省略
}
 
class  FinanceDepartment   extends  Company   {
   public  FinanceDepartment(String  name)   { super(name); }
   //其他代码省略
}
 
public  class  Test  {
  public  static void  main(String[]  args)   {
    ConcreteCompany root =new ConcreteCompany("北京总公司");
    root.Add(new HRDepartment("总公司人力资源部") );
    root.Add(new FinanceDepartment("总公司财务部") );
 
    ConcreteCompany comp =new ConcreteCompany("上海分公司");
    comp.Add(new HRDepartment("上海分公司人力资源部") );
    comp.Add(new FinanceDepartment("上海分公司财务部"));
    (7);
 
    ConcreteCompany  comp1  =  new ConcreteCompany("南京办事处");    
comp1.Add(new HRDepartment("南京办事处人力资源部") );
    comp1.Add(new Fina.nceDepartment ("南京办事处财务部") );
    (8);    // 其他代码省略
    }
}

参考答案:

(1)abstract class     (2分)
(2)this.name        (1分)
(3)Company        (2分)
(4)Company        (2分)
(5)children      (2分)
(6)children      (2分)
(7)root.Add(comp)      (2分)
(8)comp.Add(comp1)       (2分)

详细解析:

本题考查了Java语言的应用能力和组合设计模式的应用。
第(1)空在类名Company前,很明显应该要加关键字abstract class   ,因为题目描述的Company类是一个抽象类。第(2)空在构造函数中的赋值语句中,应该为this.name,就是给该类的一个属性name赋值,这里应该用this.name来引用这个属性。第(3)空与第(4)空的答案应该都为Company,这样要注意在java中与C++中的区别。第(5)和第(6)空的答案应该一样,一个用来增加节点,一个用来删除节点,都是使用的children对象。根据题目提供的组织结构图,我们可以知道,创建了上海分公司接的后,应该将其添加至root(北京总公司)下,因此第7空答案为root.Add(comp),同样的道理,第(8)空的答案为comp.Add(comp1)。

上一题