使用模式集成UML视图

合集下载

UML各种视图介绍、说明、图形

UML各种视图介绍、说明、图形

1、用例图描述角色以及角色与用例之间的连接关系。

说明的是谁要使用系统,以及他们使用该系统可以做些什么。

一个用例图包含了多个模型元素,如系统、参与者和用例,并且显示了这些元素之间的各种关系,如泛化、关联和依赖。

2、类图类图是描述系统中的类,以及各个类之间的关系的静态视图。

能够让我们在正确编写代码以前对系统有一个全面的认识。

类图是一种模型类型,确切的说,是一种静态模型类型。

3、对象图与类图极为相似,它是类图的实例,对象图显示类的多个对象实例,而不是实际的类。

它描述的不是类之间的关系,而是对象之间的关系。

4、活动图描述用例要求所要进行的活动,以及活动间的约束关系,有利于识别并行活动。

能够演示出系统中哪些地方存在功能,以及这些功能和系统中其他组件的功能如何共同满足前面使用用例图建模的商务需求。

5、状态图描述类的对象所有可能的状态,以及事件发生时状态的转移条件。

可以捕获对象、子系统和系统的生命周期。

他们可以告知一个对象可以拥有的状态,并且事件(如消息的接收、时间的流逝、错误、条件变为真等)会怎么随着时间的推移来影响这些状态。

一个状态图应该连接到所有具有清晰的可标识状态和复杂行为的类;该图可以确定类的行为,以及该行为如何根据当前的状态变化,也可以展示哪些事件将会改变类的对象的状态。

状态图是对类图的补充。

6、序列图(顺序图)序列图是用来显示你的参与者如何以一系列顺序的步骤与系统的对象交互的模型。

顺序图可以用来展示对象之间是如何进行交互的。

顺序图将显示的重点放在消息序列上,即强调消息是如何在对象之间被发送和接收的。

7、协作图和序列图相似,显示对象间的动态合作关系。

可以看成是类图和顺序图的交集,协作图建模对象或者角色,以及它们彼此之间是如何通信的。

如果强调时间和顺序,则使用序列图;如果强调上下级关系,则选择协作图;这两种图合称为交互图。

8、构件图(组件图)描述代码构件的物理结构以及各种构建之间的依赖关系。

用来建模软件的组件及其相互之间的关系,这些图由构件标记符和构件之间的关系构成。

UML各种图例齐全—用例图、类图、状态图、包图、协作图、顺序图详细说明画法和功能

UML各种图例齐全—用例图、类图、状态图、包图、协作图、顺序图详细说明画法和功能

