软件建模技术4_第1页
软件建模技术4_第2页
软件建模技术4_第3页
软件建模技术4_第4页
软件建模技术4_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

包图5.1

概述5.2包间关系5.3设计包的原则第5章●包图(PackageDiagram)●包图(PackageDiagram)也是一种结构型UML图,它用于显示包与包之间的依赖关系,可以放入包图中的元素和关系有:包(package)、所有可打包元素(packageableelement)、依赖(dependency)、元素导入(elementimport)、包导入(packageimport)、包合并(packagemerge)。●一个包表示一个命名空间,用于将语义相关的元素组织在一起。包可以包含其它的包,以及其它的可打包元素,如:类、用例、组件等。5.1

概述5.1

概述javautilDatejava::utilDatejava::util::Date5.1

概述●包图其他嵌套表示可见性含义前缀符号公有的Public此元素可以被任何引用该包的包中的元素访问。+受保护的Protected此元素可被继承该包的包中的元素访问。#私有的private此元素只能被同一个包中的元素访问。-5.1

概述●包的可见性包内元素的可见性控制了包外部元素访问包内部元素的权限。●元素导入关系:元素导入关系是一种有向关系,用带开放箭头的虚线表示。它从一个要导入元素的包指向一个要被导入的具体元素,如所示。如果被导入的元素在命名空间中的可见性为public,则在关系中用关键字“«import»”来说明,如果它的可见性是private的则用关键字“«access»”来表示。元素导入的含义为将某些元素引入到新的命名空间中作为其成员,但和包中自身所拥有的元素相比,被导入的元素只是一种引用,也就是说如果要对这些导入的元素作修改的话,只能在它们的源包中进行修改。5.2

包间关系●包导入关系:包导入关系的表示法与元素导入关系类似,不同的是它指向的是一个要被导入包。包导入的含义是:一旦某个包某导入到新的命名空间后,那么这个包中的元素就可以被该命名空间中的元素直接访问,而不再需要通过限定名的方式来访问它们。5.2

包间关系usersUsersecurity+Credentials+IdentityVerifier-MD5Crypt《access》5.2

包间关系该例中,users被称为源包(SourcePackage),security被称为目标包(TargetPackage)这个例子表示包users要用到包security中的元素由于可见性的原因,users中的元素User只能使用security中的元素Credentials和IdentityVerifier,而不能使用MD5Crypt5.2

包间关系userssecurity+Credentials+IdentityVerifier-MD5Crypt《import》User这个例子表示包users中的元素可以访问包security中的元素Credentials和IdentityVerifier包的access关系和import关系的区别:如果包users被导入到另一个包Z中,如果users和security是access的关系,则Z中的元素是看不到包security中的元素Credentials和IdentityVerifier的,即包security中的元素Credentials和IdentityVerifier对包Z中的元素来说,其可见性是private如果包users和包security是import的关系,那么,包Z中的元素是可以见到包security中的元素Credentials和IdentityVerifier的,也就是说,包security中的元素Credentials和IdentityVerifier对包Z中的元素来说,其可见性是public5.2

包间关系●包合并关系:包合并关系是一种包与包之间的有向关系,用带开放箭头的虚线表示,它从源包指向目标包,再加上一个关键字“«merge»”,用于表示目标包中的内容被源包中的内容扩展。它类似于类图中的泛化关系,从概念上表示源元素将目标元素的特性添加到自己身上,从而得到一个由两组特性组合之后的新元素。5.2

包间关系包的合并关系有一些规则:包中的私有成员能被任何其他包合并如果合并的包中的类与被合并包中的类重名或具有相同的类型,那么在合并后的包中将存在一个泛化关系来建模合并的包与被合并包中的这些类也可以仍然使用被合并包的名字加类名的方式引用被合并包中的类合并包和被合并包中的类都会保持原样不变的被添加到合并包中即使被合并包还不存在子包,子包也将被添加到合并包中如果被合并的包中有一个子包与合并包中的子包同名,那么这两个子包之间还会合并一次任何与被合并包具有导入关系的包都将作为合并包的导入包,与合并后的包建模为导入关系,就是说,不会产生规则(2)所说的泛化关系,被导入的元素不被合并。如果导入的元素与合并后的包中的元素有冲突,那么,导入包中的同名元素具有优先权,被导入的元素必须被重新命名5.2

