【看看我的笔记就知道了,《Java编程思想》这本书的逻辑有多糟糕,尤其是第一章第1节“抽象过程”,我很怀疑作者的语文水平,虽然我的语文好像也不好】
【本笔记专为阅读这本书的人梳理思路。代码的话,因为量太大(一两百个包吧),到时候放到个人github账号上,也会打包发布到本平台】
【书基本上读完了,感觉还没有遇到一款让我满意的文本编辑器】
·元素{属性,关系} + 协议
·计算机起源于机器,因而编程语言始于对机器的模仿:
· 计算机,头脑延伸的工具,不同类型的表达媒体
· 面向对象程序设计——计算机作为表达媒体的大趋势中的组成部分
面向对象程序设计
·OOP的基本概念(含开发方法)
→ 帮助了解面向对象程序设计的全貌
·了解到对象的重要性
·了解到怎样使用对象进行设计
1.1抽象过程
·抽象{类型=抽象针对的是什么,质量} <决定> 能够解决的问题的复杂性
·机器 —— 解空间
·问题 —— 问题空间(如业务问题)
映射:解空间——问题空间
抽象类型 |
优缺点 |
举例 |
面向机器(面向解空间) |
建立映射费力 |
汇编、命令式语言(FORTRAN、Basic、C) |
面向问题(面向问题空间) |
解决问题能力有限 |
LISP、APL、PROLOG |
面向对象(表示问题空间中的元素) |
可扩展(灵活)-通过添加新类型的对象来使自身适用于某个特定问题 |
SmallTalk、Java、CPP |
·面向对象特征:
·万物皆对象
·程序世界是对象的集合
·每个对象都有自己的由其他对象所构成的存储(存在)
·每个对象都有其类型
·某一特定类型的所有对象都可以接收同样的消息(交互方式与交互内容)
·对象属性:
·状态:属性
·行为:方法
·标识:内存中有唯一地址(跨机器和地址空间存在的对象必须由内存地址以外的某些东西确定)
1.2 每个对象都有一个接口(一种类型?)
·类 ~ 抽象数据类型
·class的由来:在程序执行期间具有不同的状态而其他方面都相似的对象会被分组到对象的类中
·运行方式:抽象数据类型的运行方式与内置类型几乎完全一致
·抽象数据类型:定义的Java类(扩展编程语言)
·内置类型:表示机器中的存储单元的数据类型
·对象:
·所有的对象都是唯一的,但同时也是具有相同的特征和行为的对象所归属的类的一部分
·每一个对象都属于定义了特性和行为的某个特定的类
1.3 每个对象都提供服务
·开发或理解程序设计时:将对象想象为“服务提供者”:
·将问题从表象中抽取出来,那么什么样的对象可以马上解决我的问题?
·附带好处:提高对象的内聚性
1.4 被隐藏的具体实现
·类创建者(开发者) & 客户端程序员(使用者)
·创建者向使用者暴露必需的部分(抽象~宏观~接口),而隐藏其他部分(细节~微观~实现)
·好处:便于开发者维护,避免使用者修改产生Bug
·实现方式:访问控制
·访问权限修饰符
1.5 复用具体实现(类级别的复用)
·组合(聚合:动态发生的组合) ~ 拥有
·继承 ~ (像)是一个
·相比继承,组合更加灵活
1.6 继承
·类型
·描述了作用于一个对象集合上的约束条件
·描述了父类与子类之间的相似性,同父类下子类间的差异性
·类型层次结构:用继承构建类型层次结构
使子类和父类产生差异的方法 |
子类和父类的关系 |
覆盖 |
(纯粹只有覆盖)是一个 |
添加新方法 |
像是一个 |
1.7 伴随多态的可互换对象
·类层次结构当中:编译时泛化处理(向上转型),运行时动态绑定具体类型。
·函数调用:
·非OOP(传统意义):前期绑定-编译器产生对一个具体函数名字的调用,而运行时将这个调用解析 到将要被执行的代码的绝对地址(还是不懂)。
·OOP: 后期绑定-当向对象发送消息时,被调用的代码地址直到运行时才能确定。
·编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查(无此保证者被称为弱类 型的),但是并不知道将被执行的确切代码。
·后期绑定实现条件:Java使用一小段特殊的代码来替代绝对地址调用。这段代码使用在对象中存储的信息来计算方法体的地址。这样,根据这一小段代码的内容,每个对象都可以具有不同的行为表现。
1.8 单根继承结构
·终极类:java.lang.Object
·单根继承结构优势:
·保证所有对象都具备某些功能。所有对象都可以很容易地在堆上创建,而参数传递也得到了极大的简化(怎么讲?)。
·使垃圾回收器的实现变得容易得多。
1.9 容器
·容器出现原因:解决有些问题需要的对象数量、存活时间、占用空间等信息在运行时才能知道
·Java容器:List、Map、Set
·容器构件:队列、树、堆栈
·容器多样化原因:
1.不同容器提供了不同类型的接口和外部行为;
2.不同的容器对于某些操作具有不同的效率:如ArrayList和LinkedList。
·容器复用问题:
·向上转型:放入容器|安全
·向下转型:从容器中取出|不安全|需要额外的程序运行时间
·泛型:
·向上转型:编译时进行类型限制和检查
·向下转型:无需类型转换
1.10 对象的创建和生命周期
·使用对象的问题:
·生成方式:占用资源(尤其是内存)
·销毁方式:释放资源(内存)
语言 |
对象存放位置 |
对象存储空间和生命周期 |
对象销毁 |
CPP |
堆栈|限域变量|静态存储区域 |
编写程序时确定 |
自动销毁 |
Java |
堆(动态内存分配) |
运行时确定(编译器不知) |
垃圾回收器 |
·Java垃圾回收器:知道对象何时不再被使用,并自动释放对象占用的内存
1.所有对象都是继承自单根基类Object
2.只能在堆上创建对象
1.11 异常处理
·异常处理:就像是与程序正常执行路径并行的、在错误发生时执行的另一条路径。
·因为是另一条完全分离的路径,故不会干扰正常的执行代码。
1.12 并发编程
·并发:同一时刻处理多个任务
·线程:一个程序中彼此独立运行的部分
·并发最常见的例子:用户界面
·问题:共享资源
·解决方案:某个任务锁定某个资源,完成任务,然后释放资源锁,使其他任务可以使用这项资 源。
1.13 Java与Internet
·web
·问题:单一的服务器,要同时为多个客户服务
·事务处理
·性能问题:延迟
·减轻处理任务的负载:
1.分散给客户机器处理
2.使用中间件将负载分散给在服务器端的其他机器
·客户端编程:
·Java特技:并发、数据库访问、网络编程、分布式计算
·服务器端编程:
·servlet、JSP