UML各种图例面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML的精彩之处.UML中有九种建模的图标,即:∙用例图∙类图∙对象图∙顺序图∙协作图∙状态图∙活动图∙组件图∙配置图本课程中的某些部分包含了这些图的细节信息的页面链接.而且每个部分都有一个小问题,测试一下你对这个部分的理解.为什么UML很重要?为了回答这个问题,我们看看建筑行业.设计师设计出房子.施工人员使用这个设计来建造房子.建筑越复杂,设计师和施工人员之间的交流就越重要.蓝图就成为了这个行业中的设计师和施工人员的必修课.写软件就好像建造建筑物一样.系统越复杂,参与编写与配置软件的人员之间的交流也就越重要.在过去十年里UML就成为分析师,设计师和程序员之间的“建筑蓝图”.现在它已经成为了软件行业的一部分了.UML提供了分析师,设计师和程序员之间在软件设计时的通用语言.UML被应用到面向对象的问题的解决上.想要学习UML必须熟悉面向对象解决问题的根本原则――都是从模型的建造开始的.一个模型model就是根本问题的抽象.域domain就是问题所处的真实世界.模型是由对象objects组成的,它们之间通过相互发送消息messages来相互作用的.记住把一个对象想象成“活着的”.对象有他们知道的事(属性attributes)和他们可以做的事(行为或操作behaviors or operations).对象的属性的值决定了它的状态state.类Classes是对象的“蓝图”.一个类在一个单独的实体中封装了属性(数据)和行为(方法或函数).对象是类的实例instances.用例图用例图Use case diagrams描述了作为一个外部的观察者的视角对系统的印象.强调这个系统是什么而不是这个系统怎么工作.用例图与情节紧紧相关的.情节scenario是指当某个人与系统进行互动时发生的情况.下面是一个医院门诊部的情节.“一个病人打电话给门诊部预约一年一次的身体检查.接待员找出在预约记录本上找出最近的没有预约过的时间,并记上那个时间的预约记录.”用例Use case是为了完成一个工作或者达到一个目的的一系列情节的总和.角色actor是发动与这个工作有关的事件的人或者事情.角色简单的扮演着人或者对象的作用.下面的图是一个门诊部Make Appointment用例.角色是病人.角色与用例的联系是通讯联系communication association(或简称通讯communication)角色是人状的图标,用例是一个椭圆,通讯是连接角色和用例的线.一个用例图是角色,用例,和它们之间的联系的集合.我们已经把Make Appointment作为一个含有四个角色和四个用例的图的一部分.注意一个单独的用例可以有多个角色.用例图在三个领域很有作用.决定特征(需求).当系统已经分析好并且设计成型时,新的用例产生新的需求∙客户通讯.使用用例图很容易表示开发者与客户之间的联系.∙产生测试用例.一个用例的情节可能产生这些情节的一批测试用例.类图类图Class diagram通过显示出系统的类以及这些类之间的关系来表示系统.类图是静态的-它们显示出什么可以产生影响但不会告诉你什么时候产生影响.下面是一个顾客从零售商处预定商品的模型的类图.中心的类是Order.连接它的是购买货物的Customer和Payment.Payment有三种形式:Cash,Check,或者Credit.订单包括OrderDetails(line item),每个这种类都连着Item.UML类的符号是一个被划分成三块的方框:类名,属性,和操作.抽象类的名字,像Payment是斜体的.类之间的关系是连接线.类图有三种关系.关联association-表示两种类的实例间的关系.如果一个类的实例必须要用另一个类的实例才能完成工作时就要用关联.在图中,关联用两个类之间的连线表示.dependencies关系.如果另一个的包B改变可能会导致一个包A改变,则包A依赖包B.包是用一个在上方带有小标签的矩形表示的.包名写在标签上或者在矩形里面.点化线箭头表示依赖对象图Object diagrams用来表示类的实例.他们在解释复杂关系的细小问题时(特别是递归关系时)很有用.这个类图示一个大学的Department可以包括其他很多的Departments.这个对象图示上面类图的实例.用了很多具体的例子.UML中实例名带有下划线.只要意思清楚,类或实例名可以在对象图中被省略.每个类图的矩形对应了一个单独的实例.实例名称中所强调的UML图表.类或实例的名称可能是省略对象图表只要图的意义仍然是明确的.顺序图类图和对象图是静态模型的视图.交互图是动态的.他们描述了对象间的交互作用.顺序图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线.消息用从一个对象的生命线到另一个对象生命线的箭头表示.箭头以时间顺序在图中从上到下排列.协作图协作图也是互动的图表.他们像序列图一样也传递相同的信息,但他们不关心什么时候消息被传递,只关心对象的角色.在序列图中,对象的角色放在上面而消息则是连接线.对象角色矩形上标有类或对象名(或者都有).类名前面有个冒号(:).协作图的每个消息都有一个序列号.顶层消息的数字是1.同一个等级的消息(也就是同一个调用中的消息)有同样的数字前缀,再根据他们出现的顺序增加一个后缀1,2等等.状态图对象拥有行为和状态.对象的状态是由对象当前的行动和条件决定的.状态图statechart diagram显示出了对象可能的状态以及由状态改变而导致的转移.我们的模型例图建立了一个银行的在线登录系统.登录过程包括输入合法的密码和个人账号,再提交给系统验证信息.登录系统可以被划分为四种不重叠的状态:Getting SSN, Getting PIN, Validating, 以及Rejecting.每个状态都有一套完整的转移transitions来决定状态的顺序.状态是用圆角矩形来表示的.转移则是使用带箭头的连线表示.触发转移的事件或者条件写在箭头的旁边.我们的图上有两个自转移.一个是在Getting SSN,另一个则在上Getting PIN.初始状态(黑色圆圈)是开始动作的虚拟开始.结束状态也是动作的虚拟结束.事件或条件触发动作时用(/动作)表示.当进入Validating状态时,对象并不等外部事件触发转移.取而代之,它产生一个动作.动作的结果决定了下一步的状态.活动图活动图activity diagram是一个很特别的流程图.活动图和状态图之间是有关系的.状态图把焦点集中在过程中的对象身上,而活动图则集中在一个单独过程动作流程.活动图告诉了我们活动之间的依赖关系.对我们的例子来说,我们使用如下的过程.“通过ATM来取钱.”这个活动有三个类Customer, ATM和Bank.整个过程从黑色圆圈开始到黑白的同心圆结束.活动用圆角矩形表示.。

UML的逻辑模型图

UML的逻辑模型图

UML的逻辑模型图UML(Unified Modeling Language)是面向对象设计和开发中使用的一种标准化建模语言,其中逻辑模型图是其中的一种类型。

逻辑模型图是用于描述系统功能和行为的非物质结构模型,主要包括用例图、类图、对象图、状态图、活动图和序列图。

本文将重点介绍逻辑模型图中的用例图、类图和对象图三种。

用例图用例图通过描述用户和软件系统之间的交互来表示系统的功能和行为,是面向用户的一个模型。

用例图中包括参与者和用例两个主要元素。

参与者表示使用系统的人、人群或其他系统,用例则表示系统所提供的服务。

参与者与用例通过关系进行连接,分为关联关系、扩展关系、包含关系和泛化关系等。

以一个在线商城为例,客户、管理员、游客可以作为参与者,登录、注册、购物、添加物品等则是对应的用例。

客户可以通过购物车购买物品,可以查看订单状态,而管理员则可以修改物品、审核订单和退货等。

类图类图是用于描述系统内部静态结构的一种模型,它表示系统中的类、接口和它们之间的关系。

类图中包括类、接口、属性、方法等主要元素。

以一个汽车销售系统为例,车辆、销售员和客户都可以作为类。

而车辆包括品牌、型号、颜色、价格等属性,还有加速、制动等方法。

销售员则包括姓名、电话、销售量等属性,还有售车、联系客户等方法。

对象图对象图是用于描述系统中对象间的相对位置和关系的一种模型。

它可以表示对象在特定状态下的关系和属性,有助于表示对象之间的交互、通信和连接。

对象图中包括对象、属性、关系等主要元素。

以一个图书馆系统为例,书架、馆藏书、借阅者都可以作为对象。

借阅者可以借阅馆藏书,而馆藏书则可以属于不同的书架,还有编号、价格、作者等属性。

总结UML的逻辑模型图是面向对象设计和开发中使用的一种标准化建模语言,其中包括用例图、类图和对象图三种。

用例图主要用于描述系统功能和行为,类图用于描述系统内部静态结构,对象图则用于描述系统中对象之间的相对位置和关系。

通过应用这些模型,可以更加深入地了解系统的结构和功能,从而为系统的设计和开发奠定坚实的基础。

UML与软件开发过程的集成

UML与软件开发过程的集成

UML的适用范围
软件需求分析
软件设计
软件测试
软件维护
软件实现 软件项目管理
03 软件开发过程简介
软件开发过程的定义和重要性
定义:软件开发过程是指从需求分析、设计、编码、测试、维护等阶 段,到最终交付给用户的过程。
重要性:软件开发过程是确保软件质量和可靠性的关键,可以减少开 发成本,提高开发效率,降低风险。
UML可以帮助软件开发团队更好地理解和沟通软件系统的需求和设计,提高软件开发的协作 效率。
UML的主要组成部分
类图:描述类的结构、属 性和方法
序列图:描述对象之间的 交互和消息传递
状态图:描述对象的状态 变化和转换
活动图:描述业务流程和 活动之间的控制流
构件图:描述软件系统的 物理结构
部署图:描述软件系统在 硬件环境中的部署和配置
案例一:使用UML进行需求分析和设计
需求分析:使用UML进行需求建模,明确需求范围和功能 设计阶段:使用UML进行系统设计,包括类图、序列图、状态图等 开发阶段:根据UML设计进行代码编写,实现系统功能 测试阶段:使用UML进行系统测试,验证系统是否符合需求 维护阶段:使用UML进行系统维护,包括需求变更、系统升级等
添加项标题
UML是一种标准化的建模语言,可以清晰地表达软件开发过程 中的各种概念和关系,提高软件的可读性和可理解性。
添加项标题
UML可以帮助软件开发人员更好地理解软件开发过程中的各种 概念和关系,提高软件开发的效率和质量。
添加项标题
UML可以帮助软件开发人员更好地理解软件开发过程中的各种 概念和关系,提高软件开发的可维护性和可扩展性。
Hale Waihona Puke 案例二:使用UML进行编码和测试

