复杂约束的描述与分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正确的使用方式 (如左所示)
约束2 调用next() 之前必须调用
hasNext()
题目
❖ 涉及多个对象时序约束的描述
❖ 实现一个约束检查器,来验证给定的程序 是否满足包含多个对象的时序约束
输入:
❖待检程序:源码 ❖约束描述:自定义的约束描述格式,要求准确、无
歧义
输出:
❖待检程序是否符合了给定的约束 ❖如有违反,需将错误定位
典型挑战:别名、跨过程
需要别名分析来确定第8行的out 不是in或者in中包含的任何list的 别名;
同时也需要过程间分析,因为可 能会在别处引入别名,比如该方 法的调用者可能会传入同一个list 分别作为in和out
主要参考文献
❖ Naeem, N. A., Lhotak, O. Typestate-like analysis of multiple interacting objects. OOPSLA '08: Proceedings of the 23rd ACM SIGPLAN conference on Objectoriented programming systems languages and applications, ACM, 2008, 347-366
list.add(i); } Iterator it = list.iterator(); list.add(10); while(it.hasNext()){
System.out.println(Biblioteka Baidut.next()); } System.out.println(it.next());
约束1 调用iterator方法之后,不 能再修改ArrayList的内容
问题的提出
❖ 应用程序要符合编程语言本身的一些约束
例如: 对字符串不能做乘法操作 对数组的访问不能越界等等
由编译器来负责检查 主要在语义分析阶段
❖ 除此之外,还需要符合一些特定的约束
❖ 在完成某特定的功能时,需要调用对象上 的一组API来协同完成。在调用这些方法时, 必须要遵守一些特定的时序约束。
例如:“打开” 文件后 要 “关闭” “关”中断后要“打开”
涉及单个对象的一般用状态机描述
Typestate
更复杂的例子:时序涉及多个对象
❖ 使用java.util.Iterator来遍历
javArara.yuListtililst.A= nrewrayList
ArrayList<String>(); for(int i=0;i<10;i++){
❖ Bierhoff, K., Aldrich, J. Modular typestate checking of aliased objects. OOPSLA '07: Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications, ACM, 2007, 301-320
相关文档
最新文档