前言
学过C++或者其他面向对象的语言的都知道,面向对象编程有诸多好处。面向对象程序设计有几个特征:
面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。
1)对象 对象是运行期的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。
2)类 类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。
3)封装 封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。
4)继承 继承是让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性。
5)多态 多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。
6)动态绑定 绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定是指与给定的过程调用相关联的代码只有在运行期才可知的一种绑定,它是多态实现的具体形式。
7)消息传递 对象之间需要相互沟通,沟通的途径就是对象之间收发信息。消息内容包括接收消息的对象的标识,需要调用的函数的标识,以及必要的信息。消息传递的概念使得对现实世界的描述更容易。
8)方法 方法(Method)是定义一个类可以做的,但不一定会去做的事。
接下来,就开始一步一步实现以上的特征吧。
抽象(对象和类)
抽象的关键就是类概念的出现,把方法和数据封装在一起形成一个类,这个类体现了不同对象之间的共同部分,这个过程就是抽象。
- 类的实现
我们要实现一个类的方法很简单,使用C语言的struct类型即可。一个例子如下:
struct sample{
int a;
int (*look)();
}
这样就实现一个“类”,这个“类”和C++类不同之处在于,struct sample只包含函数的指针而不是函数本身。所以在“对象创建”时与C++也有所不同。
- 对象的创建
创建“对象”时,分配struct sample类型的变量空间即可,一般使用动态分配空间函数malloc,分配空间后,还需要把look指针赋值,形成一个完整的对象,如下:
int look(){
printf("hello world");
}
sample *Crete(){
struct sample* p =(struct sample *) malloc(sizeof(struct sample));
p->look = look;
return p ;
}
至此类的实现和对象的创建都已完成。
- 对象的引用
当我们实现了类,以及对象创建函数之后,在我们的程序中即可引用该“对象”。如下:
#include <//包含create函数的头文件>
int main(void){
sample * tmp;
tmp =Create();
tmp->look();
return 0;
}
从上面可以看到,我们只能实现动态分配对象,而没有像C++那样可以静态分配,不过没关系,动态分配空间对我们来说也有好处。
未完待续...下篇:C程序实现Java interface功能。