面向方面编程方法研究

2024-08-14

面向方面编程方法研究(精选7篇)

面向方面编程方法研究 第1篇

面向对象编程的软件开发思想对当今编程技术产生了软深远影响,目前比较流行的开发语言如C++,C#,Java均是依面向对象思想为核心。但是,在一些方面,面向对象思想有其局限性,在我们企业的实际开发中,经常会碰到某个模块,在其它许多模块中被调用,这个模块我们可以把它理解为是共有的部分。这类情况,我们传统的面向过程的思想和面向对象的思想,不是一种理想的解决方案。例如,我们在日常开发中,经常会碰到日志的处理,操作数据库时碰到的事务处理,访问页面时碰到的权限验证的处理,这些处理基本上每一个模板均要访问到,如果采用传统的思想,必将产生大量的代码重复。虽然通过一些设计模式可以减少这种重复,但我们还有更好的解决办法。如在访问多个对象前需要进行权限检查,那么如果按照面向对象的思路,权限检查势必会成为这多个对象的行为。如果每个对象都需要去实现权限的验证,势必会造成大量重复代码的产生,程序的编写也会变得枯燥无味。但我们可以将权限检查看作是一个切面,所有对这些对象的访问都要经过这个切面,这就是面向方面的编程技术AOP(Aspect Oriented Programming)。AOP的目标便是要将这些“横切关注点”与业务逻辑代码相分离,从而得到更好的软件结构。

2 面向方面编程介绍

面向方面的核心概念有方面、连接点、切入点、通知、编织等。

2.1 连接点(Joinpoint):代码中定义明确的可识别的点。

2.2 切点(Pointcut):通过配置或编码指定接合点的一种方法。

2.3 通知(Advice):表示需要执行交叉切割动作的一种方法。

2.4 编织:通过将一个类的实例混入目标类的实例引入新行为。

3 面向方面编程在企业开发中的具体应用

在现实开发中,此处以某外贸公司的进销存信息管理系统为例进行讲解。

进销存系统中,一般存在对客户进行管理,主要包括对客户的增加、删除、修改、更新等日常维护操作。很显然,只有给该用户授权了的才可以进行以上操作,我们如果采用面向对象的方法,那么该代码的实现如下:

同理,在进销存中,如果是对商品配件进行增加、删除、修改、更新等操作,也需要得到授权才行。

通过以上代码分析,我们可以利用面向方法编程的方法,把权限验证部分作为系统的横切关切点,凡是涉及权限验证的操作,均将调用横切点实现,没有必要每个模块均作权限判断处理。如图1所示。

4 AOP性能分析

在企业软件开发过程中,面向方面编程方法所带来的影响是巨大的,它甚至不亚于面向对象编程技术。二者之间是互补关系,而不是竞争关系。面向对象编程在抽象建模上表现优越,它的缺点是不能跨越其它不关联的系统模块,它的关注点是本模块。而面向方面编程技术,它在跨越系统多模块之间能灵活处理,可以对多个模块进行定义,统一横切调用,代码的维护性和阅读性显得更强。显然,面向方面编程是从左到右的过程。

面向方面编程与面向对象编程,二者互相不干扰,二者的互补性表现较好,使代码更有层次感。通过在进销存管理系统的应用,发现面向方面编程技术是解决一些公共模板的一个较好方案,节省大量代码,程序阅读性也更强。

结束语

面向方面编程作为一种较新的软件开发方法,它是对面向对象编程进行较好补充的技术,与面向对象编程技术并不互斥。当然,当作为一种新的编程技术,面向方面编程技术还需要不断的深入分析和验证,在实际开发过程中关于AOP部分的配置过于复杂,而且也缺乏一定的理论支持,还需要不断的完善和普及。

摘要:通过分析面向对象编程存在的不足,引入了面向方面编程技术,并对后者的优缺点进行了详细的分析。从概念、实际应用、性能等角度对面向方面编程技术进行深入的分析。

关键词:面向方面编程,软件工程,开发

参考文献

[1]李刚.轻量级J2EE企业应用实战[M].北京:电子工业出版社,2007.

[2]The O'Reilly Java Authors.Java.

[3]董波涛,潘凌霞.基于AOP方法的应用软件开发研究[J].软件导刊,2007.

[4]冯艳蕾.面向方面的编程的研究与实现[J].科技广场,2007.

面向方面编程的研究 第2篇

面向对象的编程(Object-Oriented Programming,OOP)技术相信大家都非常熟悉,由于面向对象技术很好地解决了软件系统中角色划分的问题,所以现在大多数的软件项目都选择面向对象的编程方式。开发者借助于面向对象的分析、设计和实现技术,可以很方便地将问题领域的“名词”转换成软件系统中的对象,从而自然地完成从问题到软件的转换。当前,OOP已经成为大多数软件开发项目的选择。

目前OOP提供的类概念还只能分离关注方面的一维,所以利用OOP不能有效地反映系统的所有关注点,这样就造成了代码缠结和代码分散问题,使系统难以理解、实现和演进。从整体来看,这样开发出来的软件系统很难具备良好的重用性和扩展性,无法适应需求的不断变化。

为了解决上述问题,在上世纪末人们又提出了AOP的概念,AOP能有效地改善功能代码和方面代码的分离和自动合成,使程序更加容易理解、设计、实现和维护。

2 AOP关键概念分析

面向方面程序设计(Aspect-Oriented Programming)是由Xerox Palo Alto研究中心(Xerox PARC)的Gregor kiczales等研究人员于1997年提出的一种新的程序设计思想和模型,它为开发者提供了一种模块化横切关注点的机制,并能够自动将横切关注点织入到面向对象的软件系统中,从而完成横向功能的模块化。AOP和OOP结合起来就可以很好地完成对真实系统的横向和纵向的两个维度的建模,从而更加容易地构建稳定且易于维护的软件系统。

AOP思想的本质是用一种松散耦合的方式来实现独立的关注点,通过组合这些实现来建立最终的系统。在AOP中封装横切关注点的模块单元被称为方面(Aspect),而在面向对象中封装一般关注点的模块单元被称为类。下面对AOP的几个核心概念进行一下探讨。

1)横切关注点(Crosscutting Concern):有一些关注点从逻辑本身上看就是独立的,比如说很多具体业务对象以及方法,而有一些关注点的逻辑本身是横向的,也就意味着其它多个独立的关注点都对其有依赖关系,比如说许多系统级代码是很多业务模块都需要包含的,这些贯穿多个模块的关注点被定义为横切关注点。横切关注点如果不被模块化将会导致软件系统在很多方面存在缺陷,典型的问题就是代码混乱和代码扩散。

2)方面(Aspect):一系列被分解出来的关注点集就构成了方面,方面是AOP技术中封装的基本模块单元,利用方面这个概念我们可以方便地对横切关注点进行抽象,并且在方面里面进行一系列其它要素的定义。

