建模和模拟在工程

PDF
建模和模拟在工程/2014年/文章

研究文章|开放获取

体积 2014年 |文章的ID 736359年 | https://doi.org/10.1155/2014/736359

Meriem Chibani,卜拉欣Belattar, Abdelhabib Bourouis, 实际利益的面向方面的编程范式在离散事件仿真”,建模和模拟在工程, 卷。2014年, 文章的ID736359年, 16 页面, 2014年 https://doi.org/10.1155/2014/736359

实际利益的面向方面的编程范式在离散事件仿真

学术编辑器:迪米特里·e·Manolakos
收到了 2014年7月16日
修改后的 2014年10月20日
接受 2014年10月20日
发表 2014年12月28日

文摘

面向方面的建模与仿真是一种新方法,使用的分离关注点原则提高质量模型和仿真工具。采用分离关注点(SOC)原则。因此,横切关注点,如过程同步,稳定状态检测和图形动画仿真功能模块分开。捕获的横切关注点进行模块化的方式应对复杂性和实现所需的工程质量因素如健壮性、模块化、适应性和可重用性。本文提供了一个总结与使用面向方面的范例说明模拟的主要可能感染仿真系统的横切关注点。给出了一个实际的例子使用Japrosim离散事件仿真库。

1。介绍

在设计软件时,通常有特定的要求和注意事项进行为了应付复杂性和实现所需的工程质量等因素的鲁棒性、适应性和可重用性。这些要求或注意事项被称为问题。获得预期的粒度的识别和分离关注点的分离关注点命名(SOC)的原则。面向方面的编程(AOP)已被建议作为一项新技术,采用SOC原则及其六个“C”属性:Concern-oriented, Canonicality,可组合性,可计算性,关闭,Certifiability [1]。它增长在1990年代早期,目的是管理横切关注点,如日志记录、安全、和分布分散在多个软件功能的核心模块。除了代码散射,当一个模块同时处理多个问题,代码缠绕时减少系统可维护性和增加复杂性。

AOP不引入一个全新的设计过程加强设计只是一个新手段。过程式编程带来了功能抽象和面向对象编程生对象抽象,面向方面编程介绍关注抽象(2]。AOP编程方法主要有4种:施乐帕克研究中心AOP,面向主题的编程(SOP),自适应编程(美联社)和组合过滤器(CF)的方法(3]。施乐帕克研究中心AOP是最受欢迎的方法(4]。它通常被称为面向方面编程和AspectJ作为实现语言。

在我们的研究中,我们使用施乐帕洛阿尔托研究中心的方法,即AOP,和我们的工作重点是AspectJ最成熟,研究领域的广泛应用,因为它是第一个实用的基于Java的AOP实现。它能增强Java使用额外的结构来管理横切关注点作为切入点,建议,静态横切结构和方面4]。

仿真建模软件需要更多和更多的功能以应对可能出现的问题。他们可能包括许多横切关注点。作为一个实例,有同步,许多仿真工具实现并发试图提供一种更直接的方式建模的系统,调度策略,在模拟优化,因为性能所需的属性,和分布(例如,使用网络仿真)5]。因此,应用基于建模跨度范围广泛的仿真软件。应用范围从离散事件仿真(DES)框架龟岛(6],Simkit [7],SimJ [8),和基于组件的工具框架OSIF [9)使用AOP范式分离的DES模型实验框架支持软件重用和可替换主体的仿真(10,11)系统。此外,AOP已被用于开发大型模拟软件系统在防灾仿真系统(12)和管道和交通模拟器(13]。此外,提出了几种方法分离功能的核心软件应用程序的性能问题了(14- - - - - -16]。

本文的目的是为了说明关键概念的面向方面的方法来确定主要的横切关注点,可以实现在模拟和讨论的面向方面的版本Japrosim框架(17]。AO仿真的使用是合理的,因为事实上域仿真软件的需求是复杂的,面向对象范型无法应对这种复杂性。

剩下的论文分为六个部分。部分2礼物背后的主要目标在模拟使用面向方面的范例。部分3概述了大部分在面向方面的仿真工作。部分4投的AOP方法。部分5主要介绍了横切关注点,可能感染仿真系统和总参谋部实现它们。节6应用AOP的案例研究范式,Japrosim。最后,给出一个结论,为未来的研究打开大门。

2。问题陈述和贡献

虽然面向对象仿真提供了一个丰富而直观的范式构建实际系统的模型,它遭受的固有弱点面向对象编程(OOP)方法无法模块化所有问题。OOP方法的局限性是它无法定位问题,自然不适合单个程序模块或者几个紧密相关的模块。这些担忧被称为横切关注点横切或跨越实现模块。

OOP代码患有两种现象造成需求和代码之间的偏差:缠绕和散射。不断发生在多个关注点在单个模块的模块更难理解和维护。散射的结果发生在当一个关注点的实现分布在多个模块导致不一致的风险在每个使用点。AOP范式将更加重视横切关注点比OOP和其他语言的范例。它提供了明确的语言机制捕获横切关注点模块化的方式,从而实现利益从改进的模块化结果。这些好处在于使代码更容易设计、实现、维护、重用和演变。AOP的横切关注点的功能模块,并将它们分离位置(称为方面20.]。

除此之外,仿真系统包括担心不一定结合和同步功能组件,调度、优化和分配问题。这些因素影响的软件构件通常会产生一个糟糕的设计。缠绕的代码增加功能组件之间的依赖关系,从而使源代码很难发展,理解,和发展。因此,仿真系统成为相当受限制的可重用性和适应性等特性。在这种背景下,模拟域需要特定的关注点分离。

1提出了一种动力热力控制系统仿真的例子有建筑房间需要特定的温度和组成的一个网络加热器,管道和锅炉。锅炉是热源,它生成一个热流分布通过电路。每个加热器有一个阀门,监管机制,将热流的一部分转移到房间,直到他们达到所选温度。每个房间都有预定义的尺寸,材料,和对流属性。加热器存储信息大小、辐射区域和对流属性。用户可以设置房间所需的温度,当房间里的当前温度低于这个值,控制作用是激活问一定热锅炉。

