fishchen <fishchen#mail.china.com>

今天看到很多刚来公司的毕业生,在研究怎么用面向对象实现一个项目。突然觉得有些东西不吐不快。现在很多人都在说什么什么是OOP,用C++/java怎么写OOP,用C就不OOP,于是就说C不能OOP了。我写下以下内容前特意上网google了一下,发现没有太多近似的文章,于是决定还是写出来。以下可能还不是一个成熟的想法,只是突发的念头写出来,有不妥还望指出。

什么是OOP?其实概念都可以说出一堆,但是说到底它只是一种思想,不会受到语言的限制,只不过用C++/java这类产生时就已经应用了这个思想的语言去实践会更简单,但并不能说用C就不能写出带有OOP思想的程序了。举一个很简单的例子,也许会引起大家的思考。

如果我们用OOP要写一个操作文件的类,用C++去写,大概会是这样:
class CFile {
    int CFile( … ); //构造函数, 传入文件路径等
    int ~CFile( … ); //析构函数
    int read( … );  //读文件的函数
    int write( … ); //写文件的函数
    int get_status( … ); //取文件状态
    …    //其它函数或属性
}


这很容易理解,在处理一个文件的时候就声明一个实际就好,这个不多说,大概会是这样:
CFile obj_file( … );
obj_file.read();
obj_file.write();
obj_file.get_status();

然后生命周期结束系统自动调用析构函数。


那在C中,是怎么处理的呢?
有一个类似: FILE
有fopen/fclose/fread/fwrite/fstat等函数,使用的时候,跟使用一个C++的类是何其的相似:
FILE fp;             //=声明一个类的实例
fp = fopen( …. );  //=调用构造函数
fread( … , fp );   //=读文件
fwrite( … , fp );  //=写文件
fstat( fp );         //=取文件状态(与实际用法有不同,这里只是做一种类似的例子)
fclose( fp );        //=调用析构函数

其实,这个只不过使用起来没有用类实现的那样方便,但是却充满了OOP的思想。这种使用的方法,其实大多用C写过程序的人都会用到,其实这就是OOP呀!理论上说,OOP上的所有思想都可以用C(当然用其它语言也是)来实现的,只不过不如C++/java这类语言有先天的的优势罢了。

也许现在有人会说,类的继承,接口函数等等在C中是没有的,其实用心想想,真的不能实现吗?
其实实现的的方法可能会多种多样,只不过的确不如C++中方便:(.

什么是OOP?只是一种编程的思想,不需要拘泥于语言的实现,发挥我们的想象力吧。

参考资料:
C语言中的面向对象


3条评论

  1. 编译器的问题,在c中追求c++ like的语法会非常urgly,看一下BerkeleyDB的c 接口就知道了……

  2. 我觉得还好啦,虽然不方便,没有用C++那么方便。(当然很多东西要实现起来是麻烦得很),但是我主要想表达的意思是:不要拘泥于具体的语言嘛。

  3. 用 C写 OOP 程序太正常了, Linux kernel 中大把的例子

发表评论

评论也有版权!