3)连接点(Join Point):连接点是Aspect J中的一个重要概念,它是程序执行过程中明确定义的点,连接点可能定义在方法调用、条件检测、循环的开始或是赋值动作处,连接点有一个与之相关联的上下文,一个方法调用连接点的上下文可能会包含一个目标对象及调用参数等。

4)切入点(Pointcut):用来指明所要连接的程序结构,同时还为在连接点上执行的通知提供上下文环境。切入点的本质就是捕捉连接点的结构和通知的激发条件,它告诉AOP框架哪些拦截器绑定到哪些类,哪些原数据应用于哪些类,哪一个引导被引入哪些类。切入点决定了各种AOP的特征怎样被运用于应用程序中的类。

5)通知(Advice):一个通知就是由一个特定事件触发的程序逻辑,是能够被插入在调用者和被调用者之间的一个行为。

6)导言(Introduce):导言是一个增加方法或域到已存在的类中的途径,它甚至允许你改变当前存在的类的显式接口,并能引入一个混合的类以实现新的接口,导言还允许你将多继承引入到一般的Java类。它一个主要的用例就是当有一个方面并让这个方面有一个运行时间接口或跨越不同的对象层次时,仍然要让应用开发者能够调用特定方面的APIs。导言还能够是一个方法,它将一个新的API绑定到一个存在的对象模型。

7)元数据(Metadata):元数据用来描述类本身的一些附加信息,它和其描述的类捆绑在一起,可以静态地或者在运行时刻获得这些类的描述信息,甚至还可以动态地将Metadata添加到一个给定的类的实例。在EJB中就使用了大量的Metadata,Metadata也已经整合在C#和JDK 1.5中。

8)织入(Weave):织入是实现AOP技术的关键概念之一,当我们使用关注点分离原则把横切关注点模块化成方面后,就需要考虑如何以自动化的方式把方面组织到程序相关业务类中以形成最后完整的程序,这个装配方面代码和业务核心代码的过程就称为织入。织入通常可以使用静态和动态两种方式完成,静态织入的实现可以依靠语言预处理器、扩展编译器以及扩展链接器等语言环境,而动态织入的实现就要依靠动态装载器、虚拟机等动态运行环境。

3 AOP的实现方法

AOP研究社团把AOP的实现定义为三步:

1)方面分解。分解用户的需求,提出横切关注点和一般关注点。在这一步中,可以把核心模块级关注点和系统级横切关注点分离开来。

2)关注点实现。将这些关注点各自独立地实现,然后将它们实现为方面。

3)方面的重新组合。方面集成器通过创建一个模块单元——方面来指定重组的规则,通过这些规则实现各个模块化关注点的重新组合,以构建最终系统。

通过以上分析,我们知道AOP的基本流程为:通过需求分析将问题域分解为多个关注点,在设计层定义关注点的解决模型,在实现层实现关注点的模块化,一般关注点部件通过对象、方法、过程等实现,横切关注点要模块化为方面,最后通过AOP环境提供的织入器根据织入规则将这些模块化的关注点组合起来形成一个完整的系统。基于AOP的软件开发过程如图1所示。

4 AOP在Java技术中的实现

1)AOP的容器实现:AOP技术已经在基于组件开发体系的Java企业级平台(J2EE)中的容器中得到了广泛的实现和运用。一个容器就是一个组件运行环境,它提供了组件运行时所需要的外部资源环境,并且控制着整个组件的生命周期,也就是说组件完成对核心业务的封装,而容器则完成对那些横切多个功能组件的系统代码的封装。JBoss容器、Spring框架和Pic Container就是现在主流的以AOP技术实现的工业级组件容器和框架。下面就JBoss容器对于AOP的实现进行简单的分析。

JBoss 4.0定义了一个AOP框架,这个框架和JBoss应用服务器紧密地结合。我们通过对于JBoss给出的官方文档样例来分析其AOP框架的实现。

定义一个拦截器

2)Aspect J的实现:Aspect J是由Xerox Palo Alto研究中心(Xerox PARC)开发的一个基于Java语言的AOP实现,它通过向Java语言中加入了连接点(Join Point)、切点(Pointcut)、通知(Advice)、类间声明(Inter-Type Declaration)和方面(Aspect)等新概念来加强对方面的抽象,并依靠特殊的预处理器把Java源文件和方面源文件进行整合,然后产生纯Java程序。总体上说,Aspect J采用语言扩展技术实现方面的抽象,采用静态的转换技术实现织入。

5 AOP的优势和待解决的问题

AOP能够帮助开发者分离关注点,克服了由于横切关注点的存在带来的间题,因此AOP的优势就在于它能够对横切关注点建模,克服了代码冗余、代码混杂所带来的生产效率低、代码可重用性差、系统的进化能力弱等问题。但目前已经开展的面向方面软件开发研究还不太完善,在未来的工作中需要解决的问题还很多:1)方面编织器的开发和方面编织器与开发环境的整合问题;2)如何有效地分离横切关注点的问题;3)对方面开发建模的问题,主要集中在如何对UM L进行扩展上;4)对方面使用约束的问题,这样可以以可控的方式使用方面;5)如何在需求分析和体系结构设计阶段管理方面的问题。

摘要:面向方面编程(AOP)是一种新的编程技术,它弥补了面向对象编程(OOP)在跨越模块行为上的不足,AOP引进了Aspect,允许程序员对横切关注点进行模块化,增强了系统的可维护性和代码的重用性。该文介绍了AOP的关键概念和开发流程,给出了AOP的原理和AOP的JBoss实现,并说明了AOP的优点和有待于进一步研究的问题。

关键词:面向方面编程,横切关注点,AOP

参考文献

[1]邵维忠,杨芙清.面向对象的系统分析[M].北京:清华大学出版社,1998.

[2]Ramnivas Laddad.利用AOP分离软件关注点[M].刘克科,译.程序员2002合订本(下).北京:电子工业出版社,2003:167-170.

[3]Ken Wing,Kuen Lee.An Introduction to Aspect-Oriented Programming[Z].Reading Assignment.

面向切面编程之研究与探讨 第3篇

1 AOP的引入

