用户界面的UML建模07

4.2 抽象表示层的行为(Abstract Presentation Behaviour)

AbstractForm 类定义了一组如下所示的四种操作: showForm() , getData() , sendConfirmation() 和sendCancellation()。在该阶段的设计过程(design process)中,这四种操作可被基本理解成一组能够被《boundary》对象以某种方式实现的可能操作。

􀂄 showForm()一般用来作为一个自我委托(self-delegate)的消息,在输出设备上进行窗体(form)的绘制工作。当《boundary》对象创建时,该方法可自动执行。

􀂄 getData()负责收集在一次交互后用户所提供的信息,并将这些信息根据需要转换成系统操作的适当参数。

􀂄 sendConfirmation()和sendCancellation()消息用于建模那些在一个系统用户和《boundary》

对象间进行交互的底层系统操作。它们是由于《boundary》对象的聚合组件(aggregate components)产生了系统事件而相应产生的。sendConfirmation()操作通知《boundary》对象系统用户正在向系统提交信息;而sendCancellation()则指明系统用户需要中止(abort)与窗体的交互,而不进行任何信息的提交。

4.3 使用抽象表示层模型

先让我们回到图4 所示的ConnectToSystem 的序列图中去,Library System 创建了AbstractForm 类的《boundary》ConnectionUI 对象,其将执行showForm()方法。该方法负责绘制ConnectionUI 窗体并将其显示给用户。通过与UI 进行交互,用户可以向ConnectionUI 对象发送一个sendConfirmation()消息。

sendConfirmation()消息可作为一个与OK 按钮(参见图5)相关联的事件,但这并没有在抽象表示层建模过程中进行详细说明。ConnectionUI 对象执行一个getData()操作,以获取那些由用户所提供的数据。当数据收集完成后,ConnectionUI 对象发送一个系统操作的消息checkUser() 给《control 》ConnectionController 对象, 并将登录名称和密码作为传递参数。

ConnectionController 对象提交一次对于数据库管理系统的查询操作,数据库负责实例化一个Person。然后,《control》ConnectionController 对象向《entity》Person 对象发送一个消息,该消息用于验证所提供的密码。若密码正确,ConnectionController 对象将会创建MainUI 对象,并销毁ConnectionUI。以上提到的序列图仅给出了当用户成功登录进系统的场景,而针对登录系统失败时场景的建模可参见节6.1。

在节3 中提出的那些活动与抽象表示层模型之间通过活动图中的流对象进行弱关联(weakly connect)。的确,AbstratComponents 应该用在活动图中来解释说明UI 与底层应用之间的数据流。然而我们相信,一个定义良好的活动与AbstractForms 实例之间的关系,能够促进任务和抽象表示层的设计。例如,用户交互中包含的活动应该由《boundary》对象来提供支持。但是,我们很难从一个活动中标识出《boundary》对象,或者从《boundary》对象中标识出活动。

5 具体表示层建模

抽象表示层模型没有描述每一个《boundary》类是由哪些组件组成的,也不提供关于布局的任何描述。此外,它们也并没有描述用户界面组件的事件与《control》类的操作是如何进行关联的。所以在UI 设计的过程中,有时往往需要具体表示层模型。

5.1 具体表示层的结构和布局

从具体表示层的观点来看,图6 中所示的抽象表示层模型可以作为UI 表示层模型的设计模式规约。该模式称为表示层框架(Presentation Framework)。事实上,设计模式的方法是由Gamma 等提出[5]并最终并入UML,该方法可用来描述如何在使用抽象表示层模型元素的图中适应各种不同的环境,如图4 所示的序列图。其实,具体表示层模型是依赖于环境的,因为它们往往是作为环境类(environment class)及组件的术语来进行描述的。在我们的术语中,"环境"指的是面向对象程序设计语言中的类,组件或两者都是。我们可以使用Java[6]来说明UI 类是如何与环境类进行关联的。构造型《cpm》可用来标识这些环境类。

图8 说明了一个使用了表示层框架和一些Java AWT 组件的具体表示层模型。表示层框架使用了UML 中的协作(collaboration)符号来说明以下五个不同的角色(roles):AbstractForm,AbstractContainer,StaticDisplay,InteractionControl 和ActionInvoker。遵照抽象表示层模型中的关系(如图6 所示),表示层框架模式可以清晰地描述出抽象表示层类是如何被具体表示层类进行替换的。事实上,图8 也表明了《cpm》Frame 对应着《apm》AbstractForm,《cpm》Container 对应着《apm》AbstractContainer,《cpm》Label 对应着《apm》StaticDiaplay,《cpm》

TextField 对应着《apm》InteractionControl,以及《cpm》Button 对应着《apm》ctionInvoker。

相关推荐
workflower3 天前
GitHub宕机自救指南
测试用例·需求分析·uml·敏捷流程·结对编程
青草地溪水旁9 天前
Astah UML 中,状态机(State Machine)的建模最合适使用「UML 状态图(State Diagram)」
uml·状态机
Liquad Li10 天前
UML(统一建模语言)详解
架构·uml
产品研究员12 天前
教你3个原型设计的高级交互用法,0基础产品经理适用!
产品经理·交互设计
青草地溪水旁18 天前
UML函数原型中stereotype的含义,有啥用?
c++·uml
青草地溪水旁18 天前
UML函数原型中guard的含义,有啥用?
c++·uml
青草地溪水旁21 天前
UML函数原型中constraint的含义,有啥用?
c++·uml
范纹杉想快点毕业1 个月前
基于 C 语言视角:流程图中分支与循环结构的深度解析
c语言·stm32·单片机·设计模式·架构·流程图·uml
Points1 个月前
开源分享程序员专用作品集网站 - StudioX
开源·交互设计
springfe01012 个月前
UML
架构·uml