JavaSE——Java对象导论
一、抽象过程
人们所能够解决问题的复杂性直接取决于抽象的类型和质量。所谓抽象的类型指的是抽象的是什么,汇编语言是对底层机器的轻微抽象,命令式语言(FORTRAN、BASIC、C)是对汇编语言的抽象。这些语言所作的主要抽象仍要求在解决问题时要基于计算机的结构,而不是基于所要解决问题的结构。而面向对象语言则是面向解问题,将问题空间中的元素及其在解空间中的表示称之为“对象”。
对象具有状态(内部数据)、行为(方法)、标识(唯一的内存地址,也可能在硬盘中)。
- 万物皆对象。理论上来讲,可以抽取任何待解决问题的概念化构件(狗、建筑物、服务等)将其视为对象。
- 程序是对象的集合,它们通过发送消息来告诉彼此要做的。可以把消息想象为对某个特定对象的方法的调用请求。
- 每个对象都有自己的由其他对象构成的存储。也就是说,可以创建包含现有对象的包的方式来创建新的对象。
- 每个对象都有其类型。这里的类型是类的同义词。
- 某一个特定类型的所有对象都可以接受同样的消息。也就是说子类对象必须要能够接受传递给父类对象的消息。
二、每个对象都有一个接口
有人认为,类决定了接口,而类是该接口的一个特定实现。类表述了具有相同特性(数据元素)和行为(功能)的对象集合。所以,类是一个数据类型,就相当于基本类型的浮点型一样,所有的浮点型数据具有相同的特性和行为集合。如下面的代码所示,类型时Light,特定的Light对象时lt,圆点连接一个消息请求on(),面向对象的程序设计通常简单归纳为“向对象发送消息”。
Light lt=new Light();
lt.on();
三、每个对象都提供服务
将对象想象为“服务提供者”,有助于提高对象的内聚性。
四、被隐藏的具体实现
程序开发人员按照角色分为类创建者和客户端程序员。类创建者的目标是创建类,这种类只向客户端成员暴露必须的部分,而隐藏其他部分。被隐藏的部分通常代表对象内部脆弱的部分。因此,需要添加访问控制,访问控制的第一个存在原因就是让客户端程序员无法触及他们不应该触及的部分。第二个原因就是允许类库设计者可以改变类内部的工作方式而不必担心会影响到客户端程序员。
Java三个关键字public、private、protected。
- public:任何人都可以使用。
- private:只有类型创建者和类型的内部方法可以访问。
- protected:与private作用相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员。
- 默认:包访问权限。
五、复用具体实现
代码复用是面向对象程序设计语言最了不起的优点之一。最简单的复用某个类的方式是直接使用该类的一个对象,此外也可以将那个类的对象置于某个新类之中,我们称之为“创建一个成员对象”。成员对象可以有多个,通常他们被声明为private,这种概念被称为组合。在创建新类时,应该首先考虑组合,因为它相较于继承更加简单灵活。
六、继承
当继承现有类型时,也就创造了新的类型。这个新的类型不仅包括现有类型的所有成员(除private成员),还复制了基类的接口。也就是说,所有发给基类对象的消息同时也可以发出给导出类对象。这也就意味着基类和导出类具有相同的类型。这便是继承产生的类型等价性。
若要使基类和导出类产生差异,有两种方法:一种,在导出类中添加新方法,一种覆盖基类方法。
七、伴随多态的可互换对象
在处理类型的层次结构时,经常想把一个对象不当作它所属的特定类型来对待,而是将它当做其基类的对象对待。下图中,BirdController对象仅能处理泛化的Bird对象,而不了解它们的具体的类型,当move()方法被调用时,即便忽略Bird的具体类型,也会产生正确的行为。因为,编译器不可能产生传统意义上的函数调用。在非面向对象程序语言中,函数调用会引起所谓的前期绑定,也就是编译器将产生对一个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址。在OOP中,采用后期绑定的机制,程序直到运行时才能够确定代码的地址。也就是,当向对象对象发送消息时,被调用的代码直到运行时才能确定。编译器只确保被调用方法的存在,并对调用参数和返回值执行类型检查,但并不知道将被执行的确定代码。

