September 16, 2006
抽象归纳数据结构,重用算法
有一句古语
程序 = 数据结构 + 算法
说得还是有深意的。在接触C++、面向对象、STL、Design pattern、消息机制等等技术过程中,逐渐发现,它们都包含围绕着那句古语而展开的思路,目的是重用。
一般来说,都是对不同的数据结构(类型),应用同一个算法。算法被重用。
template method这个pattern是个典型的例子。
![]()
基类(Abstract class)中的TemplateMethod()是个算法。这个算法对于所有派生类(Concrete class)都可以重用。
STL中很明确地实现了这个概念,对不用的container,算法都可以实现。
不论是template、inherintance还是任何其他的机制实现的重用,约束都是把代码重用到一类有相同接口(interface)的结构上
也就是说,把需要研究、表达、操作的对象,抽象出他们的共同特征(也就是接口),然后归纳为一个类别之后,就可以把同样的方法和手段,无差别应用到所有这个类别中所有的实例上了。这是就是重用的思想。是个个门类的科学技术的最重要的思路。
最近接触一些应用了消息机制的工作,归纳起来看,也可以把消息机制看作一种类似的抽象与重用的例子。消息循环是一个算法,它负责取从消息队列中出消息,然后把它实现执行。之所以能够执行是因为每个接受消息的object都可以把消息映射到对应的消息处理函数上,这些函数的接口固定。于是根据不同的消息,不同的程序就被执行了。整个消息队列机制实现了在一个任务(task/thread)中,用有限的代码(消息循环),无限地执行动态演变的程序。强大的算法,不是吗?
消息处理的接口,是个一致的接口。消息处理者之间也可以互相调用(SendMessage),避免了调用函数时要遵守的复杂的函数prototype,也不必因为函数prototype的更改影响其他程序。实现重用了。
Filed by
charlie
at 7:20 pm under Coding


