计算机初级软考:程序设计方法的演化及极限(3)
发布时间:2009/12/6 11:48:49 来源:城市学习网 编辑:admin
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 这种程序设计单元,允许开发者使用结构化的设计和代码,反映其对系统的认识方式。要使设计和代码更加模块化、更具结构化,使关注点局部化而不是分散于整个系统中。同时,需使关注点和系统其他部分保持良好定义的接口,从而真正达到“分离关注点,分而治之”的目的。