class BirdController {
void reLocate(Bird bird){
bird.move();
}
}
BirdController birdController=new BirdController();
Goose goose=new Goose();
Penguin penguin=new Penguin();
birdController.reLocate(goose);
birdController.reLocate(penguin);
将导出类看做是它的基类的过程成为向上转型。
八、单根继承结构
在OOP中,除C++外,所有的类最终都继承自单一的基类——Object。因此所有对象都具有一个共用接口,所以他们归根到底都是相同的节本类型。
九、容器
如果不知道在解决某个特定问题时需要多少个对象,或者它们将存活多久,那么就可以使用容器来持有对其他对象的引用。不同的容器提供不同类型的接口和外部行为,不同的容器对于某些操作具有不同的效果。如ArrayList和LinkList,对于插入元素,LinkList明显花费的代价少。
十、对象的创建和生命期
Java采用动态内存分配方式。对象的生成和销毁方式以及其生命周期,以后再做详细讨论。
JavaSE——Java对象导论的更多相关文章
- Java对象导论
Java对象导论 1.1 抽象过程 万物皆对象. 程序是对象的集合(即:类),他们通过发送消息(调用方法)来告知彼此要做的. 每个对象都有自己的由其他对象所构成的存储(引用其他对象或基本类型,即组合) ...
- 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编程思想] 第一章 对象导论
第一章 对象导论 "我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来--除非赞成这个协定中规定的有 ...
- JavaSE基础(十二)--Java 对象和类
Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例(对象不是找个女朋友 ...
- <Java编程思想>读书笔记(1)-对象导论、一切都是对象
1.面向对象编程:OOP (Object-oriented Programming) 2.Alan Kay 总结的面向对象语言5个基本特性: 1) 万物皆为对象 2) 程序是对象的集合,他们通过发送消 ...
随机推荐
- Godaddy虚拟主机新建mysql数据库 2019最新
第一次用狗爹,完全摸不着路子. 网站本地已搭建,不知道数据库是在哪里上传. 百度搜索结果都是四五年前的旧内容,耽误时间. 还是问客服,Godaddy的客服确实不赖 godaddy虚拟主机如何新建数据库 ...
- Typedef 用法
typedef声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法. 不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用typedef避免缺欠,从而使代码更健壮. ...
- windows下安装pm2
安装pm2 npm install pm2 -g 添加系统环境变量 PM2_HOME=C:\Users\PCONE\.pm2 打开新的cmd命令行窗口,执行以下命令来安装服务 pm2-service- ...
- POJ 1067 取石子游戏 (威佐夫博奕,公式)
题意: 有两堆石子,两个人轮流取石子.规定每次有两种取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.给定两堆石子数量,问先手的输赢? ...
- 给广大码农分享福利:一个业界良心的github仓库,中文计算机资料
我今天查资料时无意发现的,https://github.com/CyC2018/CS-Notes 这个仓库包含了下列几个维度的计算机学习资料: 深受国内程序员喜爱,已经有超过3万多star了. 1. ...
- OpenGL小试牛刀第二季(粒子模拟)
效果截图:粒子模拟代码展示:#include "Particle.h" /** 构造函数 */CParticle::CParticle(){ data = NULL; numpar ...
- [转]C++中sizeof(struct)怎么计算?
版权属于原作者,我只是排版. 1. sizeof应用在结构上的情况 请看下面的结构: struct MyStruct{ double dda1; char dda; int type;}; 对结构My ...
- 《队长说得队》【Alpha】Scrum meeting 3
项目 内容 这个作业属于哪个课程 >>2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 >>实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 ...
- 解决AjaxFileUpload中文化/国际化的问题。
由微软官方提供的AjaxControlToolKit,在ASP.NET开发过程中,确实能够给开发者带来很多的便利,节约开发者的重复劳动.这套控件也是比较成熟的,在性能方面也不会太差,至少能够满足一般开 ...
- Java开发小游戏 用键盘控制精灵在游戏中上下左右跑动 窗体小游戏可打包下载,解压后双击start运行
package com.swift; import java.awt.Point; import java.awt.event.KeyEvent; import com.rupeng.game.Gam ...