包间关系在考虑如何对类进行分组并放入不同的包时,主要依据类之间的依赖关系进行分组。包中的类应该是功能相关的,在建包时,应把概念上和语义上相近的模型元素纳入一个包。依赖关系其实是耦合的一种体现,如果两个包中的类之间存在依赖关系,那么这两个包之间就有了依赖关系,也就存在耦合关系。好的设计要求体现高内聚、低耦合的特性。5.2

设计包的原则重用等价原则

——把类放入包中时,应考虑把包作为可重用的单元。共同闭包原则

——把那些需要同时改变的类放在同一个包中。若一个类的行为或结构的改变要求另一个类做相应的改变;删除了一个类后,另一个类成多余的;两个类之间有大量的消息发送。共同重用原则

——把不会一起使用的类不要放在同一个包中。非循环依赖原则

——包之间的依赖关系不要形成循环。5.3

设计包的原则绘制包图的基本步骤如下:①分析系统的模型元素(通常是对象类),把概念上或语义上相近的模型元素归入同一个包。②对于每一个包,标出其模型元素的可视性,确定包内每个元素的访问属性,是公共、保护或私有。③确定包与包之间的依赖关系,特别是“引入”关系。④确定包与包之间的泛化关系。⑤绘制包图。⑥对结果进行精化和细化。5.3

设计包的原则组件图和部署图6.1

组件图概述6.2组件图的应用6.3UML2.0中的相关变化6.4复合结构6.5部署图概述6.6部署图的应用6.7UML2.0中的相关变化6.8对象约束语言第6章为了构造一个面向对象的软件系统必须考虑系统的逻辑和物理两个方面。逻辑方面需要发现和描述对象类、接口、协同、交互和状态机等事物,物理方面需要找出组件和节点。

UML提供了两种物理表示图形:组件图和部署图。

组件图表示系统中的不同物理组件及其关系,它表达的是系统代码本身的结构。部署图由节点构成,节点代表系统的硬件,组件在节点上驻留并执行。部署图表示系统的软件组件与硬件之间的关系,它表达的是运行系统的结构。

组件图和部署图用于建立系统的实现模型。

对象约束语言(OCL)是用于表示对模型元素的约束的语言,是UML的重要组成部分。

件图和部署图第6章组件图和部署图6.1.1

组件6.1.2

组件的种类6.1.3

组件的关系第6章6.1组件图概述组件(Component)是系统的物理的可替换的单位,它把系统的实现打包,并提供一组接口的实现(Realization)。

组件代表系统的一个物理实现块,代表逻辑模型元素如类、接口、协同等的物理打包。组件本身遵从和提供一组接口的实现,它们代表了由驻留在组件内部的模型元素所实现的服务。组件用于对系统配置节点上的物理事物建立模型。

常见的组件有系统的配置组件,如COM+组件、JavaBeans等。组件也可以是软件开发过程中的产物,如软件代码(源码、二进制码和可执行码)等。

6.1.1

组件组件的图标是一个大矩形的左边嵌二个小矩形。组件必须有名字。

简单组件:只标出组件名。在组件名之后或之下,可以用括在花括号中的文字(即标记值)说明组件的性质,如“{version=2.0}”等。

扩充组件:当需要了解组件所包含的模型元素时,则需要把每个模型元素的名字在组件的大矩形框里列出,这称为扩充的组件。

例:简单组件与扩充组件示例,如图6.1所示。图6.1简单组件与扩充组件示例

6.1.1

组件组件在很多方面与对象类相似,如都有名字,都有实例,都能实现接口,都存在着关系等。组件的实例代表运行期间的可执行软件模块。例如,图6.1中的组件“mymailer:Mailer”就是组件“Mailer”的一个实例,它存在于运行期间。组件的实例只用于部署图中。