日常中, 我们运用OOP来进行软件开发时, 很多时候问题领域的某些对象恰恰并不属于业务逻辑范畴, 然而却在系统中广泛分布。最常见的例子就是日志和权限检查。以日志为例, 它在系统中处处存在, 然而就问题领域来说, 日志和业务逻辑毫无关系。对于面向对象来说, 传统的解决方案是将日志功能声明成一个类或接口来实现日志功能, 然后让需要此功能的对象来继承或者引用这个类, 进行功能调用。这就要求调用方要手动编码, 日志功能的存在与否要依赖于程序员是否记得进行相应的调用。从另一方面说, 如果日志功能需要进行修改和变动, 那么很可能所有的调用函数可能都要进行修改。这样的修改将会遍布整个系统, 无疑会增加出错的几率和系统维护的难度。对于类似于日志这样的功能, 它存在于系统的各个模块之间, 但又不属于某个具体的业务逻辑对象, 在AOP中被称为“横切关注点”。OOP侧重于通过继承来描述对象之间的泛化-特化关系, 这是一种“纵”的关系;而AOP则关注的是各种对象之中所共存的一种“横切”关系。AOP便是通过记录代码中各个关注点的位置来将这些散落在系统各处的功能实现统一在一个模块之中。开发者通过对关注点的分离, 将横切的功能以模块化的形式来表现, 使得代码更易于维护和重用。AOP并不想替代OOP或者其他基于对象的方法。相反AOP作为OOP的补充, 通过支持一种新的从组件分离出方面的方式, 用来弥补OOP的缺陷。

2 AOP结构模式

面向方面编程是一个崭新的程序结构模式, 作为面向对象程序设计的补充, 它影响力是深远而悠长的, 下面介绍一下AOP中各个重要概念:

关注点 (concern) :一个关注点可以是一个特定的问题、概念、或是应用程序的应用域——总而言之, 应用程序必须达到的一个目标。

横切关注点 (crosscutting concern) :如果一个关注点的实现代码散落在很多个类或方法之中, 就像前面那个“安全检查”的例子那样, 我们就称之为“横切关注点”。

连接点 (jointpoint) :连接点是代码中一个明确定义的位置, 关注点将在这里横切应用程序。连接点可以是方法调用、构造函数调用、异常处理程序、或者程序执行中的其他点。

切入点 (pointcut) :一组连接点的总称, 用于指定某个增强何时应该被调用。切入点可以用正则表达式或通配符来描述。有些AOP实现技术还支持切入点的组合。

方面 (aspect) :方面是AOP的模块单元, 其地位就相当于面向对象程序设计中的类, 它将连接点、通知以及类型间声明封装在一起。同类相似, 方面也可以有自己的成员函数和变量, 从其他类或者方面扩展以及实现接口等。与类不同的是方面的构造 (construct) 是由AOP框架来构造的, 不能像类一样使用new关键字来显式生成实例。

编织 (weaving) :当方面模块被编写完毕之后, AOP语言编译器负责将方面模块中代码织入到被连接点标记的宿主代码中去, 这个过程称作为编织。根据编织时机的不同有编译时编织和运行时编织的不同。

3 AOP的实现机制

AOP将分散于系统各处的代码通过连接点和增强统一在各自的方面中, 从而实现了横切关注点的模块化。这里并不打算深入讨论AOP框架的实现机制, 但从最终用户的角度上说, 简单了解AOP框架的一些常见实现策略对具体使用AOP会有很大的帮助, 下面就是用于实现AOP技术的主要策略, 按照功能由弱至强排列:

*动态代理

*动态字节码生成

*J ava代码生成

*使用定制的类加载器

*语言扩展

4 基于AOP的开发步骤

AOP从其本质上来讲, 就是用一种松散耦合的方式来实现各个独立的关注点, 然后在组合这些实现来建立最终的系统, 用它所建立的系统是松散耦合的。面向方面程序的开发分三个清晰的开发步骤, 如图所示:

*关注点分解:分解需求提取出各个横切关注点, 并识别和记录方面所在连接点。在这一步里, 需要把核心关注点同系统级的横切关注点分开。横切关注点的划分通常满足以下几个条件:

*关注点所实现的功能横跨了多个模块

*关注点与核心业务相对独立, 不属于同一问题域

*关注点不属于系统的业务功能范畴

*关注点实现:根据AOP程序的结构将各自的关注点独立进行实现, 完成功能实现。进行代码编织:通过织入器, 将各个关注点同原有程序连接重组在一起。

5 结语

总之, AOP作为一个全新的领域, 对现代软件开发和设计进行了有益的结合和补充, 面向方面作为面向对象的补充, 进一步将系统中的核心关注与横切关注进一步分离, 解决面向对象的开发模式中所存在的一些缺陷和不足, 实现代码的简洁, 充分体现了“高层分离, 低层耦合”的原则。

参考文献

[1]幸俊.AOP开发过程研究及应用[D].中国优秀硕士学位论文全文数据库, 2007.

[2]李志纯, 张南平.面向Aspect编程的应用研究[J].计算机技术与发展, 2006.

《Java面向对象编程》课程研究 第4篇

在就业压力越来越大的今天,计算机软件专业的学生能够熟练地使用一门编程语言在就业中的优势是非常明显的。Java语言由Sun公司于1994年推出,然后其开源、丰富的类库、平台无关性等优点吸引了无数的编程爱好者,随着Java语言的不断发展和互联网应用的日益广泛,Java从2001年开始就一直是应用最广泛的编程语言,而且遥遥领先于第二名———C语言。美国《信息周刊》刊文评出有史以来最伟大的12款软件,其中Java语言作为唯一入选的编程语言,被排在第五位。综上所述,计算机软件专业的大学生学习好《Java面向对象编程》课程是很有意义的,而实际上学生对于这门课程的掌握情况并不十分理想,这其中有教材选用、教授方式、实践安排等各方面的原因。下面我就这些原因的形成提出解决方案,希望对于本课程的教育教学和学生后来的就业有所帮助。

2. 问题解析

2.1 教材选用

在繁杂的Java编程教材中选取一个适合本科教学和实践的并不是一件容易的事情。有些教材侧重于理论,基本是知识点的罗列和简单验证,这种教材类似于中学时代的数理化课本,学生对此类教材并不喜欢,感觉与实践相去甚远,不能将教材上的知识点与自己未来的工作和实践应用联系起来,因此提不起学习兴趣;有些教材虽然实例很多,也比较注重实践,但是由于讲授内容过浅,学生学过之后感觉教材上的内容已经掌握,但是对于一个简单的应用需求仍然无从下手,从而使学生对自己能力产生疑问;有些教材技术没有及时更新,讲授的内容已经不再适用,从而导致教授过程不理想;还有些教材虽然没有上述的问题,但是提供的基于实践的练习却很少,练习少导致学生书上的例题都可以做出来,但是却不知道如何举一反三加以运用。

2.2 教授方式

本课程的教学效果很大程度上依赖于教师的教授方式和教授方法。区别于其他专业课程,这门课的实践意义要远大于理论意义,所以使用何种教学方式就显得尤为重要。经了解,目前大多数教师采用的教授方式有两种:第一种教授方式是验证式,即教师提出一个知识点,然后用一段程序加以验证该知识点,然后继续提出下一个知识点。这种方式给学生的感觉不是在教授一门实践课程,而是在验证一些理论知识,导致知识点与日后的应用严重脱节。第二种教授方式是总结式,其实就是第一种教授方式的倒序,即先写一段程序,然后总结该段程序中出现的知识点。这种方式要比第一种效果稍好,但是一部分接受能力稍差的学生在这种方式下会感到特别吃力,因为一个知识点还没有被提出,它就要先被应用到一段程序中,有些不知所以。

