首页>JAVA>正文

Java基础知识—面向对象语言之对象导论

时间:2018-07-10 15:15:35   来源:上海尚学堂   阅读:
Java是一门面向对象的语言,这是Java的编程思想。针对面向对象,今天我们就谈谈对象,是为《对象导论》。

一、抽象过程

所有编程语言都提供抽象机制。人们所能解决的问题的复杂性直接取决于抽象的类型和质量。

汇编语言是对底层机器的轻微抽象,C,Basic语言是对汇编语言的抽象,高级语言是对底层语言的封装和抽象,界面操作是对命令行的封装和抽象。

java 是一种面向对象的语言,简称为OOP语言,OOP是对问题空间的一种抽象过程,允许根据问题来描述问题,可以通过添加新的类型的对象,使其具有某种行为特征和状态特性,用于解决某一类的问题。当程序需要添加新的需求的时候,可以再通过添加新的类和对象来解决新的需求。

我们将问题空间中的元素及其再解空间中的表示称为对象。这种思想实质是:程序可以通过添加新类型的对象使自身适用于某个特定的问题。
  • 万物皆为对象
    可以抽取待求解问题的任何概念化构建表示程序中的对象。
  • 程序是对象的集合
    他们通过发送消息来告知彼此所要做的。
  • 每个对象都有自己的由其他对象所构成的存储
  • 每个对象都拥有其类型
  • 某一特定类型的所有对象都可以接收同样的消息


二、每一个对象都有一个接口

创建抽象数据类型(类)是面向对象程序设计的基本概念之一。
可以创建某一类型的变量,然后操作这些变量。
类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型。

每个对象都只能满足某些请求,这些请求由对象的接口所定义,决定接口的便是类型。
接口确定了对某一特定对象所能发出的请求。同时,在程序中必须有满足这些请求的代码。这些代码与隐藏的数据一起构成了实现。

三、每个对象都提供服务

每个对象都提供服务,它有助于提高对象的内聚性。高内聚是软件设计的基本质量要求之一:这意味着一个软件构件的各个方面组合得很好。

四、被隐藏的具体实现

程序开发人员按照角色分为:

1.类创建者(创建新数据类型的程序员)
2.客户端程序员(在应用中使用数据类型的类消费者)

类创建者构建类,只向客户端程序员暴露必需的部分,隐藏其他部分。被隐藏的部分通常代表对象内部脆弱的部分,由于很容易被毁坏,因此隐藏后可减少bug。

访问控制的存在原因:
1.让客户端程序员无法触及他们不应该触及的部分。
2.允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。

Java 用三个关键字在类的内部设定边界:
public : 紧随其后的元素对任何人可用。
private : 只有类型创建者和类型的内部方法可以访问。
protected : 类型创建者和类型的内部方法可以访问,继承的类也可以访问protected成员。

此外还有一种默认的访问权限包访问权限,在没有使用上述三种指定访问词时,它将发挥作用。该权限下,类可以访问在同一个包(库构件)中的其他类成员。
 

五、复用具体实现

最简单得复用某个类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象置于某个新的类中。因为是在使用现有的类合成新的类,所以这种概念被称为组合
 
如果组合是动态的,通常称他们为聚合。

聚合关系中,整件不会拥有部件的生命周期,所以整件删除时,部件不会被删除。再者,多个整件可以共享同一个部件。

组合关系中,整件拥有部件的生命周期,所以整件删除时,部件一定会跟着删除。而且,多个整件不可以同时间共享同一个部件。


六、继承

当父类发生变化时,被修改的子类也会发生变动。
当继承现有类型时,也就创建了新的类型。
导出类和基类具有相同的类型。
如果只是简单地继承一个类而并不做其他任何事情,那么基类接口中的方法将会直接继承到导出类。

6.1  “是一个”与“像是一个”关系

导出类和基类时完全相同的类型,因为它们具有完全相同的接口。可以用一个导出类对象来完全替代一个基类对象。这可以被视为纯粹替代,通常称为替代原则。is-a关系
有时必须在导出类型中添加新的接口元素,这样也就扩展了接口。这个新的类型任然可以替代基类,但时这种替代不完美,因为基类无法访问新添加的方法。者中可以描述为is-like-a关系。


七、伴随多态的可互换对象

在处理类型的层次结构时,想把一个对象不当作它所表示的对象类型来对待,而把它当作基类来对待。
通过导出新的子类型而轻松扩展设计的能力时对改动进行封装的基本方法之一。

有两种方法可使基类与导出类产生差异:
1.直接在导出类中添加新方法。
2.改变现有基类的方法(又称为覆盖)。

八、单根继承结构

Java中(事实上还包括除C++以外的所有OOP语言),所有的类都继承自单一的基类Object。

在单根继承结构中的所有对象都具有一个公用接口,所有它们归根到底都时相同的基本类型。
单根继承保证了所有对象都具备某些功能。
单根继承结构使垃圾回收器都具备某些功能,实现变得容易得多。
由于所有对象都保证具有其类型信息,所以不会因无法确定对象的类型而陷入僵局。

 

九、容器

在解决某个特定问题时不知需要多少个对象,或者对象将存活多久,此时需创建一种对象类型,且其持有对其他对象的引用。这个通常被称为容器。

解决问题时需要对容器有所选择,原因如下:
1.不同容器提供了不同类型的接口和外部行为。(堆栈,队列)
2.不同容器对于某些操作具有不同的效率。(ArrayList,LinkedList)

参数化类型

向上转型是安全的(如Circle是一种Shape类型),向下转型可通过参数化类型机制解决。参数化类型是一个编译器可以自动定制作用于特定类型上的类,在Java中它成为范型。

十、对象的创建和生命期

当使用对象时,最关键问题之一就是他们的生成与销毁。每个对象为了生存都需要资源,尤其时内存。当我们不在需要对象时,需要清理掉所占有的资源。

对象的数据存在于何处,有两种方式:

  • 为了最求最大执行速度,对象的存储空间和生命周期可以在编程程序时确定,这可以通过将对象置于堆栈或限域变量或静态存储区来实现。这种方式将存储空间的分配和释放置于优先位置。
  • 在碓的内存池中动态的创建对象。在这种方式中,直到运行时才知道需要多少对象,它们生命周期如何,以及它们的具体类型是什么。因为存储空间是被动态管理的,所有需要大量时间在碓中分配空间,这可能要远远大于在堆中创建空间。Java采用的便是这种方法。


十一、异常处理: 处理错误

异常是一种对象,它从出错地点被"抛出",并被专门用来处理特定类型错误的相应异常处理器"捕获"。异常处理像是与正常程序执行路径并行的,在错误时执行的另一条路径。
异常提供了一种从错误状况进行可靠恢复的途径。


十二、并发编程

有时中断对于处理时间性强的程序是必须的,但对于大量其他问题,我们把问题切割成多个可独立运行的部分(任务),从而提高程序的响应能力。在程序中,这些彼此独立的部分被称为线程,上述概念被称为并发

共享资源隐患: 如果有多个并行的任务要访问同一个资源,则会出现问题。为了解决这个问题,该共享的资源在被使用期间必须被锁定,因此整个过程是:某个任务锁定某项资源,完成其任务,然后释放资源锁,使其他任务可以使用这项资源。 

java的并发是内置于语言内的。


十三、对象导论之总图



上海尚学堂Java培训整理编辑,返回本栏目可以查看更多Java相关文章,获取java学习资料请联系客服小姐姐。

分享:0

电话咨询

客服热线服务时间

周一至周五 9:00-21:00

周六至周日 9:00-18:00

咨询电话

021-67690939
15201841284

微信扫一扫