前言
面向对象程序设计方法是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程,也即使得描述问题的问题空间与问题的解决方案空间在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象。
面向对象程序设计以对象为核心,该方法认为程序由一系列对象组成。类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作,对象是类的实例化。对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。在面向对象的程序设计中,对象是组成程序的基本模块。
一、接口
一般来说,接口负责ADT规约,而类负责ADT的实现。
当然也可以没有接口直接用类作为ADT,这样既有ADT的定义又有ADT的实现。但是实际上还是更倾向于用接口来实现一个ADT。
下面来看一个例子:
这个就是实现一个Set的接口,然后我们的ArraySet类通过Set的接口具体实现add等方法。
二、继承和重写
重写
重写的函数有完全相同的名字、参数和返回值类型。
重写的时候不应该改变方法的本意。
而实际执行时,调用哪个方法在运行时决定。
下面是重写的例子:
抽象类
抽象类是一个方法有各个特征,但是没有具体的实现。
具体的类可以抽象其特征变为抽象类,抽象类可以进一步变为接口。
下面是一个抽象类的例子:
多态
多态可以分为特殊多态、参数化多态和子类型多态。
特殊多态
重载:多个方法具有同样的名字,但有不同的参数列表或返回值类型。可以方便 client 调用,client 可用不同的参数列表,调用同样的函数。
重载就可以用来实现一个静态多态。会在编译阶段决定具体使用哪个方法,根据参数列表选择最佳匹配。
下面是一个重载的例子:
参数化多态
可以通过泛型接口来实现不同的类。
下面是泛型接口,非泛型类的实现:
下面是泛型接口,泛型类的实现:
子类型多态
子类型:B是A的子类型意味着任意一个B都是A。每个B都要实现A的规约。同时B的规约不能弱化A的规约。
子类型多态的好处:不同类型的对象可以统一的处理而无需区分,隔离了变化。
总结
面向对象编程有易扩展、程序的鲁棒性好、效率高等好处。我们学习面向对象编程对今后的学习和工作中大型编程项目任务有重要意义。