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

    3.3ADT

    1.类WordList有四个方法,根据其方法定义来确定其类型

    《1》public WordList(List<String> words)

    《2》public void unique()

    《3》public WordList getCaptitalized()

    《4》public Map<String ,Integer> getFrequencies()

    使用C,M,P,O分别表示Creator构造器,Mutator变值器,Producer生产器,Observer观察器

    1->C

    2->M

    3->P

    4->O

    2.下面关于ADT的RI和AF正确的是

    ADT的Abstract空间(A)中的某个值,在其Rep空间(R)中可能有多个值和其对应

    若ADT的某个方法返回一个mutable的对象,并不一定表明该ADT产生了表示泄露(defensive copy)

    一个immutable的ADT,其rep可以是mutable的

    3.关于invariants,AF和RI,说法正确的是

    如果一个immutable的ADT存在rep exposure,那么就违反了该ADT的invariants

    如果在一个mutator方法内没有checkRep(),那么RI就可能被违反了

    两个ADT有相同的rep和相同的RI,但可能AF不同

    4.用于检查ADT的Rep Invariants是否保持为真的checkRep()最好应该以下类型的方法结束前调用

    Mutator

    Creator

    Producer

    Observer

    5.class{

    private String s;

    private String t;

    }

    它的可能Rep Invariant会是

    s contains only letters

    s.length()==t.length()

    s is the reverse of t

    6.ADT的某个方法的spec需要以注释的形式放在代码中,在撰写这部分spec的时候,不能用到的信息是:
    Mathematical values in the Rep space(R)
    可以使用:
    Parameters of operation
    Data type of return values of the operation
    Exceptions thrown by the operation
    Mathematical values in the Abstract space(A)
    解析:
    Spec要给client看,那么所有内部的东西都不能用。R是rep的值空间,只能开发者自己了解。

    7.在对ADT的方法进行JUnit测试时,以下说法正确的是:
    对constructor方法,测试用例中需要构造新对象之后调用observer方法确认构造结果是否正确
    对observer方法,测试用例中需要使用其他三类方法构造一个对象,再执行该方法并判断结果是否正确
    不正确:
    如果某方法的返回值为void,则无法为其撰写测试用例,因为无法assertEquals()
    对mutator方法,测试用例中需要在该方法执行之后调用producer方法确认是否做了正确的mutate

    8.不正确:
    只要有非final的field,就一定产生表示泄露
    除了初始化,immutable的类一定不能存在其他任何改变rep的方法
    正确:
    只要有public的field,就一定有表示泄露
    checkRep()方法可能消耗大量运算在程序投入实际运行的时候要注释掉
    解析:
    所以不到迫不得已千万不要用public
    final是来支持immutable的,与是否存在表示泄露无直接关系
    可以有beneficent mutation
    assert语句在投入真正运行的程序中是没有意义的,需要注释掉。前提是开发者利用checkRep()已经发现了所有违法RI的bug并修复了

    9.针对你设计的一个ADT,不应该提供给client看的内容包括:
    AF
    RI
    Rep exposure
    Testing strategy
    Rep
    Implementation
    Test cases
    提供:
    Spec

  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/HIT-ryp/p/10607270.html
Copyright © 2011-2022 走看看