在C语言中实践封装思想
文章作者:cdeng
tc2.0的.h文件中只有声明没有实现,可以引用它就能完成相应的功能,而我们写一个只有声明没有实现的.h文件,把实现放在什么地方能够完成这样的功能?
这个程序用的是文件的封装方法,头文件就是一种功能的实现,我认为当我们需要某种功能的时候,就把它的实现放在一个头文件里,这样封装以后,别的源文件也是可以使用的。当我们需要另外一种功能的时候,我们就再写一个头文件。我感觉这样会很条理,软件就是功能的集合,我们把这些功能分别实现放在头文件里,这样的话可以同时由多个人完成一些功能,大大提升了效率,适合于合作开发,某一功能出现问题只需要修改相应的头文件就可以了。
程序代码如下:
/*proc1.h*/
typedef struct{
char key;
long (*func)(int,int);
}mathtype;
typedef long (*long1)(int,int);
long1 math(mathtype *,int);
long1 math(mathtype *p,int n)
{
char c;
int i;
do{
c = getch();
printf("%c\n",c);
for(i = 0;i < n&&c != p[i].key;i++);
}while(i == n);
return p[i].func;
}
/*proc1.c*/
#include "proc1.h"
int add(int a,int b){return a+b;}
int sub(int a,int b){return a-b;}
long mul(int a,int b){return a*b;}
long div(int a,int b){return a-b;}
mathtype p[4] = {'+',add,'-',sub,'*',mul,'/',div};
main()
{
char a[20],b[20];
gets(a);
gets(b);
printf("%ld",math(p,4)(atoi(a),atoi(b)));
}
头文件实现的功能是选择要进行的运算,并返回要调用的函数入口地址,源文件中接收输入,然后调用头文件中的函数,再利用返回值调用源文件中的函数。整体实现的功能就是源文件有一些功能,让头文件根据用户需要选择其中的功能,在源文件中完成使用。
我还写了这样一个程序代码如下:
/*proc2.h*/
char *code = "+-*/";
int add(int a,int b){return a+b;}
int sub(int a,int b){return a-b;}
long mul(int a,int b){return a*b;}
long div(int a,int b){return a-b;}
long (*func[4])(int,int) = {add,sub,mul,div};
void math();
void math()
{
char a[20],b[20],c;
int i;
long j;
do{
gets(a);
c = getch();
printf("%c\n",c);
for(i = 0;i < 4&&c != code[i];i++);
}while(i == 4);
gets(b);
j = func[i](atoi(a),atoi(b));
printf("%ld",j);
}
/*proc2.c*/
#include "proc2.h"
main()
{
math();
}
这个程序是把功能的实现也放在头文件里,选择调用的实现也在头文件里,源文件的功能就是调用头文件里的一个函数,也就是说头文件就完成了根据用户需要进行运算的功能,源文件只是在需要的时候调用它。
比较一下这两个程序,从共性方面的抽象来看第一个是把对功能的选择抽象了出来,第二个是把加减乘除的功能和对这些功能的选择以及调用提取出来了。这两个提取出来以后性质其实就完全不同了,第一个可以完成对其它类型功能的调用,第二个只能完成加减乘除运算。显然,对同一事物,不同的抽象实现的功能是截然不同的,对于这一个程序,第二种抽象要方便一些,那么抽象多少、抽象什么就是根据需要来进行合理一些。抽象的不同程度也决定了抽象出来的文件适用范围。
封装在文件中可以被其它文件所使用,封装在函数中只能被这个文件所使用,当然不包括封装文件中的封装函数,这时封装的函数可以被其它文件所使用是由于封装的文件所带来的。头文件的封装就像生活中做一台电脑对各个零件的制造,每个零件的制造就是一个头文件,我们可以同时制造不同的零件,然后最终组合成一台电脑,而我们的程序就可以由不同的人实现不同的功能封装进一个个的文件中,然后最终用源文件把它们组合起来加以利用就行了。显然头文件加快了程序的设计实现速度,有利于共同开发。需要扩充时添加几个头文件就可以了,需要修改时只需要修改涉及到的头文件和源程序中使用它们的地方,如果接口没变的话源程序也不需要修改了。头文件就像可以在某些类型机器上都可以使用的零件,函数封装就像只可以在某个机器上使用的零件。头文件的封装比函数封装多了两个功能:共享和共同开发。
发表日期:12/07/12 00:00
网友评论(0)
当前1/1页 首页 上一页下一页 尾页