复杂约束的描述与分析
复杂约束的描述与分析
问题的提出·应用程序要符合编程语言本身的一些约束一例如:对字符串不能做乘法操作对数组的访问不能越界等等一由编译器来负责检香一主要在语义分析阶段
问题的提出 • 应用程序要符合编程语言本身的一些约束 – 例如: 对字符串不能做乘法操作 对数组的访问不能越界等等 – 由编译器来负责检查 – 主要在语义分析阶段
·除此之外,还需要符合一些特定的约束·在完成某特定的功能时,需要调用对象上的一组API来协同完成。在调用这些方法时,必须要遵守一些特定的时序约束。一例如:“打开”文件后要“关闭”“关”中断后要“打开”一涉及单个对象的一般用状态机描述-Typestate
• 除此之外,还需要符合一些特定的约束 • 在完成某特定的功能时,需要调用对象上 的一组API来协同完成。在调用这些方法时, 必须要遵守一些特定的时序约束。 – 例如:“打开” 文件后要 “关闭” “关”中断后要“打开” – 涉及单个对象的一般用状态机描述 – Typestate
更复杂的例子:时序涉及多个对象·使用java.util.Iterator来遍历java.util.ArrayList约束1ArrayList list = new调用iterator方法之后,不ArrayList<String>();能再修改ArrayList的内容for(int i=0;i<10;i++)list.add(i);1(如左所示)Iteratorit=list.iteratorllist.add(10);while(it.hasNext()System.out.println(it.next()8约束2System.out.println(it.next()调用next())之前必须调用hasNext()
更复杂的例子:时序涉及多个对象 • 使用java.util.Iterator来遍历 java.util.ArrayList ArrayList list = new ArrayList<String>(); for(int i=0;i<10;i++){ list.add(i); } Iterator it = list.iterator(); list.add(10); while(it.hasNext()){ System.out.println(it.next()); } System.out.println(it.next()); 正确的使用方式 (如左所示) 约束1 调用iterator方法之后,不 能再修改ArrayList的内容 约束2 调用next() 之前必须调用 hasNext()
题目涉及多个对象时序约束的描述·实现一个约束检查器,来验证给定的程序是否满足包含多个对象的时序约束一输入:·待检程序:源码·约束描述:自定义的约束描述格式,要求准确、无歧义一输出:·待检程序是否符合了给定的约束·如有违反,需将错误定位
题目 • 涉及多个对象时序约束的描述 • 实现一个约束检查器,来验证给定的程序 是否满足包含多个对象的时序约束 – 输入: • 待检程序:源码 • 约束描述:自定义的约束描述格式,要求准确、无 歧义 – 输出: • 待检程序是否符合了给定的约束 • 如有违反,需将错误定位