面向对象编程主要是由对象组成的。各个对象之间的关系及其之间的相互作用构成了一个完整的运行系统。
对象包括数据和对数据的操作,对数据操作又称函数(方法),对象在收到请求后执行相应的请求。由一个类生产的多个对象,每个对象中都会复制一份数据对象,但是公用一套类方法。客户请求是对象执行的唯一的方法,操作也是改变对象内部数据的唯一方法。
对象内部状态是被封装的,他不能被直接访问。
面向对象程序设计最难的部分是将系统分解成对象的集合,因为还要考虑很多因素:粒度、封装、依赖关系、性能、服用等等,它们都影响着系统的分解,并且这些因素有可能还是冲突的。
面向对象设计有许多设计方法,可以通过描述一个问题,然后挑选出名词或者动词进而创建出类或者操作;也可以关注各个系统协作;还可以对现实世界进行建模,进而分解成类和对象。
所谓接口:对象操作所定义的所有的函数操作的集合。
在面向对象的系统中,接口是最基本的组成部分。对象的接口和其功能实现是分离的,不同的对象可以对请求做不同的实现,也就是说两个相同接口的对象可以有不同的实现。当接口函数被调用的时候,不同的类对象可能对接口实现的功能不同,这种在运行时刻的链接成为动态链接。
对象时通过实例化类来创建的,这个对象被称为该类的实例。当创建一个对象的时候,要给对象的内部数据分配空间,并将函数与这些数据关联起来。
新类可以通过类继承来定义。当子类继承父类时,子类就包含了父类的所有数据和函数。同样,子类实例化的对象也就包含了所有子类和父类的数据,并且可以完成子类和父类的所有操作。
抽象类的主要目的是因为它为子类定义了公共接口。一个抽象类将它的部分或者全部操作的实现延迟到子类中,一个抽象类不能被实例化。
子类能够改进和重定义他们父类的函数,是的子类能接管父类对请求的处理操作。类的继承允许你增加新的扩展定义心类,从而可以很容易的定义具有相近功能的对象族。
面向接口编程而不是面向实现编程。
当继承被使用时,所有的子类接口都共享该接口类的接口。这也就说,子类可以添加和重新定义操作,而没有隐藏父类的操作。客户无需知道他们使用的对象是什么类组成,之门只需知道定义这些接口的抽象类。