Java对象导论

1.1 抽象过程

  • 万物皆对象。
  • 程序是对象的集合(即:类),他们通过发送消息(调用方法)来告知彼此要做的。
  • 每个对象都有自己的由其他对象所构成的存储(引用其他对象或基本类型,即组合)。
  • 每个对象都拥有其类型。每个类最重要的区别于其他类的特征就是“可以发送什么样的消息给它”(即调用方法)。
  • 某一特定类型的所有对象都可以接受同样的消息。
  • 对象具有状态(成员属性)、行为(成员方法)和标识(引用的名称)。每个对象在内存中都有唯一的一个地址。

1.2 每个对象都有一个接口

  • 在程序执行期间具有不同的状态而其他方面都相似的对象会被分组到对象的类中。
  • 每个对象都属于定义了特性和行为的某个特定的类。
  • 类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以可以把类当成是一个数据类型,例如所有浮点型数字具有相同的特性和行为集合。二者的差异在于,程序员通过定义类来适应问题,而不再被迫只能使用现有的用来表示机器中的存储单元的数据类型。
  • 每个对象都只能满足某些请求,这些请求有对象的接口所定义,决定接口的便是类型(即对象能够调用什么方法)。
  • 向某个对象“发送消息”(产生请求),这个对象便知道此消息的目的,然后执行对应的程序代码。
  • 为了向对象发送消息,需要声明对象的名称,然后以圆点符号连接一个消息请求。

1.3 每个对象都提供服务

  • 当正在试图开发或理解一个程序设计时,最好的方法之一就是将对象想象为“服务提供者”,程序本身想用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。
  • 将对象看做都是服务提供者还有一个附带的好处:它有助于提高对象的内聚性(内聚和耦合是密切相关的,同其他模块存在高耦合的模块意味着低内聚,而高内聚的模块意味着该模块同其他模块之间是低耦合。在进行软件设计时,应力争做到高内聚,低耦合)。
  • 每个对象都有一个它所能提供服务的内聚的集合。在良好的面向对象设计中,每个对象都可以很好的完成这项任务,但是它并不试图做更多的事情。

1.4 被隐藏的具体实现

  • 将程序开发人员按照角色分为类创建者(那些创建新数据类型的程序员)和客户程序员(那些在其应用中使用数据类型的程序员)是大有裨益的。客户端程序员的目标是手机各种用来实现快速开发应用的类。类创建者的目标是构建类,这种类只想客户端程序员暴露必需的部分,而隐藏其他部分。
  • 访问控制的一个存在原因就是让客户端程序员无法触及他们不应该触及的部分——这部分对于数据类型的内部操作是必须的,但并不是用户解决问题所需的接口的一部分。
  • 访问控制第二个存在原因是允许库设计者可以改变内部的工作方式而不用担心会影响到客户端程序员。

1.5 复用具体实现

  • 最简单的复用某个类的方式就是直接使用该类的一个对象,还可以将哪个类的一个对象置于某个新的类中。我们称其为“创建一个成员对象”。新的类可以由任意数量,任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。因为是以现有的类合成新的类,所以称为组合。
  • 组合带来了极大的灵活性。新类的成员对象通常被声明为private,使得使用新类的客户端程序员不能访问他们。这也使得你可以在不干扰现有客户端代码的情况下,修改这些成员。也可以在运行时修改这些对象,以实现动态修改程序的行为。