使用模式集成UML视图(3)

使用模式集成UML视图(3)

使用模式集成UML视图(3)Alexander Egyed 著,davidqql 译(转载自UMLCHINA)变换模式和抽象单独的介于图 4 中的高层视图以及图 5 的低层视图之间的映射不足以确定不匹配。

例如,在图4 可以看到付款是消费者的一部分,然而在图 5 中这种关系更加复杂。

为校验两个图是按相同的方法讨论关系,我们可以使用Rose/Architect概念。

Rose/Architect [Egyed-Kruchten 1999]认为模式分组为三类,并且使用及物关系替换为更简单的模式。

在类图中,及物关系论述那些不直接连结的类之间的关系。

然而一个关系可以通过其他类(例如helper类)存在,它在它们之间形成了一个桥(例如,假设上述例子中付款和消费者并不直接相连,但是它仍然通过helper(帮助者)类事务(transaction)和账目(account)类给出关系)。

这样,如果发现某些公式,它们可以按有效精度导出及物关系,那么,可以按工具形式提供简化和抽象类图方面的自动支持。

这将允许设计者通过删除“帮助者类”从现有的、更细节化的模型中抽象出重要的类,这样将使得它们更进一步描写和分析类之间中间关系,即使这些类分散在整个模型的不同位置(例如,不同的框图,或者在不同的包和名字空间中)。

RA提供这种机制而[Egyed-Kruchten 1999]详细地讨论了这种技术。

当前,RA模型由大概80条抽象规则组成。

例如规则4,论述了一个类被第二个类泛化(继承的反义词)并且父类是第三个类的聚集(部分)(参看图7 )的情形。

这种三类模式现在可以删除中间类来简化并创建一个从第一个类到第三个类的及物关系(在该例子中的一个聚集)。

下面的RA模型讨论这些规则以及必须怎样应用它们来产出有效的结果。

图7 表明我们的低层设计视图(图5 )中的付款给消费者关系案例的RA精炼步骤。

在应用两个规则(分别是规则4和规则17)之后我们得到一个具有两个类以及它们之间依赖关系的简化模式。

UML状态图的并行与合并状态处理方法

UML状态图的并行与合并状态处理方法

UML状态图的并行与合并状态处理方法UML(Unified Modeling Language)是一种用于软件系统建模的标准化语言,其中的状态图是描述系统行为的重要工具。

在状态图中,状态表示系统在特定时间点的行为,而状态之间的转换则表示系统在不同时间点的行为变化。

而对于复杂系统来说,往往需要处理并行和合并的状态,以更准确地描述系统的行为。

本文将探讨UML状态图中并行和合并状态的处理方法。

并行状态是指系统中同时存在的多个状态,这些状态可以独立地进行转换。

在状态图中,可以使用水平的虚线将并行状态进行分隔,以表示这些状态的并行执行。

例如,假设有一个电梯系统,其中包括等待乘客、开门、关门和运行等状态。

这些状态可以并行执行,因为在电梯运行时,乘客可以等待、开门和关门这些操作同时进行。

在状态图中,可以使用并行状态来表示这种并行执行的情况。

在处理并行状态时,可以使用分支(fork)和合并(join)来控制状态的转换。

分支表示系统在某个状态下可以同时转换到多个状态,而合并则表示系统在多个状态同时到达某个状态时进行合并。

在状态图中,分支通常用一条垂直的虚线表示,合并则用一条水平的虚线表示。

例如,假设在电梯系统中,当电梯到达某个楼层时,可以同时进行开门和关门这两个操作。

