首页>参考读物>计算机科学与技术>软件工程及软件方法学

面向方面的软件开发
作者 : Robert E.Filman, Tzilia Elrad, Siobhan Clarke, Mehmet Aksit
译者 : 莫倩 王恺 刘冬梅 袁臻
出版日期 : 2005-12-28
ISBN : 7-111-17533-6
定价 : 55.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 460
开本 : 16开
原书名 : Aspect-Oriented Software Development
原出版社: Addision-Wesley
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

权威的面向方面软件开发参考书:针对软件复杂性挑战的实践性解决之道
  
  当前,软件工程师们必须构建这样的系统,它们要处理在技术、商业和性能等领域范围中不断增长的关注点。如果使用常规的面向对象技术完成这项任务,软件工程师们常常发现他们自身会生成大量混杂、不正确和难以维护的代码。面向方面的软件开发(AOSD)通过允许他们分离地描述关注点,然后将模块化的表达形式组合到可靠的高效系统之中,从而解决了这个问题!
  在本书中,AOSD开发领域的四位领袖人物为我们带来了当前最为重要的前沿进展。基于该领域多位领先研究者的贡献,他们在本书中描述了基本的AOSD概念,介绍了AOSD工程和编程的崭新技术,以及早期采用AOSD方法的详细应用经验。
  面向方面开发已经产生了一段时间。如果您是一位富有经验的软件工程师或体系架构师,本书包含了您在真实世界系统开始应用它的全部所需!

图书特色

图书前言

软件开发是不断变化的。互联网的出现、商业计算、了解计算机的消费群体、计算和通信成本的指数级下降,以及长生命周期系统日益增多的动态环境,这些都迫使软件开发者必须使用更好的方法来建立和发展系统。一股热潮席卷了软件开发过程、系统结构、编程、质量保证以及维护等领域。
  软件的目标是要对这个世界的部分元素或信息流建立计算模型。即使是最微不足道的软件系统,实现该系统的工程都需要(有可能是反复地)将系统分解成可以独立创建和管理的模块。20世纪90年代关于系统模块化特性的面向对象观点呈现上升趋势(并且可能成为主流)。面向对象方法的焦点在于选择对象作为模块的主要单元,并将这些对象与系统的所有行为联系起来。对象成为问题领域或者计算过程的主要元素。
  面向对象方法正面临它的局限性。在创建软件系统时人们所关心的东西(称为关注点)并不能清晰地定位于某个特殊“东西”的行为上。建立不同的系统需要同时管理许多关注点。关注点的案例范围包括从非功能概念,如安全、可靠性、可控性等,扩展到精确的实现技术,如并发控制、缓存、错误恢复。由于传统的编程技术着眼于产生直接的指令序列,因此要求程序员全面掌握编程过程中的所有关注点。程序员必须清楚地将实现这些关注点的命令与实现主要应用功能的代码混合在一起。这会导致产生包含混乱代码、大量错误并难以维护的系统。
  新技术的产生,允许包含更丰富的程序规范和关于这些规范的更好的模块化特性。除了这些新技术之外,还出现了使用这些新技术的崭新的软件工程方法论。在这些技术中,最令人激动的是面向方面的软件开发(AOSD)技术。AOSD编程技术(面向方面的编程,或AOP)为独立表示关注点提供了语言机制,并且提供了将这些关注点编织成为一个工作系统的实现技术。面向方面的软件工程(AOSE,Aspectoriented software engineering)技术正是为了管理使用这种新规范的开发系统过程而出现的。

关于本书
  本书内容源于2001年10月《Communications of the ACM》中面向方面技术专题的经验。当时提交的论文达到了我们出版篇幅的7倍;它已经成为ACM数字图书馆的热点专题。同时我们还看到有关面向方面主题的学术研讨会越来越多。很明显,在计算机科学团体中涌现出了对有关方面技术的更大的学习热情。这令我们产生了两个想法——一是召开有关面向方面软件开发的国际会议;二是出一本书,向一些先进的软件开发团体介绍本领域出现的不同思想。由面向方面软件组织与ACM联合发起的会议最近已经召开了第3次年会,在ACM数字图书馆有会议论文集。
  我们希望本书能够成为一本有关软件工程的专辑,为软件开发中对此有学习兴趣的高级软件工程师介绍软件开发领域内的这一新方向。为了出版此书,我们向本领域的一些研究人员约稿,其中有些文章是有关他们当前工作综述的最新论文,有些则是对一些指定的已有论文的再版。本书就是对所有这些提交论文的编选汇总。

