UML的基础知识以及如何运用_第1页
UML的基础知识以及如何运用_第2页
UML的基础知识以及如何运用_第3页
UML的基础知识以及如何运用_第4页
UML的基础知识以及如何运用_第5页
已阅读5页,还剩28页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、UML的基础知识以及如何运用 第二十章 理解设计模式 已经学习了UML的基础知识以及如何将它运用 到一个开发项目环境中,作为过渡,让我们来看看 UML在一个热点领域设计模式中的应用。这一 章主要有下列内容: 参数化。 设计模式。 运用设计模式。 使用自己的设计模式。 设计模式的优点。 UML的基础知识以及如何运用 20.1 参数化 我们知道,类是创建对象的模板。对象是类的一 个实例。 我们回到哪个洗衣机的例子中去。详细指明洗衣 机(washing machine)类(正确的表示法应该为 WashingMachine类)具有bandName(品牌)、 modelName(型号)、serialNu

2、mber(序列号)和 capacity(容量)属性,以及addClothes()(添加衣物)、 addDetergent()(添加洗涤剂)及removeClothes()(取出衣 物)操作后,这样就有了创建洗衣机类对象的模板。 每次要创建一个对象,都要给这些属性指定具体的值。 UML的基础知识以及如何运用 UML可以让你更进一步。它提供了一种类似于 创建新对象的创建类的机制。可以为某类的一个属 性子集指定值从而生成一个具体的类,而不是类的 对象。这种类被称为参数化类(parameterized class)。 它的UML表示法如下图所示。类矩形框右上角挂着 一个小的虚线框,框中是为了生成具体类

3、所需要指 定值的参数。为了记录的方便,这些参数被称为无 界参数(unbound parameter)。当为这些参数指定值时, 就说这些参数被绑定到这些值上。右上角虚线柜中 的“T”说明这个类是创建其他类的模板。 UML的基础知识以及如何运用 这里有一个例子。假设将LivingThing(生物)设置 为参数化类。它的无界参数可以是genus(种)和 species(属),它还具有生物通常都具有的属性如名称、 高度、体重等,如下图所示。 UML的基础知识以及如何运用 如果将genus绑定到“homo(人类)”,species绑定 到“sapiens(人)”,那么就生成了一个叫做 “Human(人)

4、”的类。类的名字被绑定到T。下图说 明绑定关系的一种表示法。这种风格的表示法被称为 显式绑定,因为它明确地显示出了生成的类和参数化 类之间的依赖关系,并提供了生成的类的名字。 UML的基础知识以及如何运用 UML的基础知识以及如何运用 另一种绑定的表示法叫隐式绑定。不显示出依赖 关系,绑定参数出现在产生的类名后面,并用尖角括 号括起来。如下图所示。 UML的基础知识以及如何运用 不论采用哪种表示法,都可以为name、height、 和weight指定值来创建Human类的对象。 20.2 设计模式 可以将参数化的思想进一步扩展。任何UML分 类都可以带参数(即参数化)。实际上一组互相协作的 分

5、类都可以被参数化,这就引出了一个令人感兴趣 的研究领域。 面向对象技术在近几十年得到的日益广泛的应 用,对经常重复出现的类似问题,运用面向对象技 术已经总结出许多健全的解决方案。这些解决方案 UML的基础知识以及如何运用 被称为设计模式(design pattenm),并且被获得广泛的 应用。由于设计模式是面向对象技术领域的产物,因 而它也具有容易形成概念,容易被表示成图以及容易 被重用的特点。UML是一种通用的面向对象建模语 言,因此也可以用来解释和描述设计模式。 设计模式实际上是一个设计问题的解决方案(一 个模式)。它是在项目遇到具体的设计问题后被提出 的,并且开发组发现所提出的问题解决方

6、案在其他的 语境中也同样适用。每个设计模式描述了一组相互通 信的对象或者类。这组对象可以在具体的语境中用来 解决一个设计问题。 UML的基础知识以及如何运用 使设计模式日益流行起来的第一本书名字就叫 Design Pattern。在这本书中,分类整理了23个基本的 设计模式。根据每个模式的用途这些设计模式被分为 三类:(1)创建型模式(creational pattern)处理新对象的 创建过程,(2)结构型模式(structural pattern)处理对象 和类的组成,(3)行为模式(behavioral pattern)详细说明 对象或类之间如何交互以及如何分配职责给对象或类。 他们还进

