读书人

面向对象or泛型orCOM,该如何解决

发布时间: 2012-02-26 20:19:44 作者: rapoo

面向对象or泛型orCOM
一直觉得C++里采用面向对象十分别扭,是不是c++缺少面向对象的库的支持?泛型感觉很强大的,但是就是不知道什么时候该用,到底泛在哪里?COM本质论里说,把com当成更好的c++,那为什么com这种思维没有很好的推广呢?
越想越迷惑,总是在为选方法而耗费精力,实际做出来的东西又达不到效果,
大家给点意见阿。。

[解决办法]
一直觉得C++里采用面向对象十分别扭,是不是c++缺少面向对象的库的支持?
——看看《设计模式》。
泛型感觉很强大的,但是就是不知道什么时候该用,到底泛在哪里?
——学学STL、Boost。
COM本质论里说,把com当成更好的c++,那为什么com这种思维没有很好的推广呢?
——Windows下随处可见,ActiveX就是Com成功的一个证明。


[解决办法]
1,学好OO思想
2,学会应用stl
3,com等1和2会了后再学
[解决办法]
可以说设计模式中的模式可以说都是面向对象而产生的
泛型,偷懒的绝招

[解决办法]
1. 楼主说C++的面向对象机制十分别扭,我并没有同感。不过说到C++缺乏面向对象的库支持到的确是事实。
其实,C++对面向对象的各种特性的支持是很完备的(完备的超过Java、C#),反而正是因为他的完备性导致了有些过于复杂,比如,私有继承、多重继承和虚拟继承。从而使得在C++中想把OO用得得心应手需要更多的努力。
至于,有人会提到Java和C#的反射能力,以及随之而来的IoC之类的功能。其实这些同OO没有关系,主要是VM或者说Runtime的功能,C++的特点就是指提供很少的CRT支持。其实这些能力在C++中也是可以实现的,不过要自己动手而已,可以去看看CORBA和COM其实都提供了类似的功能。

2. 范型其实不只是C++特有的,只不过在C++中用的更加出神入化而已。主要原因是C++中的范型机制类似于一种在编译器中执行的代码生成器。STL,boost中的很多功能都不是纯粹的范型概念,而是将template作为一种代码生成器来用。

3. COM是Windows系统下的一种特有技术,实际上就是给C++(当然也支持其他语言,它是一个binary protocal)提供了一个类似于Java的Runtime,从而提供了很多JVM和CLR中的功能。比如,反射(只不过不是通过类名而是GUID)。
只不过由于MS在提供COM的时候考虑了太多的binary中立性以及不修改C++/C的语言特性,使得COM成了一个比较难以学习和使用的Runtime。从而导致大家在使用COM的时候产生了心理障碍。
至于楼主说COM的应用不广则纯粹是个误解,其实COM现在通过了各种“包装”提供的易用性在Windows系统中广泛地存在着。甚至可以说,Windows系统是由无数的COM组件搭建起来的。这一点楼主打开regdit,看看HKEY_CLASS_ROOT里面有多少东西就知道了。
你在Web页面中使用javascript在使用COM,你在Office中用VBA编程在使用COM,你使用的输入法就是COM组件,而.NET本身就是大规模建立在COM基础之上的。

读书人网 >C++

热点推荐