软件构造笔记之面向对象的一些概念性知识点总结

一、ADT的定义以及作用

1.一个ADT是一个仅由保存的数据类型和可能在这个数据类型上进行的操作定义的。开发者们只能通过ADT的操作方法来访问ADT的属性,而且他们不会知道这个数据类型内部各种操作是如何实现的。在Java中,我们常常使用一个接口来给出一个操作集合而不需要透露这些操作实现的细节。记住一个接口定义了一个方法集而Java类必须实现这个集合以便满足它的强制性条件或者实现这个接口的一个实例。

2.当我们谈论ADT的时候,不可避免地会提到到线性表,堆栈和队列。一个线性表是有限个元素的集合,其元素以线性的方式进行排列并提供对它的元素的直接访问。一个堆栈是一个后进先出(LIFO)的有序线性表,元素从堆栈头加入,并从堆栈头取出。一个队列是一个先进先出的有序线性表,元素从队列尾加入,并从队列头取出。线性表,堆栈和队列的内部结构可以用许多方式实现。

3.Java集合架构:Java 2软件开发包(SDK)提供了一些新类来支持大多数常用的ADT。这些类被称为Java集合类(类似于MFC中的集合类),它们协同工作从而形成Java 集合架构。这个集合架构提供了一套将数据表示成所谓的集合抽象数据的接口和类。java.util.Collection接口被用来表示任意的成组的对象,也就是元素。这个接口提供基本的诸如添加,删除,和查询这样的操作。Collection接口还提供了一个iterator方法。iterator方法返回java.util.Iterator接口的一个实例。而Iterator接口又提供了hasNext, next, 和 remove方法。使用Iterator接口提供的方法,你可以从头到尾循环遍历一个Collection对象中的实例并能够安全的删除iterator(游标)所表示的元素。

  java.util.AbstractCollection 是所有集合架构类的基础。AbstractCollection 类提供了对  java.util.Collection 接口中除iterator和size方法以外的所有方法的实现。这两个例外的方法由所有继承java.util.AbstractCollection的子类实现。

   实现一个接口的类必须提供对所有接口方法的实现。因为集合架构中的一些接口方法是可选的,所以必须有一种方法来通知调用者某种方法没有实现。当一个可选的方法被实现而这个方法又并没有被实现的时候,就会抛出一个UnsupportedOperationException 异常。UnsupportedOperationException 类继承了RuntimeException 类。这使得调用者能够调用所有的集合操作而不需要把每次调用都放在一个try-catch对里。


  • 4.List线性表:List接口继承了Collection接口并定义了一个允许相同元素存在的有序集合。List接口还附加了一些使用一个数值型索引值并基于元素在线性表中的位置来操作Collection中元素的方法。这些操作包括add,get,set和remove。List接口还提供了listIterator方法。这个方法返回java.util.ListIterator 接口的一个实例,这个实例能够让你从头至尾或者从尾至头的遍历一个线性表。java.util.ListIterator 继承了java.util.Iterator 接口。因此,它支持对它代表的Collection中的元素的添加和修改。

集合架构提供了对List接口的两个实现:LinkedList(链表)和ArrayList(数组列表,即静态列表)。这两个实现都支持对其元素的随机访问。一个ArrayList实例支持数组风格的操作并支持数组大小的改变操作。一个LinkedList的实例则提供了在列表开始和结尾添加,删除和提供元素的显式的支持。使用这些新方法,一个程序员可以简单的把一个LinedList当做堆栈或者队列使用,如下:

LinkedList aQueue = new LinkedList(aCollection);

 
  aQueue.addFirst(newElement);

  
  Object anElement = aQueue.removeLast();

  
  LinkedList aStack = new LinkedList(aCollection);

  
  aStack.addFirst(newElement);

  
  Object anElement= aStack.removeFirst();

表A中的代码片段使用java.util.ArrayList 和 java.util.LinkedList演示了对java.util.List接口的实现实例的一些常用的操作。这些操作包括添加元素,随机访问元素和显式的在列表尾删除元素。