组件的性质的表示法与类相同。组件所包含的模型元素的可视性同样有“公共”、“保护”、“私用”等。

但是组件和类有实质性的区别。组件代表物理事物,而类代表事物的逻辑抽象,因此组件可以用于部署图的节点中,而类不能。一般组件只有操作,外界只能通过接口接触它们,而类可以直接有属性和操作。

6.1.1

组件组件是一组逻辑元素(如类、协同等)的物理实现。一个类可以由一个或多个组件实现。

组件和类的关系是一种依赖关系,组件拥有类,类不存在了,包含它的组件也就不存在了。通常,组件与类的依赖关系不必用图形显式表示,可以在说明文档中予以说明。

例:图6.2中的组件“Mailer”依赖于类“Mailbox”、“RoutingList”和“MailQueue”

。图6.2组件与类的关系示例

6.1.1

组件组件提供接口的实现,一个组件可以实现一个或多个接口。

例:在图6.3中的组件“字典”实现两个接口:“拼写检查”和“同义词”。

图6.3组件与接口示例

6.1.1

组件按照组件的作用可以把组件分为以下3种:

1.配置组件(DeploymentComponent)

配置组件是构成一个可执行的系统的必需的组件,如动态连接库(DLL)、执行程序(EXE)等。

UML的组件可以表达典型的对象模型,如COM+、

CORBA、JAVABeans、Web页、数据库表等内容。

2.工作产品组件(WorkProductComponent)

工作产品组件是在软件开发阶段使用的组件,它们包括源程序文件、数据文件等。

配置组件是根据工作产品组件建立的。

3.执行组件(ExecutionComponent)

执行组件是执行系统的部件,如COM+的一个对象,它是一个动态连接库(DLL)的实例。

6.1.2

组件的种类UML的所有扩展机制都可以用于组件。例如,可以在组件上加上标记值描述组件的性质,使用构造型规定组件的种类。

UML定义了以下5个用于组件的标准构造型:

1.<<executable>>

构造型<<executable>>说明一个组件可以在系统的节点上执行。

2.<<library>>

构造型<<library>>说明一个组件是一个静态的或动态的对象库。

3.<<table>>

构造型<<table>>说明一个组件代表的是一个数据库表。

4.<<file>>

构造型<<file>>说明一个组件代表的是一个文档,它包含的是源代码或数据。

5.<<document>>

构造型<<document>>说明一个组件代表的是一个文档。6.1.2

组件的种类组件之间可以有依赖关系。组件之间的依赖是指,一个组件的模型元素使用另一个组件的模型元素。

组件也可以通过接口实现依赖关系。

组件通过接口依赖的图形表示方式有两种,一种是简单的表示法,另一种通过扩充的接口来表达,如图6.4所示。

由一个组件实现的接口称为输出接口(ExportInterface),意指该接口是组件提供给其他组件的服务。一个组件可以提供多个输出接口。为一个组件所使用的接口称为输入接口(ImportInterface),意指该组件遵从该接口,建立在该接口上。

一个组件可以遵从多个输入接口。一个组件可以既有输入接口,又有输出接口。通过输入接口和输出接口所实现的组件之间的依赖称为输入依赖(ImportDependency)。

6.1.3

组件的关系例:组件的依赖接口示例,如图6.4所示。

图6.4组件的依赖接口示例

6.1.3

组件的关系根据组件的种类的不同,组件之间的依赖可以分为两种:开发期间的依赖和调用依赖。

开发期间的依赖是指在编译阶段和连接阶段的组件之间的依赖。例如,在图6.5中,客户组件依赖于供应者组件。供应者组件在开发期间存在,但并不需要在运行期间存在。

图6.5组件的开发期间的依赖

6.1.3

组件的关系调用依赖(CallDependency)是指一个组件调用或使用另一个组件的服务,如图6.6所示。客户组件调用或使用供应者组件的服务,调用可以直接进行,或通过接口进行。供应者组件的元素可以是组件的型或对象。

调用依赖可以发生在开发期间的组件的型之间,用组件图表示;调用依赖也可以发生在运行期间的组件的实例之间,可在部署图中表示。

