Java对象导论
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对象导论的更多相关文章
- JavaSE——Java对象导论
一.抽象过程 人们所能够解决问题的复杂性直接取决于抽象的类型和质量.所谓抽象的类型指的是抽象的是什么,汇编语言是对底层机器的轻微抽象,命令式语言(FORTRAN.BASIC.C)是对汇编语言的抽象.这 ...
- Thinking In Java读书笔记--对象导论
Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...
- Java编程思想读书笔记(一)【对象导论】
2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...
- 《Java编程思想》读书笔记-对象导论
计算机是头脑延伸的工具,是一种不同类型的表达媒体.本文以背景性的和补充性的材料,介绍包括开发方法概述在内的面向对象程序设计(Object-oriented Programming,OOP)的基本概念. ...
- java编程思想(1)--对象导论
对象导论: 1.1 抽象过程 所有的语言都有抽象机制,抽象是解决复杂问题的根本方法.例如:汇编语言是对底层机器的轻微抽象.命令式语言(如:FORTRAN.BASIC.C)又是对汇编语言的抽象. jav ...
- Java 基础之一对象导论
对象导论 1.1 抽象过程 所有编程语言都提供抽象机制.人们所能解决的问题的复杂性直接取决于抽象的类型和质量. 汇编语言是对底层机器的轻微抽象. 我们将问题空间中的元素及其再解空间中的表示称为对象.这 ...
- [Java编程思想] 第一章 对象导论
第一章 对象导论 "我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来--除非赞成这个协定中规定的有 ...
- <Java编程思想>读书笔记(1)-对象导论、一切都是对象
1.面向对象编程:OOP (Object-oriented Programming) 2.Alan Kay 总结的面向对象语言5个基本特性: 1) 万物皆为对象 2) 程序是对象的集合,他们通过发送消 ...
- 【Think In Java笔记】第1章 对象导论
1. 对象导论 OOP 面向对象编程 C.Basic等语言所在的抽象仍要求在解决问题时基于计算机的解决,而不是基于所解决问题的结构来考虑. 要建立起问题空间的元素和解空间的对象之间一一映射的关系 万物 ...
随机推荐
- django框架简介及自定义简易版框架
web应用与web框架本质 概念 什么是web应用程序呢? Web应用程序就一种可以通过互联网来访问资源的应用程序, 用户可以只需要用一个浏览器而不需要安装其他程序就可以访问自己需要的资源. 应用软件 ...
- [转]Xtrabackup 的 xtrabackup_binlog_pos_innodb和xtrabackup_binlog_info 文件区别
[转自] http://julyclyde.org/?p=403 在操作 innobackupex 的时候,执行 change master to 的时候发现 xtrabackup_binlog_po ...
- socket实现ftp上传下载
socket实现ftp文件的上传和下载 server端代码: import socket import json import struct import os soc = socket.socket ...
- VLAN实验4(在eNSP上利用单臂路由实现VLAN间路由)
原理概述: 以太网中,通常会使用VLAN技术隔离二层广播域来减少广播的影响*并增强 网络的安全性和可管理性.其缺点足同时也严格地隔离了不同VLAN之间的任何二层流量,使分属于不同VLAN的用户 不能直 ...
- hadoop format 重新格式化
前文:如果格式化完之后,使用jps命令发现进程都已经启动,但是使用web页面打不开hadoop的网页,可能原因就是防火墙没关或者是哪个配置过程配错了. 1.关闭防火墙 一般最好是关闭防火墙比较关闭. ...
- 添加-ObjC的含义
http://www.cnblogs.com/yashi88/p/3551947.html 参考文章 当使用某个第三方库时,遇到 出现"selector not recognized&quo ...
- IOS UIAlertView(警告框)方法总结
转自:my.oschina.net/u/2340880/blog/408873?p=1 IOS中UIAlertView(警告框)常用方法总结 一.初始化方法 - (instancetype)initW ...
- flex布局的兼容问题
一.W3C各个版本的flex 2009 version 标志:display: box; or a property that is box-{*} (eg. box-pack) 2011 versi ...
- 同时安装Office2016和Visio2016
最近由于学习需要使用Visio,于是下载来安装.之前使用的Office2016一切正常,但是怎么都安装不上visio,把Office2016卸载了安,又没有word.ppt这些,反正就是没法同时安装上 ...
- postman高级应用
目录 提取接口返回值 设置动态参数 流程控制 调试 定义公共函数 外部数据文件 提取接口返回值 1.获取响应的header值 var Content-Type=postman.getResponseH ...