迁移
Figure 2-4 Setting Timers on Transitions of State Machines
图2-5 顺序图中的延迟表示
Figure 2-5 Time Delay in Sequence Diagrams
经过实时扩展建模实时系统,目前UML可以利用以下几种方法在图中表示时间约束[45,53]:
(1) 设置状态机迁移的定时器(TimeEvent),如图2-4所示。
(2) 在顺序图中定义时间延迟,如图2-5所示。
(3) 在顺序图中增加时间注释,如图2-6所示。
(4) 在顺序图中增加时间标尺,如图2-7所示。
图2-6 顺序图中的注释
Figure 2-6 Sequence Diagrams with Time Notation
图2-7 加上时间标尺的顺序图
Figure 2-7 Sequence Diagram with Time Mark
2.3 实时逻辑(RTL)概述
实时逻辑是一种符合实时系统时间特性推理的规范化语言,是对事件发生时刻的一种推理方式。在实时逻辑中,标识出事件发生时间点对实时系统的事件行为具有重要的意义。这里所指的事件可以分为四类[54,55]:
(1) 开始事件:标识动作的开始,动作A的开始用符号?A表示。
(2) 停止事件:标识动作的结束,动作A的完成用符号?A表示。
(3) 外部事件:由外部激励驱动而发生的事件,例如按下按钮用?BUTTON表示。
(4) 转移事件:标识系统属性的改变。
每个事件都必须用唯一的名字表示,不同类型的事件在事件名前加上相应的前缀符号来表示。每个动作都有相应的开始事件和停止事件,用大写字母表示。一个动作可以包含子动作,并把动作B的子动作A可以表示为B.A。变量用小写字母表示,可以代表动作、整数或事件等。逻辑谓词由符号集{<、=、>、?、?}组成,用以表示系统中时间的先后关系。逻辑函数有+、-、×和@函数,其中加、减、乘是与常量的运算,@函数如定义4。
实时逻辑公式由谓词、存在量词?、全称量词?以及连接词(构成。
在应用程序中,事件用于表示有关状态发生的改变。计算时,一个事件可以出现多个实例,即事件的重现。实时系统的计算也可以看作是事件发生的序列。因此事件是实时逻辑中非常重要的一个概念,一个事件的发生是在对应实例出现的时间点。用时间特性来表示计算时实例之间的关系。在实时逻辑中,事件发生函数定义为:
定义4[54]. 事件发生函数@(e,i)表示事件e第i次实例出现的时间。其中i?N+,是@函数的参数。@函数是一个单调递增函数,即?e,?i ?N+,有@(e,i+1)>@(e,i)。
#函数定义为@函数的反函数,表示事件e在t时刻最近发生的是第几次实例。
定义5. 事件e在t时刻发生的第i次实例,定义如下[54]:
另外,有时需要扩展@函数,使它能够表达将来发生时间的相关实例。
定义6. 相关@函数定义如下[56-58]:
@r(e,t,i)=@(e,#(e,t)+i),其中#(e,t)+i >0,i ?N,为相关@函数的参数。t称为参考时间。
2.4 AOP概述
2.4.1 问题的提出
在以往的过程化程序设计和面向对象编程技术中有些编程问题并不能很好的解决。首先,当对跨越多个模块的心事进行建模时,程序设计的代码分散在系统各个模块中,从而导致系统难以开发和维护[6]。其次,从技术的细节看,面向对象设计技术本质是静态的,封闭的,任何需求的细微变化都可能对系统设计造成重大的影响。虽然设计模式可以解决这个问题,但由于对象具有封装的特性,设计模式也只能在接口和抽象中大做文章,而对对象内部则无能为力[59]。面向方面编程技术的出现就能很好的解决上述的问题,AOP允许开发者动态的修改OO模型,而不必修改对象内部的实现和原有的封装性,就能满足不断增加的系统需求,并且可以把封装在多个类的内部横切关注点抽取出来,封装到一个可重用模块(即方面),从而减少了代码的冗余,降低模块间的耦合性,提高了模块的重用性和可维护性。
2.4.2 AOP术语及实现原理
AOP是一种基于关注分离的新技术,系统不同的关注能够被分离出来并进行单独的设计,可以解决面向对象编程不能简单解决的复杂问题。面向方面软件设计方法把系统建模分成两部分:核心组件和方面。
面向方面建模技术允许系统开发者在系统设计时,从核心功能性需求中分离出不同的关注,例如实时性、安全性、持久性、错误和异常处理、日志、同步控制、调度、性能优化、通信管理、资源共享、分布式管理等,如图2-8所示进行关注的分离实现[59],而且支持方面的组合和绑定来实现系统的集成。关注分离改进系统的设计,开发者只需要实现单独的方面而不必过多的考虑其它方面和系统的核心组件。
图2-8 从模块中分离关注点[59]
Figure 2-8 Concerns Separation from Modules
但是AOP的出现并没有代替OOP,而是构建在OOP系统上,可以说OOP是AOP的技术基础,AOP是对OOP的继承和发展。相比于以前的程序设计方法学,AOP更好地将关注点分离,从而可以模块化地实现贯穿特性。当使用AOP编程时,可以结合需求(问题)的特点,选择合适的实现结构:过程、对象或者方面。从功能分解的角度来看,我们可以将面向对象分析方法所得到的类层次看作是对系统进行垂直的功能分解的结果,而Aspect则是对系统进行水平分解的结果,如图2-9所示。面向对象与面向方面软件开发方法的结合,形成一种更灵活、交叉的软件开发方法。
图2-9 系统纵向和横切关注点的分解[59]
Figure 2-9 Separation of Crossing-cut Concerns
AOP 的概念是由 Gregor Kiczales 领导的施乐项目小组在对软件架构改进的过程中形成的,并于 1998 年发布了 AspectJ,实现对 AOP 技术提供 Java 语言和工具的支持。目前,AspectJ在技术上是比较成熟的面向方面java编程的实现;因此,这里基于AspectJ简单介绍面向方面的一些概念,详细请参照文献[12]等。
连接点(join point):程序中激活advice被执行的触发点,例如对象接受方法调用点。
切点(pointcut):一系列连接点通过与或非操作("&&"、"||"和"!")组成切点。
通知(advice):关注的实现,指定函数在连接点执行的机制。advice分为"before"、"after"、"around"、"after throwing"和"after returning"等。
方面 (aspect): 实现横切关注的模块化单元,由pointcut、advice和introduction等来定义,与面向对象编程的类相似,能够重用和继承。
引入(introduction):提供修改类的特性,可以插入成员(字段、方法、接口和构造器等)和关系(范化、实现等)到基类。
织入(weaving):将横切关注点代码和主应用程序集成在一起的工作。
其中advice、joinpoint、pointcut关系如图2-10所示。
图2-10 AOP概念关系
Figure 2-10 Relationship of AOP Concepts
图2-11 AOP实现过程
Figure 2-11 Process of AOP
AOP开发步骤如图2-11所示。整个过程大致可以分为三个阶段:方面分解、方面实现和方面织入。方面分解把横切关注点从系统需求中抽取出来形成方面。方面实现把各个分离出来的方面独立实现。方面织入把已经独立实现的方面集成到系统核心组件构成最终需求的系统。
aspect为那些遍布整个应用程序中但相互之间没有关系的类提供了模块性。可以把方面独立出来进行设计和维护,然后在需要的时候把它编织到其他对象中,如图2-12所示。方面实现之后可以有3种方式来织入到系统中[60]:
(1) 静态织入(编译时织入):静态织入是指在业务功能代码中的适当位置,比如某段代码执行前,或执行后,将方面中的编码插入,从而形成混合的编码。方面中的编码在程序运行前,已被内嵌到业务功能代码中,因此,代码可以被优化,从而使织入产生的开销最小化,最终产生的混合代码,其执行速度接近为使用AOP方式编写的代码。这种方法主要是借助预编译
上一篇:
基于PLC的立体车库控制系统的设计(word文档)
下一篇:
科研管理杂志简介