• 雨课堂知识点总结(十)


    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

  • 相关阅读:
    LG P4284 [SHOI2014]概率充电器
    LG P2592 [ZJOI2008]生日聚会
    LG P4953 [USACO02FEB]Cow Cycling
    LG P2389 电脑班的裁员
    LG P2344 [USACO11FEB]Generic Cow Protests G
    前端简历
    前端面试题目
    大前端的技术栈
    前端 -为什么要清楚浮动?
    Redis的功能实现
  • 原文地址:https://www.cnblogs.com/HIT-ryp/p/10607270.html
Copyright © 2020-2023  润新知