7、一步根据设计模式是应用于对象还是类进行 了划分,这种分类标推被称为范围(scope),大部分模 式的范围都处于对象层次。 UML的基础知识以及如何运用 每个设计模式都有四个基本组成元素:(1)为了便 于用文字描述而对模式所起的名称(name),(2)该模式 所能解决的问题(problem),(3)说明如何解决问题以及 模式中的对象或类之间如何协作的解决方案(solution), (4)运用模式所产生的后果(consequence)。 可以用UML模型中的一个参数化的协作表示个 设计模式。由于设计模式是一种通用的问题解决方案, 因此参数化的协作也起一个通用的名称。给模式指定 特定于领域的名称可以

8、使该模式应用于一个具体的模 型。参数化的协作可以帮助你在模式的语境中可视化 地表达出具体问题领域的解决方案。 UML的基础知识以及如何运用 20.3 职责链模式 下面就让我们来考察一个设计模式,加深理解前 面对设计模式所做的介绍。 职责链(Chain of Responsibility)是一种可应用于许 多具体领域的行为模式。这个模式处理一组对象和一 个请求之间的关系。当一个请求可以被多个对象处理 时就可以运用这个模式。最初发出请求的对象并不知 道它所发出的请求是被哪个对象处理的。最终处理请 求的对象被称为隐含接收者。 餐馆就是按照这种模式组织的,汽车代理商购买 UML的基础知识以及如何运用

9、汽车也是按照这种方式。在一个餐馆中,顾客通常并 不直接向某个厨师发送请求并且顾客通常也不熟悉厨 师。相反,顾客首先发给服务员一份定单,服务员将 定单交给厨师,这个厨师可能履行定单上所提出的要 求或者将定单转发给助理厨师。在汽车代理商购买汽 车时,购买者要向好几个金融机构提交贷款请求直到 某个机构决定提供贷款。 美国职业篮球联盟中的职业球队选秀也是按照这 种模式实施的。成绩最差的球队最先选秀(选队员)。 如果该球队决定放弃某个队员,那么成绩次差的队就 可以选择这个队员入队,以此次序进行。放弃了队员 的球队并不能马上知道哪个队后来选中了该队员。 UML的基础知识以及如何运用 现在已经在几个具体的语

10、境中看到了职责链模式 的应用。接着就可以抽象地理解它了。这个模式中的 参与者包括一个Client(客户)类、一个抽象的 Handler(处理者)类以及几个抽象Handler类的子类。请 求由客户对象发起。如果一个具体的处理者对象能够 处理这个请求,那么就处理它。如果该处理者对象不 能处理这个请求,则将这个请求转发给职责链上的下 一个具体的处理者对象。下图说明了这种模式的结构。 UML的基础知识以及如何运用 UML的基础知识以及如何运用 这个模式背后隐藏的思想是使一个对象不必知道 哪个对象满足了它发出的请求。在为对象分配职责时, 这个模式给设计增加了灵活性。这个模式的缺点是它 没有保证一定有某个

11、对象处理请求。例如,一名球员 可能不会受到来自职业联盟中的任何球队的邀请。 注意图中抽象Handler类的自身关联。这样设计的 目的是要表明具体的Handler类实施了抽象的Handler 类(在这种语境中,一个对象能够根据自身信息找它的 后继对象)。可以将这种实施关系用如下图中的一个关 联类来表示,这样的设计允许对后继者类增加属性。 UML的基础知识以及如何运用 在餐馆领域中,抽象的处理者类是Emplyee(雇员) 类,具体的处理者类包括Server(服务员)类、Chef(厨 师)类、利assistantChef(助理厨师)类。客户类是 Customer(顾客)类,由他发起一个请求,例如签一

12、份 定单,并且他并不知道谁将最终处理他的定单请求。 将上图中的类名替换为具体领域中的类名,就得 到了下图。 UML的基础知识以及如何运用 上图虽然很有用,但是它并没有说明特定领域的 类名如何对应到模式中的类名。要显示出这种语境, 可以使用如下图所示的参数化协作表示法。 UML的基础知识以及如何运用 UML的基础知识以及如何运用 在上图中,引出虚线的椭圆代表了设计模式中的 协作,椭圆中的名字就是模式的名称。模式外围的矩 形框代表了协作的参与者对象。带箭头的依赖关系线 表示合作要依赖于参与协作的对象。依赖关系线上的 标签说明被依赖的参与协作的对象在模式中所担当的 角色。协作的参数化是通过在模式中使