图6.6组件的调用依赖

6.1.3

组件的关系组件图由组件、接口和组件之间的关系构成,其中的组件可以是源码、二进制码或可执行程序。

组件图表示系统中的不同物理部件及其关系,它表达的是系统代码本身的结构。组件图只有型(Type)的形式,没有实例形式。为了显示组件的实例需要使用部署图。

组件图用于下列事物建立模型:系统的源代码、系统的发布版本、物理数据库、自适应系统等。组件图也可以用于建立业务模型,此时的组件是业务的过程和文档。组件图还可以用于建立开发期间的软件产物的依赖关系,用于系统开发的管理。

6.2

组件的应用例:一个组件图的示例,如图6.7所示。它由组件“调度程序”、“计划程序”、“GUI”(图形界面),接口“注册登记”、“更新”,以及它们的关系构成。

图6.7组件图示例

6.2

组件的应用建立一个可执行系统的组件图可按以下步骤进行:(1)确定组件。(2)对组件加上必要的构造型。如标准构造型<<executable>>、<<library>>、<<table>>、<<file>>、<<document>>,或自定义新的构造型。(3)确定组件之间的关系。最常见的组件之间的关系是通过接口依赖。一个组件使用(输入)某个接口,另一个组件实现(输出)该接口。(4)必要时把组件组织成包。(5)绘制组件图。6.2

组件的应用例:一个软件产品的系统构成模型,如图6.8所示。它由可执行程序和动态连接库构成。图6.8可执行程序和动态连接库建模示例

6.2

组件的应用采用同样的方法可以为报表、文件与文档建模。例如,图6.9是在图6.8的基础上增加了程序的初始化文件“animator.ini”、数据库表“shapes.tbl”和帮助文件“animator.hlp”,它们都用注释节点表示。

图6.9报表、文件与文档建模

6.2

组件的应用例:项目与资源管理系统PRMS的一个系统组件图,如图6.10所示,它表示了开发期间和运行期间的实现系统的对象。图6.10项目与资源管理系统PRMS的组件图

6.2

组件的应用在UML2.0中规定的组件图标,如图6.11所示。在UML1.x中,组件用于代表物理结构,特别是运行时的系统物理块,如动态连接库(DLL)等。在UML2.0中,组件代表系统的一个模块化部分,可以是指逻辑的,也可以是指物理的。按照基于组件的开发方法,一个系统可以看作是由若干个组件通过接口连接而成的。

图6.11UML2.0的组件图标

6.3

组件图-UML2.0中的相关变化组件通过供给接口和需要接口定义其行为。组件的服务是一种型(Type)。组件在其环境中是一个可替换的单元。不论是在系统的分析设计阶段或运行时,只要型相合(TypeConformant),即接口的功能等价,一个组件可以重用,也可以被另一个组件完全代替。在组件中,供给接口和需要接口可以组织成端口(port),它们常在运行时被访问。对于包含复杂内容的组件,常使用复合结构把组件的内容进行划分和聚集,使得结构关系更为清晰。

6.3

组件图-UML2.0中的相关变化例:一个按照UML2.0规定图标绘制的简单的组件图,如图6.12所示。图6.12组件图示例

6.3

组件图-UML2.0中的相关变化复合结构(CpmpositeStructure)和复合结构图是UML2.0中的新成分。复合结构描述系统中某一部分(复合结构)的内部结构,包括该部分与系统的其它部分的交互。复合结构图能够展示这些部分的“内部”参与者的配置情况。通过复合结构可以把一个复杂类或组件等分解成若干部分,便于清晰地描述它们(系统)的内部组织构造情况,明确地说明了支持该复合结构所包含的分类符(类、组件等)的结构特性(Property)。这里说的分类符可以是类、对象、组件等。6.4

组件图-复合结构复合结构与包都是一种聚组机制。复合结构是模型元素在运行时刻的聚组,包是编译时刻的聚组。