ADT提供了一个将对象公共接口中的操作和其具体的实现分开的强有力的工具。这使得一个ADT的实现可以不断变化和演化同时保持其公共接口不变。Java集合架构提供了大量的接口和其实现用来代表基本元素的集合并可以用来创建有用的ADT。

二、面向对象的编程方法/语言应该具有类的概念作为中心概念。
语言应该能够为类和它的特征提供断言(即规范:前置条件,后置条件和不变量)和异常处理,依靠工具生成这些断言中的文档,并且可选地在运行时监视它们 时间。

(1)静态类型:一个定义良好的类型系统应该通过强制执行一些类型声明和兼容性规则来保证它接受的系统的运行时类型安全。

(2)泛型(Genericity):用于“准备改变”和“为/重用设计”:应该可以编写具有表示任意类型的正式泛型参数的类。

(3)继承(Inheritance):应该可以将一个类定义为从另一个继承,以控制潜在的复杂性。

(4)多态(Polymorphism):在基于继承的类型系统的控制下,应该可以将实体(表示运行时对象的软件文本中的名称)附加到各种可能类型的运行时对象。

(5)动态分派/绑定(Dynamic dispatch / binding):在一个实体上调用一个特性应该总是触发与所附加的运行时对象的类型相对应的特性,这在调用的不同执行过程中不一定是相同的。

三、关于类、方法、对象以及属性等概念的解析

1.对象:真实世界的物体有两个特征:它们都有状态和行为。识别真实世界对象的状态和行为是从OOP角度开始思考的好方法。对于你看到的每个对象,问自己两个问题,这些现实世界的观察都转化为OOP的世界:

这个物体有什么可能的状态?

这个对象有什么可能的行为?

一个对象是一组状态和行为:状态是包含在对象中的数据。而在Java中,这些是对象的字段行为 相当于对象支持的操作。在Java中,这些被称为方法,方法只是面向对象的功能。而调用一个方法相当于调用一个函数。

对象的定义:
一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下:
类名称 对象名称 = new 类名称() ;

2.类:

每个对象都有一个类,一个类定义方法和字段,统称为成员的方法和领域。

类定义了类型和实现,类型可以看作是可以使用对象的位置;而执行可以看作是对象如何做事情。

从另一种角度来说,类的方法是它的应用程序编程接口(API),定义用户如何与实例进行交互。

类的定义:
class 类名称{
属性名称;
返回值类型 方法名称(){}
}

3.方法:一个对象是一组状态和行为:状态是包含在对象中的数据。而在Java中,这些是对象的字段行为 相当于对象支持的操作。在Java中,这些被称为方法,方法只是面向对象的功能。而调用一个方法相当于调用一个函数。

如果要想访问类中的属性或方法(方法的定义),则可以依靠以下的语法形式:
访问类中的属性:对象.属性 ;
调用类中的方法:对象.方法();

在java中对象声明有两种含义
声明对象:Horse horse= null; ; //表示声明了一个对象,但是此对象无法使用,horse没有具体的内存指向
实例化对象:horse= new Horse() ;// 表示实例化了对象,可以使用

四、接口

Java的接口是一种用于设计和表达ADT的有用语言机制,其实现方式是实现该接口的类。

Java中的接口是方法签名的列表,但没有方法体。如果一个类在其implements子句中声明接口并为所有接口的方法提供方法体,则该类将实现一个接口。一个接口可以扩展一个或多个其他接口;一个类可以实现多个接口。

接口和类可以定义和实现ADT,接口之间可以继承。一个类可以实现多个接口,API的多个实现可以共存。多个类可以实现相同的API,他们在性能和行为方面可能有所不同,在Java中,API由接口或类指定,接口只提供一个API,一个接口定义但不实现API。类提供了一个API和一个实现一个类可以实现多个接口,一个接口可以有多种实现。

五、参考文献

1.https://www.ucloud.cn/yun/71327.html

2.http://blog.sina.com.cn/s/blog_18984da2a0102xhtd.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值