如何阅读本书
  本书的第1章介绍了面向方面软件开发的概念,建议所有读者阅读。除此之外,尽管实际的系统开发是依托于一个工程活动的所有过程的,但系统开发的基础却是程序语言和模型。尽管方面技术还没有充分成熟到提供令人信服的实际系统数量,但一种软件技术的最终验证还是其所支持构建的系统。因此,在简介之后,本书按三部分组织:第一部分主要是对实现方面的语言描述,在编程语言领域中对方面的地位给予了关注。第二部分描述了面向方面软件开发过程的技术。第三部分详细介绍了使用方面技术的初始应用经验。每一部分都有一个内容介绍章节,介绍了界定有关主题中方面技术的范围,描述了每一章在此领域中的位置。除此介绍之外,各个章节(有助于成为一本关于研究现状的编选著作)基本上是独立的。除了作者在文中明确引用其他文章之外,几乎所有章节都是独立成篇的。

致谢
  我们要感谢Craig Thompson和Tom Poppendieck仔细阅读了本书的手稿,感谢Ryan Van Roode在本书出版上给予的帮助,以及那些撰稿者为使本项目得以实现所付出的努力和耐心。

作者简介

Robert E.Filman, Tzilia Elrad, Siobhan Clarke, Mehmet Aksit:Robert E.Filman:  Robert E. Filman博士是美国国家航空航天局(NASA)阿姆斯研究中心高级计算机科学研究学会的高级科学家。他曾任职于Lockheed Martin导弹和空间研究组织、IntelliCorp公司、HP实验室以及Bloomington印地安那大学计算机科学系。他同时还是《IEEE Internet Computing》杂志的总编以及AOSD 2006国际会议主席。
Tzilia Elrad: Tzilla Elrad博士是芝加哥伊利诺斯理工学院计算机科学系的研究员,目前的研究工作受美国国家科学基金面向方面软件工程课题支持。他还是AOSD 2005国家会议的组委。
Siobhan Clarke:  Siobhan Clarke 任教于爱尔兰都柏林大学Trinity学院计算机科学系,是面向aspect软件开发领域的一位学术带头人。本书描述的Theme/UML方法,即基于她的博士论文中分割和合成对称设计模型的相关工作。她目前正在研究将面向aspect设计和编程模型用于移动、可感知环境的计算中。
Mehmet Aksit: Mehmet Aksit教授是一位终身教授,现任纽芬兰Twente大学软件工程系主任和TRESE组织负责人。他曾任职AOSD 2002国际会议组委和AOSD 2003国际会议程序委员。

译者简介

莫倩 王恺 刘冬梅 袁臻:暂无简介

译者序

