程序设计方法的演化及极限(3)
添加时间: 2007-4-9 0:14:35 作者: 程序员认证参考 阅读次数:23 来源: http://www.d9soft.com
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),敏捷型方法认为没有任何过程能代替开发组的技能,过程起的作用是对开发组的 工作提供支持。
上一篇文章: C#中DataGrid的数据新增编辑删除操作代码 下一篇文章: 运用.net中的socket实现文件传输
相关文章:

