1.导论
1.1 抽象过程
对象:问题空间中的元素及其在解空间中的表示称为对象
- 万物皆对象
- 程序是对象的集合,通过发送消息来告知彼此所要做的
- 每个对象都有自己的由其他对象构成的存储
- 每个对象都拥有其类型
- 某一特定类型的多有对象都可以接收同样的消息
1.2 每个对象都有一个接口
类:
- 所有的对象都是唯一的,但同时具有相同的特性和行为对象是所归属类的一部分。
- 类是具有相同特性(数据元素)和行为(功能)的对象集合。
在计算中由表示机器中的存储单元的数据类型 ------> 定义类 来适应问题
例如:所有整型数字类型具有相同的特性和行为的集合 -----> Integer ----> 四类八种
接口
面向对象程序设计的挑战之一,在问题空间的元素和解空间的对象建立一一映射的问题 -----> ER
每个对象只能满足某些请求,这些请求由对象的接口所定义,即确定了对某一特定对象所能发出的请求。
1.3 每个对象都提供服务
高内聚:每个对象在原则上只能完成某一特定的功能,而不会去做更对的事情,这是程序设计所要遵循的规则之一。
1.4 被隐藏的具体实现
- 类的创建者和客户端程序员
- 权限:public\private\protected
1.5 复用
- 代码复用是面向对象的程序设计所提供的优点之一。
- 组合&聚合:新的类可以由任意数量,任意类型的其他对象以任意可以实现新的类中想要的功能和方式组合,由现有类合成新的类的的概念被称为组合,如果这种组合动态发生,那么它通常被称为聚合,组合经常被视为“has - a”
1.6 继承
- 问题空间在解空间的表示在Java中以类的形式展示,即封装问题空间所需要的各种各样的数据和功能被封装到一个类中了。
- 继承的本质是创建新类,这个新类拥有基础类的所有成员(private成员被隐藏不能直接使用)级基础类的接口,即基础类能接收的所有的消息,本类也能够接收,意味着衍生类具有和基础类相同的类型。
-
基础类和衍生类的区别:
- 衍生类可添加新函数
- 衍生类可重写基础类函数
- 基础类和衍生类之间存在等价和类似的关系,可以说衍生类等价于基础类,基础类类似于衍生类,反之有待思辨。
1.7 多态
- 衍生类型当作它的基本类型处理的过程叫作“Upcasting”(上溯造型)
-
我们将这种把衍生类型当作它的基本类型处理的过程叫作“Upcasting”(上溯造型)。其中,“cast”(造 型)是指根据一个现成的模型创建;而“Up”(向上)表明继承的方向是从“上面”来的——即基础类位于 顶部,而衍生类在下方展开。所以,根据基础类进行造型就是一个从上面继承的过程,即“Upcasting”。 在面向对象的程序里,通常都要用到上溯造型技术。
-
将一条消息发给对象时,如果并不知道对方的具体类型是什么,但采取的行动同样是正确的,这种情况就叫
作“多形性”(Polymorphism)。对面向对象的程序设计语言来说,它们用以实现多形性的方法叫作“动态
绑定”。
1.8 抽象和接口
- 在程序开发的过程中基础类的对象不希望被直接创建,通过向上造型的方法完成。
- 抽象类只能被单继承,继承类必须实现被继承类的抽象方法。
-
interface(接口)关键字将抽象类的概念更延伸了一步,它完全禁止了所有的函数定义。“接口”是一种相
当有效和常用的工具。另外如果自己愿意,亦可将多个接口都合并到一起(不能从多个普通 class 或
abstract class 中继承)。
1.9 对象生命周期
- 对象的创建
-
在静态区域创建对象
-
栈:线程独享的内存区域,在里面创建对象只需要移动指针就行,操作繁琐,效率较高
由于栈内存独享,因为在编写程序时,必须知道对象的准确的数量、存在时间、以及类型,需要设置存储空间的分配和释放的优先级,使用局限。
-
-
在内存池中创建对象
- 堆:线程共享的内存区域,程序运行的时候才内存空间动态分配,操作灵活,效率较低
- 对象的销毁
- 程序化
相关文章
暂无评论...