2.3 实践安排

对于编程类的课程,如何安排实践是重中之重。大部分教材上的习题都过于侧重知识点的考核,而不是如何将知识点加以运用,除了选取合适的教材之外,教师还可以自行安排一些旨在提高学生积极性和动手能力的编程练习,而不是严格地按照教材上的练习安排实践或者随意找些类似考级之类的题目来让学生做。

2.4 其他问题

除了上述三个问题之外,还有一些因素会称为本门课程教学的关键点,比如多媒体教学的使用,IDE工具的选择,知识的及时更新,安排模拟课程设计,等等。

3. 解决方案

针对第2部分提出的本课程教学过程中存在的种种问题,我经过实践和研究,总结出以下解决方案以供参考。

3.1 选用编程从业人员中认知度较高的半工具书

弃用目前广泛使用的本科教材,而改用编程从业人员中认知度较高的半工具书。目前的本科教材存在着严重的问题,比如大部分是知识点罗列,选用例题无新意,练习没有针对性,知识结构老化,等等。另外,由于很多本科教材的编者自身并没有在企业中有过实践经验,因此对一些行业规则和公共规范了解不多,导致采用了很多与行业规则和规范相悖的习惯误导学生。而从业人员中认知度较高的半教程半工具书则不然,直接针对实践,知识点更新速度更快,采用了规范的编程习惯,例题紧贴实践,这些原因使得这一类工具书能够很好地起到教学和实践相结合的作用,我经研究和使用,效果很好。

3.2 采用探索式教授方法

由于目前广泛采用的验证式和总结式教学方法都有其缺陷,因此我提出探索式教授方法。具体方法是,先提出一个现实生活中可能遇到的问题,然后思考现实生活中的解决途径,将此途径用代码模拟实现,经过精心安排,在上述代码中埋下下一个问题的伏笔,然后提出下一个问题,如此反复。探索式教学方法建立在实践问题的基础上,先探索在实践中的解决方案,然后将该方案付诸于代码实现模拟,再总结该代码中出现的新的知识点和涉及的下一个问题,一节课结束之前在讨论该节课涉及的知识点在其他方面的应用。

3.3 合理安排实践和习题

针对实践环节中存在的问题,我提出如下方案。首先,将验证式教学中的教师角色应用到学生身上,在探索式教学的基础上,让学生自行编写例题验证所有的知识点,并将程序保存为自己的类库供以后参考学习。其次,针对知识结构适时安排恰当的练习,比如可以一些经常见到的小应用软件、小游戏,作为实践内容,既生动有趣,又可以锻炼学生解决问题的能力,提高学生的编程技巧。我在实践中就曾经将五子棋、扫雷游戏、货存管理系统、梭哈游戏等作为学生设计实践的练习,效果很好。

3.4 其他

备课尤为重要,教师要不断地更新自己的知识结构,掌握最前沿的技术动向。另外,在IDE工具的选择上,我建议在学习初期最好使用纯文本的编辑工具,以让学生最大限度地了解Java语言的内涵和使用规则,熟悉各个关键字的拼写和使用。而在提高阶段为了提高效率可以适当使用IDE工具,并适当传授一些工具使用的技巧。

4. 结语

对于计算机软件专业的学生而言,《Java面向对象编程》课程的重要性不言而喻,教师应该在教材选择、教授方式、实践安排等各个环节求新求变,争取找到效果最好,最适合自己和学生的教学安排,在提高学生自身能力的同时,为国家的就业问题作出自己的贡献。

摘要:本文针对计算机软件专业学生在《Java面向对象编程》课程中遇到的问题, 提出了编程课程教学的新模式, 以期可以让学生更好地掌握编程技巧, 在教学中将实践能力的提高最大化, 从而最终缓解计算机软件专业毕业生的就业压力。

关键词:《Java面向对象编程》,教学方法,教材改革,实验教学

参考文献

[1]Kathy Sierra, Bert Bates.Head First Java.中国电力出版社, 2007.

[2]李相国等.Java实例精通.机械工业出版社, 2009.

面向就业的编程语言教学研究 第5篇

关键词:编程语言,就业,教学理念

从1978年开始到现在,计算机专业的知识体系有了全新的变化,外延不断扩展,专业边界逐渐模糊,由于网络的迅速成熟,对计算机的专业人才提出了越来越高的要求。

2004—2014年统计增长最多的职位中,计算机应用软件工程师第五位。2008—2018年,预测增长最多的职业中,计算机应用软件工程师第十五位,比例增长约34%。高校为了适应市场需求,应持有的基本理念是面向就业市场培养人才,并且在各学科最新的本科教学培养方案的制定也体现出有越来越多的计划偏重于为学生就业而考虑的实用化。

计算机专业毕业生在正规就业中所面临的第一步即专业知识的笔试。经过对就业市场进行调研,软件开发职位大多数在第一轮笔试中考察应届毕业生的专业基础知识,其中绝大多数包括编程题,普遍重视基础知识以及编程思想,而编程语言的能力并不可能在笔试之前进行简单复习就能有大幅度的提高。

为使学生在平时学习中就能提前为就业做准备,在教学过程中教师应重视就业在专业课中的重要指导作用。目前编排在教学中的编程语言主要有C/C++、Java、JSP等,其中,Java就业前景广阔,易上手,可作为参考的优秀代码众多,并且非常适合企业网络和Internet环境,现已成为最有影响力的编程语言之一。探讨面向就业的Java语言教学过程显得尤为必要。

1 Java基本教学方法探索

1.1 语法及编程规范

对于一门编程语言来说,程序的规范性是第一步最重要的环节。从教学过程来看,虽然反复强调规范的重要性,仍然有学生写出的程序随意性极大。其中主要原因是没有得到足够重视。另一个原因是各高校在开设Java课程之前往往已经开设过C/C++,其编程风格、规范性上略有不同,也使学生受一定影响。此时可以针对两种语言在风格上的不同做出比较和示范,让学生记忆更加深刻。良好的编程习惯使代码具有很强的可读性,是团队合作的基本要求。同时,要培养良好的编写文档习惯,有助于代码的复用性以及软件的维护性[1]。

