面向对象技术在过去的几年里已经成为主流,几乎完全取代过程式开发技术。面向对象技术的一个*大的优势是整个软件系统可以被看成是由一些独立的类的集合组成。其中的每一个类都有良好定义的任务,它的责任是非常清晰的。在一个面向对象的程序中,这些类相互协作以完成整个应用程序的目标。但是,一个系统的有些部分不能被看成是某一个类的责任,它们跨越了整个系统,影响许多类。比如:分布式应用程序中的锁操作、异常处理和日志方法调用。当然,实现这些功能的代码可以分别加入到每个类中,但这样就违反了每个类应该有良好定义的责任这一原则。
AOP ( Aspect- Oriented Programming)的目的是清晰的分离关注点来解决以上提到的问题。
AOP是用一种松散耦合的方式来实现独立的关注点,然后,组合这些关注点来实现*终系统。在AOP中将这些难以用传统的模块化结构局部化的问题称为横切关注点,并定义了一个新的程序构造方面( aspect)来支持横切关注点( crosscutting concern)的模块化、局部化,这样就很好的解决了OOP编程范式的这一难题。
2 AOP基本概念2. 1关注点、横切关注点关注点就是一个特殊的目标、概念或感兴趣区。关注点可分成两大类:核心关注点和系统级关注点,核心级的关注点包括业务逻辑,而系统级关注点包括日志、用户身份鉴别、安全、性能、持久性等等,系统级关注点会影响多个模块的实现,所以也被称为横切( crosscutting横跨)关注点。从技术上来讲,一个复杂的软件系统可以被看成是多个核心级和系统级关注点的组合实现。例如,一个信用卡处理系统包括处理支付的核心关注点,以及处理日志、鉴别用户身份、安全、性能等系统关注点。
说明了一个系统可以被看成是由多个模块实现的一组关注点。虽然横切关注点跨越多个模块,但目前的技术上通常用一维方法学来实现,这使得从需求到实现是沿着一个单一的维来映射的。这个单一的维通常就是核心模块级实现,其他的需求则与核心模块级实现相互交织在一起。换句话说,需求空间是一个N维空间,而实现空间是一维的空间,这样的不匹配造成了从需求到实现是一个很笨拙的映射。
采用目前的方法学来实现横切关注点存在许多问题:
( 1)代码交织( code tangling) :一个软件的模块可能与数个需求交互。例如在通常情况下,开发人员同时思考业务逻辑、性能、同步、日志与安全。这样一个多需求交织在一起的状况导致编程元素中同时存在每一个关注点的实现,即代码交织问题。
( 2)可跟踪性差:同时实现多个关注点使得每一个关注点与其实现之间的对应关系变得模糊,二者之间的映射变得很差。
( 3)代码重用性差:由于一个模块要实现多个关注点,对类似功能有需求的其他系统不能很方便地重用该模块,进一步造成生产力的下降。
( 4)难修改:因为横切关注点跨越多个模块,所以修改时容易遗漏某个模块,导致不一致性。
2. 2面向方面的开发方法AOP的目的是清晰的分离关注点来解决以上提到的问题。AOP从本质上讲,是用一种松散耦合的方式来实现独立的关注点,然后组合这些关注点来实现*终系统。用它所建立的系统是使用松散耦合、模块化的横切关注点来搭建的。与之对照,用OOP建立的系统则是用松散耦合的模块化的一般关注点来实现的。在AOP中,这些模块化的单元叫做方面( aspect),而在OOP中,这些一般关注点的实现单元叫做类。
AOP定义了如下概念:连接点:程序执行过程中的点,比如调用某个类里的特定方法的地方。切入点:切入点捕获、识别程序流程中的连接点,一旦捕获了一个连接点,那么就可以在这些连接点的执行之前或之后做某些动作。建议:指定到达特定切入点处应执行的代码。
AOP提供了三种把建议关联到连接点的方式: be fore、after和around.倡导:建议只是在程序运行时改变程序的行为,是动态的改变。而倡导可以改变程序的静态结构,如类中的成员,或者类之间的关系。
方面:它把切入点、建议和倡导包在一起。和类相似,方面也可以包含方法和属性,从其他类或方面扩展以及实现接口等。与类不同的是,不能用new来创建一个方面实例。方面可以标记其自身和任何切入点为抽象的( abstract)。抽象的切入点其概念和抽象类相似,它允许把细节实现推迟到派生方面里。一个具体的方面可以从抽象的方面扩展而来,它要提供抽象方面里切入点的具体定义。
AOP包括三个清晰的开发步骤:( 1)方面分解:分解需求提取出横切关注点和一般关注点。在这一步中,把核心模块级关注点和系统级的横切关注点分离开来。
( 2)关注点实现:各自独立的实现这些关注点。
( 3)方面的重新组合:在这一步里,方面集成器通过创建一个模块单元方面来制定重组的规则。重组过程也叫织入( weaving)或集成( inte grating)则使用这些信息来构建*终系统。
3 AOP在仓储系统中的应用以仓储系统为例,我们选择OOP作为开发的基础范型,也就是OOP来处理一般的关注点(即核心关注点) ,对于系统中的横切关注点,将使用AOP技术加以实现。对系统进行分析,系统的一般关注点包括:入库、领料、退料、质检、销毁、原料维护等。这些一般的功能都可以用类来完成。但是,权限控制将跨越系统中的多个类,是系统的一个横切关注点。下面,用AOP来设计实现权限控制。
这里,为了叙述的方便,将以入库和退料为例。
在入库时,在入库单类StoreM aterialForm类中有特定的方法( storeM aterial( )方法)完成入库的操作,它首先更新库存表里的库存(如果库存表中没有同样的原料,添加一条记录;如果库存中已有,则加上相应的原料的数量) ,接着添加相应的入库记录到入库单表中;退料时,在ReturnMaterialForm也有特定的方法( returnMaterial( )方法)完成退料的操作,它首先更新库存,然后在库表中添加退料单记录。在传统的面向对象开发中,为了实现这样的权限控制,需要分别在这两个方法的实现中加入相应的代码,以保证操作员不越界操作。而如果使用AOP的方式去设计,只要把这二个方法看作连接点,然后,定义这么一个方面:它在这两个类分别调用storeM aterial( )方法和returnM aterial( )方法时,先检查要操作的原料是否在该操作员的权限之内,如果在权限之内,则继续正常操作;否则,给出相应的提示,并终止操作。
为了用AOP的方法解决上述问题,编写如下的称为PowerControl的方面。具体代码如下:public aspect PowerControl{ pointcut powerOp( Object o) : ( call( public void StoreMaterialForm.storeMaterial(call( public void ReturnMaterialForm. re turnMaterial( ) ) target( o) ;void around( Object o) : pow erOp( o) { String w arehouseid= o. wk. getWhid( ) ;String materialname= o. materialname;Class. forName( com. microsoft. jdbc. sqlserver. SQLServerDriver);Connect ion c= Drivermanager. getConnect ion( jdbc: microsoft: sqlserver:/ / localhost: 1433; DatabaseName= w arehouse ,) ;Statement s= c. createStatement( ) ;/ 利用仓库编号和原料名称去库表MATERIAL中查找该原料是否存放在该仓库中。库表MATERIAL中存在原料名称字段Name和仓库编号字段WAREHOUSEID,指定每一原料所属的仓库。 / String sql= SELECT COUNT( ) AS AMOUNT FROM w arehouse. MAT ERIAL WHERE NAME= + materialname + AND WAREHOUSEID= + warehouseid+ ;ResultSet r= s. executeQuery( sql) ;If( r. next( ) ) { If( ( r. get Int( AMOUNT! ) = = 1) { / /操作的是本仓库的原料,合法Proceed;/ / process( o)表示继续执行连接点的功能} else{ / /操作的不是本仓库的原料,不合法,不再执行连接点JoptionPane. showMessageDialog( null,对不起,你没有操作本原料的权限) ;} r. close( ) ; s. close( ) ; c. close( ) ;}在这个方面中,定义了一个名为powerOp的切入点,而StoreM aterialForm类中的storeMaterial()方法和ReturnM aterialForm类中的returnMate rial( )方法则是组成这个切入点的连接点。当然,为了使用相应类中的属性,把要操作的对象定义为Object o.Object类是Java中所有类的基类。系统要实现的功能是如果操作在允许的权限内,则按原先的操作进行;如果超越了权限,那么相应的操作将被停止,程序给出相应的提示。在这里使用了around建议,因为around建议是包在连接点外面的,只有它才有权决定是否运行某个连接点。
显然,在采用单纯形法和限制每个等级数据记录数后,能使神经网络的收敛速度得到显著提高,并且使误差明显降低。
6结束语通过对酸轧机组人工神经网络模型数据筛选过程和算法的研究,阐述了筛选算法选取样本数据的具体应用。仿真结果表明了算法的有效性,为酸轧机组人工神经网络模型训练提供更优的样本数据奠定了基础。