在状态图中,可以使用分支来表示这个并行状态,即从运行状态分支出两条虚线,分别指向开门状态和关门状态。

而当开门和关门这两个操作都完成后,系统则进入合并状态,即将开门和关门状态合并为一个状态。

除了分支和合并外,还可以使用同步(synchronization)来处理并行状态。

同步表示系统在多个状态同时到达某个状态时,需要等待所有状态都到达后才能进行下一步的转换。

在状态图中,同步通常用一条斜线表示。

例如,在电梯系统中,当电梯到达某个楼层时,需要等待开门和关门这两个操作都完成后才能进入下一步的运行状态。

在状态图中,可以使用同步来表示这个并行状态,即从开门和关门状态分别出发,通过同步线汇合到运行状态。

UML九种视图总结

UML九种视图总结

UML九种视图总结第一篇:UML九种视图总结1.UML关系UML类图中的关系分为四种:泛化关系、依赖关系、关联关系、实现关系;关联关系又可以细化为聚合和组合。

1.1 泛化(Generalization)泛化是父类和子类之间的关系,子类继承父类的所有结构和行为。

在子类中可以增加新的结构和行为,也可以覆写父类的行为。

1.2.依赖(Dependencies)依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的事物,反之不成立。

在你想显示一个事物使用另一个事物时使用,两个元素之间的一种关系,其中一个元素(服务者)的变化将影响另一个元素(客户),或向它(客户)提供所需信息。

它是一种组成不同模型关系的简便方法。

依赖表示两个或多个模型元素之间语义上的关系。

它只将模型元素本身连接起来而不需要用一组实例来表达它的意思。

它表示了这样一种情形,提供者的某些变化会要求或指示依赖关系中客户的变化。

根据这个定义,关联和泛化都是依赖关系,但是它们有更特别的语义,故它们有自己的名字和详细的语义。

我们通常用依赖这个词来指其他的关系。

依赖用一个从客户指向提供者的虚箭头表示,用一个构造型的关键字来区分它的种类,通常情况下,依赖关系体现在某个类的方法使用另一个类作为参数。

1.3.关联(Association)关联是一种结构化的关系,指一种对象和另一种对象有联系。

给定有关联的两个类,可以从一个类的对象得到另一个类的对象。

类与类之间由弱到强关系是: 没关系 > 依赖 > 关联 > 聚合 > 组合。

类和类之间八竿子打不着那就是没关系,这个没啥歧义。

依赖(dependency)可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method 方法中使用。

使用设计模式指导UML类模型的建立

使用设计模式指导UML类模型的建立
支持 以 需求 分 析 开 始 的 软 件 开 发 的全 过 程 , 近年 来 最 重 要 是
目的, UML定义 了下 列 5类, 1 共 0种模 型图 i  ̄ g-圉的 有机 _
结合就 可能分析 与构造 一 十一致的系 统, ML技术 建立系 U 统模型时 首 先 是 描 述需 求 , 立 U es 建 ae图 , 之 根 据 需 求 改

关 系 ; 作 图 与 顺 序 图 相 同 也 是 用 来 描 述 系统 中 对象 之 问 的 合 动 态 协 作 关 系 ; 动 图通 常 用 来 描 述 一 十 用倒 的 处 理 醺程 或 活

是 某 种 交互 流 程 ; 件 圉 和 配 置 圉 是 在 宏 系 的描 述 , 系 统分 析 完 成 时 , 在 也

