【读书·TIJ】第一章 对象导论
- 抽象过程
- 人们能够接二觉的问题的复杂性直接却决于抽象的类型和质量。
- 对机器建模的方式就是只针对待解决问题建模。
- Lisp 所有问题最终都是列表
- APL 所有问题最终都是算法形式的
- PROLOG 所有问题都是转换成决策链
- 面向对象方式通过向程序员提供表示问题空间中的元素的工具而更近了一步。
- 问题空间按中的元素及其在解空间中的表示称为“对象”
- Smalltalk的五个基本特征:
- 万物皆为对象。 对象
- 程序是对象的集合,它们通过发送消息来告知彼此所要做的。 指令。
- 每个独享都有自己的由其他对象所构成的存储。 封装
- 每个对象都拥有其类型。 类、多态
- 某一特定类型的所有对象都可以接受同样的消息。 继承
- Booch描述:对象具有状态、行为和标识。
- 每个对象都有一个接口
- 所有的对象都是唯一的,但同时也是具有相同的特征和行为的对象所归属的类的一部分。
- 银行出纳问题(bank teller problem): This is a classical problem in queuing theory: should there be multiple queues,one for each teller in a bank, or should we have one single queue for all the tellers?
- 因为类买哦书了具有相同特性(数据元素)和行为(功能)的对象集合, 所以一个类实际上就是一个数据类型。
- 面向对象程序设计的挑战之一:在问题空间的元素和解空间的对象之间创建一对一的映射。
- 接口定义了对某一个特定对象所能发出的请求。
- 每个对象都提供服务
- 将对象想象成为“服务提供者”。
- 如果我可以将问题从表象中抽取出来,那么什么样的对象可以马上解决我的问题呢?
- 好处:有助于提高对象的内聚性。
- 高内聚是软件设计的最基本质量要求之一:意味着一个软件构件的各方面“组合”的很好。
- 被隐藏的具体实现
- 程序开发人员按照角色分类:类创建者、客户端程序员。
- 访问控制的第一个存在原因:让客户端程序员无法触及他们不应该触及的部分。
- 访问控制的第二个存在原因:允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。
- Java的访问指定词:
- private 仅类创建者和类内部方法可访问
- protect 与private类似,但允许其子类访问
- public 任何人都可以访问
- default 包访问权限控制,仅允许同包的类型访问,在包外与private相同。
- 复用具体实现
- 代码复用是面向独享程序设计语言所提供的最了不起的优点之一。
- 使用现有的类合成新的类叫做组合
- 动态的组合叫做聚合
- 聚合的关系是“has-a”,即“拥有”。
- 继承
- 一个基类型包含其所有导出类型所共享的特性和行为
- 导出类和基类具有相同类型
- 导出类只覆盖基类方法,称之为纯粹替代,又叫替代原则。“is-a”的关系
- 导出类添加了新的方法, "is-like-a"的关系
- 伴随多态的可互换对象
- 编译器不可能产生传统意义上的函数调用
- 非面向对象程序产生的函数调用会引起“前期绑定”。
- 面向对象程序使用的是“后期绑定”
- Java中默认使用动态绑定,不要特殊关键字(c++的virtual)指定时候“后期绑定”。
- 把导出类看做是他的基类的过程称为向上转型。
- 单根继承结构
- Java所有类都继承自Object,所以是单根继承
- 单根继承结构中所有的对象都有一个公共接口,所以他们归根到底都是相同的基本类型
- 单根继承结构保证所有对象都具备某些宫嗯那个。
- 单根继承结果是垃圾回收的实现变得容易很多。
- 容器
- 再任何需要时都可以扩充自己以容纳你置于其中的所有东西。
- 对容器有所选择的原因:
- 不同的容器提供了不同类型的接口和外部行为
- 不同的容器对于某些操作具有不同的效率。
- 参数化类型——泛型
- 对象的创建和生命周期
- 对象趋向于变得复杂,所以查找和释放存储空间的开销不会对对象的创建造成重大的冲击。
- 垃圾回收机制
- 异常处理:处理错误
- 并发编程
- 通常线程只是一种为单一处理器分配执行时间的手段。
- 并发不安全的根本问题是竟态条件。
- Java和Internet
- C/S的核心思想:系统具有一个中心信息存储池(数据库),可以按需将数据分发给某些人或机器集群。
- C/S 存在事物问题
- 程序更新升级不方便
- 分发数据工作量比较大
- Web浏览:一段信息不经修改就可以在任意型号的计算机上显示。
- CGI : 通用网关接口
- GIF: 图形交互格式
全部评论