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的生命周期更长.但在现 ...
随机推荐
- ALSA声卡驱动的DAPM(一)-DPAM详解
最近使用tinymix 调试相应的音频通道,但是一直不知道音频通道的原理是什么.所以百度了一下,百度结果是与DPAM有关. 一.DAPM简介: DAPM是Dynamic Audio Power Man ...
- Fedora 29 查看 rpm 包 依赖性 以 libconfig 为例
查看依赖性方法:# rpmrepater会向用户显示已安装包的列表,你可以使用上/下箭头来滚动屏幕# 可以在指定包上使用"r"键来显示其依赖关系,循环在指定包上按下"r& ...
- git svn 流程
$ git svn clone http://192.168.10.208/svn/DeptDoc $ git svn rebase $ git commit -asm "svn tra ...
- [转]extern "C"的作用
extern "C"的主要作用就是为了能够正确实现C++代码调用其它C语言代码. 加上extern “C”后,会指示编译器将这部分代码按C语言进行编译,而不是C++的.这是因为C+ ...
- MySQL面试题之如何优化一条有问题的SQL语句?
如何优化一条有问题的sql语句? 针对sql语句的优化.我们可以从如下几个角度去分析 回归到表的设计层面,数据类型选择是否合理 大表碎片的整理是否完善 表的统计信息,是不是准确的 审查表的执行计划,判 ...
- 查看tomcat项目中,具体占用cpu高的线程。
1.查看主进程占用cpu高: 此处主进程:27823 ~]# top top - :0: up days, :, 3 users, load average: 13.12, 13.31, 13.23 ...
- PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记
PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...
- 17秋 软件工程 第六次作业 Beta冲刺 总结博客
题目:团队作业--Beta冲刺 17秋 软件工程 第六次作业 Beta冲刺 总结博客 Beta冲刺过程中各个成员的贡献百分比 世强:15.5% 陈翔:14.5% 树民:12.0% 媛媛:14.0% 港 ...
- 最后一个单词的长度的golang实现
给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 说明:一个单词是指由字母组成,但不包含任何空格的字符串. 输入: "He ...
- PyQt5--QComboBox
# -*- coding:utf-8 -*- ''' Created on Sep 20, 2018 @author: SaShuangYiBing Comment: ''' import sys f ...