关于组件

在我研究twisted代码的时候,碰到了twisted的组件体系。
当然,它用的是zope的。
问题是,我一直对组件的理解有问题,因为我一直没用过。
那么到底什么是组件?——这成了很重要的问题。

我们可以想象,每一个进程都有自己的代码段和数据段。
那么,组件是个什么呢?是一个模块,就像普通的.so一样。
只是,这个模块有些特别的地方,它的核心概念是接口,而且使用之前必须得到组件的对象。
接口和对象是相对的,有接口才有对象,有对象才有接口。
而且,我们可以判断某个对象是不是实现了某个接口,它都实现了那些接口。
从这一点上看,接口已经成为了一个基本的可操作元素。
对象隐藏在接口之后。

也就是说,程序被分割成数片,每一片都是一个模块,而每个模块都是一些接口和实现接口代码的混合物。
这和普通的模块之间的区别是,抽象程度更高了,更复杂了,有更多的概念和关系了。(普通模块我们可以理解成全是一些函数)
有了这么多的概念和关系,就要有一些代码来处理这些关系,那就是规范。
一但模块被载入,就用规范处理这些代码,以解析出那些是接口,从而使用接口,构造对象。
这里边有一些oo的思想,但是也有不同,相同的是都是接口和实现分离;不同的是,这里没有了继承。
我们必须理解,继承对代码的直接绑定是很糟糕的,更何况还有多继承的情况。
oo不全都是对的,在实践的时候,显得过于复杂了。
组件体系,简化了oo的编程模型,同时,加强了它的系统运行环境。

我觉得,基本上可以这么说,组件编程就是某种oo编程,不过这种更加的可控。
基本上我是这么理解的。

oo的最大的价值就是对接口和对象的划分。这和普通的c式的管理大相径庭。
这种划分给程序增加了某些数据类型——接口。
类似于某些meta的概念。接口,是描述程序本身功能的!
对接口的判断和使用,从某些侧面影响了程序的运行。
这好像是给了程序一面镜子,它会看到自身的某些状况。
比如说某个对象是否实现了某个接口,而原来的c,一切都是指针,我们没法判断这些指针到底是个什么东西,就算知道它指向的是一个函数,我们也不知道这个函数到底是什么,只能调用而已,而接口,恰恰知道这点。
这就好像,有了某种自省的功能。
接口变成了一些有用的符号,一种重要的标志。
类并不重要,重要的是,对象实现了接口!(实现方式可以有很多种,组件模型就是一种)

“com是一种更好的c++”。

昨晚,我下班回去,在做饭之前,下了盘棋,赢了,我升级了,现在3k。
这盘棋的最大意义不是我赢了,而是,我在走了勺子之后的处理。
本来我是大优的棋,结果我有一个地方没算,出了大错,对方杀穿了我的模样。
其实,这时候,我是相当的不利。
而在这时候,我能冷静的处理,通过弃子,把洞穿我模样的棋包进来,杀掉。
虽然有些侥幸,不过,这种处理方式是非常可取的。
这使我觉得,在这种劣势下扭转局面的赢,比正常的赢,还要有价值的多。
这也是我比较开心的地方。
我现在3k。
——向2k迈进!

你可能感兴趣的:(编程,C++,c,C#,OO)