P t 1  ̄ n rt A㈣ht㈣ ” at ( eae 川 e i “等 一系 列 研 究
战 果 , 明 软 件 工 程 界 对设 计 模 式 的 研 究 已 经 取 得 了重 大 进 表 展 设 计模 式 是 一项 如 此 重 要 而 有 效 的技 术 , 至 于所 有 结 “ 构 良好 的面 向 对 象 软 件 体 系结 构 中 , 包 含 了 许 多 这 样 的 模 都 式 无论 是 在 作 分 析 、 计 、 码 , 是 做 项 目管 理 都 应 查 找 任 设 编 辽 何 对 休 有 帮 助 和 可利 用 的模 式 - 埘 模式 应 用 的 优势 在 于 , 强 它 能 够 使生 成 的 系统 结 构 更 加 精 、 洁 和易 于理 解 t 程 度远 j简 其 大 于 没有 使 用 模 式 的 体 系 结 构 尽 管 使 用 设 计 摸 式对 建 立 个 强 健 的 、 复 甩 的 软 件 系 可 统 有 如 此 重 要 的 作 用 , 设 计 模 式 目前 更 多 地 被 ^ 们 当作 经 但 验 和 技 术 在 使 用 . 然 t 是 够 的- 们应 该 将 其 提 高 到 系 显 这 我 统 设 计 的 高度 来 对 待 它- 于 UM 【在 从 分 析 到设 计 的 过 渡 鉴 _ 上 缺 乏平 滑 性 ,可 以 说 从 US A E 到类 圉存 在 着 断 层 ) ( EC S - 本文 提 出将 设 计 模 式 作 为 UI L中 建 立 类 模 型 的 一 个基 v I 奉 手段 . 且 在 后 面 的章 节 中 , 用 建 立 一 十应 用程 序框 架的 并 将 例 子 来说 明这 种 方 法 的 可 行 性 和 有 效 性 -
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用模式集成UML视图2007-8-10 作者:编辑:张胜利点击进入论坛Alexander Egyed 著,davidqql 译(转载自UMLCHINA)摘要模式在系统组合(合成)期间对养成重用可重复设计和体系结构配置的习惯很重要。

本论文研究关于模式的知识,它也可用于系统分析检验系统模型的完整性。

为了支持自动分析过程,该工作引入一个视图集成框架。

自从每个视图(例如,框图)增加一个额外针对模型的软件系统观点,来自一个视图的信息可能用于验证其它视图的完整性。

这种形式的集成要求对视图表明什么以及它们可以共享(或约束)什么信息有更深的理解。

因此关于模式在结构和行为上的知识,也是一个用于视图集成自动化的有价值的来源。

介绍为支持软件产品开发,我们频繁使用通用软件开发模型(和工具),例如统一建模语言(UML)。

然而,通常意义的软件开发和特定的软件设计(正是我们工作的主要焦点)要求不仅仅是大多数通用模型所能提供的内容。

体系构造是关于:1) 对实际问题充分建模2) 解决模型问题并3) 在现实世界中解释模型方案这样做的主要重点被置于体系结构的视图(例如框图)内和之间不匹配的鉴别与调和上。

我们经常发现这方面的情况,分析和(体系结构的)说明的解释在大多数通用语言中是次重点的。

我们构造体系不仅仅是因为我们想建立(创作),而且因为我们要理解。

这样,体系构造有许多分析和校验产品模型的概念完整性、一致性和彻底性的工作要完成。

已完全成为事实上OO软件开发标准的UML的出现,在这个问题上也没有任何例外。

本工作阐述在UML视图中体系结构不匹配的原因,以及说明模式和集成技术怎么能够以更自动化的方式应用于识别并解决他们。

为了做到这一点,本工作讨论视图集成框架,它的主要活动――映射(Mapping)、变换(Transformation)和分化(Differentiation)。

本论文将研究模式的角色,而不是集中于大量的集成技术(它们支持上述活动)。

这样,我们将研究模式的知识怎样有助于保证软件系统模型一致性。

通过那样,我们按以往很少使用的方式利用模式:我们用模式用作系统分析,而不是将模式用作构建材料作为系统成分。

视图和模型在软件开发中,我们利用模型和视图处理软件系统的复杂性。

在这里,模型是指视图的集合或者视图可以看作模型的一个方面(或视点)。

IEEE标准(草案)1471[AT&T1993]将视图归结于“提出一个或多个系统利益关联者(Stakeholder)的利害关系”。

对于利益关联者,我们定义为分享系统注意或兴趣个体或组(例如,开发者,用户,消费者等等)。

应用于我们的语境,视图是模型的片段,它也要细小到我们能够理解,但是也包含关于特定关系的关联信息。

在UML中,视图本质上是图形的,且往往通过框图来实现。

视图(例如类或序列图)服务于下列意图:抽象并简化模型使得不同的利益关联者协调工作为不同解释进行补充(不同观众/利益相关者)提取关于特定关联的相关信息因此,将会用到什么类型的视图以及什么时候用到它们是强烈依赖于哪个人正在使用和需要完成的相关任务。

