技术开发 频道

设计模式的作用

    POAD

    在面对一个新的复杂的系统的时候,在我们应用多个设计模式去解决实际问题的时候,会遇到一些挑战:

    1、 是什么证明一个模式可以作为一个设计组件?如何为整合其它模式,我们如何定义模式的接口?
    2、 我们能从设计模式单独地组合应用吗?很多应用使用一个到多个设计模式。挑战是是否能通过粘合设计模式来构建应用,这些模式如何接口,现有的模式是否够用,以及应该用什么类型的模式。
    3、 我们如何应用设计模式系统地开发应用。

    而POAD能解决这些问题:POAD——Pattern-Oriented Analysis and Design(面向模式的分析和设计),它使用结构的合成在高层次的设计上粘合(glue)设计模式,它基于这样的前提:在某些设计层次,对于应用于应用的设计模式有足够的认识,并且设计者不会受制于模式的内部设计细节。POAD提供逻辑视图去表达作为模式组合的应用设计,还提供必须的方法去跟踪这些模式的参与者到应用的最终类图里面。POAD的用途包括:

    1、 促进基于模式的开发。
    2、 改进系统化的方法去粘合(glue)模式。
    3、 开发设计框架。通过使用模式作为设计积木使得开发设计框架变得容易。
    4、 提高设计质量。

    总体来说,POAD使用UML作为建模语言,定义了一个设计方法论,它把模式当作设计中的building blocks或者component,认为模式具有在设计层次被组合的能力。POAD定义了一个特别的模式类型称为构造型设计模式(constructional design patterns),并且定义了多个层次的抽象和逻辑视图。POAD还定义了这些层次是如何按照类(class)被追踪到低层次的设计。
    在这里有一个重要的术语“角色(Role)”,角色图(Role Diagram)被用来记载设计模式的行为。基于角色的方法认为一个模式为一个角色的协作。一个角色是一个特定的行为,此行为作为和其它角色的协作的结果而定义。一个设计模式捕捉了一个能用一组交互的角色模型化的行为。为了组合模式,每个模式都被描绘称为一个角色图。通常我们见到的描述模式的是类图,而用角色图描述模式的时候,则将其进行了更高的抽象,比如对于抽象工厂模式,在角色图中表示为:工厂角色和产品角色。角色模型的好处在于提供了比类图更高级的抽象,它抽象了模式背后的主要思想。从而通过角色模型可以组合模式:

    1、 将所有现有的模式使用角色图建模。
    2、 The design uses a prototypical pattern application to derive the composite design pattern. A prototypical application is a concrete application, which is usually represented by an object diagram. It plays the role of the concrete example to be abstracted.
    3、 使用应用的协作图来选择可以被该应用使用的模式。使用每个模式的角色图,在应用对象图中把角色从角色图中分配给对象。最后,每个对象都被赋予几个来自几个模式的角色。
    4、 使用带有注解过的角色的对象图,设计者创建一个角色关系矩阵。The role relationship matrix is used to analyze how roles are close to each other in terms of the composition constraints. The purpose of this analysis is to discover the pattern interaction synergy and unleash any composite roles. As a result, role equivalent sets that form composite roles are defined. The role relationship matrix is reduced to a final role relationship matrix.
    5、 最终的角色关系矩阵被用来为组合设计模式创建角色图(the role diagram for the composite design pattern.)。

    之所以介绍POAD给大家,是因为总是看到各位讨论某个具体的设计模式,而对组合多个设计模式以构建优良架构的系统则较少论及。以后的随笔中将进一步和各位讨论POAD。

    模式(分析模式、架构模式和设计模式)是我们广泛讨论的一个话题,研究它是为了能提高软件复用(代码复用和设计复用)的水平。模式的发展和OO 语言的发展、OOAD方法论的发展以及UML的发展都密切相关。

    在20世纪60~70年代,面向对象语言初步发展的时期,Alan Kay(Smalltalk的发明人)提出了object-oriented programming,但是OOAD理论还没有正式被提出来。直到1982年Grady Booch发表了OOAD发展史上里程碑式的一篇论文《Object-Oriented Design》。在20世纪80年代,OOAD的先驱者纷纷提出其OOAD idea,比较著名的有Kent Beck, Peter Coad,Don Firesmith,Ivar Jacobson (a UML founder),Steve Mellor,Bertrand Meyer, Jim Rumbaugh (a UML founder),Rebecca Wirfs-Brock等。

    在过去的二十多年里,几种面向对象的分析和设计(OOAD)的方法论被提出来。这些方法论在几个方面有所不同。它们处理域空间(domain space)和创建分析设计模型的方式不同;它们创建的用来捕捉分析设计过程的输出的模型的类型也不同。在这些技术中,比较有名的是:

    1. Shlaer and Mellor (1988) 方法。
    2. Coad and Yourdon (1990) 方法。
    3. Wirfs-Brock、 Wilkerson、 Wiener (1990) 方法。
    4. Jacobson’s Objectory方法。
    5. Booch (1994)方法。
    6. Rumbaugh (1992) 方法。
    7. Hierarchical Object-oriented Design (HOOD) 方法。
    8. Real-Time Object-oriented Modeling language方法。
    9. Catalysis(1998)方法。

    一门设计方法论(design methodology),一般来说包括三个方面:

    1、 Technology aspects(技术方面)。包括概念、符号和模型。可视化的模型表达了设计者解决问题的思想(模式)。
    2、 Process aspects(过程方面)。包括任务和步骤。
    3、 Organizational aspects(组织方面)。企业如何组织,以将方法论行之有效。

    上面的这些理论从提出到现在都有10多年了,在它们的发展过程中,UML集各家所长,最后成为主流的建模语言,而模式也逐渐成为一个热门的研究课题。但是大多数关于设计模式的书籍著述大多都是介绍和记录设计模式的,而很少有论及如何在开发新的应用时系统地应用这些可复用的设计。

    如何科学地使用模式以提高软件复用的水平?如何将多个模式科学地组合起来使用?如何系统地使用模式?为了解决这些问题,又有新的方法论被提出来,这就是POAD——Pattern-Oriented Analysis and Design(面向模式的分析和设计),相信已经有人对此有了研究,在下篇随笔中,我也将把学习POAD的一些学习笔记贴出来和各位交流。
0
相关文章