2020软件构造第四章习题

第四章

目录

  1. [多选]Behavioral subtyping必须要满足的条件,不包括以下__
    A.子类型可以增加父类型中所没有的新方法子类型B.override父类型的某B方法,子类型方法需具备相同或更弱的post-condition
    C.子类型必须要具备与父类型相同或更弱的invariants(不变量)
    D.子类型override父类型的某个方法,不能比父类型方法抛出新的异常类型,但可比父类型方法抛出的异常更少
    答案:BC

  2. [多选]关于Behavioral subtyping的说法,不正确的是___
    A.子类型override父类型某个方法,其返回值类型应该与父类型方法的返回值类型相同或者更具体(子类型)
    B.子类型override父类型某个方法,其参数的类型应该与父类型方法的参数类型相同或者更具体
    C.某个类是immutable的,它可以派生出一个mutable的子类
    D.子类型override父类型某个public方法, 子类型中该方法的可见性可以为private
    答案:BCD

  3. public class A {
    public 0bject a (String d){
    return “”;
    }
    }
    public class B extends A {
    @Override
    public String a (0bject d) {
    return null;
    }
    }
    该段Java代碣是否能通过static type checking?
    A.能
    B.不能
    答案:B

  4. [多选]void print(List list){…}
    以下_作为参数传递进去不是对它的合法调用?
    A.List а;
    B.List<?> a;
    C.ArrayList a;
    D.List<? extends Object> a;
    E.List a;
    答案:ABCD

  5. 关于Inheritance和delegation的说法,不正确的是_
    A.如果类1需要使用类2的大部分乃至全部方法,则最好将类1设计为类2的子类
    B.如果类1只需使用类2的小部分方法,则最好通过delegation实现对类2的方法调用
    C.Delegation发生在object层面,而inheritance发生在class层面
    D.用A has a B或A use a B表示A和B之间的inheritance关系,用A is a B表示二者之间的delegation关系
    答案:D

  6. [多选]关于Composite over inheritance原则,以下正确的是_
    A.若用继承,子类不得不继承父A类的全部方法, 但子类可能并不需要这么多方法
    B.子类的不同对象可能具备不同的行为,若用继承实现,则不得不定义大量具有不同行为的子类,麻烦
    C.若用继承,子类和父类之间的关系在编译阶段即硬性绑定,难以在运行时动态改变
    D.若用delegation,可隔离两个类之间的静态绑定关系,从而支持运行时实例之间关系的动态改变
    答案:ABCD

  7. 若事物o既有A行为(例如"飞”)也有B行为(例如“叫" ),但具体如何实现这些行为可能会变化。那么ready for change的Java OOP设计是
    A.定义一个接口,在其中为A和( A ) B分别定义一组方法,然后为o设计一个类,实现该接口
    B.为A和B分别定义一个接口,各自分别定义自己的方法;为o设计类,将其具体行为delegate到A和B的具体实现类
    C.为o设计类,在类中添加A和B的行为作为其- -组方法
    D.针对A设计一个类, 针对B设计另一个类,然后让o的类同时继承A和B的类。
    答案:B

  8. 在这里插入图片描述Lab2的P3按照上述UML图进行设计,那么GoGame类的place()方法(落子)的spec应该为___
    A.void place(Action a, …)
    B.void place(GoAction a, …)
    C.void place(…)
    D.void place()
    …表示其他参数
    答案:B

  9. 在这里插入图片描述[多选]Lab2的P3按照上述UML图进行设计,这么设计的优点是_
    A.客户端只需了解Game接口,无需获知其他任何信息
    B.可容易的扩展其他棋类游戏(只需为Game和Action两个接口添加新的实现类)
    C.如果要扩展支持真实的围棋规则,只需改GoAction类即可,最小化改变范围
    答案:ABC

  10. 关于黑盒与白盒framework的说法,不正确的
    A.白盒框架里实现了若干方法,用户程序通过override这些方法即可改变框架的行为
    B.在黑盒框架里,用户编写类来实现框架提供的接口,框架运行时动态调用用户写的类中的方法
    C.白盒框架的基本原理是inheritance,黑盒框架的基本原理是delegation
    D.黑盒框架运行时的主程序是用户写的类,白盒框架的主程序是框架本身的类
    答案:D

  11. 在这里插入图片描述[多选]上图中表示delegation关系的是___
    A.a
    B.b
    C.c
    D.d
    E.e
    答案:B

  12. 在这里插入图片描述[多选]上图中表示继承或实现关系的是__
    A.a
    B.b
    C.c
    D.d
    E.e
    答案:CE

  13. 在这里插入图片描述关于Adapter模式的说法,正确的是__
    A.Adapter类可提供被复用的方法,但与Client要求的spec不吻合
    B.Adaptee类用于将client的请求转化为对Adapter类的方法的调用
    C.Adapter类和Adaptee类之间的关系是delegation
    D.Adapter和ITarget之间的关系是inheritance
    答案:B

  14. 关于Decorator设计模式的说法,不正确的是__
    注:在以下选项中,A代表装饰之前的类,B代表装饰之后的类
    A.A和B二者具有共同的祖先类或实现共同的接口
    B.B中有一个成员变量,其类型为A
    C.B中的某些方法中,通过delegation调用A的同名方法,并可扩展其他新功能
    D.B中不可以增加A中所没有的方法
    答案:D

  15. [多选]

Stack t = new SecureStack (
				new SynchronizedStack (
				new UndoStack(s)
);

针对Decorator设计模式上述形式的client代码,以下说法不正确的是
A.第三行的s的类型是stack或其子类型
B.第三行的s的类型是UndoStack
C.第一行的t的运行时类型是SecureStack
D.第一行的t和第三行的s其实是指向内存中同一个对象的两个不同alias
答案:BD

  1. 针对Facade设计模式,以下说法不正确的是_
    A.针对一个或多个已有的类,client需要调用它们的多个方法,故该模式将这些调用统一封装为一 个方法对外提供
    B.该模式降低了client端使用已有类的代价,减少了client与已有类之间的耦合度
    C.该模式所构造的封装类中的方法一般用static类型
    D.虽然减少了耦合度,该模式仍然需要client端显式构造出被封装类的实例
    答案:D

  2. 在这里插入图片描述上图Strategy模式,说法不正确的是_
    A.ShoppingCart将pay( )的职责delegate给了PaymentStrategy
    B.PaymentStrategy是接口,client的pay实际执行的是其某个实现类的pay()
    C.Client端不需要了解Paymentstrategy的任何实现类即可使用其pay()
    D.若要扩展新的pay( )策略,只需为PaymentStrategy增加新的实现类
    答案:C

  3. 在这里插入图片描述[多选].上图显示的Template模式, 不正确的是_
    A.上图中的OrderProcessTemplate是"模板”,可以是接口,也可以.是抽象类
    B.ProcessOrder( )是模板方法,包含了对一系列操作的调用
    C.如果0rderProcessTemplate中没有某个doXXX( )方法的实现,则在Netorder和store0rder中必须要实现它。
    D.Client可以更改对一系列doXXX()方法的调用次序
    答案:AD

  4. [多选] 关于Iterator模式,不正确的是
    A.为了让你的类A具备iteration的能力,需要A实现Iterator接口
    B.为了让你的类A具备iteration的能力,还需要构造一个实现Iterable接口的类作为符合A特定需求的迭代器
    C.Java里Iterable接口只有一个方法iterator(),它返回一个迭代器对象
    D.Java里Iterator接口有三个方法hasNext(),
    next(), remove( )
    答案:AB

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值