Alan Kay 总结:
1.万物皆为对象
抽取待求问题的任何概念化构件,表示为程序中的对象
2.程序是对象的集合, 他们通过发送消息来告知彼此所要做的
消息,对某个特定对象的方法的调用请求
3.每个对象都有自己的由其他对象所构成的存储
可以创建包含现有对象的包来创建新类型对象
4.每个对象都拥有其类型
每个对象都是每个class的instance
5.某一特定类型的所有对象都可以接收同样的消息
“圆形”类型的对象也是“几何形”类型的对象,所以一个“圆形”对象可以编写与“几何形”交互并自动处理所有与几何形性质相关的事物的代码。
Booch:对象具有状态,行为,标识。
每个对象都有内部数据(给出该对象的状态)和方法(对象产生的行为),并且每一个对象在内存中都有唯一一个地址。
一、Interface
第一个面向对象的编程语言——Simula
接口确定了对某一特定对象所能发出的请求,on(),off(),便是接口
定义一个Light类,
创建一个新对象lt
Light lt = new light();
lt.on();
二、访问控制
访问指定词:public、private(与客户端程序员的一堵墙,继承的类不能访问)、protected(继承的类可以访问)
三、复用
复用某类:
1.使用该类的一个对象;
2.创建一个成员对象(使用现有类合成新的类:Composition;“汽车”拥有“引擎”:);
四、继承
当继承现有类型时,也就创造了新的类型。这个新类型不仅包括现有类型的所有成员(尽管private成员被隐藏起来了且不可访问),更重要的是它复制了基类的接口。即,所有发送给基类对象的请求消息也可发送给继承类的对象。继承类与基类有相同的类型
使继承类与基类有所不同:
1.直接添加新方法(扩展接口,基类无法访问新添加方法)
2.overriding(直接在继承类中创建想要覆盖的方法的新定义即可)
五、多态
OOP使用后期绑定:当向对象发送调用请求时,被调用代码直到运行时才能确定其地址。
把继承类看作它的基类:Upcasting
六、单根继承:Java所有的类最终都继承自单一的基类(c++除外)
所有对象都具有一个共用接口
七、对象的生命周期
静态创建对象:将对象置于堆栈或静态存储区域,必须在编写程序时知道对象确切的数量、生命周期和类型;(不灵活,追求最大执行速度,对象的存储空间和生命周期可在编写程序时确定;创建存储空间方便快捷(栈顶指针上下移))
动态创建对象:在被称为堆的内存池中动态创建对象(直到相关代码被执行时才知道需要多少对象,生命周期如何,具体类型是什么;存储空间 在运行时被 动态管理(用大量时间分配存储空间,创建堆存储空间的时间取决于存储机制设计 )
Java采用动态内存分配(new),采用”垃圾回收机制“(”知道”对象何时不再会被使用,自动释放其占用内存(Why????);优点:防止内存泄漏),Java对象存储于堆,内存池中。