抽象数据的两种实现模型 Activation record Activation record Activation record Activation record package A package B package A package B (a)Indirect encapsulation of object P(b)Direct encapsulation of object P
抽象数据的两种实现模型
直接封装和间接封装可以用在支持封装的任何程序中,而不 管其在语言中实现的封装模型是什么 虽然Ada中使用直接封装,程序员也可以实现间接封装 图8.3展示了Ada中的两种实现策略。分别对应图82的两种模 型的实现。 图8.3b的直接封装的变体可以为: acKage A Type MyStack is record Top: integer A: array(1.100)of integer End record 在此情形,激活记录组织和直接封装一样,但是,所有名字 均在B中可见。 这也是在不提供封装机制的语言中常用的方式
直接封装和间接封装可以用在支持封装的任何程序中,而不 管其在语言中实现的封装模型是什么。 虽然Ada中使用直接封装,程序员也可以实现间接封装。 图8.3展示了Ada中的两种实现策略。分别对应图8.2的两种模 型的实现。 图8.3b的直接封装的变体可以为: Package A is Type MyStack is record Top: integer; A: array (1..100) of integer; End record; …. 在此情形,激活记录组织和直接封装一样,但是,所有名字 均在B中可见。 这也是在不提供封装机制的语言中常用的方式
Ada数据的两种封装例子 package A is package A is type MyStack is private type MyStack is private procedure Newstack(S: out My Stack); procedure NewStack(S: out My Stack) private private type MyStackRep type My Stack is record Hidden details of MyStack Top: integer type MyStack is access MyStackRep: A: array(1.100)of integer B only has poiter to stack end record end B has structure of stack 指针类型 end (a) Indirect encapsulation (b)Direct encapsulation
Ada数据的两种封装例子 指针类型
类属抽象数据类型 语言固有的基本数据类型经常允许程序员声明一类新的数据 对象的基本类型,然后规约数据对象的几个属性。这是简单 的多态形式。 如, PASCAL提供了基本的数组类型,但也留下了用户可以 进一步定义的部分,如下标范围。 Type Vect =array [110] of real 图84是一个整数栈的规约。如要实数栈,则需另外规约。 类属抽象类型定义允许类型的一个属性被分离地规约,从而 给出一个基类型定义。使用该属性为参数,进而可从同一个 基类型导出几个特殊类型。 它们的结构和基类型类似,但参数可影响抽象类型定义中操 作的定义以及类型本身的定义。参数可以是类型名或值。图 85是类属栈类型的例子
•类属抽象数据类型 语言固有的基本数据类型经常允许程序员声明一类新的数据 对象的基本类型,然后规约数据对象的几个属性。这是简单 的多态形式。 如,PASCAL提供了基本的数组类型,但也留下了用户可以 进一步定义的部分,如下标范围。 Type Vect = array [1..10] of real; 图8.4是一个整数栈的规约。如要实数栈,则需另外规约。 类属抽象类型定义允许类型的一个属性被分离地规约,从而 给出一个基类型定义。使用该属性为参数,进而可从同一个 基类型导出几个特殊类型。 它们的结构和基类型类似,但参数可影响抽象类型定义中操 作的定义以及类型本身的定义。参数可以是类型名或值。图 8.5是类属栈类型的例子