面向对象的特点( 二 )


1、对象(Object)
2、类(Class)
3、数据抽象(Data abstraction)
4、继承(Inheritance)
5、动态绑定(Dynamic binding)
6、数据封装(Data encapsulation)
7、多态性(Polymorphism)
8、消息传递(Message passing)

面向对象的特点

文章插图
对象
在一个面向对象的系统中 , 对象是运行期的基本实体 。 它可以用来表示一个人或者说一个银行帐户 , 一张数据表格 , 或者其它什么需要被程序处理的东西 。 它也可以用来表示用户定义的数据 , 例如一个向量 , 时间或者列表 。 在面向对象程序设计中 , 问题的分析一般以对象及对象间的自然联系为依据 。 如前所述 , 对象在内存中占有一定空间 , 并且具有一个与之关联的地址 , 就像Pascal中的record和C中的结构一样 。
当一个程序运行时 , 对象之间通过互发消息来相互作用 。 例如 , 程序中包含一个“customer”对象和一个“account”对象 , 而customer对象可能会向account对象发送一个消息 , 查询其银行帐目 。 每个对象都包含数据以及操作这些数据的代码 。 即使不了解彼此的数据和代码的细节 , 对象之间依然可以相互作用 , 所要了解的只是对象能够接受的消息的类型 , 以及对象返回的响应的类型 , 虽然不同的人会以不同的方法实现它们 。

我们刚才提到 , 对象包含数据以及操作这些数据的代码 。 一个对象所包含的所有数据和代码可以通过类来构成一个用户定义的数据类型 。 事实上 , 对象就是类类型(class type)的变量 。 一旦定义了一个类 , 我们就可以创建这个类的多个对象 , 每个对象与一组数据相关 , 而这组数据的类型在类中定义 。 因此 , 一个类就是具有相同类型的对象的抽象 。 例如 , 芒果、苹果和桔子都是fruit类的对象 。 类是用户定义的数据类型 , 但在一个程序设计语言中 , 它和内建的数据类型行为相同 。 比如创建一个类对象的语法和创建一个整数对象的语法一模一样 。 如果fruit被定义为一个类 , 那么语句
fruit mango;
就创建了一个fruit类的对象mango 。
数据抽象和封装
把数据和函数包装在一个单独的单元(称为类)的行为称为封装 。 数据封装是类的最典型特点 。 数据不能被外界访问 , 只能被封装在同一个类中的函数访问 。 这些函数提供了对象数据和程序之间的接口 。 避免数据被程序直接访问的概念被称为“数据隐藏” 。
抽象指仅表现核心的特性而不描述背景细节的行为 。 类使用了抽象的概念 , 并且被定义为一系列抽象的属性如尺寸、重量和价格 , 以及操作这些属性的函数 。 类封装了将要被创建的对象的所有核心属性 。 因为类使用了数据抽象的概念 , 所以它们被称为抽象数据类型(ADT) 。
封装
封装机制将数据和代码捆绑到一起 , 避免了外界的干扰和不确定性 。 它同样允许创建对象 。 简单的说 , 一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体 。
在一个对象内部 , 某些代码和(或)某些数据可以是私有的 , 不能被外界访问 。 通过这种方式 , 对象对内部数据提供了不同级别的保护 , 以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分 。
继承
继承是可以让某个类型的对象获得另一个类型的对象的属性的方法 。 它支持按级分类的概念 。 例如 , 知更鸟属于飞鸟类 , 也属于鸟类 。 就像图5中描绘的那样 , 这种分类的原则是 , 每一个子类都具有父类的公共特性 。

推荐阅读