模拟热控制系统,需要一个数学模型来描述不同组件之间的热流。数学模型添加新组件对象模型之间的关系:每个加热器需要知道相关的温度的房间,每个房间知道邻国的温度,锅炉能够设置加热器阀门在其计算。此外,指定如何模拟运行,一个自然的建模包括组件的实现采用独立线程。这种情况意味着考虑到同步和调度问题,例如,同步加热器和房间之间的沟通关于加热器的热传递或阀操作因为竞态条件可能出现如果锅炉试着使用它们。同步代码分散在多个类。后者取决于不同的定义的变量之间的关系的数学模型。算法1显示方面的相关数学模型,并发性、调度和优化分散在体系结构。这是一个简化的例子,不难处理相对少量的缠绕在代码中存在的。但在实际项目复杂性由于这种不断迅速扩大成为一个主要的障碍对于维护和可重用性(5]。

extends HeatPropagator{保护双重generateHeat〈〉{
同步(qroomslook){
/ /实例变量- - - - - -向量阀门;
私人双qT;
私人双qrooms;(枚举e−heaters.elements〈〉;
私人向量加热器;
加热器加热−(加热器)(e.nextElement〈〉);
私有对象qroomslook =新对象(0];
valves.add (h.getValve〈〉);
/ /实例方法
公共空间requestHeat(双q矢量h){
同步(qroomsLock){双问;
qrooms = qrooms + q;q = MathPackage.RungeKutta(气、qrooms qT,…);
heaters.addAll (h);(枚举e =加热器。元素〈〉;
}
}加热器加热−(加热器)(e.nextElement〈〉);
受保护的宣传〈〉{
qTthis.generateHeat〈〉;h.setValve (valves.elementAt (1));
next.addHeat (qT);
}返回(q);
p下的双transferredHeat〈〉{}
同步(qlock){}
}/ /结束Boilar
}
}
大胆的代码对应的代码由于并发性方面。
强调代码对应的代码由于数学方面。

离散事件仿真器实现的问题,如活动安排、事件处理、跟踪仿真的状态系统中横切多个模块。这就增加了复杂性,降低了可维护性。分离系统的横切关注点改善他们的质量属性模块化、可理解性、可维护性、可重用性,和可测试性21]。本文利用面向方面的仿真建模域通过:(我)给予概述面向方面的编程(AOP)方法的比较研究;(2)识别最横切关注点的仿真系统和他们的一般实施过程;(3)提出了面向方面(AO)完整版Japrosim图书馆;(iv)评估AOP Japrosim包使用AOMetrics工具。

3所示。文献综述

使用AOP的离散事件仿真域取决于几个因素相关的面向方面的范式本身作为其应用程序的水平(规范、设计或实现阶段),共存方法(可替换主体、组件或面向对象),和使用面向方面语言(如AspecJ、方面或MAML)。除此之外,面向方面的仿真系统可以从仿真的角度分类,即的横切关注点分离。后者特定仿真建模域稳态检测或他们可能会发现在任何应用程序异常处理。在以下,大多数现有的总结在文献提供工作。

Simkit基于OO范式是一个开源工具和活动图形式化的建模。作者在7)提出了AO版本的AspectJ分离仿真终止规则的解决方案,恢复模拟运行和资源池横切关注点。然而,他们所有的横切关注点分离小姐,尤其是那些可以发现在任何成熟的框架稳定状态检测和图形用户界面。在[9),基于组件的工具框架OSIF使用AOP范式分离的DES模型实验框架,使软件复用和演化。此外,AOP被用于发展的开放式仿真架构(OSA) [22]在OSIF相同的目的。它允许双方更好的组件重用,重用给定模型的各种场景,或重用一个给定的场景各种模型为了节省时间,金钱,和人类的努力。网络安全研究的一个简单的用例被用来说明前面的技术所带来的好处。

SimJ框架是一个学术框架只包含日志横切关注点。作者在8)证实了他们的假说,AO GoF 20设计模式代码的复杂性,减少消除散射代码,并允许设计额外的AO热点框架和性能损失很小,完全可以接受通过SimJ案例研究AO适配器设计模式的使用。作者认为SimJ应用程序框架不给任何对其离散事件仿真领域的重要性。下,在6]作者介绍了他们基于java的龟岛模拟框架,采用AO确保同步方面。

在[10),讨论了可替换主体仿真系统,它由两种类型的代理,一组用于描述仿真模型,另一个用于观测机制。这组独立代理是由离散事件交互,每个代理都有时间表,生成其计划的活动。系统上执行一个框架,使用OO范式定义其代理模型和网络技术与建模与仿真环境进行交互。这个框架的内核是编程语言MAML(可替换主体建模语言),有能力之间的分离模型和观测机制由于面向方面的范式从设计阶段到实施阶段,从而提高系统的可维护性,减少其复杂性。MAML xmc编译器生成objective - c代码从MAML源代码经过编织模型对象和观察对象。尽管丰富的MAML语法支持AOP, AspectJ相比仍处于起步阶段。

在[11),AO范式已经被用于开发一个可替换主体系统致力于模拟物理现象。加器系统(可替换主体有限环境系统)由一个环境的形式节点矩阵和一组代理操作这些节点。方面用于将任务分配给代理通过添加适当的功能来执行他们的任务。此外,这些方面编织适当的资源环境节点和属性。加器包含三个其他类型的控制方面,可视化,存储仿真结果。加器是基于AspectJ的实现,使系统一般为特定需求构建版本(它足以把适当的方面)。作者的实验系统,两种现象。首先是热交换和运动现象。第二个是热交换和结晶。

在[12),一个新的面向方面方法防灾仿真系统(ABR)已经解决。该方法分离的模拟应用程序的核心功能模拟横切关注点由于横向分解(HD)方法依赖于AOP的范例。实现的方法是在AoSiF(面向方面的仿真框架)是分布式仿真框架的扩展(DiSiF) [23]。它使用资源范式,基于actor的工作流建模、web服务和网格计算的实现技术和Java注释声明性编程除了AspectJ的面向方面的实现。为了演示的方法的适用性,两个横切关注点,即分布和工具集成,实现。不幸的是,问题不是特定的仿真建模领域。

在[13),作者实现了一个管道模拟系统。该系统利用AOP的范例代码级别。模拟器横切关注点是同步执行顺序,用户界面(UI),日志都写在不同的aspect-specific语言(同样)。它有一个模块化aspect-weaver机制,提供了一个通用方面语言的普遍性,而不丢失aspect-specific语言定义方面的能力和优势。

在[24),一个AO实时交通模拟器。它使用AOP来封装七实时使用AspectJ横切关注点:线程调度和调度、同步和资源共享、异步线程终止,内存管理、物理内存访问、异步事件处理和异步传输控制。比较两个系统,一个实时的交通模拟器及其面向方面的等效,执行指示AO方法的优缺点。它是基于OO Chidamber和Kemerer (C 大部分)度量套件。上述问题,他们可能会发现在任何实时系统。此外,尽管事实上,C 度量套件是适应大部分AO系统,需要进一步调查的指标适用于评估AO的应用程序。

在[25],基于仿真的设计水平性能分析方法提出了软件应用程序的性能问题在哪里分开以来的功能模型设计阶段通过使用面向方面编程。不同的软件系统建模的设计使用UML类图和序列图,性能模型是一种基于xml的表示来自UML概要文件性能。从设计模型代码生成后,介绍了AspectJ韦弗为了制定仿真代码。作者的实验方法使用分布式映射查看器系统。在[14),他们认为他们的方法是通用的,可以用于分析其他质量属性的软件系统的可靠性。在[26),提出了另一种方法来分析性能。与先例方法不同的是,它定义了性能方面的集合包括一长串的指标如响应时间、吞吐量,概率和时间之间的错误在面向方面的正式设计分析框架(FDAF)。作者关注建模的响应时间性能方面和他们选择实时UML的基本符号翻译成体系结构描述语言(ADL)主。作者使用模拟技术来评估响应时间DNS查询处理子系统。

在[15),作者提出了一个面向方面的框架agent-oriented软件分离性能问题在设计使用aSideML语言水平,这是一个UML扩展表示在不同的抽象层次方面。这个框架提供了分离性能问题在不同agenthood属性(流动性、自主适应性、交互和学习)和场景中特定的应用程序问题。场景的设计模型具体应用问题和agent-hood问题有自己的Java实现代码,同时性能模型有一个单独的AspectJ实现。之后,这些都是使用AspectJ编译器交织在一起。框架结构是由性能组件,代理问题,代理平台组件,工作负载和资源问题,IInformatioGathering界面,IperformanceReporting接口。

在[16),作者提出一种新的方法,研究横切的性能影响方面的安全对整个系统的性能。收益的方法性能注释添加到主数据和模型使用UML性能方面概要文件然后实例化泛型方面模型转换为一个特定于上下文的按照设计师提供的一组绑定规则转换参数注释的通用模型转换为具体的方面。后者是由与主模型根据一组指令组成。结果是一个由注释UML可以自动转换成性能模型(分层排队网络(LQN)在这种情况下)通过使用转换技术。与现有的解决者LQN模型进行了分析。

在[27),作者讨论功能分离的新方法(定性)行为规范和定量性能约束,因为阶段。由于AOP,方面的规范是用不同的语言编写:进程代数莲属植物功能行为的抽象规范和定量方面的概率时序逻辑(性能约束)。方面编织组成两方面规范和组合的结果是一个automata-style全局模型,可以从生成标记转换系统的组成(来自莲属植物)。事件调度器是来自时序逻辑公式。最后,全球模型可以用于性能分析仿真。

这项工作类似于这些提议利用AOP的范式重构一个离散事件仿真框架。在我们的例子中,Japrosim。从另一个方面,本文确定了主要模拟横切关注点稳态检测和图形动画,不存在之前的作品和评估其影响仿真系统设计质量属性。

此外,为了受益于先进的关注点分离技术如基于编程、自适应编程,组合过滤器,和AOP在仿真建模领域,提出了一种比较研究,阐明它们的原理结构和它们之间的关系。

4所示。面向方面的方法

面向方面的编程范式旨在管理横切关注点,也就是说,担心跨多个模块导致散射和缠绕的代码。它有两个主要特点,量化和遗忘。Filman和弗里德曼(28说这“AOP可以被理解为使量化表述的欲望的行为程序和这些量化掌控的程序员编写的程序。“仔细看看四个主要在以下提供AOP方法。

4.1。施乐帕克研究中心面向方面的编程

面向方面编程的施乐公司帕洛阿尔托研究中心(PARC)。它横切关注点分离到新的模块化单元(称为方面29日]。它有AspectJ作为实现语言的扩展Java,但还有其他的实现语言,像AspectC C和Pythius Python。实现横切关注点,AOP系统可能包括许多结构,中央的连接点模型由两部分组成:连接点在应用程序的执行点和切入点的机制选择连接点。方面有建议附加到一个或多个连接点将横切关注点。当一个建议是附加到连接点,它将被执行。除此之外,它有一个修饰符可以指定执行时间相对于连接点:前,后,后,异常后,或者返回值。建议是一个动态横切元素,因为它会影响系统的执行。此外,AOP实现中可能包含静态横切元素改变系统的静态结构和weave-time声明其结构。图2显示所有这些概念和它们之间的相互关系在AOP系统中。每个AOP系统可以实现模型的一个子集。

4.2。面向主题的编程

介绍了面向主题的编程范式在IBM在1993年托马斯·沃森研究中心。它是面向对象编程的一个扩展,支持与不同的主观视角构建系统。面向主题的编程哲学是基于两个核心思想:系统的部门在几个主题和组合规则。一个主题是一个完整的或部分对象模型。这是一个收集相关的类或类的一个片段,如图为特定目的3交通运输和主题。一个主题可以完全或部分应用程序。这些不同的学科可以定义和操作上以独立的方式共享对象(18]。

一起组成规则应用于组合不同的主题。创建一个新的主题,构成合并现有的功能主题。有三种规则:对应规则,规则,和correspondence-and-combination规则。之间的对应规则定义通讯类、方法和不同主题的成员。组合规则指定相应和noncorresponding类、方法和不同主题的成员组合在一起,形成一个复合主题。Correspondence-and-combination规则可以同时做两个(30.]。每个主题分别编译生成二进制的话题。二进制对象包含一个标签提供信息和编译器生成的二进制代码。面向主题的排字工人使用标签中的信息将研究对象在一起。它不检查或修改个别受试者的二进制代码。

面向主题的规划的总体目标是促进合作应用套件的发展和演化。它支持分散在时间和空间。它还可以添加扩展到现有系统非侵入性的方式。支持,“c++ Subjectifier”和“二元主体排字工人”工具构建c++ (31日]。

4.3。自适应程序设计

自适应程序设计介绍了约1991得墨忒耳群在波士顿东北大学。该集团使用AOP的思想面向方面的编程是几年之前的名字。后与施乐帕克研究中心集团已经开始合作,该集团重新定义了美联社和术语介绍了AOP。美联社是一种concern-shy编程。程序是concern-shy如果它隐藏了某种担忧跨越的细节,然后它自动适应。最常用的美联社是structure-shy编程形式。Structure-shy编程消除结构细节的关注,使其行为适应性;也就是说,程序的行为和结构分离。美联社方法适用的迪米特法则认为,一个对象应该只跟它的直接朋友处理遍历策略和访问者模式的概念。有各种各样的工具来开发自适应软件DJ-tool, DemerterJ, DAJ [32]。

4.4。组合过滤器

组合滤波器是一种面向方面编程方法的CF模型区分两种结构:(类)和过滤器的担忧。简单地说,一个问题是单位定义的主要行为,而过滤器是用于扩展或增强的担忧,这样(横切)礼节可以更有效地19]。评估一个消息发送到一个对象和操作的过滤器对象定义在一个有序集合,直到它被丢弃或派遣到另一个对象,如图4。过滤器的行为很简单:每个过滤器可以接受或拒绝接收到的消息,但操作的语义取决于滤波器类型。例如,如果一个错误过滤接受收到的消息,转发给下一个过滤器,但如果这是一个调度过滤器,消息将被执行2]。江淮(Java组件方面)和新浪语言实现该方法的框架。

AOP是成熟的和最常用的方法4]。IBM成员认为这SOP的后代通过识别和说明几个有用的非功能性问题被分离,如并发特性、分布特性,和持久性。AOP区分“核心课程”的概念,其中封装了系统的功能性需求从“方面”,封装非功能性,横切需求。方面都写关于核心类和软件的一部分,包含每一个规则指定这方面是如何融入了基类(33]。AOP方法仿真领域的广泛使用,以提高仿真系统的可重用性和复杂性较低开发大型模拟软件提出了(20.]。为了受益于先进的关注点分离技术在仿真建模领域,比较研究提出了表1,阐明其原理结构和它们之间的关系。


施乐帕克研究中心AOP SOP 美联社 CF

原子单元 方面 主题 传播模式 过滤器

共存的方法 面向对象/组件/ mutiagents 面向对象的 面向对象的 面向对象的

合成机制 编织机制 组合的规则 编织机制 叠加机制

用于确定横切关注点注入机制的地方 切入点规范 标签规格 遍历策略规范 匹配滤波器的一部分

横切关注点的地方注入 连接点 主体部分 遍历对象模型 实现消息拦截之后的CF对象的一部分

实现语言 AspectJ IBM VisualAge c++ DemeterJ ComposeJ

作文时间 编译时,加载时间或运行时 在编译 编译时间和运行时间 编译时间和运行时间

5。材料和方法

5.1。主要模拟系统的横切关注点

有几个非功能性问题,可能跨越仿真应用程序功能模块如下。

5.1.1。稳态检测横切关注点

稳态检测问题检测系统稳定,输出模拟的准备活动期间收集的数据可以被误导和偏见估计响应措施。因此,消除初始化倾向是重要的获取准确的估计性能。有五个类别的稳态检测的方法:图形,启发式,统计,初始化倾向测试,和混合方法34]。

5.1.2中。图形动画

图形动画是一种可视化的方式在实验系统行为。这个可视化验证使用的设计模型和解释仿真结果的意义和重要性。此外,它可以帮助用户更好地理解系统的动态研究和对教学有用。

5.1.3。图形用户界面横切关注点

GUI是用来展示仿真数据和增加与用户的交互。它的代码可能横切各种功能模块使gui难以维护。

5.1.4。异常处理

异常处理是任何应用程序的非功能需求像资源不可用,优雅地处理任何错误条件无效输入,零输入,等等。因此,异常处理污染模拟系统的解决方案提出了代码,使它不连贯的。

是5.1.5。计算精度

不幸的是,在操作期间,乘法,除法,不发生溢出或下溢的异常。这是大多数编程语言,包括Java的算术运算符不报告溢出和下溢的条件。他们简单地覆盖。因此,这样的一个横切关注点将确保计算结果的准确性,在仿真系统是至关重要的。

5.1.6。模拟跟踪

在仿真系统中,重要的是要登记所有资源的状态,被动和主动实体在不同的时间序列。这些注册污染以横切方式仿真功能的代码。

5.1.7。同步

过程交互建模的世界观,主要采用离散事件仿真社会交互的模型由一组过程。每个流程模型的生命周期系统的对象,即一个命令序列逻辑相关的活动。此外,同步互斥在临界区保护他们免受限制并发活动由于写作同时访问数据不一致。例如,在Java多线程编程中,一个对象可以由许多线程同时访问。结果,可能会发生数据冲突,如果应用程序不准备处理并发性。因此,应该实现同步使用synchronized修饰符在方法级别或同步(对象)构造在指令或块级别(35]。因此,模拟过程的同步和互斥的同步是一个横切关注点在模拟函数代码。

5.2。实现面向方面的仿真系统的过程

一般来说,开发一个面向方面的模拟器的过程包含三个阶段,如图5系统的识别问题、实施和最终系统的发展通过结合以下方法。(1)首先,横切关注点同步和稳态检测分离模拟引擎的担忧。这个阶段是与通过一束光通过棱镜将其不同的颜色组件。(2)旁边,每个独立实现横切关注点AspectJ这样可以减少通过使用面向方面语言的整体设计和实现的复杂性。除此之外,一个过程或OOP语言用于仿真功能的实现问题。(3)最后,韦弗AspectJ编译器是用来组成一个方面所有的横切关注点和模拟功能产生最终系统的担忧。

6。实验工作

6.1。Japrosim图书馆

Japrosim是一个免费和开源面向对象仿真库,采用广泛的流程交互的世界观。图书馆是在Java编程语言中实现允许的访问其强大的功能和使用UML文档。类被组织成包,反映重要的功能区域。尝试用Java程序员或模拟专家与基本的编程知识可以毫不费力地使用JAPROSIM构建离散事件仿真模型。图书馆是可扩展和可定制的,允许它作为基础发展的领域特定仿真环境。此外,它是用作教学学术材料离散事件建模与仿真。Japrosim的关键特性是隐式和自动的集合所有著名的和有用的性能措施(17]。

图书馆分为八个主要包:(我)内核:这是一组类处理活动实体,调度程序、队列、和资源,如图6;(2)随机:它包含类均匀随机流生成;(3)随机的。分布:它包含一组丰富的类有用的概率分布;(iv)统计数据:它包含类代表智能统计变量;(v)gui:它是一组用于项目参数化图形用户界面类,跟踪,仿真结果展示;(vi)公用事业:这是一组有用的类表达模型开发;(七)统计数据。稳定:它是有用的检测稳态;(八)动画:一组类用于提供一个实时动画仿真模型。

6.2。拟议中的AOP解决方案

主要的横切关注点,先例中讨论部分,识别和分离Japrosim使用AJDT工具(36]。面向方面(AO)的版本与uoeb.Japrosim.crosscutting Japrosim增强。担忧包包括八个方面:SingletonConcern,动画,ExceptionHandling, GraphicalUserInterface, SimulationTrace, SteadyStateDetection,同步和CalculationAccuracy。因此,各个方面给出了解决一个单独的横切关注点,污染了框架包,如图7

6.2.1。SingletonConcern方面

“单”模式阻止了使用同一个类的两个对象。调度器类使用它来防止多个实例,确保事件列表管理是专门由一个独特的线程来完成的。在旧的面向对象(OO)的版本,Japrosim确保只有一个调度器实例可能存在通过声明它的构造函数是私有的,提供一个公共方法,即getInstance(),返回一个现有的实例和保存现有单一实例作为一个静态成员变量。SingletonConcern方面目前提出的解决方案,其中包括一个在建议适用于目前的构造函数调用getInstance()方法的类似的作用,而不需要将单例对象的构造函数声明为私有的。此外,调度器实例保存在一个静态成员变量声明在方面的介绍。

6.2.2。动画方面

提供图形动画,OO Japrosim内部,通过“观察员”的模式。这种模式创建一个主语和一个观察者之间的关系。对象被称为主题变化是有趣的其他对象,即观察者。观察者模式元素分散在域类,减少他们的凝聚力和可维护性;因此,AOP提出这些观察者元素的封装在一个方面和域类仍然没有感染。SimAnim类是动画包的一部分用于提供一个实时动画。它变得有用的数据通过“EventObserver”界面。此外,每个“队列”、“资源”和“StaticEntity”类注册监听器“EventObserver”类型的通知他们在事件发生的情况下。这种机制确保了观察者模式。动画方面提出了解决方案。 It separates these elements by providing the link between subject and observer using the “EventObserver” as inner interface in addition to member introduction and type-hierarchy modification which affected subjects and SimAnim class, respectively.

6.2.3。SteadyStateDetection

SteadyStateDetection方面提出了解决问题的Japrosim经典版本提供两个方法康威和穿越意味着通过工厂和观察者设计模式。观察者在实体元素是纠结的,SteadyStateTechnique,康威,CrossingTheMean类。SteadyStateDetection方面实现了观察者模式的AO版本改进的模块化Japrosim图书馆。

6.2.4。同步

过程同步,通过SimProcess Japrosim实现协同程序机制,调度器,StaticEntity和实体类。集合在quasiparallel模式下运行的线程调度程序线程的控制之下。每个协同程序是一个对象的执行状态,以便它可以暂停和恢复。在任何实时的实例,只有一个协同程序是活跃的。方法processResume(实体e)是由调度程序调用重新激活一个模拟的过程,以及mainResume()通过一个模拟过程重新激活调度器。每个模拟过程都有自己的锁对象而调度器mainLock对象。锁结合使用wait()和notify()来实现线程同步。一个线程调用任何以前的方法将阻止自己锁后通知合适的一个。其生命周期结束时,模拟进程调用dispose()方法来激活自动调度程序没有阻止本身。所以相应的线程可能会终止36]。processResume确保协同程序机制的元素(实体e), mainResume()和()方法处理除了mainLock和锁对象。这些元素,分别分离在一个同步方面,扫清了设计和增加可理解性。

OO Japrosim方法从另一个侧面,有一个关键属性是增强与synchronized关键字getInstance()方法在调度器类。这往往污染Japrosim功能代码。为了克服这一问题,开发一个around通知在同步方面,以确保方法同步锁使用共享方面。

6.2.5。GraphicalUserInterface

Japrosim gui包包含一组类(TraceFrame, PresentationFrame、大型机和GraphicFrame)用于复制的数量,这样的项目参数化实验时间,跟踪,仿真结果展示。尽管GUI提供的好处和灵活性问题,其横切特性导致代码污染。它降低了凝聚力专门Japrosim内核内部类。作为一个AOP解决方案,提出了GraphicalUserInterface方面。

6.2.6。SimulationTrace

分开这方面节省仿真跟踪,Japrosim功能模块,通过三个文件的生成。一个是文本格式和另外两个符合XML格式。

6.2.7。ExceptionHandling

ExceptionHandling方面包含五个切入点和五个建议,处理所有异常类型内部Japrosim图书馆。

6.2.8。CalculationAccuracy

这方面处理下溢和int的溢出,浮动,翻倍,和漫长的原始类型,加法,减法,乘法,除法算术运算符,如算法所示2

Object周围(aa,对象bb):
调用(静态公共对象添加()对象,对象)& & args (aa、bb)
{
.getSimpleName字符串ca = aa.getClass () ();
.getSimpleName字符串cb = bb.getClass () ();
如果(ca.equals (cb) &&ca.equals (整数)){
int一=((整数)aa) .intvalue ();
int b =((整数)bb) .intValue ();
长c =(长)+ b;
如果(c <整数MIN_VALUE)
把新的ArithmeticException (int下溢);
else if (c >整数MAX_VALUE)
把新的算术eticException (int溢出);
返回整数((int) c)(新);}
如果(ca.equals (cb) &&ca.equals (浮动)){
浮动一个=((浮动)aa) .floatValue ();
浮动b =((浮动)bb) .floatValue ();
浮动c = a + b;
如果(c = = 0 & & (! =b))
把新的ArithmeticException (浮动下溢);
else if (c = = Float.POSITIVE_INFINITY∣∣c = = Float.NEGATIVE_INFINITY)
把新的ArithmeticException (浮动溢出);
返回(新浮动(c));
}
如果(ca.equals (cb) &&ca.equals ()){
双= ((Do支持)aa) .doubleValue ();
双b =((双)bb) .doubleValue ();
双c = a + b;
如果(c = =0& & (! =−b))
把新的ArithmeticException (双下溢);
else if (c = = Double.POSITIVE_c = = Double.NEGATIVE_INFINITY)
把新的ArithmeticException (双溢出);
返回(新双(c));}
如果(ca.equals (cb) &&ca.equals ()){
长一个=(长)aa) .longValue ();
长b =((长)bb) .longValue ();
长c = a + b;
如果(> 0& &b > 0& &(c <c < b))
把新的ArithmeticException (长溢出);
else if (< 0& &b < 0& & (c >c > b))
把新的ArithmeticException (长下溢);
返回(新长(c));
}
返回null;
}

6.3。结果和讨论

测量的影响,应用AOP范式Japrosim设计质量的灵活性、可维护性和可重用性,软件度量的一个自动评估是实现AOP Japrosim版本使用AOPMetrics工具(37)这是一个共同的标准java和AspectJ项目的工具。它提供了包依赖性度量套件基于罗伯特·马丁的套件在[提出38]。(我)数量的类型(不)。这是一个类型在给定的包的数量。这是一个包的可扩展性的指示器。(2)抽象性(A)。它的数量的比例是抽象模块模块在包的总数。(3)传入耦合(Ca)。模块外的包的数量,取决于模块内包。这是一个包的责任指标。(iv)传出耦合(Ce)。这是模块内部的包的数量取决于模块外的包。这是一个包的独立指标。(v)不稳定(我) 传出耦合(Ce)的比例是总耦合(Ce + Ca)这样的吗 = Ce / (Ce + Ca)。这个指标是一个包的弹性变化的指标。值0表示完全稳定的包和一个值表示完全不稳定的包。(vi)归一化距离主序(Dn)。这是规范化理想化的包线的垂直距离 。这个指标是一个指示器的包的抽象性与稳定之间的平衡。2显示了从这些指标的测量结果AOP Japrosim包。横切包的特点是高(Ce)度量值,因为它实现了所有其他横切关注点的包和null值(Ca)的表达了遗忘的AOP范式。横切包是完全不稳定证实其横切自然没有任何功能问题。


包名 RMartin Ce RMartin Ca RMartin RMartin Ce Ca Dn

uoeb.japrosim.crosscutting.concerns 10 0.2 9 0 1 0.2 43 0 1 0.2
uoeb.japrosim.kemel 7 0.285714 5 42 0.106383 0.607903 7 42 0.142857 0.571429
uoeb.japrosim.statistics.steady 4 0.25 3 2 0.6 0.15 2 2 0.5 0.25
uoeb.japrosim.gui 9 0 3 2 0.6 0.4 2 2 0.5 0.5
uoeb.japrosim.random.distributions 19 0.052632 18 2 0.9 0.047368 2 2 0.5 0.447368
uoeb.japrosim.animation 8 0 2 3 0.4 0.6 1 3 0.25 0.75
uoeb.japrosim.statistics 2 0 2 11 0.153846 0.846154 1 11 0.083333 0.916667
uoeb.japrosim.utilities 3 0 3 0 1 0 5 0 1 0
uoeb.japrosim.random 6 0.166667 5 2 0.714286 0.119048 1 2 0.333333 0.5

