由Template想到OOP与GP

rel="File-List" href="file:///C:%5CUsers%5Cchendx%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"> rel="themeData" href="file:///C:%5CUsers%5Cchendx%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"> rel="colorSchemeMapping" href="file:///C:%5CUsers%5Cchendx%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml">

所谓的Template技术实际上和OOP并不怎么搭界,是要归于GP之中的。OOP强调的是封装性,某一属性和操作该属性的行为一般都会被封装到一个class中。这就好像Windows操作系统,微软把API派发出来,底层的具体实现则是透明的。于我而言,OOP最为外显的特点就是先封装而后继承了,所有一切的特性皆来自于此。一个典型的OOP思想例子莫过于MFC了。它在数据层次设计这方面而言,已经是相当巧妙而优雅的了——虽然在使用上离所见即所得的境界还相差太远。

如果说OOPWindows的话,那么GP就是Linux了。首先,GP中的属性和操作该属性的行为是分开的,不存在藏着掖着的情况;其次,一个行为可以处理不同的属性(也就是数据),这不正体现了一种分享的精神吗?再次,以OOP中最常用的技术Virtual机制和GP中的Templates技术相比,无疑Templates的运行时效率是要胜于virtual的——我们平时不是经常在说Linux的性能是要好于Windows的吗?很容易就能GP思想最典型最广泛的例子就是C++STL了。

在课堂上学过C++的人都应该记得,老师一遍又一遍地强调,C++好啊,封装很安全,继承很有用,virtual机制很神奇GP的思想却恰恰与OOP是南辕北辙的:OOP是聚合,自己的东西自己用;GP是分离,有好东西大家一起来用。可惜许多大学的C++课程只有OOP却无GP,让许多人都觉得OOP就是C++的全部了。其实分有分的好处,合有合的优点。分分合合本身并不重要,重要的是把握好什么时候该分,什么时候该合。

就我个人的体会来说,GP是远比OOP难学的。这里就以MFCSTL为例吧。MFC的源代码有一种峰回路转,曲径通幽的绵长。小时候语文课上学过一篇文章,说是有一个名伶唱到高音处,每每旁人觉着唱不上去了,此人却能游丝般吊着气更上一层。看MFC的源代码时大抵就是这种感觉(我所说的MFC源码,是侯捷和孙鑫书中所用,思想是到了的)。而STL的代码乍一看就是一团乱麻,错综复杂;细细看进去了,才发现这团乱麻不是随意揉弄出来了,而是有人耐着性子一个结一个孔地缠绕出来的,难度可想而知。而且GP是设计模式的实现方式,若没有工程的思想是很难领会其中妙处的。总的来说,MFC是巧妙的,而STL则更为精致。

记得一年以前和一位我很尊敬的师兄讨论C++ Templates的时候,他指出Template技术是很精妙,GP也有很大的能量,但是普及不易。但凡真正用过Template技术在GP领域中写过程序的人都会深有体会:bug太难找了,错误信息太不靠谱了,换人维护太难了。STL能做成现在这种几近完美的样子,那些开发的大拿们实在是太厉害了。

前路漫漫,能人太多,吾辈还是继续求索吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值