语法的学习则是一门语言起始阶段必经之路,虽然现在有很多成熟的集成开发环境(IDE)让编写程序的工作事半功倍,但在初始学习阶段就使用开发工具会使学生过度依赖IDE的提示而忽略了原理的掌握,因此应该采用较原始的工具,有助于学生在反复输入关键字时辅助记忆。在教学过程中,由于同时注重程序的规范性,因此采用Ultra Edit、Edit Plus这类小型编辑软件,它具有标识关键字、自动缩进的功能,可以协助学生规范地编写程序。当基础语法知识部分授课结束,学生在语法上已经达到一定熟悉程度时,在图形用户界面GUI、多线程、数据库以及网络编程讲授部分,由于对类库中的方法调用较多,可以采用IDE演示,一方面可以节省手写代码的时间,另一方面可以让学生了解IDE的开发、编译和调试过程。

1.2 Java类库与帮助文档

当基本语法知识掌握之后,对于Java语言来说,API帮助文档是在编程过程中不可或缺的辅助工具,而传统教学中对帮助文档的重视程度不够,多数的教材因篇幅需要,也只是对某些重要方法进行列举,所配的例程也枯燥无味。在教学过程中,学生对帮助文档的理解并不透彻,应在整个教学中贯穿对文档使用的演示,包括包的概念、包中类的作用以及典型方法的参数、返回值以及是否是静态方法、是否有异常抛出、在使用这些方法时的具体写法等,目的是提高学生自学能力。在真正开发软件项目时,不可能只应用课堂中学习到的类,课堂教学过程中给出一些典型使用过程,可以引导学生在使用其他类时能进行正确查询。

另外,由于API文档中提供的类库及方法都是Oracle(Sun)公司提供的公用接口,方法的定义和实现本身值得学习,可为学生提供思路,在自定义类中设计方法时,可以参考文档中方法的结构。

1.3 教学设备与教学手段

近年来,多媒体教学设备早已普及到各大高校,对编程语言课程来说,由于较强的操作性和程序执行结果演示的重要性,采用多媒体教学是必要的。

在授课过程中,传统的教学方式是将写好的程序直接显示在屏幕中,然后将每条语句解释给学生。这种方法的弊端是学生虽然看懂了程序的语法和功能,但在实际动手练习过程中并不知道应该如何开始、从哪里开始。教学理念应是教师当场编写短小并有代表性的程序,在该过程中,可以将一个程序按题目要求由简单设计到复杂,出现错误之后应该怎样根据错误提示进行改正。这种方式直观有效,同时也兼顾了规范性程序的写法,学生接受效果好。

在教学条件允许情况下,可以考虑在实验室讲授该类型的课程,将理论学时和实践学时相结合,保证学生每人一台计算机,可以在讲授过程中将教师屏幕发送到学生机终端,提高学生的参与度,在必要时,可自己动手编写并演示程序,教师也可以利用课余时间对学生编程过程中出现的问题进行直接指导。如果不能提供这样的教学条件,则需要允许学生自带机器上课,争取做到即时问题即时解决。

另外,对于某些知识点的讲解,如程序运行过程中内存分配的动态过程,最好利用黑板,采用图形的方式按步骤向学生讲解,因此,建议采用黑板与多媒体结合的教学方式。

2 教辅方法的使用

2.1 课堂留疑

目前的编程语言相关教材具有很强的理论性,并不能很好体现出某些知识点在真正应用时的具体用法,并且由于JDK版本一直在更新,某些教材的相关内容已经过时。而学生看教材的过程也很死板,尤其是一些较懒惰、不善于动手实践的学生,在看书时很可能停滞在知识点并不重要、但有歧义的文字叙述上。在动手实践时,最开始往往也会因为基本的语法问题,在编译过程中由于编译器提示的错误而手忙脚乱,这就要求教师在课堂上善于引导重点,有针对性地引入教材中没有的程序,有意识地写入一些错误,让学生认识错误,按编译器给出的错误提示找出错误,并演示解决错误的过程(调试),经验的积累一部分因素是遇到错误解决错误。

在讲授各个重要知识点后要抛出相应疑问并留少量时间给学生思考,必要时可增加课堂讨论,让学生主动寻求解决问题办法,并给出各种方案的优缺点,让学生在学习到他人的思想同时发现自己的问题,改进自己的方法,增加团队协作能力的培养和提高[2]。

2.2 作业与辅导

(1)作业的必要性。留作业并多留作业是必要的。由于相当数量的学生因为懒惰、不愿动手、习惯纸上谈兵等原因导致对课堂所学知识仅仅进行"听",不能及时课后巩固,还有一部分学生课后不知道应该如何练习,过度练习教材中的例子程序(往往是照着编写)效果不明显,而编程能力必须在实践过程中才能得到有效而迅速提高。作业是促进学生动手练习的外因,教师可根据每堂课的知识点选择有代表性的题目留给学生。在批改作业过程中发现某些学生解决问题的思想奇特新颖,教师也可以间接扩展思路。

(2)选做作业的设计。另外,计算机行业分支较广,不主张学生对各科都透彻了解,学生可以根据自己的兴趣爱好选择性地进行发展,在教学实践中采用的方法是对于热爱Java编程的学生,在留作业的时候也可以有针对性地对待,作业的设计主要分为2种类型,一种类型的题目是课堂基础知识的巩固,针对全体学生,几次课布置一次作业;另一种类型则是略有难度的选做题目,针对有意识提高该项技能的学生,适合每次课都布置,使学生在作业过程中加强锻炼,提高动手能力。实践过程中发现,这种教学方法效果明显,选做题目的出现可以使学生有目的性地练习和巩固,并且也不会因为作业过多成为所有学生的负担。但对教师而言,由于作业的增多,课后工作量有所加大甚至成倍增加,这就要求任课教师具有高度责任心。

(3)作业的处理。某些编程语言仍然沿用传统的以纸质方式交付作业的方法,但实际由于本门科目的特殊性,传统书写作业方式存在一定的弊端性。一方面,鼓励学生动手能力是期望他们在编译环境中动手编写程序,而在纸上完成这个过程则不能培养写程序的感觉。另一方面,纸质作业对于程序的规范性也表述不清。因此要求学生必须以电子版形式上交作业,这样也可以促进徘徊在选择和不选择该门技能这部分学生的兴趣。至于作业的批改和课后的答疑,则可利用邮件等即时通讯软件随时答疑解惑。这种一对一解答方式要求教师要付出大量的精力和时间,优势在于让每个学生觉得受到重视,积极探讨作业中存在的问题而不断进步,形成一种良性循环。实践证明,在这种师生交互过程中,教师针对学生个体的详细评语具有鼓励和推动作用,比起泛泛地在课堂中对全体学生作业的评语效果更好。

3 就业技能在教学中的融合

3.1 重视教师的引导作用

高校教师要重视培养学生的自学能力和独立解决问题的能力。在学生遇到问题,尤其是学习初期容易遇到的编译、运行错误时,对教师来说,直接指出错误原因是简单的,但更重要的是引导学生理解为什么出现这种问题,什么时候出现这种问题,以及出现这种问题应该如何调试和解决,在学生自己通过这种思路掌握解决问题的办法时,才不会因为练习过程中常见的编译器各种提示而失去信心。前文中所提到的编程演示过程由易到难的思想,也是遵循这个理念,教会学生编程方法而不单纯是语法或完成某种功能,从而提高学生的思维能力、创新能力以及就业和创业能力。

3.2 团队合作精神的培养

基础知识学习过程完成之后,课后开设兴趣小组,设计每一学习阶段的模拟项目。该项目完全开放,将全部权限发到小组,小组成员轮流进行系统分析、系统设计、工作分配以及模块开发和整合,让学生提前掌握程序开发工作的项目流程,在模拟环境中体验程序开发工作,有助于学生进一步了解个人能力及发展方向,在面向就业时有明确定位和选择[3]。

4 结语

与前期的教学方式和学生的情况比较,采用新的教学理念开展教学工作后,选择该方向继续学习的学生人数明显增多,在授课过程中也表现出明显兴趣,有利于后续课程的开展和学生个人就业技能的提高,教学效果明显。

教师在教学过程中要树立新的教学观、教育观,立足于培养学生素质的角度,使学生在探索问题过程中,创新意识和实践能力得到培养,强调学习态度、敬业精神、表达能力以及团队精神,为学生创造富有探索性的学习环境,有效地激发学生的学习兴趣,使学生在学习过程中发挥主动性和积极性。

教学过程中应根据就业需求,有针对性地调整教学目标,重视教学实践环节过程,适当适度地调整好学生应用能力的教学策略,对培养创新、创业型计算机应用专业人才具有重要意义。

参考文献

[1]张剑飞.Java教学中提高学生应用能力的策略研究[J].高师理科学刊,2009,29(6):98-100.

[2]卢晨.行为引导教学方法在Java教学中的应用[J].中国西部科技,2010,9(36):90,83.

面向方面编程方法研究 第6篇

Linux系统是一款开源的操作系统,它不仅适用于嵌入式系统的开发,而且还支持各种因特网协议,大部分主流的网络硬件、协议和文件系统都可以支持。所以,我校的网络通信编程技术课程主要是基于Linux操作系统。然而,Linux系统主要是用字符命令来控制计算机的操作,而对于长期使用Windows图形界面操作系统的学生来说,要经过很长的一段时间才可以适应。

本文就Linux网络通信编程技术课程在桂林理工大学的开展情况,结合西部地域性的特点,首先阐述了在教授这门课程时候面临的问题,包括教授对象,教学法、课程建设等方面,之后再详细描述了相应的课程改革具体措施,最后对本文进行了总结。

1 课程设置存在的问题

1.1 西部地域性问题

笔者所就职的高校位于西部城市,经济较为落后,高校生源多来自省内和经济落后地区。笔者就所教授的网络工程专业学生生源地进行了统计调查,如表1,学生人数为81人来自网络工程专业某年级,调查显示:77.78%的学生生源地为本省生源,其中65.43%的学生生源地为农村,少数名族人数的比例达到了34.57%。而来自农村的大多数学生是上到大学后才正式接触基于Windows操作系统的计算机,对于Linux系统很陌生,所以起点低,学习难度大是教学中遇到的问题之一。

1.2 课程建设问题

Linux网络通信编程技术是网络工程专业一门专业核心课程。其课程内容覆盖丰富包括了Linux系统,文件系统,TCP/IP协议族,socket套接字通信编程,TCP/UDP网络编程,数据的IO复用等几个主要的部分。其中Linux系统本身就是一个开放型的、免费自由软件,它具备多个任务并发,多用户的特点,是经典操作系统UNIX的克隆版本,且包含了很多UNIX的特性。同时该系统与Windows操作也有很大的不同,不再是基于界面的操作,而是采用基于命令指令输入的模式进行交互操作,所以涉及的范围非常广泛。该门课程还涉及计算机网络,通信等专业课程知识[2]。

1.3 传统教学法模式存在的问题

这门课程传统的教学模式是理论-技术-操作的方式,即以教师为理论讲解主导,学生主要关注技术和实际操作,这种教学模式,虽然在一定程度上可以达到“学以致用”目的,但是并不能解决实际问题,由于缺乏理论知识的支撑,学生多数只能记住操作,而不能真正的解决实际问题。

2 课程教学改革思路

通过笔者所在的教学团队大量的调研工作,针对西部高校以及网络通信编程技术课程存在的问题,主要从教学课程设置,实验课程,教学法,教材以及师资培养等方面,提出了相应的教改思路。

2.1 课程设置

自2008年起就开始设置网络工程专业本科,网络编程的课程作为一门专业核心课程开设在了本科学习的第三年,与之相辅开设的课程包括:计算机网络,C语言程序开发以及Linux操作系统等,开设这些课程目的主要是为了将计算机网络知识与编程课程紧密相联,从而让学生从网络编程角度解决实际的问题。同时专门的Linux操作课程的开设也可以弥补学生在Linux系统操作上的不足。

2.2 实验课程

现在的本科教育普遍存在的一个问题就是“重理论,轻实践”、教学与实践课程分布不均匀。桂林理工大学在培养网络工程人才的时候,根据网络编程课程实践性强的特点,大幅度的提高了实践课的比例。该课程总学时为48,32个学时为课程授课,主要是采用理论结合实例的形式进行讲授。还设置了16个学时的实验课程,占了总授课时的33.33%,实验内容包括基础性验证实验和设计性实验。具体的实验内容如表2所示。

首先前四个实验是以验证性实验为主,主要是为学生Linux编程打下基础,在学生具备了一定的编程基础后,最后两个则是基于实际设计的设计性实验。在实验教学过程中,根据学生的理解和认知能力,采用集中和单独讲解的方式,即普遍问题集中讲解,个别问题单独讲解。实验系统主要基于虚拟机运行的,操作系统是Ubuntu,这样做可以省去繁琐的实验配置工作,把重点放在Linux系统的使用上,同时使用Ubuntu系统也方便操作,利于实践教学。

2.3 工程化的项目教学法[3,4,5]

为了帮助学生构建工程理念,还专门布置了实践型强、基于工程化的综合性大作业,根据学生水平层次,将学生以10人为单位进行分组完成大作业。编程能力较强担任组长和副组长,主要负责统筹、规划等工作,然后按照将大作业内容按模块划分由各个组员完成,该作业贯穿整个学期,主要由学生在课外进行,考核方式主要以书面报告和口头答辩的形式进行。这样做的目的主要有几个:

第一,培养独立动手的能力,学生可以根据自己的兴趣爱好自拟题目,也可以选择给定的实验题目。

第二,帮助学生建立团队合作意识,加强学生的沟通与协作能力,形成良好的团队合作理念。

第三,帮助学生建立工程理念,培养分析能力。

第四,模拟工程项目角色,在小组内设置项目经理,系统架构师,软件工程师等职位,培养学生承担责任和建立风险意识。

2.4 教材的选择

选用的教材是清华大学出版社,宋敬彬等人编著的《Linux网络编程》[6],同时采用辅助教材是Unix网络编程卷1:套接字联网API,第三版,人民邮电出版社;Unix网络编程卷2:进程间通信,人民邮电出版社;《Linux网络编程》课程教材的选择主要原因是该书内容丰富,图文并茂,涵盖了Linux网络编程从基础到高级的开发过程,并且还重点讲述了Linux用户空间和内核的关系,以及内核网络的编程等。同时这本书具有很全面的知识点,从原始概念和基本原理都做了深入的讲解和详细的分析;而该书给出了很多经典代码的源码,结合了450多个示例,70多个应用实例以及三套项目案例的详细介绍与实现过程,这些案例大多数都来自于实际项目具有很强的实用性。

2.5 师资培养

网络工程专业的核心课程,除了Linux网络编程需要具备一定的工程背景外,其余的核心课工程实践性也很强,这就要求教师不仅有深厚的知识理论,还需要有一定的工程背景。所以为了适应工程型教育的需求,学院对教学团队的培养,一方面在引进新教师的时候,要求其有2-3年的工程实践背景,参与过企业项目开发,具备工程实践经验;另一方面,积极协助青年教师去国内985/211高校和国外高水平大学进修或者访学,鼓励青年教师申报各种基金项目、教改基金项目等。

3 总结

经过这几年的努力,课程内容与教学方式也不断完善,在教学过程中采用了基于工程的项目化教学法以及实践课程时间的增加,锻炼了学生的动手能力,得到了学生的好评。在以后的教学中,笔者所在的教学团队教学水平还会不断的提高,进一步深化课堂的教学研究,争取在短时间的课程内,更加激发学生学习的主动性和热情。

参考文献

[1]董明刚,程小辉.网络工程本科专业人才培养模式探讨[J].电脑知识与技术,2012,8(16):3801-3802.

[2]李鹏.网络编程技术课程的教学改革思路[J].西安邮电学院学报,2010,15(2):166-168.

[3]蔡京玫.项目教学法在《网络编程》课程教学中的应用[J].电脑知识与技术,2011,7(18):4388-4389.

[4]曹莹莹,黄津津,王创伟,荀启峰.工程教育驱动的Linux网络编程课程改革[J].计算机教育,2013,14:24-28.

[5]曹华孝,龚凌,赵琳.项目驱动教学法在独立学院《Linux网络操作系统》课程中的应用[J].中国信息技术教育:高教专区,2014(9):91-93.

面向方面的软件连接件复用研究 第7篇

关键词:连接件,复用,软件体系结构适应性,AOP

0引言

随着软件系统的规模和复杂程度日益增加, 软件复用技术受到更多的关注。近年来, 基于构件的软件开发CBSD (Component-Based Software Development) 是软件复用领域的研究热点, 被视为解决软件危机、提高软件生产率和质量的现实可行的途径。目前虽然软件复用研究在一定程度上取得了很大的成效, 但它主要集中于计算构件复用, 对连接件复用的研究和实践相对较少, 与构件复用相比, 连接件复用有助于实现设计复用, 其带来的效益也更为明显。

在软件体系结构中, 分清连接件所承担的任务及所起的作用, 对正确设计连接件, 提高体系结构的适应性有重要意义[8]。连接件所承担的主要任务有控制和数据传输、接口适配和数据转换、访问协调和同步、通信截取等。但连接件所提供的服务中还有一些特殊的需求 (如安全性、事务、日志等) , 具有一种“贯穿特性”分布于系统的不同地方, 实现时容易形成“代码分散”和“代码交织”[1], 这种现象不仅使连接件的复用难度加大, 也使开发出来的系统难以理解和维护。

为了使连接件结构更清晰, 能更好地复用。针对上述连接件的“贯穿特性”, 本文采用AOP技术, 将问题分解成多个关注点, 再将其中的横切关注点组合为不同的Advice, 并同连接实现分离, 在复用连接件时有选择地插入Advice, 以实现具体的连接, 使系统易于理解和维护, 有利于提高体系结构的适应性。

1相关研究工作

1.1连接件

我们所研究的连接件是软件体系结构研究中的一个重要方向, 目前国内外对连接件研究的主要工作有:

· 在连接件分类方面 连接件从不同的角度可以有不同的分类方式, 文献[3]深入分析了构件交互的本质, 对现有连接件按照在交互中扮演的角色, 分为通信、协调、转换、协助等类型;按照实现交互的不同服务方式, 又分为过程调用、事件、数据访问、连接、流、仲裁器、分布器等类型。

· 在连接件建模方面 连接件建模与分析是复杂软件体系结构设计的一个重要问题, 有助于深刻地理解和准确地描述连接件。文献[4]提出了连接件元模型, 并将其等同于构件, 可以对连接件进行继承和组合。

· 在连接件描述方面 连接件的描述是软件体系结构描述的重要组成部分, 它主要采用软件体系结构描述语言ADL (Architecture Description Language) , 如Wright、Unicon、Rapide等。文献[5]对连接件进行了形式化表述, 以作为ADL定义的基础。

· 在连接件重用方面 文献[9]中, 提出了一种连接件的组合重用方法, 从已有的连接件产生新的连接件, 为连接件提供了一种增量式的开发方式。与之不同的是, 我们采用的是基于Aspect机制, 通过动态地插入Advice进行连接件的复用研究。

1.2AOP

关于AOP的研究, 与我们的工作直接相关。所谓AOP是面向Aspect编程 (Aspect-Oriented Programming) [1]的简称, 是一种新的编程范型, 它定义了一种明确捕获和模块化横切关注点的机制, 用来解决由于横切属性引起的“代码分散”和“代码交织”问题。

AOP的主要构造元素包括: (1) 连接点:程序执行中的明确定义的点, 用以表明可以插入横切行为的位置。 (2) 切入点:用以捕捉程序执行中的特定连接点, 并搜集该连接点上下文的程序结构。 (3) 通知:在切入点所选定的连接点处要执行的代码, 发生的类型一般分为before、after和around三种, 分别表示在连接点之前、之后和取代执行体。 (4) 方面:是将切入点和通知结合在一起的模块单元, 类似于OOP中类的概念。

目前文献[6]中提出了一种以连接件为中心的方法, 将面向方面软件开发AOSD (Aspect-Oriented Software Develop) 和软件体系结构无缝结合, 解决系统的演化问题。我们的方法是将连接件中的非功能属性封装为Advice, 集成在连接件的内部, 实现连接件的复用。

2连接件复用方法

2.1连接件模型