复合结构图常用于组件图,适宜表示组件,以及如何把组件分解为不同的部件。复合结构图类似于类图,但它所表示的是内部结构所包含的部件和连接符。部件(Part)是分类符将扮演的角色(Role),不代表特定的实例(Instance)。6.4

组件图-复合结构部件的图标与对象的图标类似,也是一个矩形框,它的命名形式为:部件名:类名,但是名称之下不带下划线。部件之间可以有连接符(Connector)连接,连接符用一条直线表示。连接符使得两个部件(或模型元素)之间能够通信。

委托连接符(DelegationConnector)是一种连接该复合结构的对外委托端口和内部实现部件的连接符,委托连接符用一条虚箭线表示。

连接符的实现可以是一个简单指针,或是复杂的网络连接。

6.4

组件图-复合结构例:一个表示对象类的复合结构的示例,如图6.13所示。其中,“轮胎”类是一个简单类。“轿车”类的内部结构是一种复合结构,它包含四个部件:“左前轮”、“右前轮”、“左后轮”、“右后轮”,代表轿车的四个轮子,它们的型都是“轮胎”。两个前轮部件和两个后轮部件分别有连接符相互连接。图6.13类的复合结构示例

左前轮:轮胎

右前轮:轮胎

右后轮:轮胎

左后轮:轮胎轿车前轴后轴轮胎

Tire:StringSize:String…6.4

组件图-复合结构在复合结构图中还常需要表示复合结构和部件所需要的接口和端口,以及部件的多重性。例:一个组件“订货”的复合结构,如图6.14所示,它有两个端口。

图6.14组件的复合结构图示例

6.4

组件图-复合结构6.3部署图(配置图)Home6.3.1节点6.3.2节点的关系6.3.3部署图的应用6.3.4UML2.0中的相关变化组件图和部署图6.5.1

节点6.5.2

节点的关系6.5.3

组件的关系第6章6.5部署图概述节点(Node)是存在于运行期间的系统的物理元素,节点代表计算机资源,通常为处理器(Processor)或其他硬件设备,系统的组件可以配置在节点上。节点的图标为一个三维立方体图形,如图6.15所示。

图6.15简单节点与扩充节点示例

6.5.1

节点节点必须有名字。节点的名字可以是一个简单名,或用路径名。与对象类一样,节点可以用标记值说明名字的性质。节点和对象类一样可以区分为型和实例。节点的型代表计算资源的不同类型,节点的实例代表特定的具体的计算机资源。对象和组件实例可以驻留在节点实例上,而且可以从一个节点向另一个节点迁移。节点执行组件,组件是被节点执行的事物。一个节点可以与其它的节点、组件、对象有关联。节点和对象类、协同、组件等模型元素一样可以组织成包。

6.5.1

节点例:在节点上安置组件,如图6.16所示。图6.16用节点安置组件

6.5.1

节点节点与节点通过物理连接(Connection)发生关系,物理连接如以太网络、共享总线等,从硬件方面保证了系统的节点协同运行。节点与节点、节点与组件之间存在着多种类型的关系,包括关联(通信关系)和依赖(支持关系、成为关系)。

1.通信关系通信关系是节点之间的一种关联,是节点之间的通信路径或连接的模型。通信关系的表示法是用一条实关联线连接两个节点,如图6.17所示。在实关联线上可以加构造型以表达节点间的通信路径或连接的性质。

2.支持关系支持关系是节点与组件或对象之间的依赖关系。如果一个节点与一个组件或对象存在着支持关系,说明该节点上驻留着该组件或对象,该组件或对象能够在该节点上执行。支持关系的表示法是用一条虚箭线从节点指向所连接的组件或对象,并可在虚箭线上加有构造型<<supports>>,如图6.18所示。

6.5.2

节点的关系图6.17通信关系表示法示例

图6.18支持关系表示法

6.5.2

节点的关系3.成为关系成为关系是组件与组件、组件与对象、对象与对象之间的依赖关系。成为关系不是节点之间的关系,但是它是组件或对象在节点之间的迁移的模型。成为关系的表示法是用一条虚箭线从一个节点中的组件指向另一个节点中的组件或从一个节点中的对象指向另一个节点中的对象,并可在虚箭线上加有构造型<<becomes>>,如图6.19所示。

