Java 基础之一对象导论
对象导论
1.1 抽象过程
所有编程语言都提供抽象机制。人们所能解决的问题的复杂性直接取决于抽象的类型和质量。
汇编语言是对底层机器的轻微抽象。
我们将问题空间中的元素及其再解空间中的表示称为对象。这种思想实质是:程序可以通过添加新类型的对象使自身适用于某个特定的问题。
- 万物皆为对象
 可以抽取待求解问题的任何概念化构建表示程序中的对象。
- 程序是对象的集合
 他们通过发送消息来告知彼此所要做的。
- 每个对象都有自己的由其他对象所构成的存储
- 每个对象都拥有其类型
- 某一特定类型的所有对象都可以接收同样的消息
1.2 每个对象都有一个接口
创建抽象数据类型(类)是面向对象程序设计的基本概念之一。
可以创建某一类型的变量,然后操作这些变量。
类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型。
1.3 每个对象都提供服务
每个对象都提供服务,它有助于提高对象的内聚性。高内聚是软件设计的基本质量要求之一:这意味着一个软件构件的各个方面组合得很好。
1.4 被隐藏的具体实现
将程序开发人员按照角色分为类创建者和客户端程序员。
客户端程序员的目标是收集各种用来实现快速应用开发的类。类创建者的目标是构建类,这种类只向客户端程序员暴露必须的部分,而隐藏其他部分。
访问控制:一个存在原因让客户端程序员无法触及不应该触及的部分。另一个存在原因就是允许库设计者可以改变类内部的工作方式而不用担心会影响客户端程序员。
1.5 复用具体实现
使用现有类合成新的类,这种方式被称为组合。
如果组合是动态的,通常称他们为聚合。
1.6 继承
当父类发生变化时,被修改的子类也会发生变动。
当继承现有类型时,也就创建了新的类型。
导出类和基类具有相同的类型。
如果只是简单地继承一个类而并不做其他任何事情,那么基类接口中的方法将会直接继承到导出类。
1.6.1 是一个与像一个关系
导出类和基类时完全相同的类型,因为它们具有完全相同的接口。可以用一个导出类对象来完全替代一个基类对象。这可以被视为纯粹替代,通常称为替代原则。is-a关系
有时必须在导出类型中添加新的接口元素,这样也就扩展了接口。这个新的类型任然可以替代基类,但时这种替代不完美,因为基类无法访问新添加的方法。者中可以描述为is-like-a关系。
1.7 伴随多态的可互换对象
在处理类型的层次结构时,想把一个对象不当作它所表示的对象类型来对待,而把它当作基类来对待。
通过导出新的子类型而轻松扩展设计的能力时对改动进行封装的基本方法之一。
1.8 单根继承结构
在单根继承结构中的所有对象都具有一个公用接口,所有它们归根到底都时相同的基本类型。
单根继承保证了所有对象都具备某些功能。
单根继承结构使垃圾回收器都具备某些功能。由于所有对象都保证具有其类型信息,所以不会因无法确定对象的类型而陷入僵局。
1.9 容器
在C++中,容器被称为标准模板类库。
单一的容器是满足不了现有的需求,还需要对容易进行选择,主要原因有两个:
- 不同容器提供了不同类型的接口和外部行为。
- 不同容器对于某些操作具有不同的效率
1.9.1 参数化类型
参数化类型就是编译器可以自动定制作用于特定类型上的类。在Java中称为泛型。
1.10 对象的创建和生命期
当使用对象时,最关键问题之一就是他们的生成与销毁。每个对象为了生存都需要资源,尤其时内存。当我们不在需要对象时,需要清理掉所占有的资源。
对象的数据存在于何处,有两种方式:
- 为了最求最大执行速度,对象的存储空间和生命周期可以在编程程序时确定,这可以通过将对象置于堆栈或限域变量或静态存储区来实现。这种方式将存储空间的分配和释放置于优先位置。
- 在碓的内存池中动态的创建对象。在这种方式中,直到运行时才知道需要多少对象,它们生命周期如何,以及它们的具体类型是什么。因为存储空间是被动态管理的,所有需要大量时间在碓中分配空间,这可能要远远大于在堆中创建空间。Java采用的便是这种方法。
1.11 异常处理:处理错误
异常是一种对象,它从出错地点被"抛出",并被专门用来处理特定类型错误的相应异常处理器"捕获"。异常处理像是与正常程序执行路径并行的,在错误时执行的另一条路径。
异常提供了一种从错误状况进行可靠恢复的途径。
1.12 并发编程
有时中断对于处理时间性强的程序是必须的,但对于大量其他问题,我们只想把问题切分成多个独立的部分执行。在程序中,这些彼此独立运行的部分被称为"线程",这个概念被称为并发。
并发看起来相当有用,但有一个隐患:共享资源。如果多个并行任务都要访问同一个资源,那么就会出现问题。
解决办法:当一个任务访问资源的时候,将资源锁住,直到使用完毕后,在释放资源,给其他任务使用。
Java 基础之一对象导论的更多相关文章
- Thinking In Java读书笔记--对象导论
		Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ... 
