java算法:抽象数据类型ADT
开发有关系数据和处理这些数据的方法的抽象数据模型是用计算机解决问题的过程中必不可少的步骤。
使用抽象数据类型,可以很好的把任何具体的数据结构表示与算法分开,利于研究算法。
抽象数据类型是一种智能通过接口访问的数据类型(值与值上的操作所构成的集合),我们把使用ADT的程序称为客户程序,把指定数据类型的程序称为实现。
抽象数据类型与其他数据类型的主要区别是:对于抽象数据类型,客户程序只能通过接口中提供的操作来访问数据值。接口把所有的数据表示和操作方法的实现完全与客户程序隔离。在Java中,一般不能直接访问数据,而是通过方法访问的。
例1:点的类实现
- publicclassPoint{
-
privatedoublex,y;
- Point(){
- x=Math.random();
- y=Math.random();
- }
-
Point(doublex,doubley){
-
this.x=x;
-
this.y=y;
- }
-
doublex(){
-
returnx;
- }
-
doubley(){
-
returny;
- }
-
doubler(){
-
returnMath.sqrt(x*x+y*y);
- }
-
doubletheta(){
-
returnMath.atan2(y,x);
- }
-
doubledistance(Pointp){
-
doubledx=x-p.x;
-
doubledy=y-p.y;
-
returnMath.sqrt(dx*dx+dy*dy);
- }
-
publicStringtoString(){
-
return"("+x+","+y+")";
- }
- }
public class Point{
private double x,y;
Point(){
x = Math.random();
y = Math.random();
}
Point(double x, double y){
this.x = x;
this.y = y;
}
double x(){
return x;
}
double y(){
return y;
}
double r(){
return Math.sqrt(x * x + y * y);
}
double theta(){
return Math.atan2(y , x);
}
double distance(Point p){
double dx = x - p.x;
double dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
public String toString(){
return "(" + x + " , " + y + ")";
}
}
定义ADT的根本原因:通过使客户不能直接访问数据表示,可以随意地对数据表示进行修改!在这种情况下,使用极坐标来表示点,但客户程序可以不管点是如何实现的而执行相同的运算。
例2:点类(替换实现)
- publicclassPoint2{
-
privatedoubler,theta;
-
-
privatestaticPoint2p2;
-
-
publicstaticPoint2getInstance(){
-
doublex=Math.random()*100;
-
doubley=Math.random()*100;
-
p2=newPoint2(x,y);
-
returnp2;
- }
-
-
publicPoint2(doublex,doubley){
-
this.r=Math.sqrt(x*x+y*y);
-
this.theta=Math.atan2(y,x);
- }
-
-
publicdoublex(){
-
returnr*Math.cos(theta);
- }
-
publicdoubley(){
-
returnr*Math.sin(theta);
- }
-
publicdoubler(){
-
returnr;
- }
-
publicdoubletheta(){
-
returntheta;
- }
-
publicdoubledistance(Point2p){
-
doubledx=x()-p.x();
-
doubledy=y()-p.y();
-
returnMath.sqrt(dx*dx+dy*dy);
- }
-
publicStringtoString(){
-
return"("+x()+","+y()+")";
- }
-
- }
public class Point2{
private double r,theta;
private static Point2 p2;
public static Point2 getInstance(){
double x = Math.random() * 100;
double y = Math.random() * 100;
p2 = new Point2(x,y);
return p2;
}
public Point2(double x, double y){
this.r = Math.sqrt(x * x + y * y);
this.theta = Math.atan2(y , x);
}
public double x(){
return r * Math.cos(theta);
}
public double y(){
return r * Math.sin(theta);
}
public double r(){
return r;
}
public double theta(){
return theta;
}
public double distance(Point2 p){
double dx = x() - p.x();
double dy = y() - p.y();
return Math.sqrt(dx * dx + dy * dy);
}
public String toString(){
return "(" + x() + " , " + y() + ")";
}
}
使用ADT,精确提供返回客户感兴趣的数据方法。而且在实现方法更灵活。
例3:点的ADT接口
- publicinterfaceIPoint{
-
doublex();
-
doubley();
-
doubler();
-
doubletheta();
-
doubledistance(Pointp);
-
publicStringtoString();
- }
public interface IPoint {
double x();
double y();
double r();
double theta();
double distance(Point p);
public String toString();
}
ADT是作为支持模块化编程的一种有效机制。模块化编程是现代大型软件系统的一种组织方法。ADT提供了灵活的修改,ADT接口明确定义了程序访问的方法。
分享到:
相关推荐
在像Java这样的面向对象的语言中,抽象数据类型及其实现共同构成一个类。 与ADT相关的每个操作都由成员,功能或方法实现。 定义数据项所需空间的变量称为数据成员。 对象是类的实例,即在计算机程序执行期间创建并...
抽象数据类型(ADT,Abstract Data Type)是计算机科学中一个重要的概念,它定义了一组数据和对这些数据的操作集合。ADT不关注具体的实现细节,而是关注如何使用这些数据和操作。它提供了一个高级的、与实现无关的...
数据结构抽象数据类型模板库及常用算法的Java实现毕业论文 《数据结构》抽象数据类型模板库及常用算法的Java实现毕业论文是计算机科学中的一门专业基础课,它涉及到计算机硬件和计算机软件的研究范围。该论文主要...
在表达算法的抽象机制部分,书中提到了抽象数据类型(ADT)的概念。ADT是算法设计的重要工具,它将数据模型和在其上的运算封装在一起,提高了算法的可维护性、模块化和可读性。通过ADT,算法设计者可以独立于具体的...
在计算机科学中,抽象数据类型(Abstract Data Type, ADT)是一种高级的编程概念,它定义了一组数据和对这些数据的操作。ADT允许我们关注数据的逻辑表示,而不是具体的实现细节。在这个实验中,我们将设计一个抽象...
数据与算法是计算机科学的基础,本课程主要涵盖了二元关系和抽象数据类型的理论与实践。在深入探讨这些概念之前,我们需要回顾一下C++语言的一些基础知识,因为它是描述数据结构和算法的常用工具。 首先,C++中的类...
接下来,我们探讨“抽象数据类型”(Abstract Data Type, ADT)。ADT是一种高级编程概念,它定义了一组数据以及这些数据上的操作。ADT的关键在于其封装性,它隐藏了内部实现细节,仅对外暴露接口供用户使用。常见的ADT...
抽象数据类型(Abstract Data Type,简称ADT)是计算机科学中的一个重要概念,它是指通过一组操作来定义的数据结构。在编程语言中,ADT是一种逻辑上的数据结构,它定义了数据的操作集,而不涉及这些操作的具体实现。...
- **抽象数据类型**:讨论抽象数据类型(ADT)的概念、重要性和实现方式。 - **小结**:总结数据结构的基础知识。 ##### 2.2 算法及性能分析 - **算法**:定义算法、算法的设计原则和评价标准。 - **时间复杂性**...
抽象数据风格的按字母排序算法用的是快速排序算法,代码位于SA\src\adtstyle\impl.AlphabetizerImpl.java,调用返回风格用的是插入排序算法,代码位于SA\src\invretstyle\Alphabetizer.java,管道过滤器风格用的是堆...
- 讨论图的抽象数据类型(ADT)的具体实现设计。 - **图的遍历** - **深度优先搜索**:介绍深度优先搜索的基本原理及其应用。 - **广度优先搜索**:讲解广度优先搜索的基本原理及其应用。 - **图的连通性** - ...
在这里,我们可以了解到线性表的抽象数据类型(ADT)以及如何在Java中实现这些数据结构。其中,List接口和Strategy接口的讲解,为线性表的操作提供了接口设计上的考量。 第四章涉及了栈与队列的数据结构,它们是两...
- **线性表的抽象数据类型**:讨论线性表的抽象数据类型(ADT)定义及其实现方法。 - **List接口**:介绍Java集合框架中的List接口及其常用方法。 - **Strategy接口**:解释策略模式的概念及其在本章节中的应用。...