快捷搜索:

程序设计方法的演化及极限

4.后面向工具措施

虽然面向工具法度榜样设计措施有诸多优点,但颠末多年的实践摸索,人们也发明面向工具措施有其不够,这样多软件系统不完全都能按系统的功能来划分构件, 仍旧有许多紧张的需乞降设计决策,比如安然、日志等,它们具有一种“贯穿特点”(crosscutting concerns),无论是采纳面向工具说话照样历程型说话,都难以用清晰的、模块化的代码实现。着末的结果常常是:实现这些设计决策的代码散播贯穿于全部系统的基础功能代码中,形成了常见的“代码漫衍”(code scattering)和“代码交织”(code tangling)征象。代码交织征象是现有软件系统中许多不需要的繁杂性的核心。它增添了功能构件之间的依附性,分散了构件原本假定要做的工作,供给了许多法度榜样设计掉足的时机,使得一些功能构件难以复用,源代码难以开拓、理解和成长。

是以,人们在面向工具的根基上成长了更多的新技巧,借以增补面向工具技巧的缺陷,使得面向工具技巧能够更好的办理软件开拓中的问题。这些建立在面向工具的根基上、并对面向工具做出扩展的新技巧被广泛利用的时期,我们把它称为“后面向工具期间”。在后面向工具期间,有许多新型的法度榜样设计思惟值得关注。

4.1 面向方面法度榜样设计

面向方面法度榜样设计(Aspect-Oriented programming, AOP)措施,这一观点最早是由施乐(Xerox)公司在美国加州硅谷PaloAlto 钻研中间(PARC)的首席科学家、加拿大年夜大年夜不列颠哥伦比亚大年夜学教授Gregor Kicgales 等人首次在1997 年的欧洲面向工具编程大年夜会(ECOOP 97)上提出[4]。

所谓的Aspect,便是AOP供给的一种法度榜样设计单元,它可以将上文提到的那些在传统法度榜样设计措施学中难于清晰地封装并模块化实现的设计决策,封装实现为自力的模块。 Aspect是AOP的核心,它逾越了子法度榜样和承袭,是AOP将贯穿特点局部化和模块化的实现机制。经由过程将贯穿特点集中到Aspect中,AOP就取得一种单一的布局化行径---该行径在传统法度榜样中散播于全部代码中--这样就使Aspect代码和系统目标都易于理解。在AOP中,Aspect是AOP中的一阶实体,AOP中的Aspect正如OOP中的类。现有对Aspect的熟识有差错校验策略、设计模式、同步策略、资本共享、散播关系和机能优化等。

Aspect的实现和传统开法措施中模块的实现不合。Aspect之间是一种松耦合的关系,各Aspect的开拓彼此自力。主代码的开拓者以致可能没故意识到Aspect的存在,只是在着末系统组装时候,才将各Aspect代码和主代码编排交融在一路。是以,主代码和Aspect之间可所以一种不合于传统“显式调用”关系的“隐式调用”[5]。在软件繁杂性日益增添的本日,隐式调用有伟大年夜的优点,由于某一利用的领域专家,不太可能对散播、认证、造访节制、同步、加密、冗余等问题的繁杂的实现机制很认识,是以就不能包管他们在法度榜样中进行精确的调用。在当前强调法度榜样演化的环境下,这一点尤其紧张,由于开拓职员很难精确预见到未来对法度榜样的新需求。

AOP 是一种关注点分离技巧,经由过程运用aspect 这种法度榜样设计单元,容许开拓者应用布局化的设计和代码,反应其对系统的熟识要领。要使设计和代码加倍模块化、更具布局化,使关注点局部化而不是分散于全部系统中。同时,需使关注点和系统其他部分维持优越定义的接口,从而真正达到“分离关注点,分而治之”的目的。