然而,视图并不是软件开发的银弹,因为它们具体表达基本问题;它们内部及它们之间表现出对等数量的建模元素冗余。

要给出一个简单例子,考虑我们有个设计(例如按照UML类图的形式)的软件开发案例和产品实现(例如,C++代码)。

类图和代码表述不同的视图,用不同的方法表达相同或类似的信息。

虽然,代码可以从设计中自动产生,这种逼近是有限的,还必须多次加入一些信息。

更糟糕的是,现在这些冗余的信息片断必须保持一致――后者大多是手工活动。

这样,无论什么时候设计变更了,代码就会变得不一致(反之亦然),我们要应用一些视图调和活动找到产生的不一致并一再保证模型概念的完整性。

视图不匹配和冗余既然视图是我们处理复杂性唯一有效手段,我们不能指望用某些较少冗余的事物来替代它们。

我们需要视图在任何给定的时间对软件开发者不得不处理的信息总数进行分解。

“这不是带来复杂性的细节数量本身,而是我们不得不同时了解的细节的数量。

”[Siegfried 1996] 然而,冗余性是一个必需的不幸。

这暗示我们需要某种鉴别和解决视图之间不匹配的自动化活动的方法。

这样,我们所需要就是一些集成和分析视图的框架形体。

有趣的是,视图不匹配问题可能的逼近方法是基于它特有的问题――冗余性。

我们利用一套视图之间的冗余性意味着一个视图包含关于其它视图并可用作约束该视图的信息。

这样,我们使用冗余信息来检验视图之间的一致性和完整性。

例如,如果我们使用一些体系结构模式的形态来构造系统(例如,分层风格),那么设计必须反映体系结构对立的约束。

这意味着如果体系结构定义了三层结构,那么体系结构隐含地定义了处理中第一层不使用第二层而与第三层直接对话是不允许的。

如果后来系统使用UML设计(例如,使用类和序列图),那么设计元素之内的调用依赖要求与上述的体系结构约束一致。

我们将在后面说明一个例子。

UML视图描述vs 集成启用视图集成来确定和调和视图要求两个层次的集成――符号集成和语义集成。

对于符号集成,意思是模型需要完整表达视图的能力。

语义集成通过定义什么信息可以交换以及怎样交换作更进一步精炼。

只有在什么和怎样在确立之后,不一致性才可以确定。

统一建模语言(UML),像其他通用软件系统开发模型一样,只是不能很满足上述语义集成。

UML提供一个模型用于表达不同框图的视图来处理类、对象、活动、状态、包及其它(参看图1 )。

然而,UML 不擅长集成他们。

在UML视图之间的关联和依赖关系很少被捕获。

如果后者没有完成,模型仅仅是松散耦合的或完全无关联的视图集。

虽然UML及其元模型在细节上定义了单个视图的符号和语义特征,视图内关联的获取仍然是不够的(在视图之间只存在一些微弱形式的依赖关系,例如类和对象)。

图1 也表明问题的另一个方面――那就是扩展UML以表达新的和外部概念(例如,风格和模式)。

例如,怎样才能在UML中使用更高级的模式例如分层的体系结构模式【[1]】或代理设计模式?在UML中,我们需要再次区分仅仅表述模式和完整集成它们。

图1 UML中表示法vs. 集成视图集成框架视图集成的主要的障碍是缺乏完好定义的(工程的)模型基础。

视图经常使用迥然不同的表示信息方法,而这使得确定它们在哪里和怎样出现重叠非常困难。

这样,组合和比较视图的任务经常是手工的而且潜伏着错误的。

集成框架的目标是要补偿鉴别和解决体系结构不匹配自动化辅助手段的不足。

如前面简短的叙述,这样做的时候,我们的框架需要处理什么信息和怎样进行交换。

我们在那里写到什么信息可被交换以及它怎么能交换的判断需求。

在我们的视图集成框架中,我们提到映射和变换这两个活动。

我们也说只有在这些活动定义之后,才能够尝试鉴别不一致性。

后者我们称之为分化(参看图2 )。

