驱动开发网:XDE中模式驱动的设计和开发(一)

  摘要:

  软件Software模式特别是设计模式在现今软件Software开发中越来越重要在许多标准工具以及开发思路方法中都引入了模式概念本文介绍了如何在UML中对软件Software模式进行建模并结合具体工具Rational XDE对如何定义如何应用模式作了详细地介绍并指出了些相关问题

  第部分:模式UML表示

  1.1 软件Software模式

  软件Software模式(Software Pattern)概念由来已久当初软件Software业从建筑业等其他工程行业中汲取模式概念并把它演化成为软件Software模式时候无疑是软件Software工程领域中项革命成果而GoF对设计模式分类和描述更使得模式这概念具体入微能够被成熟应用在软件Software开发的中

  所谓模式简单而言种针对某特定反复出现问题成功解决方案就问题本身而言可以使任意领域和范畴在诸如建筑音乐写作管理等等领域中都有模式概念存在在软件Software领域中模式被以种约定文档形式表现出来以便于纪录学习和交流经验丰富可以将他们知识通过模式这种更形式化东西传递给别人因而模式可以看作是种具体化文档化经验和知识

  在将近十年时间里软件Software模式有了很大发展它不仅仅只是种经验表达现在已经能够作为开发种驱动力了模式驱动软件Software开发过程(Pattern Based Development)已经不是种新事物但是在今天软件Software开发领域中个开发思想或者过程如果没有种强有力工具支持它就很难得到广泛应用

  软件Software模式就其抽象级别可以分为体系结构模式设计模式和Idiom 3种

  1、体系结构模式:提供对体系结构设计中所遇到问题解决方案体系结构例子包括有:Pipe-Filter模式白板模式MVC模式ORB模式等等体系结构模式并不定是面向对象思想可以为任何开发思路方法所使用因而在利用UML进行描述时候会有些困难而通常使用些特定专有描述思路方法比如C2(Component-Connector)等对它工具支持比较现在大多数尚处于研究阶段

  2、设计模式:提供对面向对象具体设计中问题解决方案使得设计结果更具有良好可扩展性和重用性通常所说设计模式是指GoF书中所分类好了23个模式设计模式更具其设计功用被分为构建型结构型和行为型 3类包括桥接模式工厂模式组合模式等等对这些模式描述以及工具支持已经比较成熟现在已经出现了些支持设计模式CASE工具比如TogetherJRational XDE等其中以XDE对模式支持最好本文将在后面文章中就XDE中模式开发展开讨论

  3、习惯使用方法(Idiom):是针对具体语言使用模式主要涉及问题是如何用特定思路方法来解决代码编写过程中所遇到问题如何更优编写代码通常种语言比如JavaC都会有相应Idiom这种模式抽象层次比较低且涉及到具体语言在这儿不予过多讨论

  1.2 UML模式机制--协作参数化协作

  在早期UML中并没有提供对模式支持而随着模式日益普及OMG也终于在新版UML引入了新概念来提供对模式建模(主要是设计模式)支持

  稍稍熟悉UML会对协作图(Collaboration Diagram)非常地了解协作图是UML9大视图的主要用来提供对模型动态描述

  而协作(Collaboration)概念同协作图其实并不太在面向对象模型中个特定行为是由组对象以及对象的间消息传递来实现这种模型信息就是由协作来表示协作描叙了在语境中组对象以及用以实现特定行为这些对象的间相互作用它包含结构和行为两个方面结构方面和静态视图相似包含个对象(更为确切说应该是角色)集合和他们的间关系行为方面是个消息集合这些消息在具有某角色各对象的间进行传递交换也就是所谓交互(Interaction)协作静态方面可以用类图来表示协作图实际上也给出了些静态模型信息而动态方面描述通常使用顺序图(Sequence Diagram)或者协作图来表示

  从这个角度来看模式就是种协作对设计模式而言它实质上描述就是对象结构以及对象的间交互--并应用这样种协作来解决某个问题在UML中模式使用种特殊协作参数化协作(parameterized collaboration)来表示

  在个参数化协作中协作参和者(比如类也可以是关系等其它元素)可以是个泛化协作参数每当应用这个协作到个具体模型中去时候用具体模型元素来替代这些参数这样在这个协作中参数的间关系就被固定在这个模型中了虽然对设计模式而言它包含了比协作更多含义但是这样种参数化协作建模方式已经能够描述模式大部分语义信息模式还可以包括使用背景使用指导以及使用后果等其他描述这些内容可以作为注释写在单独文本文件中

  在使用UML来对模式进行建模时候可以遵循如下步骤:

  1. 对个重复出现问题给出种普遍解决方案并将其细化成种机制方案往往只是概念层次上要有具体实现才能够称其为模式而普遍含义更为重要重复出现问题通常会有区别问题背景要在这些区别背景中找出公共问题域也并不是件容易事情

  2. 在抽象出问题域中将上述机制建模为个协作即包含了其静态结构和动态交互个名称空间这可以看作是种抽象模式也就是这种抽象产物

  3. 找出模式中必须要绑定到具体应用中去部分将其建模为协作参数参数提供了对模式进行扩展以及实现可能问题背景复杂和区别才需要具体参数来订制模式

  实际上对模式捕捉以及实现个很复杂过程已经超出了本文要讨论范畴这儿给出步骤也不定就能够应用到所有情况这儿关注如何用UML来表达个模式内容下面来看个例子

  1.3 个例子

  下面我们将试验个简单设计模式:命令(Command)模式看如何将其用UML表示出来并如何应用到个具体模型中去这儿不再详述命令模式具体语义如果有不太熟悉地方可以参考GoF设计模式

  命令模式有如下结构:

  

  图6:绑定结果

  1.4 有关协作些后续话题

  协作介绍说明了众多参和者的间交互方式而这些参和者并不仅仅局限于类或者接口它可以是个类元或者链实际上在协作中参和者并非是类或者接口种新建模元素称的为协作角色协作角色代表了个对象结构中命名槽(slot)表示出在特定语境中元素行为它并不表示实际存在对象或者链而是当协作例子化时对象或者链被替代位置从这种意义上讲协作角色相当于参数

  个类元也拥有具体类型比如说类接口或者子系统等等就像时提供给其参数值要满足参数类型在应用模式时类元类型也需要得到满足比如你不能够把个接口类型类元角色绑定到个类上去从传统意义上类或者接口到协作中协作角色可以说是种建模思想上变化角色这个词也很好体现了这个概念可以用它同电影中角色进行类比只要任何人瞒住了角色所提出要求(比如性别年龄演技等等)都可以充当这个角色扮演者而角色并不是个具体对象而是由个对象来承担在这点上同Java中接口概念比较类似但更为抽象

  协作角色包括类元角色和关联角色对这后面还会提到在XDE中角色概念已经被扩充而不仅仅只是能标是类元或者关联而能够表示任何合法UML模型元素比如属性思路方法甚至视图这样模式表达能力被大大地增强了模式也能够拥有更为丰富语义

  在后续系列中我们会使用Rational公司最新XDE工具来实现对模式建模和使用XDE是最新集建模和编码于IDE在很大程度上代表了今后IDE发展方向它所提供强大模式机制能够将UML中对模式建模能力现实转化为提高软件Software生产率有效工具让我们在下系列文章中再见吧

Tags:  驱动程序开发网 领域驱动设计 驱动开发 驱动开发网

延伸阅读

最新评论

发表评论