- java基础(二) -对象和类
		Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为.例如,一条狗是一 ... 
- Java基础03-12_对象比较
		对象比较 如果说现在有两个数字要判断是否相等,可以使用"=="完成 如果是字符串要判断是否相等使用"equals()" 但是如果说现在有一个自定义的类,要想判断 ... 
- JAVA基础之对象的初始化
		本文主要记录JAVA中对象的初始化过程,包括实例变量的初始化和类变量的初始化以及 final 关键字对初始化的影响.另外,还讨论了由于继承原因,探讨了引用变量的编译时类型和运行时类型 一,实例变量的初 ... 
- java基础(一)对象
		对象的创建 Test test = new Test(); Test test = new Test("a"); 其实,对象被创建出来时,对象就是一个对象的引用,这个引用在内存中为 ... 
- Java基础---其他对象
		第一讲 System类 一.概述 1.System是描述系统一些信息的类,类中的属性和方法都是静态的.不能被实例化,没有提供构造函数. 2.字段摘要 out:标准输出流.默认是控制台. in: ... 
- Java基础 --  持有对象(容器)
		一 容器的用途 如果对象的数量与生命周期都是固定的,自然我们也就不需要很复杂的数据结构. 我们可以通过创建引用来持有对象,如 Class clazz; 也可以通过数组来持有多个对象,如 Class[] ... 
- Thinking in java(1):对象导论
		纯粹的面向对象程序设计的几个特性:1. 万物皆对象2. 程序是对象的合集,他通过发消息告诉彼此要做什么3. 每个对象都有自己的由其他对象所构成的存储4. 每个对象都有其类型5. 某一特定类型的所有对象 ... 
- Java基础之对象序列化
		1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现 ... 
随机推荐
- windows任务管理器怎么知道多个IIS网站进程分别对应哪个网站
			摘要: 1.IIS网站对应的进程名一般叫w3wp.exe (windows2008系统为例,其他类似) 2.windows默认的任务管理器只能看到多个同名的进程名w3wp.exe,没法区别分别对应哪个 ... 
- Iptables防火墙(SNAT和DNAT)
			1.SNAT:源地址转换 实现内网访问外网,修改IP地址,使用POSTROUTING 命令:iptables -t nat -A POSTROUTING -s 192.168.1.10/2 ... 
- JavaScript中数组的增删改查以及应用方式
			数组的增加方法 1.push()方法向数组中末尾添加一个元素,原数组改变 var arr=[1,2,3,4]; var arr1=arr.push(6); console.log(arr);//打印出 ... 
- easyui的datebox控件如何只要年月不要日谢谢知道的说一下
			例子2015-01 格式easyui-datebox 加上 data-options="formatter:myformatter,parser:myparser"function ... 
- HTTP数据组织方式
			HTTP网络传输中的数据组织方式有三种方式: 1.HTML方式 2.XML方式 3.JSON方式 XML介绍:XML称为可扩展标记语言,它与HTML一样,都是SGML(标准通用标记语言) XM ... 
- 添加xmlns:android="http://schemas.android.com/apk/res/android"的意思
			http://www.cnblogs.com/lovely/archive/2013/01/17/2865192.html xmlns:android="http://schemas.and ... 
- Javascript中的undefined、null、""、0值和false的区别总结
			在程序语言中定义的各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBN ... 
- Qt 编程指南 3_1 按钮弹窗手动和自动关联示例
			触发的两种模式 connect() 和 on_控件ID_控件函数(参数) 两者优缺点对比: 虽然 Qt 有比较好用的自动关联大法,但自动关联不是万能的,尤其是涉及到多个窗体的时候,比如 A 窗体私有按 ... 
- Javascript中的各结构的嵌套和函数
			各位朋友大家好,上周更新给大家分享了JavaScript的入门知识及各种常用结构的用法,那么,本次更新博主就跟大家更深入的聊一聊JS各结构的嵌套用法,及JS中及其常用的一种结构——函数.以下为函数和循 ... 
- go标准库的学习-net/url
			参考:https://studygolang.com/pkgdoc 导入方式: import "net/url" url包解析URL并实现了查询的逸码,参见RFC 3986. fu ... 
