面向对象编程
面向对象编程是一种设计思想,并不局限于语言
无论是C++, Java,还是C语言, 或者Shell, Perl, Python,甚至汇编语言,都可以实现面向对象编程,“面向对象编程”是设计思想,C,C++是实现手段。
相对来说,C++更容易实现这种设计思想,而C则相对是麻烦了一点
如何实现面向对象编程?
第一步:假设存在一个对象。初步设想它应该提供哪些服务。(把这个对象当成一个工具、或者是一个服务员)
第二步:定义如何使用它的服务。细化为函数。
(1) create/destroy: 创建与销毁对象
(2) 其他功能函数:指该对象提供的服务
第三步:选择一种实现方法,写代码完成上述函数接口。
举例子:
现在的需求是:需要存储一系列Student对象
第一步:定义服务
假设存在一个对象DataStore,它为我们提供Student对象的存储服务器。它提供以下的服务:
- 可以向它加入一个对象
- 可以按ID来查找一个对象
- 可以按ID删除一个对象
- 可以打印显示所有的对象
第二步:细化为函数
定义一个类型
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;
}
// 销毁对象
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;
// 添加到链表
// ...
}
网友评论