13、用特定领域的 类名来表达的。 Web浏览器事件模型 在开发交互式Web页面时,设计者必须要考虑浏 览器刚刚被打开时的事件模型。对于IE,可以编写 JavaScript或者VBScript代码来响应诸如鼠标点击这样 UML的基础知识以及如何运用 的事件。这段代码被称为一个“事件处理器”,它说 明了如果有用户鼠标点击事件发生后,Web页面如何 做出响应。 在一个HTML文档(document)中,一个页面被分 为一些被称作DIV的区域,每个DIV还被被进步分 为几个表单(form)。可以将一个按钮(button)放置在一 个表单中。这听起来有点象组成关系。确实是这样。 上面划分的每个元素都是HTM

14、L文档的构件,某些构 件还可以成为其他构件的构件。在Design Pattern一书 中的模式中也包括组成模式(Composite Pattern),并说 明了组成模式通常要和职责链模式共同使用。构件- 组成关系实施了职责链中前驱与后继之间的链接。 UML的基础知识以及如何运用 当在一个DIV中的某个表单中安放一个按钮,并 且DIV所在的HTML文档被用IE打开时,按下按钮就 触发了按钮点击事件,这个事件消息先被发送给表单 对象,接着被发送给表单对象所在的DIV对象,最后 被发送给DIV所在的文档对象。这些可能接收消息的 每个文档元素对象都有自己的事件处理器来响应按钮 点击事件。 如果一个HT

15、ML文档中的脚本程序动态地指明了 哪个元素对象的事件处理器被触发执行,那么这段脚 本程序就被称为是职责链设计模式的一个实例。下图 显示了事件模型中的类图以及用参数化协作表示应用 于IE事件模型的设计模式。 UML的基础知识以及如何运用 UML的基础知识以及如何运用 UML的基础知识以及如何运用 20.4 我们自己的设计模式 Design Pattern一书总结了23个设计模式,但是这 不意味着只有这些模式。相反他们的意图是鼓励人们 去彻底地发现和使用模式。 为了简要说明这些模式是如何得来的,让我们回 顾“活动图”一章。在那一章介绍了一个计算 Fibnacci数的例子。 这个问题的解决方案有什么

16、特征呢?为了解决这 个问题,要设置一个初始值或者一组中间值,还要按 照一定的规则来累加中间值,最后整个算法以得到 UML的基础知识以及如何运用 数列中的第n个数而终止。 我们可以把上述模式称为“数列计算器(Series Calculator)”模式。尽管可以只使用一个对象就可以实 施这种模式,为了说明设计模式中的一些概念让我们 用一组对象之间的协作来实施这个模式。 数列计算器模式有三个参与者类,分别是 InitialValue(初始值)类、AccumulationRule(累加规则) 类和FinalValue(终值)类。下图是这个模式的类图。开 始值用属性first来表示。如果第2个开始值有必

17、要的话, 例如在计算Fibnacci数时,它用second属性来表示。 有时,例如在计算阶乘时,这个模式需要一个 UML的基础知识以及如何运用 zeroth(第0项)。累加规则的算法由AccumulationRule 类中的accumulate()操作实现。要计算的项的数目用 AccumulationRule类中的属性nth表示。 UML的基础知识以及如何运用 在对象之间的协作中,AccumulationRule对象从 InitialValue对象处获得开始值,计算所需要次数的累 加和,并将结果发送给FinalValue对象,由FinalValue 对象负责将结果输出。下图说明了这个交互过程。

18、 UML的基础知识以及如何运用 UML的基础知识以及如何运用 为了相互比较,现将计算阶乘的参数化协作也用 下图表示出来。 UML的基础知识以及如何运用 20.5 使用设计模式的好处 设计模式在许多不同的方面都很有用途。首先, 它可以增进重用。如果将一个健全的设计用设计模式 来表达,那么这些模式就很容易在日后被你或他人重 新使用。另外,设计模式可以提供清晰、简洁的方式 用来思考和讨论如何用一组相互协作的类或者对象解 决问题。最后,如果在设计过程中运用了模式,会使 文档的编制更容易。 UML的基础知识以及如何运用 20.6 小结 参数化的类(带参数的类)具有无界参数。用值对 这些参数绑定可以创建新类。UML中的任何分类都 可以被参数化或带参数。一个参数化的协作可以用 来表示设计模式在许多领域中都适用的解决方 案。 “职责链”是设计模式中的一个。在这模式中, 对象发送的请求被沿着由对象组成的职责链逐个向 后传递,直至遇到一个能处理该请求的对象为止。 这个模式是来自本最著名的介绍设计模式的著作。 可以创建我们自己

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论