1.6 继承

  • 在创建了一个类后,及时另一个类与其具有相似的功能,你还是得重新创建一个新类。如果我们能够以现有类为基础,复制它,然后通过添加个修改这个副本来创建新类就要好多了。通过继承便可以达到这样的效果。
  • 一个基类型包含其所有导出类型所共享的特性和行为。可以创建一个基类型来表示某些对象的核心概念,从基类型来导出其他类型,来表示此核心可以被实现的各种不同方式。
  • 当继承现有类型时,也就创造了新的类型。这个新的类型不仅包括现有类型的所有成员(尽管private成员被隐藏了起来,并且不可访问)。PS:所有private属性和方法都能被继承。
  • 有两种方法可以使基类与导出类差生差异:一是直接再导出类中添加新方法;二是改变现有基类方法的行为,也是最重要的方法,称为覆盖。
  • 继承只覆盖基类的方法(而并不添加在基类中没有的新方法),导出类和基类有完全相同的接口,导出类可以完全被替代为一个基类对象(导出类对象和基类对象可以调用的方法是一样的)。
  • 有时必须在导出类型中添加新的接口元素,这样也就扩展了接口。这个新的类型仍然可以替代基类,但是这种替换并不完美(父类引用指向子类对象,则子类对象只能调用父类中已有的方法)。

1.7 伴随多态的可互换对象

  • 编译器不可能产生传统意义上的函数调用,一个非面向对象编程的编译器产生的函数调用会引起所谓的前期绑定(即在编译期间就确定了运行时将调用哪段代码)。
  • 当向对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用的方法的存在,并对调用参数和返回值执行类型检查(无法提供此类保证的语言被称为是弱类型的),但是还不知道将被执行的确切代码。

1.8 单根继承结构

  • 所有类都继承于顶级父类Object

1.9 容器

  • 一种对象类型,这种对象类型持有其他对象的引用,称为容器(也称为集合),可以再运行期间动态的改变容量大小。
  • 不同类型的容器提供了个不同的接口和外部行为。
  • 不同的容器由于底层结构的不同,对某些操作具有不同的效率(如ArrayList和LinkedList)。
  • 根据不同的情况选择不同的容器,如在一开始使用LinkedList构建程序,而在优化系统性能时改用ArrayList。接口List所带来的抽象,把在容器之间进行转换时对代码产生的影响降到最小限度。
  • 参数化机制(即泛型),可以自动定制作用于特定类型上的类,避免向上向下转型带来的资源消耗和安全性问题。

1.10 对象的创建和生命周期

  • java只允许在堆上创建对象(通过new关键字),并且有垃圾回收器以守护线程的方式在适当的时候自动清理不再被使用的对象。

1.11 异常处理:处理错误

  • 异常提供了一种从错误情况进行可靠恢复的途径,现在不再是只能退出程序,你可以经常进行校正,并恢复程序的执行,这些都有助于编写出更健壮的程序。

1.12 并发编程

  • 程序能够停下正在做的工作,转而处理某个其他问题。
  • 有时中断对于处理时间性强的任务是必须的,但是对于大量的其他问题,我们只是想把问题分割成多个可独立运行的部分(任务),从而提高程序的响应能力。这些彼此独立运行的部分称之为线程,上述概念被称为“并发”。
  • 多线程带来的便利之一是程序员不再关心机器上是由多个处理器还是一个处理器。
  • 某个任务锁定某项资源,完成其任务,然后释放资源锁,使其他任务可以使用这项资源,防止多个线程同时访问同一个资源时带来的线程安全问题。

1.13 Java与internet

  • 此处省略一万字。。。

参考:Java编程思想中文版第四版第一章

