面向对象的特点( 三 )


在OOP中 , 继承的概念很好的支持了代码的重用性(reusability) , 也就是说 , 我们可以向一个已经存在的类中添加新的特性 , 而不必改变这个类 。 这可以通过从这个已存在的类派生一个新类来实现 。 这个新的类将具有原来那个类的特性 , 以及新的特性 。 而继承机制的魅力和强大就在于它允许程序员利用已经存在的类(接近需要 , 而不是完全符合需要的类) , 并且可以以某种方式修改这个类 , 而不会影响其它的东西 。
注意 , 每个子类只定义那些这个类所特有的特性 。 而如果没有按级分类 , 每类都必须显式的定义它所有的特性 。
多态
多态是OOP的另一个重要概念 。 多态的意思是事物具有不同形式的能力 。 举个例子 , 对于不同的实例 , 某个操作可能会有不同的行为 。 这个行为依赖于所要操作数据的类型 。 比如说加法操作 , 如果操作的数据是数 , 它对两个数求和 。 如果操作的数据是字符串 , 则它将连接两个字符串 。
图6演示了一个函数处理不同数量、不同类型的参数 。 就像某个单词在不同的上下文中具有不同的含义 。
多态机制使具有不同内部结构的对象可以共享相同的外部接口 。 这意味着 , 虽然针对不同对象的具体操作不同 , 但通过一个公共的类 , 它们(那些操作)可以通过相同的方式予以调用 。 多态在实现继承的过程中被广泛应用 。
面向对象程序设计语言支持多态 , 术语称之为“one interface multiple method(一个接口 , 多个实现)” 。 简单来说 , 多态机制允许通过相同的接口引发一组相关但不相同的动作 , 通过这种方式 , 可以减少代码的复杂度 。 在某个特定的情况下应该作出怎样的动作 , 这由编译器决定 , 而不需要程序员手工干预 。
在多函数程序中 , 许多重要的数据被声明为全局变量 , 这样它们才可以被所有的函数访问 。 每个函数又可以具有它自己的局部变量 。 全局变量很容易被某个函数不经意之间改变 。 而在一个大程序中 , 很难分辨每个函数都使用了哪些变量 。 如果我们需要修改某个外部数据的结构 , 我们就要修改所有访问这个数据的函数 。 这很容易导致bug的产生 。
在结构化程序设计中 , 另一个严重的缺陷是不能很好的模拟真实世界的问题 。 这是因为函数都是面向过程的 , 而不是真正的对应于问题中的各个元素 。
面向过程的程序设计的一些特点如下:
·强调做(算法);
·大程序被分隔为许多小程序 , 这些小程序称为函数;
·大多数函数共享全局数据;
·数据开放的由一个函数流向另一个函数 。 函数把数据从一种形式转换为另一种形式 。
采用由上至下的程序设计方法 。
动态绑定
绑定指的是将一个过程调用与相应代码链接起来的行为 。 动态绑定的意思是 , 与给定的过程调用相关联的代码只有在运行期才可知 。 它与多态和继承的联系极为紧密 。 一个多态引用的函数调用决定于这个引用的动态类型 。
考虑图6中的“draw”方法 。 通过继承 , 每个对象都具备了这个过程 。 但是 , 对于不同的对象它的算法是不同的 , 因此 , draw过程必须在每一个类中重新定义 。 在运行期 , 当前引用对象所对应的代码将被调用 。
消息传递
一个面向对象的程序由许多对象组成 , 这些对象之间需要相互沟通 。 因此 , 在面向对象程序设计语言中 , 程序设计的主要步骤如下:
1、创建类 , 这些类定义了对象及其行为;
2、由类定义创建对象;

推荐阅读