2006年04月16日

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语言中的面向对象

2006年04月11日

好久没看到独孤木专栏的文章了:)

獨孤木專欄─義和團式的專案計劃 (上)
獨孤木專欄─義和團式的專案計劃 (中)
獨孤木專欄─義和團式的專案計劃 (下)

2006年04月09日

一个中国退伍特种兵的经历
http://www.p2p365.com/2nd/read/wenxue/index_show.asp?id=5829

2006年04月08日

  前一阵子fix了进tc后写的第一个daemon的一个bug,这个bug存在已经快2年。导致这个bug的原因是因为用了strtok(),一直跟到最后,发现是因为这个函数线程不安全,改用strtok_r()后问题解决。
  看来以后写程序还是要再小心一下下库函数的线程安全问题。

据说这个测试很灵验的
一道一道题目地做,别跳着读:

1)写下一个异性的名字 
2)你最喜欢的颜色是红色,黑色,蓝色,绿色,还是黄色?
3)你英文名字的第一个字母?
4)你的生日是几月?
5)黑色和白色,你更喜欢哪个?
6)写下一个同性的名字
7) 你最喜欢的数字?
8)你喜欢美国的加利福尼亚州(California) 还是福罗里达州(Florida)?
9)你最喜欢湖还是海洋?
10)许个愿望(一个实际的愿望)


答案:
1)你深深的爱着这个人
2)如果你选择:
红色:你是很警戒的人,你的一生中充满了爱
黑色:你很保守,但很自负
绿色:你的灵魂很散懒,而且你是个比较放松的人
蓝色:你是个八爪鱼,同时爱很多人,而且你喜欢你的爱人的吻和爱
黄色:你是个快乐人,而且你给失落的人很好的建议
3)如果你的你英文名字的第一个字母是:
A-K 你有的一生中会很多爱和友情
L-R 你总是想欢享你的生命,你的爱情生活马上就要开放
S-Z 你喜欢帮助他人,而且你的未来的爱情生活充满希望
4)如果你生在:
一月到三月:今年你会很走运,而且你会发现你会以外的爱上一个人
四月到六月:你会有个很强的爱情,这段感情不会很长,但那美好的回忆会让你
永生不忘
七月到九月:你会有个很快乐的一年且会经历一个在你一生中好的,很大的改变
十月到十二月:你的爱情不会很好,但最终你会找到你一生的伴侣
5)如果你选择了:
黑色:你的生命将会改变方向,当时看起来似乎很难,但之后你会觉得这个改变
是你一生中最好的东西
6)他是你最好的朋友
7)这是你一生中会有的贴心朋友的数目
8)如果你选了:
加利福尼亚州(California) :你喜欢冒险
福罗里达州(Florida):你是个懒散的人
9)如果你选了:
湖:你对你的朋友和爱人很忠诚,且你是个保守的人
海洋:你是个八爪鱼,同时爱很多人,且你想让你爱的人快乐
10)如果你一个小时内重新在另一个地方发表这个测验,你的愿望会在你的下个生日
之前实现