2005年11月17日
声明性与过程性是计算技术的两个重要的方面。声明性用来描述做什么,至于怎么做,它假设有一个强大的解析器来完成一切。比如我们熟悉的SQL主要就是一个声明性的语言,通过它你只要表达你想要得结果,而如何得到结果DBMS自然有它怎么做的一套策略。相对于声明性来说,过程性强调表达怎么做,比如我们熟悉的各种程序设计语言主要是用来表达怎么做的。
好了说了这么一通,来谈谈GUI吧。如果大家用Swing或其它GUI框架手工写过比较复杂的GUI程序,那么一定会感觉到相当的繁琐,以后如果要修改的话那就更加麻烦了。很明显将GUI直接表达在程序中是相当死的,既繁琐又不灵活。所以出现了XUL,XAML,XSWT,XwingML等用来描述GUI的声明性语言。不过GUI不应该是死的,它还要和用户交互。通常这种对用户的反应很难用声明性的方式表达,因为这是运行时的,它由运行时的情况决定。所以很多技术都考虑如何在这些声明性的语言中加入过程化的表达。例如,HTML+XXXScript,但是我觉得这种混合方式很混乱不利于维护,在加上HTML的表达力有限,所以web的交互很糟糕。XwingML可能很多人不熟悉,它是用来描述Swing的,现在已经很难找到了。在XwingML中可以将Listener 写入在XwingML以XML定义的声明性语言中,在GUI组件构建起来时,Listener对象也会被构建起来并注册到相应的GUI组件上。当然这件事情是由支撑该声明性语言的XwingML引擎来做。相对于HTML+XXXScript它更加模块化。不过我觉得它还是没有达到GUI上声明性与过程性的较好结合。
其实我很希望哪位高手能关于这个主题给出一些指点,希望不吝赐教。