面向对象编程是一种设计思想,并不局限于语言。
无论是C++,Java,还是C语言,B语言,或者Shell,Perl,Python,甚至汇编语言,都可以实现面向对象编程。
“面向对象编程”是设计思想,C,C++是实现手段。
(相对来说C++更容易实现这种思想,而C比较麻烦)
如何实现面向对象编程?步骤如下:
1. 假设存在一个对象。初步设想它应该提供哪些服务,(把这个对象当成一个工具,或者是一个服务员)
2. 定义如何使用它的服务,细化为函数
(1). create/destroy:创建于销毁对象
(2). 其他功能函数:指该对象提供的服务
3. 选择一种实现方法,写代码完成上述函数接口
实例:DataStore
现在需求:存储一系列Student对象
第一步:定义服务
假设存在一个对象DataStore,它为我们提供Student对象的存储服务器,它提供以下的服务:
1. 可以向它加入一个对象
2. 可以按ID来查找一个对象
3. 可以按ID删除一个对象
4. 可以打印显示所有的对象
第二部:细化为函数
定义一个类型
struct DataStore { }
创建与销毁
DataStore ds_create(); void ds_destroy(DataStore *store);
其它功能函数:
(1)可以向它加入一个对象
void ds_add(DataStore * store,const Student *obj);
(2)可以按ID来查找一个对象
Student * ds_find(DataStore *store,int id);
(3)可以按ID删除一个对象
void ds_remove(DataStore *store,int id);
(4)可以打印显示所有的对象
void show_all(DataStore *store);
确定该对象的使用方式
//创建一个对象 DataStore *store=ds_create(); //调用ds_add Student obj; ds_add(store,&obj); //销毁对象 ds_destroy(store);
实例:链表对象
定义接口高难度
第三步:选择一种实现
使用链表来实现
把相关数据放在DataStore对象里
struct DataStore { Student head;//存在一个有头链表 }
创建对象
DataStore *ds_create() { //动态创建对象 DataStore *store=(DataStore *)malloc(sizeof(DataStore)); //初始化 store->head.next=NULL; return store; }
可以按ID来查找一个记录
Student * ds_find(DataStore *store,int id) { Student *p=store->head.next; while(p) { if(p->id==id) return p; p=p->next; } return NULL; }
销毁对象
void ds_destroy(DataStore * store) { //释放所有相关资源 Student *p=store->head.next; while(p) { Student *next=p->next; free(p); p=next; } free(store); }
实现添加功能
void ds_add(DataStore *store,const Student *obj) { //创建对象、复制数据 Student *copy=(Student *)malloc(sizeof(Student)); *copy=*obj; //插入一个对象到链表中 Student * cur=store->head.next;//当前节点current Student * pre=&store->head;//上一个节点previous while(cur) { if(obj->id<cur->id)//找到这个位置 break; pre=cur; cur=cur->next;//找到最后一个对象 } //插入到pre节点的后面 copy->next=pre->next; pre->next=copy; }
遍历
void ds_print(DataStore *store,int id) { Student *p=store->head.next; while(p) { printf("ID : %d,name:%s\n",p->id,p->name); p=p->next; } }