- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RAISE规范语言及其开发方法-15
第十五讲 RAISE 规范语言及其开发方法
RAISE[6]是工业软件工程的严格方法,已经成功的用在很多安全重要性系统的开发中[7]。本讲介绍RAISE形式化规范语言的数据类型、表达式、模块、 类和对象, 以及RAISE开发方法, 从初始规范、规范的精化到可执行程序。
1、 RAISE开发背景
RAISE是Rigorous Approach to Industrial Software Engineering的缩写, 指工业软件工程的严格方法。RAISE 是在一个光谱的规范语言基础上, 提供一系列工具和转换技术,形成一种开发软件的严格方法。
开发RAISE项目的起因来自于VDM[1],VDM 存在两个明显的不足之处:第一它缺乏模块性,第二VDM不能处理并发的情况。RAISE使用了一种完全不同的方法: 代数法,该方法与VDM的基于模型的方法在下述两方面存在不同之处:即如何描述事物以及给规范语言赋以语义。基于模型的方法中没有明确解决怎样将这两方面结合起来的问题。而RAISE规范语言-RSL[5](RAISE Specification Language)- 做到了这一点,这正是它成功之处。RSL中的模块性得益于代数语言(ASL[2])。而并发则是基于过程代数(Process Algebra) -与CSP[3]和CCS[4]类似, 但是又加入了内锁(interlock)操作符。
RSL是一种“光谱”语言,它既可以用于书写非常抽象的、初级的规范, 也可以用于书写易于甚至能自动转换到程序语言的更具体的规范。RSL包含不同程度的规范:应用式、命令式、并行式、模块,我们将在下面逐一介绍。
2、 RAISE 规范语言(RSL)
数据类型
RSL如其它各种规范和程序语言一样, 是一种类型语言,它对一个值、变量和
通道都给出唯一的数据类型,并依次检查这些标识符的出现是否与该类型集合规则一致。
2.1.1 固有类型
RSL本身有七种定义好的数据类型:Bool、 Int、 Nat、Real、Char、Text 、
Unit。Unit?类型只有一个值“( )”,有时也写作:skip,主要用在命令式规范和并发规范中,目的是为函数提供参数类型, 这些函数或者不需要参数, 或者没有返回值。关于这些类型容许的操作和值的集合,参考[5]。
2.1.2 类型构造器
(1)Products类型:
Product是不同类型值的有穷并且有限的集合。例如:P = (3, “Mary”, true), 类型表达式是:Nat ( Text ( Bool
(2)Sets 类型:
Set 是同种类型不同值的无序集合。例如:S = {2, 4},类型表达式是:Nat-set, 表示整数的有穷集合, Nat-infset 表示整数的无穷集合。除了常用的集合运算如: (、(、∩、∪、 \ 、 ( 、 (,RSL中提供了card操作返回有穷集合的大小。例如:card S = 2
(3)Lists 类型:
List 表示同种类型值的序列, 可以有重复的元素。例如:L = 2, 3, 3,4,类型表达式是:Nat*,表示整数列表。RSL中可以直接根据索引得到列表中相应元素,如 L(1) = 2。 RSL提供了取表头和表尾的操作:hd L = 2, tl L = 4, 另外RSL还提供了求表长度、索引集合和获取所有列表元素的操作, 如:len L = 4, inds L = {1, 2, 3, 4}, elems L = {2,3,4}。
(4)Map类型
Map映射一种类型的值到另一种类型的值。例如: M = [3 (”li”, 5(”sun”], 类型定义:Nat -m- Text,可以映射到定义域的某个值上:例如:M(3) = “li”。Map的基本操作是返回其定义域和值域:dom M = { 3, 5}, rng M = {“li”, “sun”}。 另外还有重载操作和合并操作:M !! [3(”he”] = [3(”he”, 5(”sun”],M ∪ [4(”wu”] = [3 (”li”, 5(”sun”, 4(”wu”],另外还有两个限制定义域的操作:”\”表示从定义域中删除某些值的集合,”/”表示限制定义域到某些值的集合,例如:S = {3}, M \ S = [5(”sun”], M / S = [3(”li”]。
(5)全序函数类型
RSL中表示全序函数用符号 ”(” 如:f: type_expr1 ( type_expr2
(6)偏序函数类型
RSL中表示偏序函数用符号 ”-~-” 如:f: type_expr1 -~- type_expr2
2.1.3 子类
文档评论(0)