面向方面的软件开发,是当今最为前沿和热门的一个软件开发技术研究和应用领域,也是一个将很快在我们的经济、生活和工作中产生重大影响的新兴技术领域。
  面向对象的编程与传统的结构化编程相比,理论上会使应用程序更易编写、更易维护、更易演化。但这是理论上的优点,真实世界的对象十分复杂,人们需要通过不同的角度来看待和处理它们,也就是面向不同的方面(Aspect)。当面对应用程序中大量传统的编程对象时,如果要实现从不同的角度来看待和处理它们,就需要编写新的代码,这些新的代码会破坏编程对象的模块性,产生所谓的代码混杂。例如Apache Web服务器有43个功能模块,其中有37个模块都包含处理用户登录的代码。
  面向方面的编程(AspectOriented Programming,AOP)能够帮助我们解决这类问题。面向方面技术最基本的特性是多量化和不知觉性(第2章)。在上面的例子中,采用面向方面编程技术,只需要定义一个用户登录方面模块,就能同时实现37个模块对用户登录的处理,这就是多量化;而另一方面,这37个模块完全不需要了解任何有关用户登录方面模块的任何信息,也就是程序员并不需要在37个模块中编写和插入任何用户登录的代码,这就是不知觉性。这两个特性所带来的好处是显而易见的:多量化使得原本分散编写的代码集中到一个方面模块中,代码更清晰,编程量更小,程序更易编写、更易维护。不知觉性使得用户登录模块与其他功能模块彼此独立,当修改用户登录功能时,不会影响其他37个模块,这样的系统更易维护、更易演化。
  简而言之,AOSD将使软件开发者的工作更轻松!
  本书分为三个部分共31章,每章独立成篇,但在逻辑上又彼此前后呼应、一脉相承。所有的作者均为AOSD领域的领袖人物或知名学者。第一部分“语言和基础”讨论了面向方面语言的基础、历史、本质、模型和实现。这一部分使我们能够深入理解面向方面语言的本质,知其所以然。第二部分“软件工程”立足于软件工程的角度,从软件开发生命周期的多个阶段讨论了面向方面软件的开发。编程只是软件开发生命周期中的一小部分,面向方面的编程如果没有面向方面的分析、设计和建模等相关过程的配合,就可能无法为我们带来它理论上的优点和益处。第三部分“应用”讨论了多个AOSD的不同应用领域,其中包括已经在商业应用领域中经受过实践检验的安全性应用,以及必将在未来影响我们的经济和生活的应用感知领域。
  本书是目前AOSD领域最为全面、最为权威的论著,无论读者想了解或从事AOSD领域任何一方面的工作,它都是一本必读之书!
  本书前16章,由莫倩博士翻译,第17章到第21章由王恺翻译,第22章到第27章由刘冬梅翻译,第28章到第31章由袁臻翻译,全书由莫倩博士组织翻译并负责统稿。
  由于译者水平有限,加上AOSD又是一个新兴的领域,文中难免存在不妥之处,敬请读者批评指正。

译者
2005年9月10日于北京关 于 主 编

图书目录