Java对象导论的更多相关文章

  1. JavaSE——Java对象导论

    一.抽象过程 人们所能够解决问题的复杂性直接取决于抽象的类型和质量.所谓抽象的类型指的是抽象的是什么,汇编语言是对底层机器的轻微抽象,命令式语言(FORTRAN.BASIC.C)是对汇编语言的抽象.这 ...

  2. Thinking In Java读书笔记--对象导论

    Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...

  3. Java编程思想读书笔记(一)【对象导论】

    2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...

  4. 《Java编程思想》读书笔记-对象导论

    计算机是头脑延伸的工具,是一种不同类型的表达媒体.本文以背景性的和补充性的材料,介绍包括开发方法概述在内的面向对象程序设计(Object-oriented Programming,OOP)的基本概念. ...

  5. java编程思想(1)--对象导论

    对象导论: 1.1 抽象过程 所有的语言都有抽象机制,抽象是解决复杂问题的根本方法.例如:汇编语言是对底层机器的轻微抽象.命令式语言(如:FORTRAN.BASIC.C)又是对汇编语言的抽象. jav ...

  6. Java 基础之一对象导论

    对象导论 1.1 抽象过程 所有编程语言都提供抽象机制.人们所能解决的问题的复杂性直接取决于抽象的类型和质量. 汇编语言是对底层机器的轻微抽象. 我们将问题空间中的元素及其再解空间中的表示称为对象.这 ...

  7. [Java编程思想] 第一章 对象导论

    第一章 对象导论 "我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来--除非赞成这个协定中规定的有 ...

  8. <Java编程思想>读书笔记(1)-对象导论、一切都是对象

    1.面向对象编程:OOP (Object-oriented Programming) 2.Alan Kay 总结的面向对象语言5个基本特性: 1) 万物皆为对象 2) 程序是对象的集合,他们通过发送消 ...

  9. 【Think In Java笔记】第1章 对象导论

    1. 对象导论 OOP 面向对象编程 C.Basic等语言所在的抽象仍要求在解决问题时基于计算机的解决,而不是基于所解决问题的结构来考虑. 要建立起问题空间的元素和解空间的对象之间一一映射的关系 万物 ...

随机推荐

  1. 【数据结构】之链表(Java语言描述)

    以前写过一篇帖子,记录了链表在C语言中的描述代码.C语言中没有链表的直接实现,因此,我们需要自己编写代码实现.请参考[我的这篇文章]. Java中默认为我们提供了链表的API—— LinkedList ...

  2. ansible roles 介绍和使用

    目录 roles roles 介绍 创建role的步骤 role内个目录中可用的文件 案例 roles roles 介绍 ansible 自1.2版本引入的新特性,用于层次性.结构化地组织playbo ...

  3. Android Activity生命周期及启动模式

    曾经搞过许多东西,再熟练的东西一段时间没有碰都会生疏或忘记.后来体会到写成文档记录下来的重要性,但有些word或ppt记录下来的东西随着时间流逝会丢失,或者不愿去看.或许保存成博客的形式,会是更好的选 ...

  4. Netty学习——通过websocket编程实现基于长连接的双攻的通信

    Netty学习(一)基于长连接的双攻的通信,通过websocket编程实现 效果图,客户端和服务器端建立起长连接,客户端发送请求,服务器端响应 但是目前缺少心跳,如果两个建立起来的连接,一个断网之后, ...

  5. ASCII, Unicode, UTF-8

    (本文参考:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) 1. ASCII码 我们知道,在计算机内部,所有的 ...

  6. 给一线讲产品·8期|VPC、子网、安全组,是什么关系?

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  7. 带着canvas去流浪系列之九 粒子动画

    [摘要] canvas实现粒子动画 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 粒子特效 粒子特效一般指密集点阵效果,它并不是canvas独有 ...

  8. 【云速建站】微信公众平台中维护IP白名单

    [摘要] 介绍获取接入IP白名单的操作步骤 网站后台对接微信公众号.支付等都依赖于白名单,接下来就介绍一下白名单的配置. 1.1      为什么要设置白名单 为了提高公众平台开发者接口调用的安全性, ...

  9. 基于webpack实现多html页面开发框架二 css打包、支持scss、文件分离

    本节主要介绍webpack打包的时候CSS的处理方式 一.解决什么问题      1.CSS打包      2.CSS处理浏览器兼容      3.SASS支持      4.CSS分离成单独的文件 ...

  10. Rest微服务案例

    数据库 数据库名称为Product; 创建api子工程,项目名为springcloud_api Product实体类 public class Product implements Serializa ...