//
前言
面向对象的java语言有着多种设计模式与特性。比如封装、继承、多态等等。
在这篇文章中,我会使用java的代码思路,实现C语言版的JAVA三大特性。
并从写代码的角度,从0开始构建。
定义结构体(对象)
设计了一个机器人结构体(对象)。
机器人有他的ID,这是他的静态特征,是主键。
机器人有制造商,不光机器人有,所有工业产品都有。
机器人有许多行为,跑、跳、检查修理日期等等。
机器人有许多内设动作,就是预设将不同行为进行排列组合。
继承
机器人是工业产品的子类,即机器人继承了工业产品。
体现在代码上就是结构体的嵌套
封装
将机器人的所有特征、行为、内置动作封装在一起。
体现在代码上就是结构体里有变量和函数指针。
typedef struct _Manufacturer {char name[10];
} Manufacturer;typedef struct _robot
{int id;Manufacturer manufacturer; // inheritvoid (*function)(struct _robot ); // polymorphicint (*time2repair)(struct _robot); void (*process)(struct _robot );
} Robot;
多态
机器人结构体(对象)中有功能函数指针function和维修函数指针time2repair。
定义函数robot_run_function,robot_jump_function,实现function功能。
定义函数robot_time2repair,实现time2repair功能。
void robot_run_function(Robot robot) {printf("robot_id: %d, run!\n", robot.id);
}
void robot_jump_function(Robot robot) {printf("robot_id: %d, jump!\n", robot.id);
}
int robot_time2repair(Robot robot) {printf("robot_id: %d, need to repair next weekend!\n", robot.id);return 9;
}
定义函数process1,实现process功能(暂时不写)
void process1(Robot robot)
{// 进程1:先跑2次,再跳1次,最后计算修理日期
}
初始化机器人结构体(对象)。将process1赋给函数指针process,调用process。
int main() {Robot robot;Manufacturer manufacturer;strcpy(manufacturer.name, "SKF");robot.id = 2;robot.manufacturer = manufacturer;robot.process = process1;robot.process(robot);return 0;
}
最后实现process1,思路仍然是将函数赋给函数指针并调用。
void process1(Robot robot)
{// 进程1:先跑2次,再跳1次,最后计算修理日期robot.function = robot_run_function;robot.function(robot);robot.function(robot);robot.function = robot_jump_function;robot.function(robot);robot.time2repair = robot_time2repair;int remain_days = robot.time2repair(robot);printf("manufacturer: %s, id: %d, remain_days: %d\n", robot.manufacturer, robot.id, remain_days);
}
打印结果
robot_id: 2, run!
robot_id: 2, run!
robot_id: 2, jump!
robot_id: 2, need to repair next weekend!
manufacturer: SKF, id: 2, remain_days: 9