英语原文共 10 页,剩余内容已隐藏,支付完成后下载完整资料
基于Java的Web并行应用程序的正式开发*
摘要:Java面向对象编程语言一直是专业语法专家和业界重要参与的主题。特别是与网络有关的应用。Java程序如此迅速地渗透到商业产品中的问题是,软件工程师没有任何方法,必须开发复杂的并行应用程序。在这里,我们提出了一种正式的开发方法,基于逐步修正的合作/2的- mal规范,使用一个真实的Web并行应用程序。从集中式视图开始,我们提出以下细化步骤:数据分布、行为分布、通信层和Java程序。在整个优化过程中,我们研究了evo- lution和一个特定属性的验证。
关键词:软件工程;Petri网;Alge- braic规范;
- 介绍
Java是一种最新的编程语言[l],被广泛用于开发Web上的分布式应用程序。因此,为了支持这个应用领域的软件生命周期,必须引入软件工程技术。这种应用程序的高复杂性是由并发组件及其协调算法造成的。在本文中,我们应用了一种自顶向下的工程方法来开发基于正式规范的基于Java的Web并行应用程序(简称为书面JPA)。“这项工作得到了Esprit长期研究项目20072“验证设计”(DeVa)和瑞士国家科学基金会项目“正式并发方法”的资助。
形式化规范的优点是,它允许在开发复杂应用程序时进行必要的精确系统描述,并且对于验证和验证目的非常有用。我们选择使用由我们的团队开发的CO-OPN/2 (Concurrent Object Oriented Petri网)规范形式主义[3],它提供了许多适合于本文所述应用程序的特性。更准确地说,CO-OPN/2以面向对象的方式集成了Petri网(用于定义并发行为)和代数规范(用于定义Petri网中演化的结构化数据)。
应用正式开发方法的目的是:(1)提供一组非正式应用程序的需求,包括由一组所需属性表示的验证目标;(2)基于非正式需求构建JPA的初始CO-OPN/2规范I,该规范足够抽象,能够尽可能独立于实现约束;该规范提供了应用程序的抽象视图,其中问题既不分散也不分散。第一个规范必须验证所需的属性;(3)对for- mal规范和属性执行4个refinement steps (RI to R4): (Rl)提供应用程序的分散视图,其中数据是分布式的,但还没有行为;(R2)为应用程序提供客户机/服务器体系结构,其中数据和行为都是分布式的;(R3)引入通信层,即基于TCP/IP的套接字、applet、服务器以及所有处理套接字的必要线程。此外,还介绍了Java编程语言的特性。这一步将导致一个接近代码的视图,其中问题已经在Web上传播,但还没有使用Java实现;(R4)直接从细化R3生成Java程序。必须提供证据(通过正式或非正式的证明)以保证两个连续细化级别之间的属性保存。
这个基于Java的Web并行应用程序的正式开发方法是通过一个具体的示例(运行在以下地址http://lglsun.epfl.ch/Team/GDM/DSGamma.html)提出的。该应用程序基于Gamma范式[a](一种集成了化学再作用概念的编程范式)。在分布式多组整数上实现了一个类伽玛加法。Java applet在本地维护一组整数,用户可以在applet提供的图形用户界面的帮助下向系统输入新的整数。全局多集由applet维护的所有多集的并集给出;化学反应是Java线程,它收集整数对,将它们添加到一个applet维护的多集中。
此应用程序的正式开发的完整描述以及属性验证可以在[4]中找到。
本文的计划如下:首先,我们介绍了- malism CO-OPN/2规范的基本概念;其次,通过将其应用于所选的分布式应用,详细介绍了该方法。
- CO-OPN/2规范形式
CO-OPN /: ![3]是一种基于代数规范[6]和Petri网的混合规范形式,它们的组合方式类似于代数网络[5]。代数规范用于描述系统的数据结构和功能方面,而Petri网允许对系统的当前特征建模。为了弥补代数Petri网缺乏结构化能力,CO-OPN/2提供了一种基于代数网之间同步交互的结构化机制,以及面向对象特有的概念,如类、继承和子类型等概念。
一个系统被认为是一个相互依赖的对象(代数网络)的集合,它们相互作用和协作以完成系统的各种任务。
对象和类。对象被认为是一个独立的实体,由内部状态组成,并向外部提供一些服务。与对象交互的惟一方法是请求其服务;因此,内部状态可以防止不受控制的访问。CO-OPN /: !将对象定义为一个封装的代数网络,其中位置构成内部状态,而转换模型表示对象的当前事件。一个位置由一组代数值组成,转换分为两组:参数化转换(也称为方法)和内部转换。前者对应于提供给外部的服务,而后者描述对象的内部行为。与这些方法相反,内部转换是外部世界看不见的,可以认为是自发事件。类解算一组对象的所有组件,并将其视为对象引理板。因此,一个类的所有对象都具有相同的结构。对象可以动态创建。采用了通常的点表示法。
对象交互。在我们的方法中,与对象的交互作用是同步的,尽管同步通信可以被模拟。因此,当对象需要服务时,它要求与提供thle服务的对象的方法(参数化转换)同步。同步策略通过同步ex- pression(在with关键字后面声明)来表示,它可能涉及由三个同步操作符(一个用于同时性#39; / / #39;,一个用于序列#39; . .)连接的多个伙伴。,和一个替代或不确定性#39; #39;)。例如,一个对象imay同时向两个不同的伙伴请求两个不同的服务,然后向第三个对象请求一个服务。
对于每一个过渡((参数化),定义一个或多个行为公理,为了de -抄写员:(1)一个可选的条件强加给alge braic值参与公理,(2)一个可选的syn - chronization表达式,(3)分别对应的先决条件和后置条件的消费和生产不同的地方组成网络,一旦执行转换。
对象的身份。在CO-OPN /:!框架工作,每个类实例都有一个标识符,也称为对象标识符,可以用作引用。此外,类型显式地与每个类关联。因此,每个对象标识符至少属于一种类型。构造了对象标识符的有序代数,以反映类类型之间建立的子类型关系。由于对象标识符是代数值,它们可以存储在代数网络的位置。此外,还可以定义基于对象标识符(例如堆栈)的数据结构。或对象标识符队列。
构造函数。类实例可以动态创建。可以定义创建和初始化对象的特定创建方法;对于给定的对象,这些方法只能使用一次。提供了一种预定义的cre方法。通常使用类动态创建新实例,但也可以声明stat、ic实例。
继承和子类型化。我们认为,在遗传和分型是两个不同的概念,用于两个不同的目的。继承被认为是一种语法机制,它将说明符从从头开始开发类的必要性中解放出来,主要用于重用现有规范的某些部分。一个类可以继承另一个类的所有特性,还可以添加一些服务或更改已经定义的一些服务的描述。我们的子类型关系基于可替代性原则的强转换,是一种无差别机制:在任何上下文中,一个类型的任何类实例都可以被替换为它的超类型的类实例,并且整个系统的行为保持不变。由这两个关系生成的各个层次结构不一定是一致的。
语义。从表示对象状态的所有可能演化的并发转换系统的角度给出了CO-OPN/2的形式化语义。状态更改与同时可执行的多组事件相关联。对象方法的触发导致(内部)转换被触发(spon- taneously)。只要满足转换的先决条件,就会触发转换。对象的方法只有在没有可确定的转换时才能触发。CO-OPN/2的完整se- mantics可以在[3]中找到。
- 正式开发:从CO-OPN/2到Java
本节介绍了在第1节中描述的具体应用中所提出的形式化开发方法。
-
- 非正式要求和属性
伽玛范式[a]提倡一种接近化学反应的编程方法。在多集上应用一个或多个化学反应:化学反应从多集中删除一些值,计算一些结果并将它们插入多集。我们考虑以下示例:计算多集中出现的整数的和。图1描述了实现结果8的多集和可能的伽马计算。
-
-
- 非正式的需求。
-
我们打算去开发一个应用程序,它允许几个用户将整数插入一个可能被分解的多集中。根据伽玛范式,化学反应应用于多集;它们必须是所有用户输入的所有整数的和。我们把分布式伽玛系统称为分布式伽玛系统,是由用户、多组分和化学反应组成的系统。我们将非正式需求分为两部分。第一个是必须提供给用户的系统操作,第二个是关于数据和内部计算的详细信息。
Figure 1. Gamma addition
系统操作:[l]新用户ca,n随时添加到系统中;用户可以在输入时间和退出时间之间的任意时刻向系统中添加新的整数;[3]在任何时刻,应用程序都可以给出多集状态的局部视图;用户可以退出系统,只要他已经进入系统。
状态和内部行为:用户输入的整数存储在一个多集中;应用程序实现了所有用户输入的所有整数的和;求和是根据伽玛范式由化学反应进行的;[SI A化学反应从多集中取出两个整数,相加,并将和插入多集中;只有一种化学反应,但其中几种化学反应可以同时发生并同时发生在多集中;[lo]只要多集中的状态能够发生化学反应,即只要多集中至少有两个整数,就可以发生化学反应。
-
-
- 属性
-
为了观察道具——erty保存在细化,我们将建立一个基本属性和跟随它在每次重新finement步骤:如果只有一个整数的多集,然后在他必须并行计算的结果输入的整数的总和所有用户从应用程序开始。
-
- 初始规范一:集中视图
init #39;ial CO-OPN/2规范I提供了DSGamma系统最抽象的视图,ful-满足了非正式的需求。这是一个多组分的整体,在其上同时发生多种化学反应。我们有一个非分布式的数据(mul- tiset),几个过程(化学反应),每个过程,单独考虑,不是分布式的。
3.2.1 CO-OPN / 2规范
ini- tial CO-OPN/S规范I是由DSGammaSystem类给出的,如图2所示。
系统操作:四大CO-OPN/:!方法、newnser(usr)、useraction(i,usr)、result (i,usr)和user-exit (usr)指定系统向外部提供的四个服务、系统操作[l]到[4]。
新用户(usr)方法将用户标识usr插入用户位置。useraction(i,usr)方法检查usr是否已经进入系统(即usr是否在用户所在位置),并将i值插入多集MSInt中。如果用户usr尚未进入系统,则无法触发该方法,因此没有将i值插入到multiset#39;中。result (i,usr)方法检查usr是否已经进入系统,并在MSInt中读取一个整数i。如果usr位于用户位置,则user-exit (usr)方法将删除usr。
状态和内部行为:一组整数存储所有用户输入系统的整数。类型Integer的CO-OPN/2 MSInt位置对这个多集进行建模(类型Integer是使用等同于自然数的代数规范指定的)。由于位置的CO-OPN/2 Petri网语义,位置的内容总是由一个多集给出。CO-OPN/2将类型为Integer的用户存储为Integer的用户标识。
CO-OPN /:!化学反应过渡模- els化学反应。它从MSInt的位置取两个整数i, j,并将它们的和i j插入到MSInt中。
3.2.2属性
我们现在审议第3.1.2款所述的性质。,我们检查它在这一步是如何发展的。我们将非正式地展示如何以及为什么实现属性8。
结果的计算是通过过渡化学反应实现的。由于CO-OPN/2的语义,化学反应离子跃迁可以同时触发多次,前提是每次发生都要满足前置条件。重复触发,直到先决条件不再满足,即如果多集中只剩下一个整数。在系统开始时,MSInt中不存在整数。我们假设n个整数同时进入系统(几个简单的用户操作(i,usr))。因此,MSInt中存在[n/2]对整数s2,化学反应将同时进行[n/2]次。在这些燃烧之后,m = n -[。整数将保留在MSInt中。这些m个整数上的化学反应的触发过程类似,当m = 1时停止。初始规范I提供了fol- lowing:(1)在触发useract ion (I, usr)之后,MSInt中只剩下一个整数;(2)在MSlnt中存在的所有可用整数对上完全并行地实现计算;(3)剩余整数为化学反应发生前MSInt中存在的整数之和。
3.3 首先细化RI:数据分布
最初的specialion I提供了应用程序的集中视图。当我们打算获得一个简单的分布在Web上的应用程序时,现在有必要在特定的地方引入分布性。细化R1与数据分配有关。
3.3.1 细化过程
这种多组电池在物理上分布在几个不同的电极上。我们称locai#39; multzset为部分MS;对于存在于给定位置的多集,我们称其为全局多集,即由所有局部多集的并集得到的多集。图3给出了计算结果8的分布式多集MSi上的化学反应。
细化过程必须保留系统的操作。因此,整体的规范DSGamma系统必须提供相同的四个方法new-ttser (usr) useraction(我usr),结果(usr gt;,我和~ ser-exit (usr) ~比最初的规范。随着全球多重集是分歧,收费员和当地多重集(一个为每个用户),我们必须忠告——好系统操作和内部行为:(1)每个用户映射到本地多重集规范——bag4入帐,(2)化学反应必须把整数从一个或多个本地多重集,(3)整
全文共15486字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[567]
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。