所有包依赖性度量值之间的差异对OO Japrosim和AO版本注册为呈现在图8。一个了不起的变化约62%获得除了uoeb.Japrosim Japrosim包。gui, uoeb.Japrosim.random。分布和uoeb.Japrosim。公用事业不受影响,因为他们有最小交互与其他包在OO Japrosim版本。此外,AO Japrosim版本提供总下降( 方面实现后)度量值,因为能够灵活的扩展包不需要修改。“打开/关闭”原则(38是实现理想的方式通过uoeb.Japrosim.crosscutting的规范。关注包总韧性和高(Ce)度量值。此外,整体增加(Ce)给出了一个改进的包独立性,从而增加包可重用性。减少(不)和( uoeb.Japrosim)。动画和uoeb.Japrosim.statistics。稳定是指转让EventObserver动画和SteadyStateDetection方面和StatObserver接口,分别。进一步的增加(Ca)指标是指存在额外的包,也就是说,uoeb.Japrosim.crosscutting.concerns。最后,增加(Dn)价值是指( )值变化。

7所示。结论

面向方面的模拟是一个有前途的研究领域,提供了一个解决方案的主要问题的面向对象仿真模拟在模块化横切关注点的分离方法。面向方面的仿真系统有几个特性高模块化、可重用性、可维护性和可见性。本文的目的是在离散事件仿真的基础上增加新的编程范式的面向方面的范例。实现这一目标的具体条款的识别主要模拟横切关注点,如稳态检测、图形动画、图形用户界面、异常处理、计算精度,仿真跟踪和同步,降低仿真系统质量。在实验水平,的面向对象版本Japrosim框架已被选为一个实际的例子。主要模拟横切关注点确定之前是分开的核心问题。新的面向方面的版本的框架已经成功地获得可在:http://sourceforge.net/projects/Japrosim/files/AOP-Japrosim。此外,证明在Japrosim AOP范式的影响设计质量的灵活性、可维护性和可重用性属性,自动评估AO版本的软件度量Japrosim实现使用AOPMetrics工具是一种常见的度量工具的Java和AspectJ项目。

除此之外,先进的关注点分离方法的简要概述,即SOP, AOP, CF,美联社讨论与比较研究,所以每一个在模拟域的开发可以被认为是一个未来的问题。

最近,面向方面思想是通过软件开发过程的早期传播通过面向方面软件开发(AOSD)技术。一个地区未来的研究将评估的好处AOSD技术在仿真系统的集成和使用Japrosim图书馆作为一个实际的例子。

利益冲突

作者宣称没有利益冲突有关的出版。

承认

作者感谢匿名评论者的重要角色在本研究质量的改进。

引用

  1. m . Akşit b Tekinerdoğan l·伯格曼,“关注点分离的六个问题,”《车间先进的分离关注点(ECOOP ' 01),2001,http://trese.cs.utwente.nl/workshops/ecoop01asoc/视图:谷歌学术搜索
  2. l·卢西恩和i Despi”,面向方面的编程挑战。”Anale诗里亚Informatica,卷2,不。1,第70 - 65页,2005。视图:谷歌学术搜索
  3. 诉Vranie“多维向软件开发”,计算和信息技术杂志》上,10卷,不。2、133 - 147年,2002页。视图:谷歌学术搜索
  4. r . LaddadAspectj在行动:企业AOP与Spring应用程序美国,康涅狄格州的格林威治,曼宁出版物,第二版,2009年版。
  5. j·A·p·迪亚兹·m·r·坎波,m·e·法”语言模拟:把关注点分离到前面,”14日的程序方面和维度问题研讨会(ECOOP ' 00),戛纳,法国,2000年。视图:谷歌学术搜索
  6. w·Weiland r . Weatherly k .环et al .,“简化并发性:一个java仿真框架,”《面向对象编程,系统、语言和应用程序的会议,2005年。视图:谷歌学术搜索
  7. 答:阿克苏,f . Belet, b . Zdemir”为一个离散事件仿真系统开发方面,”诉讼第三土耳其面向方面软件开发工作室肯特大学,页84 - 93,安卡拉,土耳其,2008。视图:谷歌学术搜索
  8. z Vaira和a . Caplinskas”纯粹的面向方面的设计模式在开发中的应用ao框架:一个案例研究中,“信息科学,56个卷,第155 - 146页,2011年。视图:谷歌学术搜索
  9. j .风琴,o .装饰板材、d .柯南和阳萎美国勒里什,“OSIF:一个框架工具、验证和分析模拟,”学报》第三届模拟国际会议工具和技术(SIMUTools 10)2010年,页56 -、马拉加、西班牙。视图:谷歌学术搜索
  10. l . Gulyas和t . Kozsik科学模拟中使用面向方面的编程”程序软件技术(FUSST Fenno-Ugric研讨会的99),j . Penjam Ed,技术报告CS 104/99, pp, 17-28塔林,爱沙尼亚,1999年8月。视图:谷歌学术搜索
  11. v . n . Alexandrov g·d·范·Albada p . m . a . Sloot和j .唐”的多重代理模拟物理现象方面的编程,”计算Science-ICCS 2006Bieniasz, s . Ciszewski, b .Śnieżyśki Eds。卷,3993在计算机科学的课堂讲稿,第766 - 759页,2006年。视图:出版商的网站|谷歌学术搜索
  12. t . b . Ionescu反坦克炮,w .本篇报告和e . Laurien“面向方面方法复杂的仿真软件的发展,“《华尔街日报》的对象技术,9卷,不。1,第181 - 161页,2010。视图:出版商的网站|谷歌学术搜索
  13. j . Brichau k .犯罪和k·d·Volder“与逻辑元编程,建立可组合aspect-specific语言”生成编程和组件工程:ACM SIGPLAN / SIGSOFT研讨会论文集,2002年GPCE匹兹堡,PA,美国10月6 - 8,2002卷,2487在计算机科学的课堂讲稿施普林格,页110 - 127年,柏林,德国,2002年。视图:出版商的网站|谷歌学术搜索
  14. d .公园、美国康和j·李,“设计阶段分析使用面向方面的编程软件的品质,”学报》第七届国际会议上软件工程、人工智能、网络和并行/分布式计算(SNPD 06年),Y.-T。歌,c . Lu, r·李。,pp。29日- - - - - -34,IEEE Computer Society, Las Vegas, Nev, USA, June 2006.视图:谷歌学术搜索
  15. t . Mehmood:阿什拉夫、k·拉希德和s . Tauseef-ur-Rehman”框架建模性能的多代理系统(MAS)使用面向方面编程(AOP)”学报第六届澳大拉西亚的研讨会软件和系统架构(AWSA 05),2005年。视图:谷歌学术搜索
  16. h .沈和d . c . Petriu”使用面向方面的建模技术UML模型的性能分析,”第八届国际会议上模型驱动工程学报》的语言和系统(模型05)施普林格,页156 - 170年,蒙特哥湾,牙买加,2005。视图:谷歌学术搜索
  17. b Belattar和a . Bourouis JAPROSIM仿真库,确定重要功能”学报EUROPMENT国际会议系统、控制、信号处理和信息罗德岛,页515 - 522年,希腊,2013。视图:谷歌学术搜索
  18. w·哈里森和h . Ossher“面向主题的编程(纯粹的批判对象),”《面向对象编程:会议系统,语言,和应用程序华盛顿特区,页411 - 428,美国1993年。视图:谷歌学术搜索
  19. l·伯格曼和m . Aksit使用组合过滤器组合多个问题TRESE集团计算机科学系,特文特大学,2001。
  20. m . Chibani b Belattar, a . Bourouis”向一个面向方面的模拟,国际期刊的新计算机体系结构和应用程序,3卷,不。1、1 - 10,2013页。视图:谷歌学术搜索
  21. m . Chibani b Belattar, a . Bourouis“面向方面的模拟:一个案例研究与JAPROSIM框架,”学报》第27届欧洲仿真和建模会议(ESM 13)、美国Onggo和a . Kavička Eds。,pp。91- - - - - -98,Lancaster University, Lancaster, UK, October 2013.视图:谷歌学术搜索
  22. j .风琴和o .装饰板材”,使先进的仿真场景,新的软件工程技术,”《20 08年欧洲建模与仿真研讨会(ems)Briatico,页515 - 520年,意大利,2008年9月。视图:谷歌学术搜索
  23. 答:反坦克炮,t·b·库和w .本篇报告,“关键任务系统分布式仿真框架在核工程和放射防护,”国际期刊的计算机、通信和控制,3卷,第453 - 448页,2008年。视图:谷歌学术搜索
  24. s . l .曾AOP的评价基于java实时系统开发(硕士论文)都柏林大学爱尔兰都柏林,2004。
  25. d .公园和美国康”,设计阶段使用面向方面的编程软件性能分析,”第五届国际研讨会面向方面建模的程序里斯本,葡萄牙,2004。视图:谷歌学术搜索
  26. k·库珀·l·戴,邓y”建模性能作为一个方面:基于UML的方法,”学报第4 AOSD建模与UML车间,2003年。视图:谷歌学术搜索
  27. l·布莱尔·g·布莱尔,a .安徒生“分离功能行为和性能约束:面向方面specication,“技术。代表,1998年。视图:谷歌学术搜索
  28. r . e . Filman d·p·弗里德曼,“面向方面的编程是量化和遗忘”《车间先进分离关注点(OOPSLA ' 00),2000年10月。视图:谷歌学术搜索
  29. g . Kiczales j .夯击a Mendhekar et al .,“面向方面编程”面向对象编程(ECOOP欧洲会议的97)卷,1241在计算机科学的课堂讲稿,第242 - 220页,1997年。视图:谷歌学术搜索
  30. w·h·Ossher·m·卡普兰哈里森,a . Katz和诉克鲁斯卡尔,“面向主题的组成规则,”学报第十届年会在面向对象编程系统中,语言和应用程序(OOPSLA 95),卷2,页235 - 250,美国德克萨斯州奥斯汀市。视图:出版商的网站|谷歌学术搜索
  31. f . h . Ossher w·哈里森Budinsky et al .,“面向主题的编程:支持对象、分散发展”《7日IBM面向对象技术会议美国加州、IBM、圣克拉拉,1994年7月。视图:谷歌学术搜索
  32. k . Lieberherr d·h·洛伦茨,“耦合面向方面编程和自适应,”面向方面的软件开发r . e . Filman t . Elrad,克拉克,和m . Akşit, Eds。,页145 - 164,addison - wesley, 2005年质量,美国波士顿。视图:谷歌学术搜索
  33. 塔尔p h . Ossher w·哈里森,s·萨顿Jr .)“N度分离:多维分离关注点,”21国际会议的程序软件工程(ICSE ' 99),第119 - 107页,1999年。视图:出版商的网站|谷歌学术搜索
  34. k . Hoad美国罗宾逊,r·戴维斯,“自动化热身长度估计,”冬季模拟研讨会论文集,梅森s·j·r·r·希尔,l . Monch o .玫瑰,t·杰佛逊和j·w·福勒,Eds。,第540 - 532页,2008年。视图:谷歌学术搜索
  35. c·a·s·d·达可重用的面向方面实现并发模式和机制[硕士论文)葡萄牙米尼奥大学布拉加2006。
  36. b . Abdelhabib和b .卜拉欣JAPROSIM:离散事件仿真过程交互的Java框架,“对象技术杂志》,7卷,不。1,第119 - 103页,2008。视图:出版商的网站|谷歌学术搜索
  37. m . Stochmialek AOPmetrics, 2005,http://aopmetrics.tigris.org
  38. r·马丁“OO设计质量metrics-an依赖关系的分析,”诉讼的务实和理论方向面向对象软件度量车间OOPSLA 1994。视图:谷歌学术搜索

版权©2014 Meriem Chibani等。这是一个开放的分布式下文章知识共享归属许可,它允许无限制的使用、分配和复制在任何媒介,提供最初的工作是正确引用。


更多相关文章

PDF 下载引用 引用
下载其他格式更多的
订单打印副本订单
的观点7209年
下载970年
引用

相关文章

文章奖:2020年杰出的研究贡献,选择由我们的首席编辑。获奖的文章阅读