图2 在高层次式样上描写我们的视图集成框架。

在那里,系统模型用于表达软件系统的知识基础。

软件开发者使用视图增加新的数据到系统模型并且复审现有数据(视图综合)。

对于UML,系统模型可能被看作通过UML设计工具(例如Rational Rose)完成的UML模型和视图综合。

系统模型和视图综合两者交互影响就是视图分析。

一旦加入新的信息,它就可以针对系统模型进行验证以保证其概念完整性。

图2 表示视图分析可以怎样进一步细分为其上述三个主要活动:图2 视图集成活动映射:通过使用命名字典、跟踪和跟踪仿真(例如相同物理类和方法的使用)以及某种关联/模式形式(例如公共接口)来确定相关的信息片。

变换:在视图中操作模型元素以便它们(或它们的片段)可以在其他视图中共享(或在系统模型自身中表述)。

例如,我们可以使用抽象技术泛化一个详细的框图,我们可使用视图转化在不同类型的视图之间交换信息,或者我们可以按不同的风格重新排列模型元素(或片段)产生新的视角(例如拼结和分割)。

分化:详细研究系统模型鉴别系统模型中(潜在的)不匹配。

(潜在的)不匹配按规则和约束的形式讨论。

此外,不匹配解决规则可与将要怎样解决它们可选方法的不匹配标识规则相关联。

分化是强依赖于变换和映射的。

然而,必须注明的是,那些活动不是相互正交的。

显然地,我们只有在知道模型元素的正确映射时才能做出有用的变换。

这种依赖关系反之也是成立的。

通过视图变换导出的信息可以澄清许多映射中的二义性。

这样,一个视图可以用于澄清其它视图中的二义性。

此外,如图2 所示,视图集成不只局限于模式,然而,模式对视图集成构成了非常重要的基础。

我们将在后续章节中讨论这种面向模式的视图集成方向。

其他非模式相关的视图集成方向在[Egyed1999a]和[Egyed1999b]中论述。

上述框架通常在UML之外也适用。

产品订货系统案例我们将使用一个简单的产品订货系统贯穿全文进行指导,该系统被分成两个主要的子系统――订单获取子系统和订单处理子系统。

第一个子系统通过销售代表从消费者获取订单和付款信息。

后一个子系统获取仓库管理员对产品订单队列的处理。

产品订货系统合成两个COTS(Commercial off the Shelf,已下架的商品化)产品:存货系统处理产品存货,而订单仓库作为数据库(后者既用于产品订货系统又用于存货系统)。

表格1 表示我们的系统体系结构使用分层模式(或分层风格)进行设计。

该体系结构模式将在后面由设计模式和其他设计特征补足。

表格1 讨论产品订货系统的分层体系结构模式模式怎样有助于视图集成?在文章展开论述时,我们将揭示关于产品订货系统更多的细节。

虽然,由于篇幅的限制,我们既不能在此表述整个系统,也不能阐述所有的集成技术。

相反,如前面提到的,我们将集中于视图集成时模式承担的角色上。

对应于图2 中简述的三个集成活动,模式支持如下活动(下节将说明例子):映射模式支持不同抽象层次的视图之间的映射(交叉引用)。

例如,一个高层框图指出使用一个已知后来在低层次框图中实现的模式。

这样,这类模式存在于低层次框图的知识以及该模式粗略了解(如在[Gamma et al. 1994]和[Buschman et al 1996]中定义)的知识有助于在低层框图中自动鉴别。

模式也支持不同类型视图的映射。

例如,模式描述经常指定其结构和它们的动态行为。

那么,可以在我们的模型中使用这些知识来交叉引用结构化的和动态的信息。

变换模式应用于变换的方法与它们在映射中的用途类似。

对于变换,我们可以把它们用作抽象和转化。

对于抽象,我们意指简化视图的处理。

例如,如果我们想知道高层视图和低层视图是否一致,那么我们需要精炼高层视图或者抽象低层视图以使直接比较成为可能。

前者不能自动进行,而后者可以。

为了抽象视图,需要确定相关的片段,然后,它们被更加简单的事物替换。

对此,模式是完美的原始资料,因为它们提供哪些片段属于一起的知识。

相关文档
最新文档