在文献[7]对连接件定义的基础上, 本文基于Aspect机制, 将连接件中的非功能属性提取出来, 与连接件的主要功能分离, 组合为不同的Advice, 在运行时刻由连接件接口处的Pointcut截获构件所需的不同服务请求, 动态地插入Advice, 实现具体的连接要求。具有上述特征的连接件称为Aspect连接件, 其模型如图1所示。

图1中Aspect连接件由三部分组成:规约 (Glue) 、接口 (Interface) 和Advice。其中规约定义了连接件提供的主要连接服务, 接口表示连接件的必要信息, 除角色 (Role) 外, 我们将Pointcut定义在其上, 用于截获构件中的连接点 (Join Point) 。由于Advice和Interface的绑定已在连接件中定义, 因此, 可以在连接点之前、之后或取代插入Advice, 在连接件中编织完成。

2.2Aspect连接件ADL描述

根据图1的Aspect连接件模型, 我们将文献[7]中连接件的描述进行扩展, 则Aspect连接件描述如下:

2.3连接件复用过程

怎样实现连接件的复用是一个重要的问题, 本文实现过程如图2所示。

在这个复用过程中, 首先要分析连接件所提供的服务哪些具有“贯穿特性”, 是否需要组合为Advice分离出来。然后在得到需求分析结果的基础上进行连接件的复用设计, 考虑到可能有多个Advice需求, 则需根据系统的构件要求, 在连接件中寻找匹配的Advice, 找到后根据基本连接件接口处的定义规则, 插入所需的Advice, 在特定的连接点编织, 生成新的连接件, 最后整个复用过程结束。如果有重复的功能就可以直接调用新连接件来实现, 生成的新连接件能够实现效率更高的复用。从图2中可以看出, 这是一个回馈的过程, 也就是随着开发过程的进行, 基本连接件的规模将随着更多Advice的加入, 使得高效率的复用成为可能。当不存在符合要求的Advice时, 则需要根据具体情况或根据CBSD的原则和方法开发新的Advice。在实践中, 整个开发过程将呈现多次迭代性。

3验证与评价

3.1示例

下面通过一个简单的网上书店例子来说明我们的方法。这种应用系统有Client和Server构件, 用户需要获得系统认证, 方可进行交易。为了保证交易安全, 系统需要连接件提供安全服务, 约束用户订购操作的合法性, 如图3所示。

图3中的非功能属性 (如Approval) 只有一个, 当Client请求订购操作时, 为了交易的安全性, 连接件要提供Approval服务。一旦Client发出请求, Connector接口处的Pointcut就会截获Client接口处的Join Point, 根据Weaving Rule, 将Approval织入连接件, 判断Client操作是否合法, 成功之后, Server才允许Client执行交易, 整个请求过程结束。

若要有多个非功能属性时, 必须对连接件进行相应的修改, 在其接口处增加相应的Pointcut, 插入新的非功能属性。图4给出具体的网上书店系统Aspect连接件模型。

3.2网上书店系统的ADL描述

在上述分析的基础上, 我们对网上书店系统进行ADL描述如下:

其中C1、S1和A1分别是构件Client、Server和Aspect连接件AC的一个实例, Approval是系统的非功能属性, 被提取出来封装成Advice, 作为连接件AC的一部分。

3.3评价

基于上述实例的分析研究, 运用本文提出的连接件复用方法, 将带来以下三方面的好处。

(1) 提高软件生产率, 减少开发代价

用可复用的连接件构造系统可以提高系统的性能和可靠性, 因为可复用的连接件经过了高度的优化, 能在实践中经受住考验。

(2) 构件适应性

通过将连接件中的非功能属性分离出来, 用户可以在不改动构件业务代码的情况下, 在系统运行时刻插入Advice代码, 产生新的连接件, 对构件交互施加各种约束, 只要在构件Client和Server的接口处分别添加了Join Point oporder和Join Point optransaction代码, 从而在保持构件源代码不变的情况下, 改变应用的交互行为, 支持黑盒构件复用。

(3) 连接件适应性

在连接件适应性体现对其接口、语义、约束等的修改能力[10]。本文在连接件接口处添加Pointcut代码, 利用AOP技术实现连接件中非功能属性的动态配置, 增强连接件的适应性。例如网上书店的连接件AC中添加Pointcut来截获Client上的Join Point oporder, 然后将Advice Approval 插入到连接件后, 完成连接件对Client构件的约束, 实现Server允许执行optransaction的操作。

4总结

连接件是软件体系结构的重要组成部分, 它的复用研究对软件体系结构的适应性具有极其重要的意义。本文提出了一种新颖的连接件复用方法, 其特点是应用AOP技术于连接件中, 利用Advice和Pointcut机制将连接件中与之分离的非功能属性自动的插入, 实现不同需求的连接, 从而使连接件更好地得到复用, 有效地提高软件体系结构的适应性。

进一步的工作, 需要加强ADL的语义描述能力, 主要是对连接件行为和协议的形式化描述以及对系统整体特性的描述, 在此基础上开发相关工具对其进行验证, 并致力于软件体系结构适应性支撑环境、工具等的开发研究。

参考文献

[1]Kiczales G, et al.Aspect-oriented programming[C]//Proceedings of the European Conference on Object-oriented Programming, LNCS1241.Springer-Verlag, 1997:220-242.

[2]James R, Ivar J, Grady B.The unified modeling language reference manual[M].Object Technology Series, Addison Wesley Longman, Reading, MA, USA, 1999.

[3]Mehta NR, Medvidovic N.Understanding Software Connector Compatibil-ities Using a Connector Taxonomy[C]//In Proceedings of First Work-shop on Software Design and Architecture, Bangalore, India, 2002.

[4]Adel S, Mourad O, Tahar K.Software Connectors Reuse in Component-Based System.IEEE International Conference, 2003:543-550.

[5]Allen R, Garlan D A.Formal Basis for Architectural Connection.ACM Transactions on Software Engineering and Methodology, 1997, 7:213.

[6]Yiming Lau, Wenyun Zhao, et al.AConnector-Centric Approach to As-pect-Oriented Software Evolution[C]//The31st Annual International Computer Software and Application Conference.2007IEEE.

[7]Mourad Oussalah, Adel Smeda, Tahar Khammaci.An Explicit Defini-tion of Connectors for Component-Based Software Architecture[C]//Proceedings of the11th IEEE International Conference and Workshop on the Engineering of Computer-Based Systems.2004IEEE.

[8]马于涛, 伍江华.软件连接件建模方法的研究[J].计算机工程, 2006 (8) :59-61.

[9]熊惠民, 应时, 虞莉娟, 等.基于反射的连接器组合重用方法[J].软件学报, 2006, 17 (6) :1298-1306.

上一篇:实验室利用率下一篇:经典音乐赏析