第1章概览
11本书的组织
12常用术语
13历史背景
第一部分语言和基础
传统工程
软件开发是工程
章节说明
方面语言设计的角度
参考文献
第2章面向方面编程的多量化和不知觉性
21引言
22局部性和单一性语句
23不知觉性
24多量化
241静态多量化
242动态多量化
25实现问题
26面向方面的语言
27相关工作
28结束语
致谢
参考文献
第3章N度分离:关注点的多维分离
31引言
32动机
321第一轮
322进化SEE:环境灾难
323事后分析
324打破统治地位
33关注点的多维分解
331传统软件模型
332多维分解:超切片
333使用超模块组合超切片
334使用模型
34实例化
341映射到单元和模块
342超切片表示
343支持组合
35相关工作
36结论和将来的工作
致谢
参考文献
第4章组合过滤器的原理和设计原理
41引言
42例子:社会安全服务
421应用的概述
422软件系统
43用组合过滤器进行对象内横切
431关注点实例=对象+过滤器
432演化步骤1:保护文档
433组合过滤器解决方案
434消息处理
435对象内部横切
44对象间横切441演化步骤2:添加工作流管理
442演化步骤3:添加日志
45评估
451CF模型的实现
452内置式组合过滤器
46结论
参考文献
第5章从历史视角探讨AOP(名称的由来)
51风格问题
5220世纪90年代早期的研究趋势
521问题的描述
522对问题和专门解决方案的分析
523识别可以被分离的关注点
524分离技术
53AOP在PARC的诞生
531RG
532AML
533ETCML
534DJ
535Djava
536AspectJ
54建立团体
541研究者
542实践者
55回顾
56AOP 的本质
57将来的挑战
致谢
参考文献
第6章AspectJ
61AspectJ的目标
611通用目的
612基于编程语言的直接支持
613易于学习
614增量式应用
615易于集成
616适合真实的应用
62AspectJ语言
621联结点
622切入点
623通知
624类型间声明
625方面
626进一步阅读
63AspectJ工具
631历史
632编译器
633AspectJ的IDE支持
634使用ajdoc生成文档
635Ant任务
64将来的方向
65结束语
致谢
参考文献
第7章耦合面向方面和自适应编程
71概述
711关注点含蓄的编程
712结构含蓄的编程
72含蓄性作为自适应行为的隐喻
721含蓄性怎样关联到AP
722含蓄性怎样关联到AOP
723Demeter法则
724针对关注点的Demeter法则
73使用DJ的反射自适应编程
74使用DAJ的方面自适应编程
741策略图交叉
742访问者类
75相关工作
76结论
参考文献
第8章使用CAESAR解开横切模型 …
81引言
811对语言支持的需求
812本章的贡献和结构
82联结点介入
821缺乏对多抽象方面的支持
822缺乏对复杂映射的支持
823缺乏对可重用方面联编的支持
824缺乏对方面多态的支持
83CAESAR模型
831方面合作接口
832方面实现
833方面联编
834封装器再利用
835最专用的封装器
836切入点和通知
837编织片和部署
838虚类和静态类型
84评估
841问题再现
842显式与隐含方面的实例化/部署
85实现
86相关工作
861开放类
862自适应性即插即用组件
863基于合作的分解
864动态部署的实现
87总结和将来的工作
参考文献
第9章基于跟踪的方面
91引言
92基于跟踪的方面的特征
921可观察的执行跟踪
922方面语言
923编织
93表达性方面和等价推导
94方面交互的检测和消解
941方面交互
942对冲突消解的支持
95安全属性的静态编织
951例子
95 2编织阶段
953即时编织
96结论
参考文献
第10章使用Mixin技术提高模块化特性
101介绍
102MIXIN技术
1021Mixin
1022逐步细化
1023Mixin层
103FIDGET的设计
1031体系结构
1032组件
1033同胞模式
1034JL的隐含的this类型参数
104FIDGET的使用
105MIXIN的编程支持
1051构造器传播
1052深度一致性
106将来的工作
1061语义检测
1062类层次优化
1063Mixin作为类型
1064实现参数化多态
107相关工作
108结论
致谢
参考文献
第11章用首类名字空间分离关注点
111引言
112Piccola
1121Piccola层
1122通用封装器
113例子:Mixin层组合
1131Piccola中的Mixin层
1132使用Mixin层的软件演化
114用形式结构描述组合风格
115结论
致谢
参考文献
第12章使用反射支持AOP
121什么是反射
1211基础级和元级
1212元对象及其协议
1213元链和元对象协作
1214反射编程语言及其MOP的例子
122使用反射的AOP
1221从反射到AOP
1222使用多个方面的应用例子
1223分离方面
1224编织方面
123讨论
1231灵活性
1232性能
1233复杂性
1234工具
1235重用性
124结论
参考文献
第13章通过控制通信插入Ility 
131通过控制通信实现Ility
132对象基础框架
1321注入器
1322注解
1323Pragma
133已应用Ility
1331可靠性
1332服务质量
1333可管理性
1334安全
134相关工作
135结论
参考文献
第14章使用字节码转换集成新特征
141方面和转换
142字节码转换概述
1421静态转换
1422动态转换
143编程转换
1431选择
1432在AOSD中的使用
144学到的经验
1441接口设计
1442安全、可靠和正确
1443多个名字空间
1444反射
1445处理转换的功能
1446调试转换代码
145结论
参考文献
第15章JMangler——一个面向方面编程的强大后端平台
151引言
1511方面编织的挑战
1512加载时间分析和转换(LAT)的保证
1513面向方面的LAT和JMangler
152通用拦截
1521Java的类加载体系结构
1522依赖类加载器的拦截
1523依赖JVM的拦截
1524依赖于平台的拦截
1525可移植的通用拦截
153开放式体系结构
154对非本地转换的支持
155BCEL编织器
1551转换和方面
1552转换器
1553转换器的使用
1554非预期的转换器组合
1555转换过程
1556例子
1557接口转换器的创建
1558代码转换器的创建
156使用场景
1561使用JMangler的加载时编织
1562使用JMangler的运行时编织
1563先进特征
157相关工作
158结论和将来的工作
致谢
本章附录:简单的代码覆盖
CodeCoverTransformer的实现
激活
参考文献
第16章使用Java方面组件的面向方面软件开发
161JAC框架和编程模型
162设计符号
1621方面组件类
1622切入点定义
1623第一个简单的例子
1624为分布扩展的设计符号
163分布式的JAC体系结构
1631方面部署和分布
1632分布式应用的例子
164JAC的实现和性能问题
1641JAC的实现
1642性能衡量
165相关技术和工具
1651面向方面的语言和工具
1652方面设计符号对比
166结论
参考文献

