XDE中模式驱动的设计与开拓(一)
副标题#e#
摘要:
软件模式,出格是设计模式在现今的软件开拓中越来越重要。在很多的尺度,东西,以及开拓要领中都引入了模式的观念。本文先容了如安在UML中对软件模式举办建模,并团结详细的东西Rational XDE,对如何界说,如何应用模式作了具体地先容,并指出了一些相关的问题。
第一部门:模式的UML暗示
1.1 软件模式
软件模式(Software Pattern)的观念由来已久,当初软件业从修建业等其他的工程行业中罗致模式的观念,并把它演化成为软件模式的时候,无疑的是软件工程规模中一项革命的成就。而GoF对设计模式的分类与描写,更使得模式这一观念详细入微,可以或许被成熟的应用在软件开拓之中。
所谓模式,简朴而言,是一种针对某一特定的,重复呈现的问题的乐成的办理方案。就问题自己而言,可以使任意规模和领域的。在诸如修建,音乐,写作,打点等等规模中,都有模式的观念存在。在软件规模中,模式被以一种约定的文档形式表示出来,以便于记载,进修和交换。履历富厚的措施员,可以将他们的常识,通过模式这种更形式化的对象,通报给别人。因而,模式可以看作是一种详细化的,文档化的履历和常识。
在快要十年的时间里,软件模式的有了很大的成长,它不只仅只是一种履历的表达,此刻已经可以或许作为措施开拓的一种驱动力了。模式驱动的软件开拓进程(Pattern Based Development),已经不是一种新事物。可是,在本日的软件开拓规模中,一个开拓思想,可能进程,假如没有一种强有力的东西支持,它就很难获得遍及的应用。
软件模式,就其抽象的级别,可以分为体系布局模式,设计模式和Idiom三种。
1、体系布局模式:提供对体系布局设计中所碰着的问题的办理方案。体系布局的例子包罗有:Pipe-Filter模式,白板模式,MVC模式,ORB模式等等。体系布局模式并不必然是面向工具的,它的思想可觉得任何开拓要领所利用。因而,在操作UML举办描写的时候会有一些坚苦,而凡是利用一些特定专有的描写要领,好比C2(Component-Connector)等。对它的东西支持较量的少,此刻大大都尚处于研究阶段。
2、设计模式:提供劈面向工具的详细设计中的问题的办理方案,使得设计的功效更具有精采的可扩展性和重用性。凡是所说的设计模式,是指的GoF一书中所分类的好了的23个模式。设计模式更具其设计坚守,被分为构建型,布局型和行为型三类,包罗桥接模式,工场模式,组合模式等等。对这些模式的描写以及东西支持已经较量成熟。此刻已经呈现了一些支持设计模式的CASE东西,好比TogetherJ,Rational XDE等。个中以XDE对模式的支持最好。本文将在后头的文章中就XDE中的模式开成长开接头。
3、习习用法(Idiom):是针对详细语言的利用模式。主要涉及的问题是,如何用特定要领来办理措施代码编写进程中所碰着的问题,如何更优的编写措施代码。凡是一种语言,好比Java,C++等,城市有相应的Idiom。这种模式的抽象条理较量低,且涉及到详细的语言,在这儿不予过多的接头。
1.2 UML的模式机制–协作,参数化协作
在早期的UML中,并没有提供对模式的支持。而跟着模式的日益普及,OMG也终于在新版的UML引入了新的观念来提供对模式建模(主要是设计模式)的支持。
稍稍熟悉UML的人,会对协作图(Collaboration Diagram)的很是地相识,协作图是UML的9大视图之一,主要用来提供对模子的动态描写。
而协作(Collaboration)的观念同协作图其实并不太一样。在面向工具的模子中,一个特定的行为,是由一组工具以及工具之间的动静通报来实现的。这种模子信息就是由协作来暗示。协作描叙了在必然的语境中一组工具以及用以实现特定行为的这些工具之间的彼此浸染。它包括布局和行为两个方面,布局方面与静态视图相似,包括一个工具(更为确切的说应该是脚色)的荟萃和他们之间的干系。行为方面是一个动静的荟萃,这些动静在具有某一脚色的各工具之间举办通报互换,也就是所谓的交互(Interaction)。协作的静态方面可以用类图来暗示,协作图实际上也给出了一些静态的模子信息,而动态方面的描写凡是利用顺序图(Sequence Diagram)可能协作图来暗示。
从这个角度来看,模式就是一种协作。对设计模式而言,它实质上描写的就是工具的布局以及工具之间的交互–并应用这样的一种协作来办理某一个问题。在UML中,模式利用的是一种非凡的协作,参数化的协作(parameterized collaboration)来暗示的。
#p#分页标题#e#
在一个参数化的协作中,协作的参加者(好比类,也可以是干系等其它元素)可以是一个泛化的协作的参数。每当应用这个协作到一个详细的模子中去的时候,用详细的模子元素来替代这些参数。这样,在这个协作中参数之间的干系就被牢靠在这个模子中了。固然对设计模式而言,它包括了比协作更多的寄义。可是这样的一种参数化协作的建模方法,已经可以或许描写模式大部门的语义信息。模式还可以包罗利用配景,利用指导,以及利用效果等其他的描写,这些内容可以作为注释写在单独的文本文件中。
#p#副标题#e#
在利用UML来对模式举办建模的时候,可以遵循如下的步调:
1. 对一个反复呈现的问题给出一种普遍的办理方案,并将其细化成一种机制。因为方案往往只是观念条理上的,要有详细的实现,才气够称其为模式。而普遍的寄义更为重要,反复呈现的问题,凡是会有差异的问题配景,要在这些差异的配景中找出民众的问题域,也并不是一件容易的工作。
2. 在抽象出的问题域中,将上述的机制建模为一个协作,即包括了其静态的布局和动态的交互的一个名称空间,这可以看作是一种抽象,模式也就是这种抽象的产品。
3. 找出模式中必需要绑定到详细的应用中去的部门,将其建模为协作的参数。参数提供了对模式举办扩展以及实现的大概。正因为问题配景的巨大与差异,才需要详细的参数来订制模式。
实际上对模式的捕获以及实现,是一个很巨大的进程,已经超出了本文要接头的领域,这儿给出的步调,也不必然就可以或许应用到所有的环境。这儿存眷的是,如何用UML来表达一个模式的内容,下面来看一个例子。
1.3 一个例子
下面我们将试验一个简朴的设计模式:呼吁(Command)模式,看如何将其用UML暗示出来。并如何应用到一个详细的模子中去。这儿不再详述呼吁模式的详细的语义,假如有不太熟悉的处所可以参考GoF的《设计模式》一书。
呼吁模式有如下的布局:
图1:呼吁模式的布局类图
我们将其每一个部门都看作是一个协作的参数,获得如下的一个参数化协作:
图2:呼吁模式对应的参数化协作
可能,我们还可以用一个特另外顺序图来暗示这个模式的动态行为:
图3:呼吁模式的动态行为顺序图
我们再来看一看模式的的应用,在一个详细的模子中,好比说EJB的模子,如果设计需要利用呼吁模式来完成一个Command的EJB挪用层(关于EJB中的呼吁模式,详细可以拜见《EJB模式语言》一书,这而为了轻便起见,作了一些的简化。)按照呼吁模式的语义,可以对模板参数作如下的绑定:
模板参数 | 绑定工具 |
Invoker | Containerr |
Command | Command(自动生成) |
ConcreteCommand | ConcreteCommand(自动生成) |
Receiver Bean | Context |
State | State(自动生成) |
Client | Remote |
表一:呼吁模式到EJB模子的绑定
在UML中,模式的绑定暗示为结构型为<<bind>>的依赖干系,从被绑定的协作指向模式所代表的参数话协作。可以可选的在依赖干系上给出绑定的功效。如下图所示:
图4:模式的绑定之一
可以用UML来暗示详细的绑定功效:为了生成协作而绑定模式用虚线椭圆暗示,椭圆中包括了模式的名称;在从椭圆到每一个参加协作的类之间画一条虚线,并在虚线上标明参数的名称。
图5:模式的绑定之二
绑定之后,模子中引入的呼吁模式的语义,获得这样的一个功效:
图6:绑定的功效
1.4 关于协作的一些后续话题
协作说明白浩瀚参加者之间的交互方法,而这些参加者,并不只仅范围于类可能接口。它可以是一个类元可能链。实际上,在协作中的参加者,并非是类可能,接口,是一种新的建模元素,称之为协作脚色。协作脚色代表了一个工具布局中的定名槽(slot),暗示出在特定语境中的元素的行为。它并不暗示实际存在的工具可能链,而是当协作实例化时,工具可能链被替代的位置。从这种意义上讲,协作脚色相当于一个函数中的参数。
#p#分页标题#e#
一个类元也拥有详细的范例,好比说类,接口,可能子系统等等。就像函数挪用时提供应其的参数值要满意参数的范例一样,在应用模式时,类元的范例也需要获得满意。好比,你不可以或许把一个接口范例的类元脚色绑定到一个类上去。从传统意义上的类可能接口,到协作中的协作脚色,可以说是一种建模思想上的变革。脚色这个词,也很好的浮现了这个观念。可以用它同影戏中的脚色举办类比,只要任何人,瞒住了脚色所提出的要求(好比性别,年数,演技,等等),都可以充当这个脚色的饰演者。而脚色并不是一个详细的工具,而是由一个工具来包袱。在这一点上,同Java中的接口的观念较量雷同,但更为抽象。
协作脚色包罗类元脚色和关联脚色。对这一点,后头还会提到,在XDE中,脚色的观念已经被扩充,而不只仅只是能标是类元可能关联,而可以或许暗示任何正当的UML模子元素。好比属性,要领,甚至视图。这样,模式的表达本领被大大地加强了,模式也可以或许拥有更为富厚的语义。
在后续的系列中,我们会利用Rational公司最新的XDE东西来实现对模式的建模与利用。XDE是最新的集建模与编码于一体的IDE,在很洪流平上代表了此后IDE的成长偏向,它所提供的强大的模式机制,可以或许将UML中对模式的建模本领,现实的转化为提高软件出产率的有效东西。让我们在下一期的系列文章中再见吧。