zoukankan      html  css  js  c++  java
  • 软件构造 第三章第三节 抽象数据型(ADT)

    软件构造 第三章第三节 抽象数据型(ADT)

    Creators(构造器):

    创建某个类型的新对象,个创建者可能会接受个对象作为参数,但是这个对象的类型不能是它创建对象对应的类型。可能实现为构造函数或静态函数。(通常称为工厂方法)

    t* ->  T

    例子:Integer.valueOf( )

     

    Producers(生产器):

    通过接受同类型的对象创建新的对象。

    T+ , t* -> T

    例子:String.concat( )

     

    Observers(观察器):

    获取抽象类型的对象然后返回一个不同类型的对象/值。

    T+ , t* -> t

    例子:List.size( ) ;

     

    Mutators(变值器):

    改变对象属性的方法 ,

    变值器通常返回void,若为void,则必然意味着它改变了对象的某些内部状态;当然,也可能返回非空类型 

    T+ , t* -> t || T || void

    例子:List.add( )

     

    Representation Independence

    表示独立性:client使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应影响外部spec和客户端。

    除非ADT的操作指明了具体的前置条件/后置条件,否则不能改变ADT的内部表示——spec规定了 client和implementer之间的契约。

     

     

    Invariance和表示泄露(Rep exposure):

    -一个好的抽象数据类型的最重要的属性是它保持不变量。一旦一个不变类型的对象被创建,它总是代表一个不变的值。当一个ADT能够确保它内部的不变量恒定不变(不受使用者/外部影响),我们就说这个ADT保护/保留自己的不变量。

    -Defensive Copy

     

     

     

     

    抽象函数AF与表示不变量RI

    • 对于RI(表示不变量),仅仅宽泛的说什么区域是合法的并不够,你还应该说明是什么使得它合法/不合法。
    • 对于AF(抽象函数)来说,仅仅宽泛的说抽象域表示了什么并不够。抽象函数的作用是规定合法的表示值会如何被解释到抽象域。作为一个函数,我们应该清晰的知道从一个输入到一个输入是怎么对应的。

     

    做出具体的解释:每个rep value如何映射到abstract value

    Safety from Rep Exposure

  • 相关阅读:
    dsp
    vector.cpp introducing the vector template.
    Bookmarks
    C#多线程参数传递.cs
    vector操作笔记
    Paragma & Bytes
    今天开博
    一台linux服务器挂载另外一台linux服务器文件系统
    nginx基于mysql的身份验证
    Ubuntu下编译nginx
  • 原文地址:https://www.cnblogs.com/masteryellow/p/9214293.html
Copyright © 2011-2022 走看看