3.3Abstract Data Type(抽象数据类型)ADT
Java只有两种类型基本数据类型,和对象数据类型,而抽象数据类型则是进行了约束,只能通过给出的方法来进行操作这类,不能直接通过属性如果把所有的属性变成private可以看起来简单的实现。
抽象数据型与表示独立性::如何设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示(即“表示泄露”),避免潜在的bug——在client和implementer之间建立“防火墙”
ADT的特性:表示泄漏、抽象函数AF、表示不变量RI基于数学的形式对ADT的这些核心特征进行描述并应用于设计中。
如何对类的属性进行设计(写的注释叫做AF RI)
用户是看不到AF以及RI的,对应了类中的表示如何实现,类中的属性如何设计,和用户无关。
一、 什么是抽象以及用户定义类型
除了编程语言所提供的基本数据类型和对象数据类型,程序员可定义自己的数据类型
数据抽象:由一组操作所刻画的数据类型
对比两种类型:
传统的类型定义:关注数据的具体表示 抽象类型:强调“作用于数据上的操作”,程序员和 client无需关心数据如何具体存储的,只需设计/使用操作即可。
所以请记住——抽象数据类型是由其操作定义的,使用者无法接触到内部,只能看到操作的规约,也不关心内部数据如何存储,类中的属性也不需要知道。
二、类型和操作的分类
数据类型的分类:可变和不可变数据类型
可变类型的对象:提供了可改变其内部数据的值的操作mutable
不变数据类型:其操作不改变内部值,而是构造新的对象immutable
对抽象类型的操作进行分类
构造器 创建者创建该类型的新对象。创建者可以接受一个对象作为参数,但不能接受正在构造的类型的对象。
生产器 从旧的对象,产生新的对象的类型 例如,String的concat()方法是一个生成器:它接受两个字符串并生成一个表示它们连接的新字符串。
观察器 观察者获取抽象类型的对象并返回不同类型的对象。- size()方法的列表,例如,返回一个整数。
变值器,改变对象属性的方法 例如,List的add()方法通过添加元素到最后。
creator : t* → T
producer : T+, t* → T
observer : T+, t* → t
mutator : T+, t* → void | t | T
着重讲解一下creator
构造器:可能实现为构造函数或静态函数
类的构造器应该不被用户发现,但是用户如果要创造对象的时候还得用
作为静态方法实现的创建者通常称为工厂
方法
这时候需要使用工厂方法
使用静态方法类名来调用,来产生新的创造