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

Posted masteryellow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件构造 第三章第三节 抽象数据型(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

技术分享图片

以上是关于软件构造 第三章第三节 抽象数据型(ADT)的主要内容,如果未能解决你的问题,请参考以下文章

软件构造 第六章第三节 面向可维护的构造技术

软件构造第六章第三节 面向可维护的构造技术

软件构造 第七章第三节 断言和防御性编程

软件构造第五章第三节 可复用的设计模式

软件构造第七章第三节 断言和防御性编程

软件构造 第三章第五节 ADT和OOP中的等价性