面向对象的系统分析与设计对象约束语言-1课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《面向对象的系统分析与设计对象约束语言-1课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 系统分析 设计 约束 语言 课件
- 资源描述:
-
1、第八章第八章 对象约束语言对象约束语言4第一节第一节 OCL概述概述 4第二节第二节 OCL语法语法 4第三节第三节 标准标准OCL类型类型 4第四节第四节 OCL表达式表达式 4第五节第五节 OCL在在UML建模中的应用建模中的应用 第一节第一节 OCL概述概述UML的图形如类图、用例图等,通常不可的图形如类图、用例图等,通常不可能详细地表达系统的各个细节,为了表达这些细能详细地表达系统的各个细节,为了表达这些细节问题,需要为建模对象添加一些约束。这些约节问题,需要为建模对象添加一些约束。这些约束可以使用自然语言来表达,但是自然语言的二束可以使用自然语言来表达,但是自然语言的二义性增加了约束
2、表达的复杂性和不可确定性。义性增加了约束表达的复杂性和不可确定性。为解决约束表达的问题,为解决约束表达的问题,OCL应运而生应运而生了。了。第一节第一节 OCL概述概述对象约束语言对象约束语言(Object Constrain Language,简,简称称OCL)是是UML的子标准,是一种能用于构造软的子标准,是一种能用于构造软件模型的建模语言。件模型的建模语言。第一节第一节 OCL概述概述OCL的特性:的特性:OCL是一种精确的、无二义性的形式化语言,是一种精确的、无二义性的形式化语言,易于掌握和使用。易于掌握和使用。OCL既具有良好的数学背景,又没有使用晦既具有良好的数学背景,又没有使用晦
3、涩的数学符号。涩的数学符号。OCL的基础是的基础是集合论和三值集合论和三值Kleene逻辑逻辑,并且它有一个形式化的数学语义,并且它有一个形式化的数学语义,因此它可以明确地、无歧异地表示模型元素。因此它可以明确地、无歧异地表示模型元素。第一节第一节 OCL概述概述OCL是是强类型强类型的语言,任何表达式的值都属的语言,任何表达式的值都属于一个类型。于一个类型。这个类型可以是预定义的标准类型这个类型可以是预定义的标准类型(如如String或或Integer型型),也可以是,也可以是UML图中的元图中的元素素(如具体的对象如具体的对象),还可以是这些元素构成的集,还可以是这些元素构成的集合合(如对
4、象的如对象的Set,Bag和和sequence types等等)。作为。作为类型语言,类型语言,OCL表达式的校验是在建模期间而不表达式的校验是在建模期间而不是执行期间进行的,因此,模型中的错误能在早是执行期间进行的,因此,模型中的错误能在早期就被发现并修改。期就被发现并修改。第一节第一节 OCL概述概述OCL是是声明式声明式的语言,其表达式的计算将返的语言,其表达式的计算将返回一个值,不会改变系统的状态,没有副作用,回一个值,不会改变系统的状态,没有副作用,从而使得从而使得UML中的表达式被提升到了纯建模的中的表达式被提升到了纯建模的领域。而不必考虑实现时的细节和具体语言。领域。而不必考虑实
5、现时的细节和具体语言。OCL是一种制定是一种制定约束和查询约束和查询的文本语言,除的文本语言,除了可用于编写导航表达式、布尔表达式和其他查了可用于编写导航表达式、布尔表达式和其他查询语句外,还可用于构建约束、监护条件、动作、询语句外,还可用于构建约束、监护条件、动作、前置和后置条件、断言和其他前置和后置条件、断言和其他UML表达式。表达式。第一节第一节 OCL概述概述OCL是一种规范说明性语言,所有与实现有是一种规范说明性语言,所有与实现有关的问题都不能用关的问题都不能用OCL来表达。来表达。OCL不是一种程序设计语言,不能用不是一种程序设计语言,不能用OCL编写程序逻辑和控制流程。编写程序逻
6、辑和控制流程。第一节第一节 OCL概述概述OCL具体语言可以用于许多不同的目的:具体语言可以用于许多不同的目的:作为一种查询语言。作为一种查询语言。在类模型中,指定与类和类型有关的不变式。在类模型中,指定与类和类型有关的不变式。为原型和属性指定一种类型不变式。为原型和属性指定一种类型不变式。为属性指定派生规则。为属性指定派生规则。描述关于操作和方法的前置条件和后置条件。描述关于操作和方法的前置条件和后置条件。描述迁移。描述迁移。为消息和动作指定一个目标和一个目标集合。为消息和动作指定一个目标和一个目标集合。第一节第一节 OCL概述概述 在在UML模型中指定任意表达式,如与行模型中指定任意表达式
7、,如与行为(为(Behavior)、参数()、参数(Parameters)、变更触)、变更触发器(发器(ChangeTriggers)和时间触发器)和时间触发器(TimeTriggers)、及生命线()、及生命线(LifeLines)相关)相关联的那些表达式。联的那些表达式。第二节第二节 OCL语法语法OCL2.0在两个层次上定义对象约束语言,在两个层次上定义对象约束语言,一个是一个是抽象语法抽象语法(或元模型或元模型),另一个是,另一个是具体语法具体语法。后者真正用于在后者真正用于在UML模型中指定约束和进行查模型中指定约束和进行查询。询。元模型定义元模型定义OCL概念和应用该概念的规则概念
8、和应用该概念的规则(或抽象语法),这与(或抽象语法),这与UML元模型对图的概念元模型对图的概念和用于和用于UML图的规则进行定义的方式相同。具图的规则进行定义的方式相同。具体语法实现抽象语法。体语法实现抽象语法。第二节第二节 OCL语法语法41)抽象语法)抽象语法抽象语法指的是抽象语法指的是OCL语言定义的语言定义的概念层概念层。在。在UML中,抽象语法表示为解释中,抽象语法表示为解释“类是什么类是什么”或或“操作是什么操作是什么”等的元模型(等的元模型(M2层),而不是层),而不是创建一个具体的类或操作,创建一个具体的类或操作,UML M2层一般将类层一般将类描述为描述为“具有相同的特征、
9、约束和语义说明的一具有相同的特征、约束和语义说明的一组对象组对象”,并将类解释为可以与任何数目的特性,并将类解释为可以与任何数目的特性(或属性)、操作、关系甚至嵌套类相关联。(或属性)、操作、关系甚至嵌套类相关联。第二节第二节 OCL语法语法42)具体语法)具体语法与面向规则的抽象语法相反,具体语法应用与面向规则的抽象语法相反,具体语法应用抽象语法的规则来创建可以在运行时段计算的表抽象语法的规则来创建可以在运行时段计算的表达式。达式。OCL表达式与类元相关联,应用于该类元表达式与类元相关联,应用于该类元自身或某个属性、操作或参数。不论哪种情况,自身或某个属性、操作或参数。不论哪种情况,约束都是
10、根据其位移(约束都是根据其位移(replacement)、上下文)、上下文类元(类元(contextual classifier)和)和OCL表达式的自表达式的自身实例(身实例(self instances)来定义的。)来定义的。第二节第二节 OCL语法语法u“位移位移”是是UML模型中使用的模型中使用的OCL表达式所表达式所处的位置,即作为依附某个类元的不变式、依附处的位置,即作为依附某个类元的不变式、依附于某个操作的前置条件或依附于某个参数的默认于某个操作的前置条件或依附于某个参数的默认值。值。u“上下文类元上下文类元”定义在其中计算表达式的名定义在其中计算表达式的名字空间。例如,前置条件
11、的字空间。例如,前置条件的“上下文类元上下文类元”是在是在其中定义该前置条件的操作所归属的那个类。也其中定义该前置条件的操作所归属的那个类。也就是说,该类中的所有模型元素就是说,该类中的所有模型元素(如属性、关联如属性、关联和操作和操作)都可以在都可以在OCL表达式中被引用。表达式中被引用。第二节第二节 OCL语法语法u “自身实例自身实例”是对计算该表达式的对象的是对计算该表达式的对象的引用。它总是引用。它总是“上下文类元上下文类元”的一个实例。的一个实例。也就是说,也就是说,OCL表达式对该表达式对该“上下文类上下文类元元”的每个实例计算结果可能不同。因此,的每个实例计算结果可能不同。因此
12、,OCL可以用于计算测试数据。可以用于计算测试数据。第三节第三节 标准标准OCL类型类型OCL是一种强类型语言,每一表达式的值都是一种强类型语言,每一表达式的值都属于某一类型。图属于某一类型。图8-1显示了显示了OCL中预定义的类中预定义的类型以及从型以及从UML模型派生的类型的层次结构。模型派生的类型的层次结构。u“Classfier”是一个基本类型,包含是一个基本类型,包含UML基基础结构的分类器的所有子类型。础结构的分类器的所有子类型。VoidType是一个是一个与所有类型均具有一致性的类型。与所有类型均具有一致性的类型。VoidType类型类型只有一个实例,称为只有一个实例,称为Ocl
13、Void。uTupleType类型(非正式的记录类型或结构类型(非正式的记录类型或结构体类型)将不同类型组合到一起形成一个新的类体类型)将不同类型组合到一起形成一个新的类型。型。第三节第三节 标准标准OCL类型类型图图8-1 OCL类型核心元模型的抽象语法层次结构类型核心元模型的抽象语法层次结构第三节第三节 标准标准OCL类型类型4 OCL标准库定义了多种类型,如图标准库定义了多种类型,如图8-2所所示。示。u 注意:注意:OCL标准库中定义的类型都是其抽标准库中定义的类型都是其抽象语法类的实例。象语法类的实例。标准库处在建模层即标准库处在建模层即M1层层,抽象语法处于元模型层即抽象语法处于元
14、模型层即M2层层。第三节第三节 标准标准OCL类型类型图图8-2 OCL标准库中的类型定义标准库中的类型定义第三节第三节 标准标准OCL类型类型41、OclAny和和OclVoid 类型类型 42、OclMessage类型类型 43、基本类型、基本类型 44、集合类型、集合类型 45、类型一致性、类型一致性 46、类型转换、类型转换 1、OclAny和和OclViod 类型类型1)OclAny在在OCL标准库中,标准库中,OclAny类型是所有类型是所有UML模型和基本类型的模型和基本类型的超类型超类型,UML模型所有的类模型所有的类都继承由都继承由OclAny定义的特性。定义的特性。为了避免
15、模型特性的名字与从为了避免模型特性的名字与从OclAny继承继承的特性名字发生冲突,的特性名字发生冲突,OclAny特性名字都以特性名字都以“Ocl”开头。开头。1、OclAny和和OclViod 类型类型OclAny类型上的操作表类型上的操作表1、OclAny和和OclViod 类型类型2)OclVoid类型类型OclVoid与其它所有类型都具有一致性与其它所有类型都具有一致性。OclVoid仅有一个称为仅有一个称为OclUndefined的实例。的实例。context OclVoid inv:OclVoid.allinstances()-size()=1除除oclIsUndefined()
16、操作之外,任何应用在操作之外,任何应用在OclUndefined类型上的属性调用结果都是类型上的属性调用结果都是OclUndefined类型。类型。2、OclMessage类型类型4OclMessage事实上是一个带有参数事实上是一个带有参数“T”的的模板类型,一个具体的模板类型,一个具体的OclMessage类型通过传递类型通过传递一个操作或信号参数代替一个操作或信号参数代替“T”而被创建。而被创建。下表是有关下表是有关OclMessage的操作。的操作。3、基本类型、基本类型4定义在定义在OCL标准库中的基本类型有:标准库中的基本类型有:Integer,Real,String 和和Bool
17、ean。4除此之外,除此之外,OCL还在基本类型上定义了一些操作,还在基本类型上定义了一些操作,如下表所示。如下表所示。4、集合类型、集合类型4OCL中还定义了一些较为高级的标准中还定义了一些较为高级的标准OCL类型,称为集合类型。类型,称为集合类型。集合类型是成组的对象或集合类型是成组的对象或元素,可以作表达式计算过程的结果。元素,可以作表达式计算过程的结果。在在OCL标准库中,集合类型包括标准库中,集合类型包括Collection抽象类型,还有抽象类型,还有Set、Bag、OrderedSet和和Sequence。:1)Collection类型类型Collection类型是其他集合类型的超
18、类型。类型是其他集合类型的超类型。4、集合类型、集合类型定义在定义在Collection类型上的操作类型上的操作 操作操作说明说明size():Integer返回指定Collection中的元素个数count(object:T):Integer返回参数对象在指定Collection中出现的次数includes(object:T):Boolean当对象是指定Collection的一个元素时,返回真excludes(object:T):Boolean当对象不被包含在指定Collection中时,返回真includesAll(c2:Collection(T):Boolean当指定Collection
19、包含参数c2中所有元素时,返回真excludesAll(c2:Collection(T):Boolean当指定Collection不包含参数c2中任何元素时,返回真isEmpty():Boolean当指定Collection不包含任何元素时,返回真notEmpty():Boolean当指定Collection至少有一个元素时,返回真sum():T返回指定Collection中所有元素的和product(c2:Collection(T2):Set(Tuple(first:T,second:T2)返回指定Collection与c2 Collection的迪卡尔积Iterate()访问集合中的元素并
20、查询或计算表达式4、集合类型、集合类型42)Set类型类型Set类型是类型是不包括重复元素不包括重复元素的对象组,的对象组,Set类型中的元素是无序的。类型中的元素是无序的。4、集合类型、集合类型 定义在定义在Set类型上的操作类型上的操作 操作操作说明说明union(s:Set(T):Set(T)返回指定Set与参数s的联合体,结果是Set类型union(bag:Bag(T):Bag(T)返回指定Set与参数bag的联合体,结果是Bag类型=(s:Set(T):Boolean当指定Set与s包含相同的元素时,返回真intersection(s:Set(T):Set(T)返回指定Set与参数s
21、的交集intersection(bag:Bag(T):Set(T)返回指定Set与参数bag的交集(s:Set(T):Set(T)返回指定Set与参数s的差集including(object:T):Set(T)返回包含在指定Set中的所有元素以及参数对象的Setexcluding(object:T):Set(T)返回指定Set中的除参数对象以外的所有元素的SetsymmetricDifference(s:Set(T):Set(T)返回包含在指定Set和参数Set中,但不同时包含在这两个Set中的元素组成的Setcount(object:T):Integer返回参数对象在指定Set中出现的次数a
22、sSet():Set(T)返回指定Set本身asOrderedSet():OrderedSet(T)返回指定Set中移除所有重复元素后,所有元素以随机顺序组成的OrderedSetasSequence():Sequence(T)返回指定Set中所有元素的以随机顺序组成的SequenceasBag():Bag(T)返回包含Set中所有元素的Bag4、集合类型、集合类型3)OrderedSet类型类型OrderedSet类型是不包括重复元素,并且有类型是不包括重复元素,并且有序的对象组。序的对象组。4、集合类型、集合类型定义在定义在OrderedSet类型上的操作类型上的操作 操作操作说明说明ap
23、pend(object:T):OrderedSet(T)返回指定OrderedSet所有元素,并在后面加上参数对象object组成的OrderedSetprepend(object:T):OrderedSet(T)返回参数对象object并在后面加上指定OrderedSet所有元素组成的OrderedSetinsertAt(index:Integer,object:T):rderedSet(T)返回在指定位置插入参数对象object后所组成的OrderedSetsubOrderedSet(lower:Integer,upper:Integer):OrderedSet(T)返回指定Ordered
24、Set中从lower到upper位置元素组成的子OrderedSetat(i:Integer):T返回指定OrderedSet中第i个位置的元素indexOf(obj:T):Integer返回参数对象obj在指定OrderedSet中出现有位置索引first():T返回指定OrderedSet的第一个元素last():T返回指定OrderedSet的最后一个元素4、集合类型、集合类型4)Bag类型类型Bag类型也是对象组,类型也是对象组,Bag类型与类型与Set类型的类型的不同之处在于不同之处在于Bag类型中类型中可以包含重复元素可以包含重复元素。4、集合类型、集合类型定义在定义在Bag类型上
25、的操作类型上的操作 操作操作说明说明=(bag:Bag(T):Boolean当指定Bag与参数bag包含相同的元素时,返回真(bag:Bag(T):Boolean当指定Bag与参数bag不包含相同的元素时,返回真union(bag:Bag(T):Bag(T)返回指定Bag与参数bag的联合体,结果是Bag类型union(set:Set(T):Bag(T)返回指定Bag与参数set的联合体,结果是Bag类型intersection(bag:Bag(T):Bag(T)返回指定Bag与参数bag的交集intersection(set:Set(T):Set(T)返回指定Bag与参数set的交集incl
展开阅读全文