Java编程思想学习笔记(1)——对象(一)

前言

由于《Java编程思想》有800多面,对于刚开始学习面向对象语言的我而言有很大的难度,所以为了防止读了后面而忘掉了前面的内容,我想通过书中的内容,总结一些比较重要的、实用的知识。(ps:希望我能坚持将这一系列的博客写完)

本篇博客主要是对《Java编程思想》的第一章的总结与理解。

对象导论

1.1抽象过程

所有的编程语言都提供抽象机制。从一个需要解决的问题出发,我们可以提取出一些有用的信息,将这些信息进行分析。在此之中,信息的提取就是一种抽象过程。而程序语言之所以能够被设计出来,在于我们能够从我们能周围的成千上万个实际问题及其解决方案中去尽可能提取一些共性出来,然后进行一些抽象。(例如条件控制语句是对一个问题的多种结果的抽象、方法就是对将一些待处理的事物进行处理操作的抽象等等)从而将这个程序语言设计出来。

对于面向对象语言,我们将问题空间中的元素及其在解空间中的表示称其为“对象”,这体现出一种思想——程序可以通过添加新类型的对象使自身适用于某个特定的问题。所以可以说面向对象程序设计(OPP)就允许根据问题来描述问题,而不是根据运行解决方案的计算机来描述问题。

纯粹面向对象程序语言设计方式具备这五个特点
一、万物皆为对象。
二、程序是对象的集合,它们通过发送消息来告知彼此要做的。
三、每个对象都有自己的由其它对象所构成的存储。
四、每个对象都拥有其类型。
五、某一特定类型的所有对象都可以接收同样的信息。
同样地可以用更简洁的方式来描述对象:对象具有状态、行为和标识。

1.2 面向对象程序语言的特性

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

1.在程序执行期间具有不同的状态而其他方面都相似的对象会被分组到对象的类中——这就是关键字class的来源。
2.创建抽象数据类型(类)是面向对象程序设计的基本概念之一。而抽象数据类型的运行方式与内置类型几乎完全一致:你可以创建某一类型的变量(对象实例),然后操作这些变量(发送消息请求)。每个类的成员或元素都具有某种共性,也有自身的状态。并且每一个对象都属于定义了特性和行为的某个特定的类。
3.为了获得有用的对象,必须有某种方式产生对对象的请求,而这些请求由对象的**接口(interface)**所定义,决定接口的便是类型。接口确定了对某一特定对象所能发出的请求,而满足这些请求的代码与隐藏数据构成了一个实现。这种过程被简单概括为:向某个对象“发送消息”(产生请求),这个对象便知道此消息的目的,然后执行对应的程序代码。

二、每个对象都提供服务
1.将对象看作一种服务,或者想像成一个“服务提供者”。由于程序本身是面向用户服务,它将通过调用其他对象提供的服务来实现这一目的。你的目标就是创建能够提供理想的服务来解决问题的一系列对象。
2.看成一种服务能提高对象的内聚性,而这种性质是软件设计的基本质量要求之一(意味着软件构件的各个方面组合的很好)。

三、被隐藏的具体实现
可以将程序开发成员按照角色分为 类创建者客户端程序员,后者的目标收集用来快速开发的类,而前者则是构造类。这种类只向客户端程序员暴露必须的部分,而隐藏其他的部分。这样确保类的安全性,也同时防止构建类被恶意攻击。Java 基于此有三个关键字publicprivateprotect并且同时还具备包访问权限的特性。这些关键字的用法在后面的博客中一一举例。

四、复用具体实现
1.新类的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。因为使用现有的类合成新类,称为组合,若为动态发生,则为聚合。组合通常被称为“has-a”关系。
2.组合具有巨大的灵活性(因为对该类的相关修改不会影响其他部分)相反的接下来的继承则不具备组合灵活性,而对于后者,编译器则会对其施加一定的限制。

五、继承
如果要创建一个新类,这个新类与一个旧类有很大的相关性,这样造成了代码的大量重复,为了避免这些重复,从而提高效率,我们可以使用继承(extends)。而当将源类(超类,基类)发生变动时,被修改的导出类(继承类,子类)也会反映出这种变动(这也会造成一定的隐患)。继承基类,不仅继承了基类的所有方法,而且还继承了其所有接口(private不能被访问),通过继承,我们可以将一些事物的相同特征提取出来,作为父类,而子类则将不同特征进行补充。(多态的思想),同时子类还可以对父类的一些方法进行覆盖。继承通常被称为is-a的关系。

六、多态
圆形,三角形,正方形都是几何图形,它们都可以被泛化成一个几何形,我们可以对几何图形进行擦除,移动操作。但是如果要对几何图形的具体类进行具体操作时,我们可以使用多态技术。由于面向对象程序语言具备后期绑定的特性——向对象发送消息时,被调用代码直到运行时才能够被确定代码地址。这个特性确保了多态技术的实现。

七、单根继承结构
由于Java的所有对象都是继承与一个Object类的,这样使得Java具备一定的兼容性。

八、容器
1.Java有多种容器,这样做的好处是其一:不同容器提供不同类型的接口与外部行为。这样给客户端程序员提供的一些便捷的选择。(栈,队列,Map,Iterator,Set等等)
2.不同容器对于某些操作有不同的效率(比如ArraysList与LinkedList的随机查找与插入删除操作)
3、由于擦除机制的存在,容器只储存Object类型,这样会将要储存的对象全部向上转型为Object型。我们可以通过参数化类型,当对象从容器取出时,可以将Object向下转型为正确的类型。由于向下转型具备不确定性,可能会使编译错误。

九、对象的创建和生命周期
对象的数据位于何处?对于不同的面向对象程序语言有不同的选择方式。在C++中对象的储存空间与生命周期可以在编写程序时确定,可以选择至于堆栈区中,可以置于静态存储区中。这是一种方法,而另外的一种方法则是将在堆的内存池中动态的创建对象,在这种方式中,我们直到运行时才能知道创建了多少对象,以及对象的相应信息。Java采用动态内存分配方式,其垃圾回收机制可以自动回收一些无用的对象。

十、异常处理
我们设计程序时总是希望程序按照我们的思路运行。而实际上并非如此,不规范的输入会使程序不会按照我们所设计的那样运行,从而造成一些不可预估的错误。而异常机制通过捕获这些不正确的输入并抛出一些异常,然后对这些异常进行相应的处理。这样就可以避免一些无法预估的事情发生了。

总结
以上就是第一章的主要内容(后面的部分主要是了解为主)。目前来说,对象导论这一章对于从没学过Java的我而言有点难以理解(所以很多东西是照抄原文的)。希望通过后期的深入学习,我能够比较深入地理解这一章。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值