用C语言实现面向对象<02>
其实这里讲的不是用C语言来实现面向对象,只是用了一点点面向对象的思想,来进行分层的模块化设计与简单的封装。
这里把一个软件分成了三层,用户层,接口层与实现层。上面是我自己根据理解自己起的名字。
还可以进行一下类比,就是用户,品牌P collapsedC厂商和硬件生产商。下面详细讲解:
首先是用户层:
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
printf("system start...\n");
if (mod_init("mod_finished")<0) {
exit(0);
}
mod_operation_1(0,1,2);
mod_operation_2(0,1,2);
mod_operation_3(0,1,2);
return 0;
}
然后是接口层,就是组装电脑的。。
#include <types.h>
#include <mod/mod.h>
#include "stdio.h"
extern struct mod_ops mod_finished;
static struct mod_ops *all_mods[] = {
&mod_finished,
NULL
};
static struct mod_ops mod_x;
#define MOD_OP(op, ...) \
(( mod_x.op != NULL ) ? mod_x.op( __VA_ARGS__ ) \
: (typeof(mod_x.op(__VA_ARGS__))) 0)
/* Memory Management Interface */
int mod_init(char *name)
{
int i;
for( i = 0; all_mods[i] != NULL; i++ ){
mod_x = *all_mods[i];
if( strcmp(mod_x.name, name) == 0 )
break;
}
if(all_mods[i] == NULL ) {
printf("Could not find mod:%s\n", name);
return -1;
}
MOD_OP(init);
return 0;
}
void mod_operation_1(type1_t para1,type2_t para2,type3_t para3)
{
MOD_OP(operation_1, para1, para2, para3);
}
void mod_operation_2(type1_t para1,type2_t para2,type3_t para3)
{
MOD_OP(operation_2, para1, para2, para3);
}
void mod_operation_3(type1_t para1,type2_t para2,type3_t para3)
{
MOD_OP(operation_3, para1, para2, para3);
}
最下面是实现层,你可以有多个实现,就像你可以用不的硬件生产商生产的硬件组装成
功能相同的电脑一样。
#include <types.h>
#include <mod/mod.h>
#include "stdio.h"
void
init(void)
{
printf("init not finished!\n");
// you code here, to implement the init()
}
void
operation_1(type1_t para1,type2_t para2,type3_t para3)
{
printf("operation_1 not finished\n");
// you code here, to implement operation_1()
}
void
operation_2(type1_t para1,type2_t para2,type3_t para3)
{
printf("operation_2 not finished\n");
// you code here, to implement operation_2()
}
void
operation_3(type1_t para1,type2_t para2,type3_t para3)
{
printf("operation_3 not finished\n");
// you code here, to implement operation_3()
}
struct mod_ops mod_finished = {
.name = "mod_finished",
.desc = "This is the xxx mod",
.init = init,
.operation_1 = operation_1,
.operation_2 = operation_2,
.operation_3 = operation_3
};
完整文件下载: arch-demo.tar.gz
评论 (0)