
正文
Java抽象数据类型代码 java抽象类代码例子
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
抽象数据类型
类的基础:抽象数据类型抽象数据类型(ADT, abstract data type)是指一些数据以及对这些数据所进行的操作的集合。这些操作既向程序的其余部分描述了这些数据是怎么样的,也允许程序的其余部分改变这些数据。“抽象数据类型”概念中“数据”一词的用法有些随意。一个ADT可能是一个图形窗体以及所有能影响该窗体的操作;也可以是一个文件以及对这个文件进行的操作;或者是一张保险费率表以及相关操作等等。要想理解面向对象编程,首先要理解ADT。不懂ADT的程序员开发出来的类只是名义上的“类”而已——实际上这种“类”只不过就是把一些稍有点儿关系的数据和子程序堆在一起。然而在理解ADT之后,程序员就能写出在一开始很容易实现、日后也易于修改的类来。传统的编程教科书在讲到抽象数据类型时,总会用一些数学中的事情打岔。这些书往往会像这么写:“你可以把抽象数据类型想成一个定义有一组操作的数学模型。”这种书会给人一种感觉,好像你从不会真正用到抽象数据类型似的——除非拿它来催眠。把抽象数据类型解释得这么空洞是完全丢了重点。抽象数据类型可以让你像在现实世界中一样操作实体,而不必在低层的实现上摆弄实体,这多令人兴奋啊。你不用再向链表中插入一个节点了,而是可以在电子表格中添加一个数据单元格,或向一组窗体类型中添加一个新类型,或给火车模型加挂一节车厢。深入挖掘能在问题领域工作(而非在底层实现领域工作)的能量吧!Example of the Need for an ADT需要用到ADT的例子为了展开讨论,这里先举一个例子,看看ADT在什么情况下会非常有用。有了例子之后我们将继续深入细节探讨。假设你正在写一个程序,它能用不同的字体、字号和文字属性(如粗体、斜体等)来控制显示在屏幕上的文本。程序的一部分功能是控制文本的字体。如果你用一个ADT,你就能有捆绑在相关数据上的一组操作字体的子程序——有关的数据包括字体名称、字号和文字属性等。这些子程序和数据集合为一体,就是一个ADT。如果不使用ADT,你就只能用一种拼凑的方法来操纵字体了。举例来说,如果你要把字体大小改为12磅(point),即高度碰巧为16个像素(pixel),你就要写类似这样的代码:currentFont.size = 16如果你已经开发了一套子程序库,那么代码可能会稍微好看一些:currentFont.size = PointsToPixels(12)或者你还可以给该属性起一个更特定的名字,比如说:currentFont.sizeOnPixels = PointsToPixels(12)但你是不能同时使用currentFont.sizeInPixels和currentFont.sizeInPoints,因为如果同时使用这两项数据成员,currentFont就无从判断到底该用哪一个了。而且,如果你在程序的很多地方都需要修改字体的大小,那么这类语句就会散布在整个程序之中。如果你需要把字体设为粗体,你或许会写出下面的语句,这里用到了一个逻辑or运算符和一个16进制常量0x02:currentFont.attribute = CurrentFont.attribute or 0x02如果你够幸运的话,也可能代码会比这样还要干净些。但使用拼凑方法的话,你能得到的最好结果也就是写成这样:currentFont.attribute = CurrentFont.attribute or BOLD或者是这样:currentFont.bold = True就修改字体大小而言,这些做法都存在一个限制,即要求调用方代码直接控制数据成员,这无疑限制了currentFont的使用。如果你这么编写程序的话,程序中的很多地方就会到处充斥着类似的代码。Benefits of Using ADTs使用ADT的益处问题并不在于拼凑法是种不好的编程习惯。而是说你可以采用一种更好的编程方法来替代这种方法,从而获得下面这些好处:可以隐藏实现细节 把关于字体数据类型的信息隐藏起来,意味着如果数据类型发生改变,你只需在一处修改而不会影响到整个程序。例如,除非你把实现细节隐藏在一个ADT中,否则当你需要把字体类型从粗体的第一种表示变成第二种表示时,就不可避免地要更改程序中所有设置粗体字体的语句,而不能仅在一处进行修改。把信息隐藏起来能保护程序的其余部分不受影响。即使你想把在内存里存储的数据改为在外存里存储,或者你想把所有操作字体的子程序用另一种语言重写,也都不会影响程序的其余部分。
改动不会影响到整个程序 如果想让字体更丰富,而且能支持更多操作(例如变成小型大写字母、变成上标、添加删除线等)时,你只需在程序的一处进行修改即可。这一改动也不会影响到程序的其余部分。让接口能提供更多信息 像currentFont.size = 16这样的语句是不够明确的,因为此处16的单位既可能是像素也可能是磅。语句所处的上下文环境并不能告诉你到底是哪一种单位。把所有相似的操作都集中到一个ADT里,就可以让你基于磅数或像素数来定义整个接口,或者把二者明确地区分开,从而有助于避免混淆。更容易提高性能 如果你想提高操作字体时的性能,就可以重新编写出一些更好的子程序,而不用来回修改整个程序。让程序的正确性更显而易见 验证像currentFont.attribute = current-
Font.attribute or 0x02这样的语句是否正确是很枯燥的,你可以替换成像currentFont.SetBoldOn()这样的语句,验证它是否正确就会更容易一些。对于前者,你可能会写错结构体或数据项的名字,或者用错运算符(用了and而不是or),也可能会写错数值(写成了0x20而不是0x02)。但对于后者,在调用current-
Font.SetBoldOn()时,唯一可能出错的地方就是写错方法(成员函数)名字,因此识别它是否正确就更容易一些。程序更具自我说明性 你可以改进像currentFont.attribute or 0x02这样的语句——把0x02换成BOLD或“0x02所代表的具体含义”,但无论怎样修改,其可读性都不如currentFont.SetBoldOn()这条语句。Woodfield、Dunsmore和Shen曾做过这样一项研究,他们让一些计算机科学专业的研究生和高年级本科生回答关于两个程序的问题:第一个程序按功能分解为8个子程序,而第二个程序分解为抽象数据类型中的8个子程序(1981)。结果,按那些使用抽象数据类型程序的学生的得分比使用按功能划分的程序的学生高出超过30%。无须在程序内到处传递数据 在刚才那个例子里,你必须直接修改current-
Font的值,或把它传给每一个要操作字体的子程序。如果你使用了抽象数据类型,那么就不用再在程序里到处传递currentFont了,也无须把它变成全局数据。ADT中可以用一个结构体来保存currentFont的数据,而只有ADT里的子程序才能直接访问这些数据。ADT之外的子程序则不必再关心这些数据。你可以像在现实世界中那样操作实体,而不用在底层实现上操作它 你可以定义一些针对字体的操作,这样,程序的绝大部分就能完全以“真实世界中的字体”这个概念来操作,而不再用数组访问、结构体定义、True与False等这些底层的实现概念了。这样一来,为了定义一个抽象数据类型,你只需定义一些用来控制字体的子程序——多半就像这样:currentFont.SetSizeInPoints(sizeInPoints)currentFont.SetSizeInPixels(sizeInPixels)currentFont.SetGBoldOn()currentFont.SetBoldOff()currentFont.SetItalicOn()currentFont.SetItalicOff()currentFont.SetTypeFace(faceName)这些子程序里的代码可能很短——很可能就像你此前看到的那个用拼凑法控制字体时所写的代码。这里的区别在于,你已经把对字体的操作都隔离到一组子程序里了。这样就为需要操作字体的其他部分程序提供了更好的抽象层,同时它也可以在针对字体的操作发生变化时提供一层保护。
相关问答
Q1: oracle抽象数据类型用java怎样接收
应该是:
vm.setVencode(rs.getString(1));
vm.setVenname(rs.getString(2));
vm.setAddress(rs.getString(3));
vm.setTelno(rs.getString(4));
这些1 2 3 4对应你的数据表那里的位置!!
Q2: 在java中,采用什么来描述抽象数据类型
抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。 在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。 抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法,但是构造方法不能被声明为抽象。 抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。 abstract不能与private、static、final、native并列修饰同一个方法。 程序举例:abstract class Animal //定义抽象类
{
String str; Animal(String s) //定义抽象类的一般方法
{ str=s; } abstract void eat(); //定义抽象方法}class Horse extends Animal //定义继承Animal的子类
{ String str; Horse(String s)
{ super(s); //调用父类的构造方法 } void eat() //重写父类的抽象方法
{ System.out.println("马吃草料!"); }}class Dog extends Animal
{ String str; Dog(String s)
{ super(s); } void eat()
{ System.out.println("狗吃骨头!"); }}class test
{ public static void main(String args[])
{ Horse Horse1 = new Horse("马"); Dog Dog1 = new Dog("狗"); Horse1.eat(); Dog1.eat(); }}运行结果: 马吃草料! 狗吃骨头!
Q3: java 定义类 如何写?
类是一种引用数据类型。类为对象的模板,简单的说就是分类。
类的定义包括“成员变量”的定义和“方法”的定义,其中“成员变量”用于描述一类对象共同的数据结构。在Java语言中,类的成员变量的定义可以使用如下语法:
class 类名 {
成员变量类型变量名称;
………
}
类是用class关键字来定义的一种抽象数据类型,类不但定义了抽象数据类型的组成(成员变量),同时还定义了对该类型可以实施的操作(方法),类名的首字母必须大写。看如下代码定义了雇员类:
/** 定义雇员类 */
public class Emp{
String name;
int age;
char gender;
double salary;
}
在如上的实例代码中,仅仅定义了Emp类型的组成,即成员变量。该类定义了4个成员变量:String类型的name用于存放名字;int类型的age用于存放年龄;char类型的gender用于存放性别;double类型的salary用于存放工资。
Q4: java里什么是“抽象数据类型”类型。参考问题补充里的那段话,呵呵,百度百科的我都看了。不要再粘啊。谢
题主首先应该要明白什么是数据类型Java抽象数据类型代码,数据类型指数据值和对这些数据值的操作的集合。而抽象数据类型多Java抽象数据类型代码了抽象二字Java抽象数据类型代码,抽象是针对使用者而言的,即抽象数据类型是一种隐藏了相关数据表示的数据类型。这里还牵扯到另外一个概念:API。API 描述的是抽象数据类型的行为,比如我们看的 Java 文档,里面都是 API。
String 类的部分 API
Q5: java抽象类能不能加注解方式
抽象类是用来捕捉子类的通用特性的Java抽象数据类型代码,是被用来创建继承层级里子类的模板。现实中有些父类中的方法确实没有必要写Java抽象数据类型代码,因为各个子类中的这个方法肯定会有不同Java抽象数据类型代码;而写成抽象类,这样看代码

php中什么是抽象方法和抽象类2020-07-29
抽象方法是指在类中定义的没有方法体的方法。如果一个类中有一个方法是抽象方法,那么这个类就是抽象类,抽象类中可以包含非抽象方法。在声明抽象方法和抽象类时,需要使用abstra

抽象类和接口有什么异同点2020-08-13
抽象类和接口的区别:(推荐教程:java入门教程)抽象类中既可以包含抽象方法,也可以包含非抽象的普通方法;而接口中的方法必须是抽象方法。抽象类中的抽象方法的访问类型可以是public

php中抽象类和接口有哪些不同点2020-11-05
php中抽象类和接口的不同点有:1、抽象类可以有属性和普通方法,接口不能有属性和普通方法;2、抽象类中不一定有抽象方法,接口中一定有抽象方法;3、抽象类的抽象方法必须用abstract

抽象类与接口有什么联系2020-08-03
联系:(推荐教程:java入门教程)1、都可以拥有抽象方法2、都不可以直接创建对象3、都依靠于子类存在才有意义,子类必须实现其所有的抽象方法4、都可以实现多态区别:成员不同:接口中没

php抽象类和接口之间有什么区别?2020-07-16
本篇文章给大家介绍一下php抽象类和接口的区别。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。抽象类官方描述请查看文档,下面是官方描述的梳理版本:定义为

详解PHP中abstract(抽象)、final(最终)和static(静态)原理与用法2020-07-14
本文实例讲述了PHP中abstract(抽象)、final(最终)和static(静态)原理与用法。分享给大家供大家参考,具体如下:abstract(抽象)PHP 5 支持抽象类和抽象方法。定义为抽象的类不能

什么是java注解2020-08-05
注解和反射是Java中非常让人容易忽略的东西,但却很重要,在主流的Spring中更是充满了注解,注解和注释很像,两者其实本质就差不多,注释是给我们程序员看的,而注解呢其实就是给程序看

常见的Java注解有哪些2020-07-21
注解(Annotation)(推荐教程:java入门教程)从 JDK 5.0 开始, Java 增加了对元数据(MetaData) 的支持, 也就是Annotation(注解)Annotation 其实就是代码里的特殊标记, 这些标记可

C# 中虚方法和抽象方法2020-07-23
今天在云和学院学了很多,我这次只能先总结一下C#中的虚方法和抽象的运用。理论:虚方法:用virtual修饰的方法叫做虚方法虚方法可以在子类中通过override关键字来重写常见的虚方

java代码编译顺序是什么2020-10-27
java代码编译顺序:首先源代码进入词法分析器,token流后进入语法分析器;然后进行抽象语法树后进行语义分析器;接着注解抽象语法树,并使用字节码生成器;最后生成jvm字节码。java代码

抽象数据类型有哪些2020-07-02
抽象数据类型是一种对“数据结构”的描述,这种描述是“抽象”的,描述内容有:1、数据对象集;2、与数据集合相关联的操作集。抽象数据类型抽象数据类型(Abstract Data Type)是一种

工厂模式和抽象工厂模式的区别?2020-07-28
工厂模式和抽象工厂模式的区别?1、工厂模式在使用时可以随时设置变量,不用提前进行设置,抽象工厂模式则需要每次增加产品时,进行修改类方法;2、工厂模式可以使用两个接口以及三个

实例介绍java中的Calendar类2020-07-23
日历类,它是一个抽象类,封装了所有的日历字段值,通过统一的方法根据传入不同的日历字段可以获取值。(推荐教程:java入门教程)1、得到一个日历对象Calendar c = Calendar.getInstan

java和php接口的区别是什么2020-09-01
java和php接口的区别是:1、php中在接口中的抽象方法只能是public的,默认也是public权限;2、java中私有方法使用private修饰,供接口中的默认方法或者静态方法调用。【相关学习推

关于Java抽象数据类型代码和java抽象类代码例子的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







