高可复用软件体系结构的基础框架元素

来源:互联网 发布:java二级考试题库 编辑:程序博客网 时间:2024/06/05 10:16

接口是高可复用性软件体系结构的基础框架元素和重要组成部分。这样说让人感觉似乎有些夸大接口的重要性了,但事实并非如此。
    最早在窗口开发中赢得大多数程序员青睐的C++框架是Borland公司于1992年内置在Borland C++ 3.1中的OWL(Object Window Library),较早的C++开发者应该对这套开发框架非常熟悉。Borland OWL曾经辉煌过,然而,在此我们暂不去深入讨论OWL,只是借助OWL来说明接口对高可复用性软件体系结构的作用。在使用OWL自动生成应用程序框架代码的时候,我们会得到类似下面的主程序代码(很久没有使用OWL了,代码具体细节已经不记得了,但不影响我们的讨论):
int main (int argc, char *argv[])
{
    TApplication *application = new TApplication(argc, argv);
    try
    {
        Application->Init();
        Application->Run();
        Application->Done();
    }
    catch(…)
    {
      // TODO: Add Catch code here
    }
    delete application;
    return 0;
}

    主程序的结构很明显,首先创建指向应用程序对象的指针,然后调用Init方法进行程序初始化;调用Run方法执行程序主体;调用Done方法进行程序结束前扫尾工作。最后使用delete关键字删除应用程序对象指针。
    上面的代码是没有复用性的代码,程序的整个业务逻辑完全硬编码在TApplication类中。也就是说,对于上面的代码,如果需要修改系统的业务逻辑,则必须去更改程序,然后重新编译、运行与测试。
    这样的问题其实显而易见。解决问题的方法就是使用接口(在C++中称为虚基类),让具体实现业务逻辑的类来实现接口,而在主程序中对实现了特定接口的类进行实例化,以达到业务逻辑的动态加载与配置的目的。
    仍然讨论上面的代码,如果我们使用虚基类,程序将出现另外一种景象,例如:
class IApplication {
public:
 IApplication(){}
 ~IApplication(){}
public:
 virtual void Init() = 0;
 virtual void Run() = 0;
 virtual void Done() = 0;
};

    然后再让应用程序的业务处理主体类继承IApplication类,并实现其中的纯虚函数:
class TApplication : public IApplication {
public:
 TApplication() : IApplication() {}
 ~TApplication() {}
public:
 virtual void Init() {// . . .}
 virtual void Run() {// . . .}
 virtual void Done() {// . . .}
};

再将主函数修改为:
int main (int argc, char *argv[])
{
 // 下行中的application是IApplication *类型的,而非上例中的TApplication *类型
 IApplication *application = new TApplication(argc, argv);
 try
 {
  Application->Init();
  Application->Run();
  Application->Done();
 }
 catch(…)
 {
  // TODO: Add Catch code here
}
delete application;
return 0;
}

    从表面上看,似乎与原来的程序没什么区别。然而,如果我们在主程序中使用工厂模式,以便在不同的应用程序参数下创建不同的应用程序业务处理类,那么我们的程序就会变得可复用了。我们不需要在出现新的业务逻辑的时候去修改主程序,甚至是业务逻辑处理类,我们可以让新的业务逻辑处理类继承于已有的业务逻辑处理类,或者继承于虚基类(例如上例中的IApplication类),然后给定主程序的运行参数,就可以让程序按照新的业务逻辑运行。
    上例给出了最普通的例子,用以说明接口(虚基类)在高可复用软件体系结构中的重要作用。我们可以设想,对于一个较复杂的软件系统,如果我们将其中所有的业务逻辑处理组件以接口方式定义,那么整个软件系统的所有业务逻辑处理组件都将会具有可复用性。事实上,软件架构的主要任务就是合理的定义接口,这些接口与接口之间的关系将成为软件系统的骨架。建筑学中房屋的结构特点有框架结构与承重墙结构,所以软件架构就是合理定义接口及其之间的关系,搭建软件系统的框架结构,因此,接口成为了高可复用性软件体系结构的基础框架元素和重要组成部分。

 http://www.sunnycrystal.net/ShowDocument.aspx?id=19