当前位置: 首页 > article >正文

用户界面的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。


http://www.kler.cn/a/460429.html

相关文章:

  • [实用指南]如何将视频从iPhone传输到iPad
  • DevOps工程技术价值流:Ansible自动化与Semaphore集成
  • 测试带宽上行方法
  • 免费又开源:企业级物联网平台的新选择 ThingsPanel
  • BootstrapTable处理表格
  • 黑马Java面试教程_P10_设计模式
  • C# 中 `new` 关键字的用法
  • 【超好用远程工具】跨平台SSH工具WindTerm免费开源
  • 25考研总结
  • Apache Commons Pool :介绍与使用
  • 再见24你好25
  • 计算机网络500题2024-2025学年度第一学期复习题库(选择、判断、填空)
  • C高级:思维导图
  • Kotlin Multiplatform 新纪元:klibs.io 与鸿蒙支持解锁跨平台开发新潜力
  • PTA数据结构作业四
  • 12.31【Linux】shell脚本【运行方式,修改环境变量,数组】思维导图 内附练习
  • Nginx1.20.2-Linux-安装
  • Jenkins 使用入门教程
  • 聊天机器人Rasa面试内容整理-Rasa 是什么?
  • VR动感单车身心调适系统产品特点
  • YK人工智能(三)——万字长文学会torch深度学习
  • vue3中开发一个不定高的虚拟滚动组件
  • SpringBoot + Thymeleaf + Bootstrap5 整合 MyBatis-Plus 和 MySQL 实现动态分类标签渲染教程
  • 郑州时空-TMS运输管理系统 GetDataBase 信息泄露漏洞复现
  • 深信服云桌面系统的终端安全准入设置
  • JavaWeb开发(三)Servlet技术-手动、自动创建Servlet