对象具有状态(拥有内部数据),行为(方法)和标识(每一个对象都可以唯一的与其他对象区分开来)。
类描述了具有相同特性(数据元素)和行为(功能)的对象集合。
面向对象程序设计的挑战之一就是,在问题空间的元素与解空间内的对象建立一对一的映射。
每个对象都只能满足某些请求,这些请求由对象的接口(interface)定义,决定接口的便是类型(Type)。
1.3 每个对象都提供服务
当你试图开发一个程序时,最好的方法之一就是将对象想象为“服务提供者”,程序本身向用户提供服务,它通过调用其他对象提供的服务来实现这一目的。你的目标就是去创建(或者在现有的代码库中寻找)能够提供理想的服务来解决问题的一系列对象。
1.7 伴随多态的可互换对象
一个非面向对象的编译器产生的函数调用使用前期绑定,编译器在编译时获得具体函数的调用地址,运行时将这个调用解析到将要被执行的代码的绝对地址。
在OOP中,消息发送到一个泛化对象时,程序直到运行时才能确定具体被调用代码的地址,所以使用了后期绑定的机制。
把导出类看做是它的基类的过程称为向上转型(upcasting)。
多态:当向一个对象发送消息时,即使涉及到向上转型,该对象也会执行正确的行为。
void doSomething(Shape shape){
shape.draw();
}
Circle circle=new Circle(); //Circle类是Shape类的导出类
doSomething(circle); //后期绑定使得程序在运行时才确定draw方法的地址,即Circle类的draw方法