成为关系可以用标记值“{time=…}”说明其时间性质,即组件或对象在什么时间发生迁移活动。

成为关系说明源对象(或组件)和目标对象(或组件)是在不同时间点的同一个对象(或组件),而且它们的状态和角色不同。

6.5.2

节点的关系成为关系表示法,如图6.19所示。图6.19成为关系表示法

6.5.2

节点的关系部署图由节点与节点之间的关系构成。在部署图中也可以有组件,以及节点与组件之间、组件与组件之间的关系。部署图表示分布式系统的软件组件与硬件之间的关系,它表达的是运行系统的结构。部署图主要用于对在网络环境运行的分布式系统建立系统物理模型,或者对嵌入式系统建模。部署图也可以用于建立业务模型,此时的“运行系统”就是业务的组织机构和资源(人力、设备等)。

例:项目与资源管理系统PRMS的部署图,如图6.20所示。

6.6

部署图的应用Home图6.20项目与资源管理系统PRMS的部署图

6.6

部署图的应用

建立一个客户机/服务器系统或Web应用系统的部署图一般可按以下步骤进行:(1)确定节点。(2)对节点加上必要的构造型。(3)确定关系。把系统的组件如可执行程序、动态连接库等分配到节点上,并确定节点与节点之间、节点与组件之间、组件与组件之间的关系,以及它们的性质。

(4)绘制部署图。例:一个医院诊疗系统部署图,如图6.21所示。它是一个对象部署图,其中每一个节点都是可视的特定节点实例:“DatabaseUnitServer”、“HeartUnitServer”与“aWindowsPC”,它们通过TCP/IP网络连接。

6.6

部署图的应用图6.21医院诊疗系统部署图(客户机/服务器系统)

6.6

部署图的应用在UML2.0中规定,部署图的节点所代表的计算机资源,不仅是指硬件设备(Device),如处理器、读卡机、移动设备、通信设备等;而且可以是指包含在设备内的执行环境。执行环境是其它软件的宿主,如操作系统、J2EE容器、工作流引擎、数据库等。

制品(Artifact)配置在节点上。在部署图中的制品就是系统开发过程中最终产生的各种可执行代码文件。

实际上,制品代表组件(或任何可包装模型元素,如简单的类)的物理形式,组件由制品实现。

制品的图标为一个矩形,在制品的名称上方给出构造型“<<artifact>>”;或者,在矩形的右上角贴上一个图标“”。

6.7

部署图-UML2.0中的相关变化例:图6.22中有一个组件“Order”和一个制品“Order.jar”,制品“Order.jar”是一个可执行的Java代码文件。组件“Order”由制品“Order.jar”实现。图6.22组件与制品

6.7

部署图-UML2.0中的相关变化例:节点“应用服务器”上的配置,如图6.23所示。

图6.23配置有执行环境和制品的节点

应用服务器J2EE容器DB2DBMS

KJPT.exe{Vendor=WSSC}{Component}6.7

部署图-UML2.0中的相关变化对象约束语言(ObjectConstraintLanguage,OCL)是一种形式语言,用于表示UML模型中施加于模型元素上的约束。

OCL是一种纯表达式语言,它用表达式表示约束。OCL的表达式确保没有副作用,对一个OCL表达式进行求值将返回一个值,它在系统模型中不改变。

OCL是一种规格说明语言(SpecificationLanguage)。所有有关实现的问题都不能用OCL表达。

OCL不是一种程序设计语言,不能用OCL编写程序,不能用OCL编写程序逻辑和控制流程。

6.8

对象约束语言组件图和部署图6.8.1

标准型6.8.2表达式6.8.3

对象性质的约束第6章6.8对象约束语言OCL预定义的标准型定义了一组基本型和集合型(CollectionType)。OCL标准型定义为一个层次结构,用类图表示,如图6.18所示。

图6.18OCL标准型

6.8.1

对象约束语言-标准型OCL基本型的含义与Java语言中的数据类型的含义类似。OCL基本型的例子如下:

1,3,5.4true,false‘apple’,’orange’,’strawberry’

对OCL基本型能施加的运算如下:

OCL基本型

运算

Integer*,+,–,/,absReal*,+,–,/,floorBooleanand,or,xor,not,implies,if–then–elseStringtoUpper,toLower,substring,concat6.8.1

对象约束语言-标准型集合型是抽象型,它预定义了大量的运算,可以维护集合。

UML定义了3种集合型:“Set”、“Bag”、“Sequence”。集合型本身又可以构成集合型,形成集合型的嵌套。

“Set”型是一个数学的集合,它包含的元素不重复。“Bag”型类似“Set”型,但它包含的元素允许重复。“Sequence”型类似“Bag”型,但它包含的元素有序。“Set”、“Bag”和“Sequence”型的表示方法是分别用关键字“Set”、“Bag”和“Sequence”,后跟一个花括号,其中有组成该型的元素值。

例:集合型的一些例子如下:

Set{1,3,5,7,9}Sequence{1,3,4,5,2,3}Bag{1,3,4,3,5}Set{Set{1,3},Set{5,7},Set{9,11}}/“Collection”型嵌套

6.8.1

对象约束语言-标准型集合型的预定义运算主要有“select”(选择)、“reject”(剔除)、“collect”(集合)、“forAll”(全体)、“exists”(存在)等。

Collection->select(…)Collection->reject(…)Collection->collect(…)Collection->forAll(…)Collection->existsl(…)例:集合型运算的一些例子如下:

self.employee->select(age>50)->notEmptyself.employee->reject(isMarried)->isEmptyself.employee->collect(person|person.birthDate)self.employee->forAll(p|p.lastname=‘张’)self.employee->exists(p|p.lastname=‘张’)6.8.1

对象约束语言-标准型OCL表达式对一个OCL型求值。

OCL的基本表达式的扩展巴斯科范式EBNF定义如下:

PrimaryExpression:=literalCollection|literal|pathNametimeExpression?Qualifier?FeatureCallParameters?|‘’(‘’expression’’)’’|ifExpressionliteral:=<string>|<number>|“#”<name>timeExpression:=“@”<name>featureCallParameters:=“(”(declarator)?(actualParameterList)?“)”ifExpression:=“if”expression“then”expression“else”expression“endif”

最简单的OCL基本表达式是一个literal(文字),literal可以是一个字符串,或一个数字,或在“#”号后跟一个模型元素或操作的名字。

OCL基本表达式也可以是literalCollection,即literal的集合型。

6.8.2

对象约束语言-表达式OCL基本表达式可以是一个路径名,后面可有选项:时间表达式、限定符(Qualifier)或特征调用参数。

时间表达式的格式是在符号“@”后面跟一个名字,它确定性质的时间值。

特征调用参数是运算的实在参数表。

OCL基本表达式可以是一个条件表达式,其值为一个Boolean值“True”或“False”。

把一个OCL表达式用圆括号括起来也是一个OCL基本表达式。

6.8.2

对象约束语言-表达式OCL表达式的求值自左向右进行,运算符的优先级规定由高到低依次为:圆点“.”和箭头“->”的优先级最高;一元运算符“not”和“–”;乘除运算符“*”和“/”;加减运算符“+”和“–”;逻辑运算符“and”、“or”和“xor”;逻辑运算符“implies”;条件运算符“if–then–else”;比较运算符“<”、“>”、“<=”、“>=”、“=”、“<>”;圆括号优先

6.8.2

对象约束语言-表达式例:OCL表达式的例子如下:

1+2*34self.wife.sex=#femaleself.wife.age>=18andself.employee->select(age>50)

在OCL的基本表达式的基础上定义了其他一些表达式,如加减表达式、乘除表达式、一元表达式、逻辑表达式、关系表达式、后缀表达式、let表达式。

6.8.2

对象约束语言-表达式一个对象的属性、关联端、无副作用的操作称为对象的性质(Property)。

对象的性质的表示是用一个圆点“

温馨提示

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

最新文档

评论

0/150

提交评论