下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 07

07.pdf

07

Jesse
2010-09-26 0人阅读 举报 0 0 暂无简介

简介:本文档为《07pdf》,可适用于IT/计算机领域

返回总目录返回总目录返回总目录返回总目录目目目目录录录录第第第第章章章章UML的扩展的扩展的扩展的扩展UML的架构UML的核心语义加标签值和性质约束版类小结第章UML的扩展为避免增加UML语言整体的复杂性UML并没有吸收所有面向对象的建模技术和机制而是给UML设计了扩展机制使它很容易适应某些特定的方法机构或用户通过扩展机制用户可以定义和使用自己的元素也就是说CASE工具必须同时支持语言原有的元素和用户定义的扩展扩展的基础是UML的元素然后给这些元素的一些变形加上新的语义新的语义可以有三种形式重新定义增加新的或者对某种元素的使用增加一些限制UML有三种扩展其核心的机制这些机制也定义了一些标准扩展以及某些元素的变形本章将介绍所有标准的UML扩展并说明用户自定义机制将如何扩展UMLUML的三种扩展机制是加标签值性质约束和版类z加标签值是附属于UML元素的性质类中的操作所附加的前置条件和后置条件是一种标准的加标签值z约束是UML中限制一种或多个元素语义的规则如图约束可以附加在类或对象上并且经常附加在关系上约束参与关系的类或对象<<Stereotype>>Name(ConstraintString,Keyword=Value,…)图约束字符串和关键字值对z版类是最复杂的扩展机制如图它是一种附加在已有模型元素的语义如果版类附加于某种元素则覆盖该元素的语义该元素就成为一种新的元素典型的版类如为类定义的元类metaclass为包之间的相关关系定义的导入import等在这种情形中版类在原来的元素类或相关关系中增加了新的或另外的语义<<Stereotype>>Name(Properties)图版类有许多原因需要对UML进行扩展例如如果所使用的方法可能会有些概念UML不能直接支持的但是扩展UML就能够表达或者应用领域或机构可能有些重要的普通概念需要定义在建模语言中又或者建模人员想通过扩展UML来定义一些更为精确和清晰的模型UML的架构UML的定义是在一个建模概念框架下定义UML的如图所示由以下四个不同的抽象层次或级别组成z元元模型层由最基本的元素组成它们是UML的基础事物的概念表示任何可以被定义的事物这一抽象级是用来形式化概念的表示并为指定元模型定义语言z元模型层包括所有组成UML的元素其中有来自面向对象的概念和面向组件的范例这一层的每个概念都是元元模型概念事物的实例这一抽象层是用来形式化范例概念并为指定模式定义语言的z模型层由UML模型组成这一层为问题解决方案或系统建模这一级的每个概念都是元模型层的概念的实例这一抽象层是用来形式化概念并根据一给定个体定义表达沟通的语言这一层的模型通常叫做类或类型模型z用户模型层由UML模型的例子组成这一级别的每个实例都是模型层和元模型层概念的实例这一抽象级别用来根据特定的个体形式化特定的表达这一抽象级的模型通常叫做对象或实例模型在这一框架内用元的概念表示在一组非元概念以及它们的元概念之间的关系元概念不是模型的一个性质而是模型在与其它模型相关时所扮演的角色元元模型与元模型之间的关系与元模型与模型之间的关系是一样的元元模型元元模型元元模型元元模型元模型元模型元模型元模型模型模型模型模型用户模型用户模型用户模型用户模型<<实例>><<实例>><<实例>><<实例>>图建模的概念框架UML的核心语义要实现用户自定义扩展必须熟悉UML的语义至少是它基本的核心语义UML扩展机制的形式语法和语义都定义得非常仔细可以扩展UML自身UML参考手册的表示指南定义了语法元模型定义了语义元模型描述模型而UML参考手册中的元模型则描述了UML并且参考手册中的元模型用的也是UML的表示方法也就是说UML本身也是用UML模型描述的这一部分将简单地描述UML参考手册中给出的形式语义在定义自己的扩展之前再次建议大家了解一下基本的UML核心语义这将有助于对UML底层模型的理解元素是UML大多数成分的抽象基类它是一个基础在此之上可以附加一些其它机制元素被专有化为模型元素视图元素系统和模型模型元素是被建模系统的一个抽象如类消息节点事件等视图元素是一个映射单个模型元素或一组模型元素的文字或图形映射视图元素是文字或图形符号如矩形代表类这就是说模型元素是概念而视图元素则是用来构建模型图的符号视图元素也被专有化为图它们是用例图组件图类图展开图状态图活动图协作图以及对象图所有元素都可以有名字UML是用UML来描述的因此UML中的所有概念都被定义成类例如相关的定义是一个类具有一些描述一个相关是什么的属性包拥有元素并且引用它们如图所示包是一种组合机制可以拥有或引用元素或其它包包中的元素可以有多种如模型元素视图元素模型和系统因此包是UML是最一般的组合机制模型元素被专有化后对系统建模非常有用大多数元素都有相对应的视图元素来表示它们但是某些模型元素就没有相应的表达元素如模型元素的行为就无法在模型中可视化地描述图显示了如何把模型元素专有化为UML所使用的建模概念模型元素被专有化为以下子类z类型一组具有相同的操作抽象属性和关系以及语义的实例的一个描述类型被专有化为原始类型类和用例类被专有化为活动类信号组件和节点所有类型子类都有一个相应的视图元素z实例一种类型所描述的一个单个成员类的实例类型的子类是对象对象与实例类似但通常只是类的实例z行为实例行为的实例z笔记附加在一个元素或一组元素的一条注释笔记没有语义模型元素的笔记在相应的视图元素z值类型定义域里的一个元素类型定义域是某个类型的定义域如属于整数的类型定义域图图图图模型元素模型元素模型元素模型元素视图视图视图视图*用例图用例图用例图用例图类图类图类图类图状态图状态图状态图状态图序列图序列图序列图序列图对象图对象图对象图对象图*组件图组件图组件图组件图展开图展开图展开图展开图活动图活动图活动图活动图协作图协作图协作图协作图名名名名映射元素元素元素元素包包包包***引用**拥有*图一个包拥有和或引用元素元素可以是模型元素或视图元素或者其它元素如系统和模型视图元素是模型元素的映射视图元素映射一个或一组模型元素视图元素还被专有化为九种不同的图这几种图是一组模型元素的映射元素元素元素元素模型元素模型元素模型元素模型元素视图元素视图元素视图元素视图元素系统系统系统系统模型模型模型模型类类类类结点结点结点结点原始类原始类原始类原始类类型类型类型类型活动类活动类活动类活动类信号信号信号信号组件组件组件组件结点结点结点结点实例实例实例实例结点结点结点结点版类版类版类版类加标签值加标签值加标签值加标签值约束约束约束约束参数参数参数参数关联角色关联角色关联角色关联角色协作协作协作协作行为行为行为行为成员成员成员成员行为实例行为实例行为实例行为实例值值值值消息消息消息消息行动行动行动行动状态向量状态向量状态向量状态向量事件事件事件事件链接角色链接角色链接角色链接角色关系关系关系关系通用化通用化通用化通用化相关相关相关相关关联关联关联关联链链链链接接接接转换转换转换转换图抽象类元素被专有化为模型元素视图元素系统和模型z版类建模元素的一种类型扩展UML的语义版类必须以UML中已经定义的元素为基础可以扩展语义但不能扩展已存在元素的结构UML预定义了一些版类其它是用户定义的版类有相应的视图元素版类名z关系模型元素之间的一种语义连接关系被专有化为通用化相关性关联转移和链接通用化是更通用元素和更专有元素之间的一种关系专有元素与通用元素完全一致并且还包含其它信息在所有使用更通用元素的实例的场合都可以使用更专有化元素的实例相关性是两个模型元素之间的一种关系对独立的模型元素的改变将影响相关模型元素关联是描述一组链接的一种关系链接是对象组之间的一种语义连接转移是两个状态之间的一种关系表示当劳动某件指定的事件发生并且某些指定的条件满足时处在第一种状态的对象将完成某些指定的动作并进入第二种状态对于每种关系都有一个对应的视图元素z加标签值把性质明确定义为一个名值对加标签值中把名称为标签UML预定义了一些标签相应的视图元素是一个性质表在UML中性质普遍用于与元素有关的任意值包括类的属性关联和加标签值z成员类型或类的一部分表示一个属性或操作模型元素模型元素模型元素模型元素版类版类版类版类元素元素元素元素**分类约束约束约束约束*相关*加标签值加标签值加标签值加标签值**特征*标签集合*图元素可以有个或个版类多个约束以及多个加标签值加标签值可以是一组加标签值版类约束和加标签值都是模型元素也就是说它们都是元素z约束一种语义条件或限制UML预定义了一些约束约束也有对应的视图元素z消息对象之间的一种通信传递有关将要进行的活动的信息通常认为接收消息是一个事件不同的消息有相对应的视图元素z参数变量的规格说明可以被修改传递或返回参数可能包含名类型和指针在操作消息和事件中使用参数z动作是对信号或操作的调用代表一个计算或算法过程z关联角色类型或类在关联中所扮演的角色有对应的视图元素z状态顶点转移的源或目标z协作支持一组交互的环境交互是一个规格说明它的组成是一组对象为完成某个特定任务而在某个特定环境下的一组消息交换z事件时间或空间的一个显著发生事件有对应的视图元素z行为行为是一个可见的作用及其结果z链接角色关联角色的实例所有元素都可能与其它元素有相关关系所有元素的子类包括子类版类约束和加标签值等也都将继承这种相关关系元素具有个或一个版类个或多个加标签值对约束有一种派生相关关系元素和约束之间的派生相关关系的重数在元素一端为在约束端可以是个以上见图并不是所有的元素都可以被专有化或通用化只有可通用化的元素才可以被专有化或通用化可通用化的元素包括版类包和类型可通用化元素的子类也是可通用化的类型有原始类型类和用例等子类类有活动类信号组件和节点等子类因此这些类都是被专有化或通用化的注意版类可以被专有化见图关系关系关系关系相关相关相关相关通用化通用化通用化通用化版类版类版类版类包包包包类型类型类型类型元素元素元素元素**可通用化元素可通用化元素可通用化元素可通用化元素****目标源相关关系通用化关系超类*子类*图UML中的两种关系之一是相关性和通用化相关关系可以连接两种模型元素但通用化关系只能连接可通用化元素它们是版类包和类型以及它们的子类其它关系是关联转移和链接关联只能连接类型链接只能连接类型的实例转移只能连接状态顶点有时对关联进行专有化和通用化非常有用但UML不允许这样因为关联不是一个可通用化的元素但两个以上关联之间的约束的子集可以替代这个作用如果给一个模型元素附加了加标签值版类或约束等则该模型元素的专有化将具有相同的加标签值版类或约束如果一个通用化有一个版类则对该通用化的专有化就不能再有其它版类了元素只能有个或个版类这其中包括所有继承的版类核心语义小结元素是UML大多数万分的抽象基本类它是许多机制应用的基础元素被专有化为模型元素视图元素系统和模型模型元素是被建模系统的一个抽象一些重要的模型元素包括类型关系版类约束加标签值状态顶点事件和消息类型和关系模型元素都被专有化到其它子类视图元素是模型的一个文字或图形的映射一些单个模型元素有对应的视图元素符号如类节点状态和关联也有视图元素是与一组模型元素对应的称为图UML中的几种图是用例图组件图类图展开图状态图活动图序列图协作图和对象图元素可以组合到包内一个包也可以包含其它包版类包和类型原始类型类活动类信号组件节点和用例都是可通用化元素也就是说可以对它们进行专有化和通用化版类约束和加标签值是用来扩展UML的机制UML预定义了一些扩展机制用来修改或扩展已有元素一种元素可以有个或个版类多个约束和加标签值如果把一个加标签值版类或约束附加到某个元素上则该的专有化也将具有相同的加标签值版类或约束如果一个通用化有版类则对它的专有化将不能再有其它版类加标签值和性质性质通常用于表示元素的值增加模型元素的有关信息机器和人都可以使用人可以用它来增加模型的管理信息例如可以在给模型加上最后一次修改的时间等机器通过这些信息可以某种方式处理模型例如模型中的性质可以是代码生成的参数告诉代码生成器生成何种类型的代码注意在最后提交的系统中通常没有性质因为它们只是有关模型以及模型内元素的信息最终系统并不处理它们加标签值把性质明确地定义成一个名值对其中把名称为标签每个标签代表一种性质并且能够应用于一个以上的元素标签和值都用字符串表示性质的表示如下{tag=value}or{tag=va,tag=val}or{tag}性质都是用大括号括起来一个标签和一个值对应如果标签是个布尔标记此时如果省略了值则默认取真除布尔类型外的其它类型的标签都必须明确写出值值没有语法限制可以用任何没有意义的符号表示常常是个字符串标签名定义了一个上下文给出加标签值的意义例如{abstract}{status=“underconstruction”,systemanalyst=“BobJason”}性质包括加标签值可以出现在图中也可以存放在单独的文档中在图中性质由大括号括起来离它们被定义的元素很近一些CASE工具有个性质窗口可以显示某个元素的所有性质以及它们的值UML为元素模型元素实例操作属性和组件预定义了一些加标签值标准加标签值另外使用UML的工具或方法可以添加自己的加标签值元素的加标签值文献是给元素实例进行建档的标签值只是个字符串通常这个加标签值是单独显示的而不是与元素放在一起例如在某些工具中该值是显示在一个性质或文献窗口内的类InsuranceContract附加的文献标签的值可以是对该类意图的描述Thisclassservesasacontractbetweenthecustomer(policyholder)andtheinsurer(insurancecompany)类型实例操作和属性操作和属性的加标签值有九种加标签值可应用于类型实例操作和属性它们是z不变性invariantz后置条件postconditionz前置preconditionz责任responsibilityz抽象abstractz持久性persistencez语义semanticsz空间spacesemanticsz时间语义timesemannticsz不变性应用于类型它指定了类型实例在整个生命周期中必须保持的一种性质这个性质通常对于该类型实例必须有效的一种条件有些语言如Eiffel都嵌入对不变性支持并在最终的代码中直接实现不解释该值的语法通常也不在图中显示类Car中的颜色属性附加的不变性加标签值的值可以是Thevalueoftheattributecolormaynotchangeduringthelifetimeoftheobject更形式化的不变性标签可以是CarSpeed>=(meaningthatthespeedmayneverbenegative)z后置条件应用于操作它是在操作结束后必须为真的一个条件该值也没有解释并且通常也不显示在图中附加在操作类listOfElements:list的后置条件加标签值可以是Thenumberofelementsinlistmustbegreaterthanone通常把不变性后置条件和前置条件合起来使用实现根据约定合约编程类型实现符保证在系统执行的整个过程中满足不变性条件操作的调用方保证在调用该操作之前前置条件为真操作实现子保证操作执行完后满足后置条件为真当出现任何破坏这些约定的情况时系统可能发出一个意外表明系统发生内部错误z责任标签指定了类型的责任它的值是一个字符串表示了对其它元素的义务责任通常是用对其它元素的义务来描述的z抽象是一个加标签值表明某个类不能有任何对象如图所示该类是用来继承和专有化成其它具体的类的这个值是Boolean类型其默认值为真通常这个加标签值都显示在类图中在类名框内类名的下面CarVehicleMotorcycle图Vehicle是一个抽象类它没有对象只有Car和Motorcycle类的对象存在z持久性应用于类型把类型定义可持久的说明该类的对象可以存储在数据库或文件中并且在程序的不同执行过程之间该对象可以保持它的值或状态z语义空间时间语义应用于类型和操作语义是类型或操作的意义的规格说明空间语义是相关类型或操作的空间复杂性意义的规格说明时间语义是时间复杂性意义的规格说明这些加标签值只在说明UML时才使用不再详细讨论模型元素和组件的加标签值位置是应用于模型元素和组件的加标签值它说明某个模型元素位于哪个组件如哪个源代码文件或在哪个结点如哪个计算机上位置的值是组件或结点自定义加标签值加标签值由名标签和值某种类型组成可以连接到任何元素上用来为这些元素加上一些新的语义通常用户自定义的加标签值是用来增加有关项目进展或状态的管理信息或者是模型未来的转换信息加标签值是有关模型和模型元素的附加信息在最终系统中是不可见的可以按照以下步骤定义加标签值研究要定义的加标签值的意图定义它要附加在其上的元素为该加标签值起一个恰当的名字定义该值的类型弄清楚谁将使用该标签值是人还是机器并根据对象的不同给出合适的定义在文档中给出一个以上使用该加标签值的例子两个自定义的加标签值的例子是加在一个类里面的某个操作上的Standardalgorithm和加在任何元素上的Author前者指明该操作使用何种算法后者指明该元素的作者如{Standardalgorithm=“Quicksort”}{Author=“PeterSmith”}约束约束是元素的一种语义条件或限制它应用于元素一条约束应用于一个种类的元素因此一条约束可能涉及许多元素但它们都必须是同一类元素约束是显示在大括号内{constrraint}可以直接放在图中或者独立出来有些CASE工具中在一个单独的窗口内显示约束如果约束应用于一种具有相应视图元素的模型元素如类它的视图元素是一个矩形它就可以出现在它所约束元素的视图元素的旁边如果一条约束涉及同一种类的多个元素则要用虚线把所有受约束的元素框起来并把该约束显示在旁边如或约束在UML中有种标准约束它们是关联全局局部参数自我完整不相交不完整覆盖或有序投票广播用户也可以自定义约束对通用化的约束完整不相交不完整和覆盖是四种应用于通用化的约束它们只能应用于子类这些约束都是语义的显示在共享的空矩形内的大括号里用逗号隔开如果在该通用化中有几条路径同一个空矩形如果没有共享则用一条虚线通过所有继承线并在虚线的旁边显示约束如图所示{constraint,constraint}ClassAClassBClassCClassDClassAClassBClassCClassD{constraint,constraint}图对通用化的约束的两种表示方示覆盖继承是指在继承关系中任何进一步继承的子类可以继承一个以上的子类换言之在继承树上的同一个超类可以有多继承如图AmphibianVehicleCarMotorcycle{overlapping}图覆盖继承不相交继承是默认的继承方式与覆盖继承相反此时不允许从同一超类继承而来的子类专有化到相同的子类完整通用化约束中指定了一个继承关系中的所有子类然后就不允许增加新的子类不完整通用化约束与此相反以后可以增加新子类不完整通用化是默认值对关联的约束对关联有两种默认的约束隐含和或隐含约束表明关联是概念的而不是物理的隐含的关联联结类但对象之间并没有关系隐含关联中的对象之间也没有物理连接而是通过其它一些机制产生联系比如对象或查询对象的全局名或约束指定一组关联对它们的链接有约束或约束指定一种类的一个对象只连接或链接到一个关联类对象关联的另一部分例如一个人可以有多个个或多个保险合同一个公司也可以有多个保险合同如图所示个人保险公司保险合同公司{or}****图个人和公司可以有个或多个保险合同一个合同可以由一个或多个人或一个或多个公司拥有如果没有或关联一个或多个个人以及一个或多个公司可以拥有保险合同如果在个人或公司一连改变了重数如个或多个这将影响语义允许一个保险合同不属于任何人个人保险合同**{ordered}图约束{ordered}指定链接之间有明确的顺序顺序可能显示在大括号内例如{orderedbyincreasingtime}对关联角色的约束有序约束是唯一对关联角色的标准约束一个有序的关联指定关联里的链接之间有一个隐含的顺序例如在屏幕上的窗口有一个隐含的顺序因此屏幕和窗口之间的关联是有序的这一约束显示在关联附近的大括号内所示有序或无序约束都可以明确地显示出来但对关联来说默认的是无序无需指明对消息链接角色和对象的约束有九个约束应用于交互可以用顺序图从时间的角度来看交互也可以用协作图从空间的角度来看交互或者还可以用活动图从工作的角度来看交互在所有类型的交互图中顺序图协作图和活动图消息对象和链接是最重要的概念对象是通过链接连接起来的而不是关联每个链接都有两个链接角色是关联角色的实例当对象进行交互时它们扮演角色链接的角色并且通过链接相互发送消息应用于这些重要概念的约束是全局的局部的参数自我投票广播创建注销和临时z全局的应用于一个链接角色指定相应的实例是可见的因为它是一个全局量通过系统都知道的全局名就可以得到该实例z局部的应用于一个链接角色指定相应的实例是可见的因为它是操作的局部变量z参数应用于一个链接角色指定相应的实例是可见的因为它是某个操作的参数z自我应用于一个链接角色指定对象可以向它自己发送消息z投票应用于消息限制一组返回的消息投票约束指定从这组消息中以大多数投票的方式选出返回的值z广播应用于消息指定不能以某种顺序发出该消息z创建影响对象生命将在交互的执行中创建对象z注销影响对象生命周期对象将在一个交互的执行中被注销z临时是影响对象生命周期的一个约束临时的对象的创建和注销是在一个操作的同一执行中它是创建和注销约束的结合自定义约束正像前面提到的允许用户自定义约束约束通过条件或对语义的限制来影响元素的语义因此当自定义约束时一定要仔细评估它产生的影响最好在文档中给出如何使用自定义约束的例子所以自定义约束需要做以下工作z描述要约束的元素z对该元素的语义影响z给出一个或多个使用该约束的例子z说明如何实现该约束版类版类是把UML中已经定义的元素的语义专有化UML中元素具有通用的语义用版类可以对它们进行专有化和扩展版类不是给元素增加新的属性或约束而是直接在已有元素中增加新的语义这种机制可以看作是对已有元素进行某种专有化注意版类可能扩展已有元素的语义而不是元素的结构版类是可通用化的元素也就是说它们可以被专有化或通用化如果一个可通用化元素类型包或版类有一个版类并且被专有化则版类也被专有化继承这和加标签值和约束是一样的UML中预定义了种以上的版类和加标签值及约束一样也可以自定义版类版类通常有相应的视图元素是文字串<<版类名>>该视图元素通常显示在它所基于的元素的上方或前方版类通常应用于类类型关系结点组件和操作版类可以有一个图形图标是可选的图形图标可以是彩色的图标和版类可以有几种方法结合第一种是把图标显示在版类化的元素内如果一个类被版类化就可以把图标放在该类视图元素的类名框内或者可以显示版类名和图标或者只显示图标如图MainWindow<<GUI>>MainWindow<<GUI>>WindowWindowWindowMainWindowWindowMainWindow图版类MainWindow类的几种不同的表示方法该类的版类是<<GUI>>具有一个图形窗口图标作为它的可视化表示版类对类型的应用角色角色是一种版类化的类型代表一个抽象位于被建模系统的外部指定了外部角色如果与系统交互以及它们需要系统的什么功能角色版类是在用例建模中实现的因为类是类型的子类因此版类角色通常也被应用于类因为在一个用例中角色是一个类并且可以具有属性操作以及与其它类之间的关系但是角色的版类通常是<<actor>>给出该类的特定语义角色版类有一个小棍人图标如图<<Actor>>Customer<<Actor>>CustomerCustomer图版类角色的不同表达方式接口接口是版类化的类型公开类型类结点组件等的行为当一个包组件或类等有接口连接时就说它实现或支持指定的接口因为它支持接口中定义的行为接口是用版类<<interface>>化的类描述的通常只由抽象的操作组成接口可以由任何数量的组件包或类来实现如图所示元类元类是一种类它的实例是类因此元类是类的类当你需要在运行时定义类时元类非常有用元类是一种版类化的类型一般应用于类类是类型的子类因此版类元类也可以应用于类元类可以应用于所有类型例如类型的子类如类原始类型和用例元类没有图标只用<<Metaclass>>标记Smalltalk已经实现的元类displayjavaupdatethreadjavaRunableClassAClassAClassARunableStorable图连接到类和一个组件的接口动力类型当对一个通用进行专有化时需要一个区别子来指定继承的基础比如在一个通用结构中超类Purchase可能有子类PusrchaseOnCreditCashPurchase和HirePurchase区别子可以是买单因为它区别了子类的实例区别子是用于区分实例的它属于实例层区别子类型叫做动力类型动力类型属于类型层表明超类通用化的类型是根据什么成子类的因此当我们谈到实例时用区别子来专有化而当我们谈到类型时我们用动力类型powertype来专有化图是例子动力类型是一种版类化的类型通常在类型中用<<Powertype>>显示它是可选的只有区别子可以使用显示区别子的动力类型PurchasePurchaseonCreditCashPurchaseHirePurchasepayment:Methodofpayment<<Powertype>>Methodofpayment图区别子Payment和<<Powertype>>Mehtodofpayment用来专有化Purchase版类对相关性的应用变成变成是一种版类化的属性它的源和目标是同一实例变成版类表明实例将从一个状态源实例状态转变时间和空间上到另一个状态目标实例状态它可以用于显示是如何从一个结点移动到另一个结点的也就是说在一个分布式系统中对象的位置是如何改变的或者在其它情况下它可以明确地显示元素的状态是如何改变的调用调用是一种版类化的相关性连接操作如果类A对类B有调用相关性则类A中的操作可以调用类B中的操作复制复制相关性连接两个实例其中源实例是目标实例的一份拷贝但它们仍然有各自的标识符并且是不同的实例派生UML的规则都是约束或派生的例如属性可以从其它属性派生而来派生是一种版类化的相关性如图costpricesalespriceprofitArticle{profit=salespricecostprice}图profit是一个派生属性派生的规则显示在大括号内友元和导入友元是一种版类化的相关性是从一个包到另一个包的相关性友元相关性扩展了包之间导入的可见性如果相关性是友元则源包可以访问目的包中公开保护和私有元素但不能看到实现因此可以访问友元相关性包的私有或保护的元素而其它包则不行包之间的版类化导入相关性是默认的只能访问包内的公开性元素实例版类化实例相关性是实例及其相应类型之间的关系源是一个实例目的是一个类型它可以明确地显示对象是哪个类的从对象到类有一个版类化的<<instance>>相关性精化精化是一种版类化的相关性有自己的图标也是UML的一种视图元素它很好地说明了UML是如何从很小的模型元素核心扩展而来的以及它是如何用来定义和扩展它自己的前面已有详细的讨论角色角色是类型和关联角色之间的一种版类化的相关性前面已有详细的讨论发送发送是一种版类化的相关性其中源是一个操作目标是一个信号是一个类其版类是信号操作发送信号跟踪跟踪trace是从一个模型元素到另一个模型元素的一种版类化的相关性相互跟踪的元素可以在同一个图中或在不同的图中跟踪表明源概念上跟踪回目标跟踪版类可以用于显示一个图是另一个图的详细描述或者设计图跟踪同一事物的分析图版类对组件的应用一些版类可以应用于组件通过定义各组件代表了现实世界中的什么事物使组件图更准确和清楚homehtml<<page>>animlogojava<<file>>animlogodoc<<document>>animatorjava<<file>>animatordoc<<document>>图源代码组件之间的相关性z版类化组件<<application>>代表一个可执行的程序z版类化组件<<document>>代表一个文档其中是文档而不是可以编译的源代码z版类化组件<<file>>代表一个是源代码的文件如图z版类化组件<<library>>可以用来表示一个组件是一个动态或静态的图书馆z版类化组件<<page>>代表一个Web页面z版类化组件<<table>>代表一个数据库表版类对笔记的应用约束是一个版类化笔记其中包含了对笔记所连到元素的约束需求是一个版类化的笔记指定了笔记所连到元素的责任或义务版类对原始类型的应用枚举枚举是一个版类化的类型也叫做定义域它为枚举的原始类型指定了一组允许值的集合可见性是一个枚举可以取的值包括公开保护私有和实现公用类型公用类型是一个版类化的类型只含有类范围的操作和属性公用类型没有任何实例它是只能通过该类型而不能通过实例访问到的一组类范围的操作和属性所谓类范围的操作是因为只指定类名和操作名公用类型通常应用于类如图所示sin(Angle):Realcos(Angle):Real<<Utility>>MathPack图公用类型类其中数学函数被组合在一个类中作为类范围的操作版类对通用化的应用扩展扩展用例之间的一种版类化的通用化是用来指定一个用例是从另一个用例继承而来当定义专有化用例时可以使用被继承用例的部分使用使用是两个用例之间的一种版类化的通用化描述一个用例被另一个用例使用版类对包的应用外观外观是一种版类化的包只引用其它包的元素导入通过友元相关性等外观没有任何元素它的内容只是引用残段残段是一种版类化的包代表一个不完全实现的包它代表另一个系统的一部分可以有数据库等的残段版类对类的应用信号信号是一种版类化的类约束该类对象的语义使它们可以作为信号发送如图所示信号是一种有名的事件携带一个对象用在系统中在不同的活动对象之间发送异步消息可以建立信号的层次结构来支持多态控制边界和实体可以把类版类化成控制边界和实体这些版类是用来增加类的语义并在建模时使用它们是根据模型视角控制者的概念其中实体是模型控制是控制者边界是视角模型视角控制者是一种常用的方案模式用来建立具有一个实体模型的系统对该系统的操作是通过一个图形用户界面GUI如图所以这些版类在处理基于图形用户界面系统时非常有用边界版类把类专有化以便于表达和操作边界类携带信息从一个系统向另一系统如一个人或机器就是角色边界类也可以允许对信息的操作通过在实体对象中定义的规则边界类典型地是窗口对话或通信类如TCPIP实体版类用于为商业对象核心概念建模如借条发票保险单等它们通常是持久性的可以保存在系统中控制版类用于把边界对象和它们的实体对象联结起来来处理系统内的一个操作序列实体对象携带需要由边界对象处理的登记处控制对象通常负责实体对象内的信息处理问题并完成一些可能涉及多个实体对象的功能序列通过这三个简单版类可使类图更为精确并且容易理解因为版类表明了类的意图和责任并且在图中立即可见该类更详细的讨论可以在它的文档和责任性质中访问到而且类之间的关系也更容易理解例如如果一个边界类与一个实体类有关联则通常实体内的信息将通过该边界类型显示和操作用户可以为类以及特定问题领域的公用类角色定义版类其中某个特殊类型的类有它们自己的图标和语义例如在金融领域表达一个有价格的项的类它的版类是<<Asset>>如果一个类的实例的价格计算受到另一个类实例的价格影响就用版类化的相关<<Affects>>例如股票的价格受到底层股票市场价格的影响使用版类的机构将决定版类的语义的形式化程度和扩展程度但是版类的意思必须明确如图device:Devicetime:Time<<signal>>Input{abstract}up:Booleandown:BooleanxPos:IntyPos:Int<<signal>>Mouse{abstract}character:Charup:Booleandown:Boolean<<signal>>Keyboardcommando:string<<signal>>VoiceRecognition<<signal>>RightMouseButton<<signal>>LeftMouseButton图有信号版类化类的分层控制实体边界图控制实体和边界版类InsurancePolicySalesWindowChangeInsuranceContractInsuranceContractCustomerInsuranceCompanyNewInsuranceContractDeleteInsuranceContractInsuranceManagementManagementWindowInsuranceAgentSalesman***********has*refersto*referstohasreferstoisexpressedinan图控制实体和边界版类在这个例子中实体类体现了商业的核心保险商业实体类是InsurancePolicyInsuranceContractCustomer和InsuranceCompany控制类是ChangeInsuranceContractNewInsuranceContractDeleteInsuranceContract服务于边界类是SalesWindow控制类InsuranceManagement用Customers和InsuranceContract服务于边界类ManagementWindow版类对操作的应用构造子是一个操作当创建对象时调用它可以有参数可以明确调用也可以有名字但通常它的名字与类的名字一样如CJAVA等要求这样或简单地只是名字create(…)例如发票类可以有一个构造子叫做发票参数是规格和数量明确的构造子调用是invoice(“Adellcomputer”,$)解构子是一个操作当对象不再使用或被注销时隐含调用的所有面向对象的程序设计语言都支持构造子和解构子查询操作不影响对象的状态典型的查询操作是读取对象的属性构造子和解构子以及查询都是版类化的操作如图所示"query"sin(Angle):Realcos(Angle):Real"constructor"create(numberofsignificantdigits:Integer)"destructor"destroy()<<Utility>>MathPack图版类对活动类的应用有两种版类应用于活动类过程和线程过程是一种版类化的活动类表示一个重控制流线程是一种版类化的活动类代表一个轻的控制流这两种版类用来表明活动类是如何实现并映射到底层的操作系统中的自定义版类在用户自定义的加标签值或约束中都在元素中加入了值或语义此时定义了一种新的元素类型尽管它是以原有元素为基础版类也有自己的视图元素它可以有一个图标在图中代表版类元素通常当人们在特定的方法或特定的应用领域中使用UML会使用版类某些概念属于方法或领域所特有而标准UML又不支持的用户就可以自定义在定义版类时需要做以下工作z描述自定义版类的基础是哪个元素z对该元素的语义影响z给出一个或多个使用该版类的例子<<Semaphore>><<Time>><<GUI>>就是自定义版类时间版类应用于关联指定有一个时间相关性GUI版类是边界版类的一个专有化它与边界类有相同的功能和意图但只与图形用户接口有关边界类还涉及其它与用户或系统通信的方式因此GUI类必须是图形用户接口的组成部分例如一个窗口或一个消息框图就是一个例子当然也可以把元素扩展到模型元素以外的其它元素可以把概念模型元素的子类版类化为一组不同的系统例如信息系统技术系统嵌入式实时系统分布式系统商业系统软件系统等InsurancePolicySalesWindowChangeInsuranceContractInsuranceContractCustomerInsuranceCompanyNewInsuranceContractDeleteInsuranceContractInsuranceManagement<<GUI>>ManagementWindowInsuranceAgentSalesman***********has*refersto*referstohasreferstoisexpressedinanPrinterCustomer<<Semaphore>>PrinterQueue*<<Time>><<Time>><<Time>>图用户自定义版类的例子PrinterQueue类是一个信号它控制由PrinterQueue访问从而把InsuranceContracts类和Printer类连接起来控制类和Insura

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/26

07

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利