有关AOP加倍具体的资料,读者可以进入希赛网(http://www.csai.cn)的“技巧利用”频道中的“IT新技巧”栏目,涉猎相关的文章。

4.2 面向Agent法度榜样设计

跟着软件系统办事能力要求的赓续前进,在系统中引入智能身分已经成为一定。Agent作为人工智能钻研紧张而先辈的分支,引起了科学、工程、技巧界的高度注重。斯坦福大年夜学的Barbara Hayes-Roth在IJCAI'95的特约申报中说起:智能的谋略机主体既是人工智能最初的目标,也是人工智能终极的目标。

在谋略机科学主流中,Agent的观点作为一个自包孕、并行履行的软件历程能够封装一些状态并经由过程通报消息与其它Agent进行通信,被看作是面向工具法度榜样设计的一个自然成长。Agent具有以下主要特性:

(1) 代理性(Action On Behalf Others)。代理具有代表他人的能力,即它们都代表用户事情。这是代理的第一特性。

(2) 克己性(Autonomy)。一个代理是一个自力的谋略实体,具有不合程度的克己能力。它能在非事先筹划、动态的情况中办理实际问题,在没有用户介入的环境下,自力发明和索取相符拥护必要的资本、办事等等。

(3) 主动性(Proactivity)。代理能够遵照允诺采取主动,体现面向目标的行径。例如,Internet上的代理可以周游全网,为用户网络信息,并将信息提交给用户。

(4) 反映性(Reactivity)。代理能感知情况,并对情况作出适当的反映。

(5) 社会性(Social Ability)。代理具有必然的社会性,即它们可能同代理代表的用户、资本、其它代理进行交流。

(6) 智能性(Intelligence)。代理具有必然程度的智能,包括推理到自进修等一系列的智能行径

(7) 移动性(Mobility)。代理具有移动的能力,为完成义务,可以从一个节点移动到另一个节点。比如造访远程资本、转移到情况得当的节点进行事情等。

面向Agent的法度榜样设计(Agent-Oriented programming)措施与面向工具法度榜样设计措施的最基础差别在于Agent的社会性。面向Agent法度榜样设计的主要思惟是:根据Agent理论所题推出的代表性Agent特点的、精神的和故意识的观点直接设计Agent。这样一个目的后面的念头是人们运用意愿姿态作为一个代表繁杂系统的抽象机制。因为Agent的上述特点,基于Agent的系统应是一个集机动性、智能性、可扩展性、稳定性、组织性等诸多优点于一身的高档系统。

4.3 其它后面向工具法度榜样设计

除了上述两种主流的后面向工具法度榜样设计措施外,还呈现了许多值得关注的新的法度榜样设计措施。如:

(1)泛型法度榜样设计(generic Programming,GP)。GP是一种范型(paradigm)它致力于将各类类型按照一小组功能性的需求加以抽象,然后以这些需求为前提实现算法。 因为算法在其操作的数据类型上定义了一个严格的窄接口,同一个算法便可以利用于各类类型之上。GP为利用法度榜样开拓职员提出了十分美妙的允诺。它使“从‘一种一个’的软件系统向自动制作软件的各不相同的变体成长”这种思路变得十分真实可托。简单地说,GP以“确定软件开拓中自动化的好处”为中间进行软件开拓。

(2)面向构件法度榜样设计。在面向构件法度榜样设计中构件便是一组营业功能的规格,面向构件针对的是营业规格,不必要源代码,可履行代码或者中心层的编译代码,在这个层面上可以做到代码的集成、封装、多态,做到AOP,这才是面向构件的精髓。面向构件技巧还包括了另一个紧张思惟,这便是法度榜样在动态运行时构件的自动装载。

(3)敏捷措施(Agile Methodologies)。 敏捷也称作轻量级开拓措施, 对许多人来说,这类措施的吸引之处在于对繁文缛节的官僚历程的反叛。它们在无历程和过于繁琐的历程 中达到了一种平衡,使得能以不多的步骤历程获取较知足的结果。 敏捷型措施强调“适应性”而非“预见性”,敏捷型措施变更的目的便是成为适应变更的历程,以致能容许改变自身来适应变更。敏捷型措施是“面向人”的(people-oriented) 而非“面向历程”的 (process-oriented),敏捷型措施觉得没有任何历程能代替开拓组的技能,历程起的感化是对开拓组的 事情供给支持。

您可能还会对下面的文章感兴趣: