zoukankan      html  css  js  c++  java
  • 雨课堂知识点总结(十六)

    5-2组合与委派、框架复用
    第一题
    关于delegation的说法,正确的
    某些功能不需要ADT自己来做,而是委托其他ADT来做(调用其他ADT的方法)
    在类1的构造器里传入类2的对B 象,即可在类1里使用传入的对象调用类2的操作
    Delegation发生在object层面而非class层面
    不正确的
    为实现类1对类2的delegation,需要将类2作为类1的rep的一部分(即类2是类1的field)
    不必需。可以动态传入类2的对象,然后调用其方法即可。
    class A {
    void a(B b) {
    b.add()
    }
    }
    在上面的代码中,B并未作为A的rep的一部分,只是在方法a中动态传入,然后调用b的add()方法。

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

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

    第四题
    若事物o既有A行为(例如"飞”) ,也有B行为(例如“叫”),但具体如何实现这些行为可能会变化。那么ready for change的Java 0OP设计是
    为A和B分别定义一个接口,各B) 自分别定义自己的方法;为o设计类,将其具体行为delegate到A和B的具体实现类将两类行为分别放在不同接口里, o的类通过delegation调用两类接口的具体实现。这是CRP原理的恰当应用。
    不正确
    定义一个接口,在其中为A和B分别定义- -组方法,然后为o设计一个类,实现该接口
    如果o将来不再具备A或B的行为,那么需要修改该接口,会造成大量:依赖该接C的类随之修改。
    为o设计类,在类中添加A和B的行为作为其一组方法
    对接口编程,而非对类编程。
    针对A设计一个类,针对B设计另一个类,然后让o的类同时继承A和B的类。
    Java不支持多重继承。

    第五题
    Lab2的P3按照上述UML图进行设计,那么GoGame类的place( )方法(落子)的spec应该为
    void place(GoAction a, ...)
    不正确
    void place(Action a, ...)
    void place(..)
    void place()
    .. 表示其他参数

    第六题
    Lab2的P3按照上述UML图进行设计,这么设计的优点是
    客户端只需了解Game接口,无需获知其他任何信息
    可容易的扩展其他棋类游戏(只需为Game和Action两个接口添加新的实现类)
    如果要扩展支持真实的围棋规则,只需改GoAction类即可,最小化改变范围

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

    第八题
    上图中表示delegation关系的是
    c和e
    a和d,并非ADT之间的关系:这里的 “终端用户”就是使用软件的真人了。

    第九题
    上图中表示继承或实现关系的是
    c和e
    c是用户开发的具体类实现了Plugin接 口,e是用户定义的类继承了 framework所提供的抽象类。

  • 相关阅读:
    sudo: no tty present and no askpass program specified 解决方法
    中间件kingshard入门(一):基本安装
    mysql主从配置
    haproxy+keepalive双主高可用实现负载均衡
    lvs负载均衡配置
    docker可视化集中管理工具shipyard安装部署
    安装nodejs
    redis数据导入与导出以及配置使用
    搭建ss5环境
    thinkphp5+python.apscheduler实现计划任务
  • 原文地址:https://www.cnblogs.com/HIT-ryp/p/10683407.html
Copyright © 2011-2022 走看看