《基于AOE网的演示系统设计和实现计算机科学与技术专业.docx》由会员分享,可在线阅读,更多相关《基于AOE网的演示系统设计和实现计算机科学与技术专业.docx(27页珍藏版)》请在优知文库上搜索。
1、目录第!.章综述(2)第1.1节本论文的背景和意义(2)第1.2节本论文的主要方法和研究进展(2)第1.3节本文的主要内容与难点(2)第2章程序设计(4)第2.1节面向对象的程序设计(4)第2.2节不同语言权衡选择(5)第3章AOE网(10)第3.1节概念解析(11)第3.2节算法(12)第4章代码实现(13)第4.2节程序工程构建(15)第4.3节程序设计流程与结果(15)第5章总结(17)致谢(18)关键词:AOE网、Java、面向对象、模拟内容提要基于AOE网的演示系统,是想方便与非专业人员观看演示,了解到AoE网工程节点的计算过程。AOE网常常用于工程问题,而工程人员对于算法程序常常不
2、了解,通过编写可以便于非专业人员观看模拟整个工程进度过程。本文主要基于AOE网的计算算法,程序架构使用类MVC架构,用Java实现以天为单位的工程模拟。第1章综述1.1 本论文的背景和意义在现代化管理中,人们常用有向图来描述和分析一项工程的计划和实施过程,一个工程常被分为多个小的子工程,这些子工程被称为活动(Activity),在带权有向图中若以顶点表示事件,有向边表示活动,边上的权值表示该活动持续的时间,这样的图简称为AOE网。AOE网的演示,有助于人清楚AOE网最早开始时间ve和最晚完成时间vl的实现过程,便于非专业人员更加清晰的认识。1.2 本论文的主要方法和研究进展通过距离矩阵,用Ja
3、va绘制相应的节点图形,建立定时器任务,模拟工程的每日进程。通过定时器模拟每天的发展,便于观看演示系统人员的清晰地了解到任务工程的进展。不需要深入了解1.3 本文的主要内容与难点本系统用Java实现,采用类MVC,视图view和控制control的交互将通过InodCl数据进行联系。初始化时基于节点之间的初始化距离矩阵,根据矩阵生产自定义的节点Point的model初始化。再根据初始化的节点数组,根据index索引绘制不同节点之间的水平角度与横纵坐标,重写JPaenl的paint,绘制点、线、相应的文字建立定时器任务与相应的原子操作函数,控制器主要负责天数的增加。相应的将会修改model的一系
4、列参数。之后repaint,视图将根据model的变化而做出相应的改变。第2章程序设计1.1面向对象程序设计在计算机科学中,对象(英语:object),台湾译作物件,是一个存储器地址,其中拥有值,这个地址可能有标识符指向此处。对象可以是一个变量,一个数据结构,或是一个函数。是面向对象(ObjeCtOriented)中的术语,既表示客观世界问题空间(NameSPaCe)中的某个具体的事物,又表示软件系统解空间中的基本元素。在软件系统中,对象具有唯一的标识符,对象包括属性(Properties)和方法(Methods),属性就是需要记忆的信息,方法就是对象能够提供的服务。在面向对象(ObjectO
5、riented)的软件中,对象(Object)是某一个类(Class)的实例(Instance)o概述:面向对象程序设计(英语:ObjeCt-Orientedprogramming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达
6、给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。1面向对象编程具有以下优点:1 .易维护采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。2 .易扩展通过继承,我们可以大幅减少多余的代码,并扩展现有代码的用途;我们可以在标准的模块上(这里所谓的“标准”指程序员之间彼此达成的协议)构建我们的程序,而不必一切从头开始。这可以减少软件开发时间并提高生产效率;3 .模块化封装可以定义对象的属性和方法的访问级别,通过不同的访问修饰符对外暴露安全的接口,防止内部数据在不安全的情况下被修改。这样可以使程序具备更高的模
7、块化程度,方便后期的维护和修改。同时,面向对象语言允许一个对象的多个实例同时存在,而且彼此之间不会相互干扰;4 .方便建模虽然面向对象语言中的对象与现实生活中的对象并不是同个概念,但很多时候,往往可以使用现实生活中对象的概念抽象后稍作修改来进行建模,这大大方便了建模的过程。(但直接使用现实中的对象来建模有时会适得其反)。2. 2不同语言权衡选择支持部分或绝大部分面向对象特性(类和实例、封装性、继承、多态)的语言即可称为基于对象的或面向对象的语言。面向对象的主流变成语言有Java、C#、C+等等。不同语言有不同的侧重点。Java适合服务器的开发、C#适合Window下的窗体开发,C+适合硬件底层
8、的开发、VUe适合网页的开发等。因为最终计划实现的是桌面的exe格式的演示程序,因此考虑用JaVa和C#较为合适,权衡后,用JaVa实现。考虑到AOE网的演示是基于一些工程(视为点)和每个工程到下一个工程(视为带有权值的边)。第3章AOE网3. 1概念解析有向图中,用顶点表示活动,用有向边表示活动之间开始的先后顺序,则称这种有向图为Aov(AetiVityOnVertex)网络;AOv网络可以反应任务完成的先后顺序(拓扑排序)。在AOV网的边上加上权值表示完成该活动所需的时间,则称这样的AOV网为AOE(ActivityOnEdge)网,如下图:图3-1AOE路径图图中,顶点表示事件(能被触发
9、,两特征属性:最早发生时间Ve(j);最晚发生时间Vl(j),边表示活动(能被开始,两特征属性:最早开始时间e(i);最晚开始时间l(i),权表示活动持续时间,通常用AoE网来估算工程完成的时间两条原则:0只有某顶点所代表的事件发生后,从该顶点出发的各活动才能开始0只有进入某顶点的各活动都结束,该顶点所代表的事件才能发生AOE网(ACtiVityOnEdgeNetWork)是边表示活动的网,AOE网是带权有向无环图。边代表活动,顶点代表所有指向它的边所代表的活动均已完成这一事件。由于整个工程只有一个起点和一个终点,网中只有一个入度为0的点(源点)和一个出度为0的点(汇点)。相关时间的计算:(1
10、)事件最早发生时间:即之前所有活动均完成所需的时间,由耗时最长的路径决定。具体判断时可以在直接前驱的最早发生时间+两者之间活动时间组成的集合中寻找最大值。(2)事件的最晚发生时间:事件的最晚发生时间以不影响工程最终完成时间为原则。源点(汇点)的最早发生时间和最晚发生时间相同。对与事件j的最晚发生时间可以采用:汇点的发生时间减去到j的最长路径来求得。(3)活动的最早开始时间:活动的的开始时间与事件发生时间相互联系,活动的最早发生时间为其起点事件的最早发生时间。(4)活动的最晚开始时间活动的最晚开始时间为其终点的最晚开始时间减去活动进行的时间。3. 2AOE算法首先,在AOE网中,从始点到终点具有
11、最大路径长度(该路径上的各个活动所持续的时间之和)的路径为关键路径。计算关键路径,只需求出上面的四个特征属性,然后取e(i)=l(i)的边即为关键路径上的边(关键路径可能不止一条)。先来看看四个特征属性的含义:(1) Ve(j):是指从始点开始到顶点Vj的最大路径长度计算技巧:1从前向后,取大值:直接前驱结点的Ve(j)+到达边(指向顶点的边)的权值,有多个值的取较大者2首结点Ve(j)己知,为0如上图各顶点(事件)的Ve(j):(从Vl开始)顶点VSV2V3cVGV5/V6-V7pOp3/7-10计篁顺庠图3-2AOE的最早开始时间Ve计算(2) Vl(j):在不推迟整个工期的前提下,事件V
12、j允许的最晚发生时间计算技巧:从后向前,取小值:直接后继结点的Vl(j)-发出边(从顶点发出的边)的权值,有多个值的取较小者;2终结点Vl(j)己知,等于它的Ve(j)如上图各顶点(事件)的Vl(j):(从V7开始,它的最早、最晚发生时间相同,都为10):顶点JVSV2.V3“V4一V5-V6V7“VlGP0,3p3,6/7,计算顺序图3-3AOE的最晚完成时间vl计算(3) e(i):若活动ai由弧CVk,vj表示,则活动ai的最早开始时间应该等于事件Vk的最早发生时间。因而,有:e(i)=ve(k);(即:边(活动)的最早开始时间等于,它的发出顶点的最早发生时间)如上图各边(活动)的e(i
13、):边al(3卜a2(6a3(2卜a4(4卜a5(2)a6(ia7(3)表示,则ai的最晚开始时间要保证事件vj的最迟发生时间不拖后。因而有:l(i)=vG)-en(为边(活动)的到达顶点的最晚发生时间减去边的权值)如上图各边(活动)的l(i):边.al(3a2(6ha3(2卜a4(4a5(2卜a6(ia7(3卜a8(l)a4、a8、a9,即为关键路径上的边,所以关键路径有两条:a1a4a9和a2a8a9图3-6AoE的计算结果第4章代码实现4.1 程序解析(1) AOEPOint:代表工程的点。结合实际情况,有如下字段与方法。1)代表整数类型的X2)代表整数类型的y3)代表唯一的索引inde
14、x4)代表最早开始时间的Ve5)代表最晚完成时间的Vl6)代表该工程顺序指向下一个工程点的完成天数计时的HashMap的CurrentTimeMap,key是工程节点的索引Index,VaIUe是已经完成的天数7)代表计算工程逆序指向之前工程的完成天数时间,便于反向计算Vl的VlTimeMap8)代表指向上一个工程的节点Map,key是AOEPoint,值是完成的天数9)代表指向下一个工程的节点Map,key是AoEPoin3值是完成的天数关键方法:1) islnvoke():Boolean判断该节点是否处于被激活状态(也就是之前导向该节点的节点们是否完成)2) addNext、removeNext对于之前或下一个节点的指针添加与删除3) getNextlter得到对于下一个节点的迭代器4) getPrvToCurrentTime得到计算到前一个节点到该节点的工程完成进度5) getVe:得到该工程的最早开始时间6) isVlInvoke:计算VI时逆向判断节点是否处于激活状态。7) getX():得到绘图板上改点的横纵坐