第九节抽象数据类型 1.用户定义类型与内部类型的异同 ①都建立某种基本表示的抽象 如 Integer是位串的抽象; reg_ polygon是记录的抽象 ②每类型都关联一组操作 ③内部类型隐蔽了基本表示,不能对 它的成分进行操作;用户定义类型具 有更高级别的抽象,可以对其基本 表示的成分进行操作
第九节 抽象数据类型 1. 用户定义类型与内部类型的异同 ①都建立某种基本表示的抽象 如:integer是位串的抽象; reg_polygon是记录的抽象 ②每一类型都关联一组操作 ③内部类型隐蔽了基本表示,不能对 它的成分进行操作;用户定义类型具 有更高级别的抽象,可以对其基本 表示的成分进行操作
2.抽象数据类型的定义 满足下述特性的用户定义类型称为抽象 数据类型 ①在实现该类型的程序单元中,建立与 表示有关的基本操作; ②对使用该类型的程序单元来说该类 型的表示是隐蔽的
2. 抽象数据类型的定义 满足下述特性的用户定义类型称为抽象 数据类型: ①在实现该类型的程序单元中,建立与 表示有关的基本操作; ②对使用该类型的程序单元来说,该类 型的表示是隐蔽的
SIMULA67的类机制 1类的说明 类体> 包括类名和形式参数 类体是传统的分程序,可包含变量、过程 和类的局部说明,以及一些执行语句 例:复数表示(幅角半径)
一. SIMULA 67的类机制 1.类的说明 ; 包括类名和形式参数 是传统的分程序, 可包含变量、过程 和类的局部说明,以及一些执行语句 例:复数表示(幅角,半径)
class complex (x,y); real x,y; begin real angle, radius; - a radiuS: =sqrt (X**2+y**2) if abs (x) epsilon then angle: =pi/2 else angle = 3*pi/2 end end else angle: =arctan(y/x) end complex
class complex(x,y);real x,y; begin real angle,radius; radius:=sqrt(x**2+y**2); if abs(x)epsilon then angle:=pi/2 else angle:=3*pi/2 end end else angle:=arctan(y/x) end complex
2.类的有关性质 ①类说明定义了一类数据对象的原型 或样板 ②类的每个实例是一个可操作的数据 对象 ③类的实例可多次动态建立且仅能通 过指针引用 例: ref(complex)c; C: -new complex(1.0, 1.0)
2. 类的有关性质 ①类说明定义了一类数据对象的原型 或样板 ②类的每个实例是一个可操作的数据 对象 ③类的实例可多次动态建立,且仅能通 过指针引用 例: ref(complex) c; c:- new complex(1.0, 1.0);
0.78 angle 42 lius 1.0 X 1.0
c 0.78 1.42 1.0 1.0 angle radius xy
④类实例的属性是指类体的局部变量 和类头中的参数 my angle:≡c. angle my radius: cradius, my X.C.X my y -Cy
④类实例的属性是指类体的局部变量 和类头中的参数 my_angle:=c.angle; my_radius:=c.radius; my_x:=c.x; my_y:=c.y;
⑤类支持抽象数据类型的封装机制它 可以封裝实现对数据操作的各种过程 例可将复数加和乘的过程ad和 multipl封 装入类 complex的类体说明中,作为 complex的属性 procedure add(operand) ref(complex) operand procedure multiply(operand); ref(complex)operand 变量cl、c2引用的两个复数相加可表示为 cl. add( c2)
⑤类支持抽象数据类型的封装机制,它 可以封装实现对数据操作的各种过程 例: 可将复数加和乘的过程add和multiply封 装入类complex的类体说明中, 作为 complex的属性。 procedure add(operand);ref (complex) operand procedure multiply(operand);ref (complex) operand 变量c1、c2引用的两个复数相加可表示为: c1.add(c2)
或 c3angle: c I. angle, c3 radius =cl radius +c2 radius 用户可以直接访问复数的内部表示,故add 和 multiply不是复数对象的唯一操作
或 c3.angle:=c1.angle; c3.radius:=c1.radius+c2.radius; 用户可以直接访问复数的内部表示, 故add 和multiply不是复数对象的唯一操作
3.子类 用以定义类型的判定或和类属。 要求:定义一个栈,完成 引用栈顶元素 入栈 出栈 判栈是否空 (这些操作与栈中元素的类型无关)
3. 子类 用以定义类型的判定或和类属。 要求:定义一个栈,完成 引用栈顶元素 入栈 出栈 判栈是否空 (这些操作与栈中元素的类型无关)