第二部分软件工程
关键软件工程术语
章节介绍
参考文献
第17章工程化面向方面系统
171需求工程
172描述
173设计
174实现
175演化
176方面交互
177结论
参考文献
第18章软件生命周期中的面向方面:事实和想像
181引言
182在实现层次的方面
1821示例动机
1822AOP:事实和想像
183在设计层次的方面
1831采用UML的方面
1832基于软件体系结构观点的方面
184结论
致谢
参考文献
第19章采用主题/UML的通用面向方面设计
191引言
192动机
193横切主题:模型
1931描述模板
1932描述横切行为
1933绑定描述的组合
1934组合输出
194作为主题的方面:例子
1941图书馆基本设计
1942例1:同步方面
1943例2:观察者方面
195到Hyper/J的映射
1951Hyper/J编程元素
1952基于Hyper/J的观察者模式
196到AspectJ的映射
1961AspectJ编程元素
1962到AspectJ的映射算法
1963基于AspectJ的观察者模式
197映射到编程模型
198相关工作
199结论
参考文献
第20章使用UML行为图和结构图来表示方面
201引言
202概念、术语和建模语言
2021面向方面编程
2022统一建模语言(UML)
203我们的方法体系规定的处理过程
2031AO建模步骤
2032并发限定缓存问题
2033分析和设计
2034使用类图的结构化描述
2035建模横切关注点(步骤6~8)
204实现我们的方法体系的益处
2041隐含编织
2042松散耦合
2043扩展性
2044可跟踪性
2045CASE工具对我们的方法体系的支持
2046自动代码生成和循环开发
205结论
致谢
参考文献
第21章面向方面软件开发的关注点建模
211引言
212什么是关注点
213关注点的一种视点
214为什么需要关注点建模
2141对贯穿于开发生命周期和构件之中的关注点描述和分析
2142对传统开发任务的增强
2143AOSD的支持
215作为头等事务的关注点建模
2151关注点建模模式的需求
2152处理考虑
216COSMOS:一种关注点空间建模模式
217关注点模型示例
218相关工作
2181传统的(非面向方面)建模
2182面向方面建模
219附加的讨论
2191关注点概念的形式化表示
2192对AOSD贡献的本质
2110结论
致谢
参考文献
第22章关注点描述工具的设计建议
221工具的研究
2211AspectBrowser
2212AMT
2213FEAT
222研究形式
2221Jex示例
2222AMT示例
2223AspectBrowser示例
223数据
2231使用的策略
2232标识出的关注点代码
224结果
2241工具设计建议
2242关注点刻画
2243研究工作的有效性
225相关工作
2251关于程序修改任务的研究
2252特征定位方法
2253影响分析方法
226结论
致谢
参考文献
第23章面向方面编程的初始评估
231AspectJ
232实验
2321通用的形式
2322实验1:调试的易用性
2323形式
2324结果
2325实验2:修改的容易性
233从组合分析中获知的理解
2331方面内核接口事宜
2332方面可能替换任务策略
234实验评价
235相关工作
236总结
致谢
本章附录
参考文献
第24章面向方面的依赖关系管理
241依赖关系管理的原则
2411依赖关系
2412依赖关系的强度
2413原理
242作为通用原则的间接性:从指针到设计模式及更多
2421超越指针概念
2422面向对象间接层
2423设计模式和间接层
2424面向方面间接层
243对于设计模式的面向方面的替代者
2431访问者模式
2432观察者模式
2433扩展对象模式
2434虚拟的构建
244面向方面依赖关系管理的指导方针
2441面向对象间接层
2442面向方面间接层
2443组合面向对象和面向方面间接层
245从面向方面依赖关系管理中得到的建模益处
参考文献
第25章应用方面开发软件组件:某些问题和经验
251引言
252动机
253我们的方法
254采用方面的组件描述和设计
255采用方面的组件实现
256在运行时使用方面
257相关工作
258评估
259未来的研究方向
2510结论
参考文献
第26章智能编织器:一种针对方面组合的知识驱动方法
261知识驱动的编织
2611Smartbooks归档方法
2612在Smartbooks中的编程任务
2613Smartbooks的引擎
262一个工作流应用示例
263应用智能编织器:开发者的视点
2631目标应用的设计
2632与任务管理器的交互
264定义编织知识:设计者视点
2641支持技术的归档卷册
2642加入编织信息
2643方面需求的内部表示
265相关工作
266结论
参考文献

第三部分应用
管理C3
管理多量化
管理不知觉性
章节
第27章通过面向方面编程开发安全应用
271引言
272应用层次安全性领域
273一份实验报告
2731一个个人的信息管理系统
2732一个FTP服务器
2733朝向一个方面框架
274讨论
2741正面的经验
2742AOP环境的需求
275相关工作
276结论
致谢
参考文献
第28章结构化操作系统方面
281AspectC
2811使用AspectC的标准行为预取
2812切入点声明
2813通知声明
2814实现比较
282结论
参考文献
第29章数据库系统的面向方面编程
291引言
292在面向对象数据库系统中横切关注点
2921在DBMS层次横切关注点
2922在数据库层次的横切关注点
293面向对象数据库系统中的AOP
2931DBMS层次的方面
2932数据库层次的方面
294面向方面方法的评价
295模块化数据库中的横切关注点的其他方法
296结束语
参考文献
第30章两层次方面编织,以支持模型驱动合成中的演化
301模型集成计算和AOSD
3011模型集成计算
3012在领域建模中横切关注点
3013模型编织器
302例子:饥饿/懒惰评测约束条件的模型编织
3021在GME中建模Bold Stroke组件
3022饥饿/懒惰评估的策略
303从领域专有模型中产生方面代码
304结论
3041未来工作
3042相关工作
致谢
参考文献
第31章动态面向方面的基础架构
311引言
312应用场景
313使用面向方面的应用感知
314使用PROSE满足应用感知的需求
3141在PROSE中处理应用感知
3142PROSE体系结构
315在节点群中编织方面
3151方面的分布
3152方面的生命周期
3153软件体系结构问题
316在应用感知中的AOP的使用示例
3161为机器人技术实现的位置专有功能
3162其他应用感知的例子
317结论
致谢
参考文献

教学资源推荐
作者: [美] 埃里克·伽玛(Erich Gamma) 理查德·赫尔姆(Richard Helm) 拉尔夫·约翰逊(Ralph Johnson) 约翰·威利斯迪斯(John Vlissides) 著
作者: [美]约翰 W. 萨茨辛格(John W. Satzinger) 罗伯特 B. 杰克逊(Robert B. Jackson) 史蒂芬 D. 伯德(Stephen D. Burd) 著
作者: [英]伊恩·萨默维尔(Ian Sommerville) 著
作者: 韩万江 姜立新 编著 宋茂强 审
参考读物推荐
作者: (美)David M.Dikel 等
作者: Scott E.Donaldson;Stanley G.Siegel
作者: 黄勇 雷辉 徐潇 杨雪敏 著
作者: 荣国平 张贺 邵栋 等编著内封 荣国平 张贺 邵栋 陈连平 何勉 宋骏 腾灵灵 王天青 吴昊 编著