程序设计模块化设计思想详解Word文件下载.docx
- 文档编号:22569553
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:21
- 大小:21.23KB
程序设计模块化设计思想详解Word文件下载.docx
《程序设计模块化设计思想详解Word文件下载.docx》由会员分享,可在线阅读,更多相关《程序设计模块化设计思想详解Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
模块化程序设计的重点就是程序接口的标准化。
四、基础知识
指针为模块化设计最关键的知识点。
指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中寄存器(Register)。
指针可以用来有效地表示复杂的数据结构,可以用于函数参数传递并达到更加灵活使用函数的目的。
使C语言程序的设计具有灵活、实用、高效的特点。
五、设计流程
程序设计模块化示意图:
系统注册功能模块
应用与功能模块之间的接口
功能实现
系统调用接口
系统注销功能模块
模块化应用三部曲:
第一步:
注册模块;
第二步:
调用模块功能;
第三部:
注销模块;
模块化设计三部曲:
第一步:
实现模块功能;
第二步:
完成应用与功能模块接口之间的对接;
第三步:
应用根据需要调用中间接口;
六、具体设计
5.1实现模块化管理框架
数据结构
模块公共数据结构:
structmodule_com_interface{
UINT32type;
/*模块类型(前16位)&
&
同类型模块ID(后16位)*/
INT8*module_name;
/*模块名字*/
structmodule_com_interface*next;
/*指向下一个模块结构,用于模块管理*/
};
Demo模块数据结构:
structmodule_demo_interface{
structmodule_demo_interface*next;
/*模块私有数据结构*/
void*priv;
/*私有数据指针*/
/*Demo模块功能函数*/
INT32(*init)();
/*Demo模块初始化*/
INT32(*io_ctl)(structmodule_demo_interface*module,INT32cmd,UINT32param);
/*Demo模块功能控制*/
模块公共数据结构成员,是每一个实体Demo模块数据结构所必须的;
在公共模块的基础上,实体Demo模块数据结构可根据模块的需求,扩展结构体成员,以满足自己的需要。
staticstructmodule_com_interface*module_com_base=NULL;
module_com_base为管理模块链表的一个基础头指针,用于管理所有模块链表使用。
5.1.2系统管理模块函数:
定义:
#defineMODULE_TYPE_MASK0xFFFF0000/*模块类型掩码*/
#defineMODULE_ID_MASK0x0000FFFF/*模块ID掩码*/
声明:
void*module_get_by_name(char*name);
/*通过名字查找模块*/
void*module_get_by_type(UINT32type,UINT16id);
/*通过类型查找模块*/
INT32module_malloc(UINT32type,char*name,UINT32size);
/*分配模块空间,并将模块添加入模块链表*/
INT32module_free(structmodule_demo_interface*module);
/*释放模块空间,并将模块从模块链表删除*/
实现:
/*分配模块空间,并将模块添加入模块链表*/
INT32module_malloc(UINT32type,char*name,UINT32size)
{
UINT16id;
structmodule_com_interface*module=(structmodule_com_interface*)malloc(size);
structmodule_com_interface*pmodule;
if(module==NULL)
{
MODULE_PRINTF("
module_malloc:
error-device%snotenoughmemory:
%08x!
\n"
name,size);
returnNULL;
}
/*在模块列表中找出相同name的模块*/
for(id=0,pmodule=module_com_base;
pmodule!
=NULL;
pmodule=pmodule->
next)
/*Findthemodule*/
if(strcmp(pmodule->
name,name)==0)
{
MODULE_PRINTF("
error-device%ssamename!
name);
free(module);
returnNULL;
}
/*CheckID*/
if((pmodule->
type&
MODULE_TYPE_MASK)==type)
id++;
/*Clearmodulestructure*/
memset((UINT8*)module,0,size);
module->
type=(type|id);
name=name;
/*将模块加入列表,统一管理*/
if(module_com_base==NULL)
module_com_base=module;
module->
next=NULL;
else
for(pmodule=module_com_base;
pmodule->
next!
next);
pmodule->
next=module;
returnmodule;
}
/*释放模块空间,并将模块从模块链表删除*/
INT32module_free(void*module)
structmodule_com_interface*temp;
temp=&
(structmodule_com_interface*)module;
/*Ifmoduleindev_queue,deleteitfromqueue,elsefreeitdirectly*/
if(module_com_base!
=NULL)
if(STRCMP(module_com_base->
name,temp->
name)==0)
module_com_base=temp->
next;
else
for(pmodule=module_com_base;
pmodule->
{
if(STRCMP(pmodule->
next->
{
pmodule->
next=temp->
break;
}
}
free(module);
/*释放模块空间*/
returnSUCCESS;
/*查找Demo模块实现*/
void*module_get_by_name(INT8*name)/*通过名字查找模块*/
structmodule_com_interface*module;
for(module=module_com_base;
module!
module=module->
if(STRCMP(module->
returnmodule;
returnNULL;
/*通过类型查找模块*/
void*module_get_by_type(UINT32type,UINT16id)
if(module->
type==(type|id))
5.1.3模块功能函数:
定义:
#defineSYS_MODULE_TYPE_DEMO0x00010000
INT32module_demo_attach(char*name);
/*通过模块名字,注册(加载)模块*/
INT32module_demo_init();
/*Demo模块初始化*/
INT32module_demo_io_ctrl(structmodule_demo_interface*module,INT32cmd,UINT32param);
/*注册(加载)Demo模块实现*/
INT32module_demo_attach(char*name)
structmodule_demo_interface*module;
if(module=module_malloc(SYS_MODULE_TYPE_DEMO,name,sizeof(structmodule_demo_interface))==NULL)
returnERR_FAILURE;
module->
init=module_demo_init;
io_ctl=(INT32(*)(void*,UINT32,UINT32))module_demo_io_ctrl;
INT32module_demo_init()/*Demo模块初始化*/
/*addinitcode*/
returnSUCCESS;
INT32module_demo_io_ctrl(structmodule_demo_interface*module,INT32cmd,UINT32param)
switch(cmd)
caseMODULE_FUNCTION_1:
/*addfunction1*/
break;
caseMODULE_FUNCTION_2:
/*addfunction2*/
default:
5.1.4系统与模块的接口函数:
在应用中,模块中,只需要调用接口函数即可,无需了解模块具体实现方式。
INT32demo_init();
INT32demo_io_ctrl(structmodule_demo_interface*module,INT32cmd,UINT32param);
实现:
INT32demo_init()
INT32result=SUCCESS;
/*Openthisdevice*/
if(module->
init)
result=module->
init();
returnresult;
INT32demo_io_ctrl(structmodule_demo_interface*module,INT32cmd,UINT32param)
/*Closethismodule*/
io_ctrl)
io_ctrl(module,cmd,param);
5.2模块化举例设计:
模块需求:
函数实现对汽车功能的控制,包括“学习汽车知识”、“买车”、“开车”、“修车”、“卖车”、“忘记汽车知识”“卸载此模块”等技能,通过打印信息体现。
模块实现:
实现模块功能(模块设计小组完成)
structmodule_car_interface{
structmodule_car_interface*next;
/*指向下一个模块结构,用于模块管理*/
INT32(*io_ctl)(structmodule_car_interface*module,INT32cmd,UINT32param);
#defineSYS_MODULE_TYPE_CAR0x00010000
enumcar_cmd{
MODULE_FUNCTION_1=1,/*买车*/
MODULE_FUNCTION_2,/*开车*/
MODULE_FUNCTION_3,/*修车*/
MODULE_FUNCTION_4,/*卖车*/
MODULE_FUNCTION_5,/*忘记汽车知识*/
A、Mercedes_Benz模块
INT32module_Mercedes_Benz_init(structmodule_car_interface*car)/*Demo模块初始化*/
/*addinitcode*/
MODULE_CAR_PRINTF("
学习%s汽车知识!
car->
name);
/*Mercedes_Benz模块功能控制*/
INT32module_Mercedes_Benz_io_ctrl(structmodule_car_interface*car,INT32cmd,UINT32param)
caseMODULE_FUNCTION_1:
/*addfunction1*/
MODULE_CAR_PRINTF("
买%s车,花费150万!
break;
caseMODULE_FUNCTION_2:
/*addfunction2*/
开%s车,加速到180公里/小时!
caseMODULE_FUNCTION_3:
/*addfunction3*/
修%s车,花费2千!
caseMODULE_FUNCTION_4:
/*addfunction4*/
卖%s车,收入105万!
caseMODULE_FUNCTION_5:
/*addfunction5*/
忘记%s汽车知识!
default:
%s:
无此技能!
INT32module_Mercedes_Benz_attach(char*name)/*通过模块名字,注册模块*/
structmodule_car_interface*car;
加载%s模块!
if((car=(structmodule_car_interface*)module_malloc(SYS_MODULE_TYPE_CAR,name,sizeof(structmodule_car_interface)))==NULL)
car->
init=(INT32(*)(void*))module_Mercedes_Benz_init;
io_ctrl=(INT32(*)(void*,UINT32,UINT32))module_Mercedes_Benz_io_ctrl;
模块加载成功!
INT32module_Mercedes_Benz_detach(structmodule_car_interface*car)/*通过模块名字,注销模块*/
卸载%s模块!
module_free(car);
B、PORSCHE模块
/*Demo模块初始化*/
INT32module_PORSCHE_init(structmodule_car_interface*car)
}
/*PORSCHE模块功能控制*/
INT32module_PORSCHE_io_ctrl(structmodule_car_interface*car,INT32cmd,UINT32param)
买%s车,花费300万!
开%s车,加速到200公里/小时!
!
修%s车,花费5千!
卖%s车,收入240万!
INT32module_PORSCHE_attach(char*name)/*通过模块名字,注册模块*/
加载%s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 模块化 设计 思想 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)