面向方面的分析与设计:Theme方法
作者 : Siobhan Clarke, Elisa Baniassad
译者 : 郭旭
出版日期 : 2006-06-08
ISBN : 7-111-18683-4
定价 : 32.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 211
开本 : 16开
原书名 : Aspect-Oriented Analysis and Design: The Theme Approach
原出版社: Addison-Wesley
属性分类: 教材
包含CD :
绝版 :
图书简介

“使用面向aspect编程的开发人员对本书赞赏有加。本书作者是本领域的先驱人物,她们总结了过去的研究结果,为早期的aspect建立了细致的方法学和符号表示法。”
                 ——Ron Bodkin, New Aspects of Software公司首席技术官

  “面向aspect是用于复杂系统程序设计的一种强大方法。在建模与设计期间应用该方法,也同样会收益良多。本书中的Theme方法向开发者提供了一些手段,能够在软件开发过程的早期应用面向aspect的方法,这在AOP的实践过程中是一个重要进步。”
                 ——Ramnivas Laddad, 《AspectJ in Action》的作者

  面向aspect软件开发 (aspect-oriented software development,AOSD)可以将复杂系统的多个关注点分别表达,而后利用“编织”技术将各个独立的表达合成为一致的系统。许多专家认为AOSD是面向对象范型的后继者,它大大地简化了复杂系统的开发。
  对于迷惑于一些常见问题(如“何为aspect”、“应该对哪些方面编写代码”、“如何设计aspect”)的开发者来说,本书非常有用。本书可作为读者思考aspect的起点,并有助于读者在需求分析和设计中解决相关的问题。
  同时,有经验的AO开发者也可以更深入地了解各种不同的分解模型,以及如何在需求文档中识别aspect功能、设计aspect、将aspect映射到实现等。作者建立的Theme方法可以灵活地识别aspect功能,并提供了基于UML的设计建模语言来描述它。
  简言之,本书对开发者和分析设计者而言,都有很实际的价值。

图书特色

图书前言

aspect(方面)是面向对象范型的自然演进。您在对面向对象代码进行模块化时可能遇到过一些困难:有时候某些功能总是看起来不那么合适,aspect对这种情况提供了一种解决方案。在面向对象编程的过程中,您可能会发现在大量不同的类中重复着一些相同的代码,这些类都需要该功能,因此无法很容易地把该功能封装到一个单一的地方。这种代码的例子包括:审计跟踪、事务处理、并发管理等等。您现在可以利用aspect模块化此类代码。
  我们看到,在采纳aspect方法时,人们的热情已经可以与采纳面向对象方法学时媲美,但着手使用aspect并非是一件简单的事情。在思维上转型到面向aspect,并不像当初转型到面向对象那么困难,但仍然需要一点时间(来习惯)。在第一次尝试使用面向aspect时,头脑里突然想起的第一个重要问题可能就是“我的aspect是什么?”,而早期的先驱们已经尝试了各种不同的途径来解决该问题。
  我们听说过,有些实践者试图使用aspect,但除了典型和显而易见的aspect,其他的都想不出来。通常可以尝试的aspect例子包括:日志、调试、协调。但要熟练地使用aspect,则要能够使用aspect解决您自己的代码中的具体问题。
  我们还听说过,有些开发者构造出大量微小的aspect,使得其核心系统中的类基本上没有什么功能!他们的工作重心太过倾向于所谓的“关注点分割”(separation of concerns),结果程序的控制流都很难搞出来。
  解答“我的aspect是什么”这一问题的另一种途径是,仅仅编写典型的OO代码,然后再尝试定位那些与整个系统不完全适合的代码。该方法有一些严重的缺点。特别是,直至开始编写代码,您才能开始考虑有关aspect的问题。毕竟,您总不能等到开始编写代码才去琢磨您的那些类都怎么设计吧(即使这些类只作为工作的一个起点),aspect也是这样。
  除了多少有点令人困惑之外,在软件开发过程的早期采用某种范型是有一定风险的。面向aspect方法正处于令人兴奋的增长期,但这意味着新的语言和可能性都会经常出现,而且,发展中一旦出现新的哲学,那么aspect的基本含义也可能会有微妙的变化。即使在面向aspect方法内部,也有着不同风格的分解。你选择哪一个?
  在本书中我们描述了Theme方法,它可用于识别需求中的aspect,并在设计阶段对相应的aspect进行建模。Theme方法的一个主要好处在于,该方法对aspect的识别和建模并不依赖于具体的面向aspect程序设计语言。我们开发Theme方法的意图在于,通过将该方法与特定的程序设计语言分离,使它能够经得起变化的考验,同时还可以提供一种识别和描述aspect的一般性方法,而不考虑aspect在代码级具体怎么定义。
  除了讨论Theme方法及其应用之外,我们还描述了面向aspect方法所涉及的各种不同的领域,以及如何将Theme方法与之配合。阅读本书,读者不仅能够学习到如何使用aspect作为分析与设计的工具,而且也可以对AO领域当今的发展有一个一般的了解。当在实际工作中需要选择面向aspect的实现语言和分解范型时,相关的知识会使您成竹在胸。

读者对象
  在很多情况下,面向aspect软件开发(Aspect-Oriented Software Development,AOSD)改进了软件开发过程。本书从较高的层次上介绍了面向aspect方法,并提供了在实际工作中使用aspect的方法,该方法可用于识别需求中的aspect,还可以使用UML和少量扩展进行面向aspect的设计。
  本书为面向aspect的实践者和先驱者而写。对于试图解答以下两个常见问题的读者,“什么是aspect?”和“我应该对哪些aspect进行编码?”,本书特别有用。可以把本书作为基础,来考虑aspect,并在需求和设计中应用aspect。
  即使您使用面向aspect语言已经有一段时间,仍然可以阅读本书,以便能更多地了解如何在需求文档中识别aspect功能并规划aspect的设计和实现。Theme方法提供了一种灵活的方式来识别aspect功能,而基于UML的设计建模语言可以对aspect进行描述,这种描述是不依赖编程语言的。无论你使用何种面向aspect程序设计语言,本书中描述的分析、设计方法和原则仍然是有效的。
  当然,本书对希望更多了解面向aspect范型的教师和学生来说,也是很有帮助的。
  我们在此假定,所有的读者都已经熟悉面向对象范型,并了解UML符号表示法。

面向aspect分析与设计以及Theme方法的历史
  在人类对编程思想探索一段时间以后,就涌现出了分析与设计方法,一般用作软件工程的范型。从那时起,对软件工程思想的应用趋向于向软件生命周期的后期移动。对面向aspect分析与设计而言,也是如此。因此在我们讨论Theme方法的起源之前,首先需要看一下,在20世纪90年代初,人们在代码一级的编程思想发生了什么样的改变。
  当我们开始述说面向aspect编程的历史时,很难选择从哪说起,这是因为AOP领域中的很多工作都是以一般性领域中的相关工作为基础的。考虑到软件工程的背景,我们还可以采取更宽广的视角。许多研究人员已经在改进软件模块化方面工作了数十年,而相关的工作并不属于aspect领域。我们在这里就不多纠缠了,只简单提及改进模块化的四种主要方法,这被认为是面向aspect软件开发的起源。
  随着AspectJ语言而流行起来的方法是最广为人知的,该方法是Xerox PARC研究中心由Gregor Kiczales领导的一个小组在1997年开发的。此前,该小组专注于metaobject协议和reflection,而其思想逐渐演化到对“横切”关注点的模块化。与此同时,IBM T. J. Watson研究中心由William Harrison和Harold Ossher领导的一个小组,出版了关于“面向主题编程”(subject - oriented programming)的著作。面向主题编程(及其在Peri Tarr共同领导下的后续发展:对关注点的多维分割)主要关注的是:基于关注点所属的不同维度,对软件模块进行灵活的分解和合成。学术界的工作也同样卓著:下面的两种方法来源于大学研究。在荷兰的Twente大学,从20世纪90年代早期起,Mehmet Aksit及其团队一直从事合成过滤器(Composition Filter)方面的工作。该方法使用“过滤器”对行为进行模块化,以捕获对象行为的执行并增强之。在20世纪90年代中期,美国东北大学的Karl Lieberherr定义了Demeter方法(Demeter Method),提供了类结构和导航两种抽象,以更好地支持把相关知识从操作行为中分离出来。在1997年,Crista Lopes与Karl Liberherr和Gregor Kiczales协作开发了D-Java,这是第一个正式的Aspect语言。时光飞逝,到了2004年,面向aspect的编程语言不断涌现!但很显然,每一种新的语言的设计原则都来源于原始的四种方法学中的一个或多个。
  话题返回到分析和设计,关于在软件开发生命周期的早期如何支持aspect,在面向aspect编程的早期基本上没有相关的著作问世。面向aspect设计的Theme方法是把aspect合并到UML的第一种方法,Siobh噉在1997年的OOPSLA研讨会上曾经讨论过一些这方面的早期思想。Theme方法的进一步形式化是与IBM研究中心协作完成的,特别是Peri Tarr、Harold Ossher、William Harrison,还有英属哥伦比亚大学的Robert Walker。该设计模型从面向主题编程受益颇深,以至于有几年的时间它被称之为面向主题设计。但随着读者阅读本书,您可能会注意到Theme方法集成了不同aspect流派的思想,因此Siobh噉在2001年将“面向主题设计”更名为“Theme/UML”。
  识别关注点并将其在文档中可视化最初是由Elisa与英属哥伦比亚大学的Gail Murphy、Siemens AG. 公司的Christa Schwanninger一同研究的。该工作促进了2003年Theme/Doc的出现,这是Theme方法中面向aspect分析的一部分。设计Theme/Doc的意图在于补充现存的分析过程:在需求分析完成之后,而尚未了解到哪些aspect应该使用Theme/UML设计之前,Theme/Doc弥补了缺少的一环。
  在形式化Theme方法的过程中,我们牢记了程序员的现实目标:理解问题空间(需求),并给出适当的设计。我们的目标在于创造出一种方法,使得开发者能够将需求映射到设计、设计映射到代码。Theme/Doc和Theme/UML提供了这种机制。Theme/Doc可以帮助您发现需求中的aspect,Theme/UML可以帮助您对识别出的aspect进行设计。二者合起来,就构成了Theme方法。

如何阅读本书
  当然,阅读本书最直接的方式是从开头到结尾。本书的基本结构如下:简介与动机(第1、2章),方法的概览和图示(第3~6章),将设计映射到某些AOP语言的一些指南(第7章),应用实例(第8、9章)。
  但取决于读者的视角,可能对本书的某些部分更感兴趣。如果读者尚不理解aspect是什么,那么第1、3、4章非常有用。这些章节复习了基本概念,并指导读者如何在一组需求中识别出aspect。
  如果读者不大相信aspect的作用,对诸如“为什么一定要用aspect?”之类的问题感到困惑,那么第2章最为适合你。第8、9章也提供了一些例子,示范了如何在各种不同的系统中应用aspect。
  如果读者对捕获设计中的aspect感兴趣,那么第5、6章最适合您,其中提供了Theme/UML的细节,将指导您如何设计系统的asepct和核心,以及如何捕获系统中各模块的合成方式。

致谢
  对诸多人士在编写本书期间提供的大量帮助,笔者非常感谢!
  有几位对本书的技术内容有所贡献。Mary Lee从事在软件过程早期应用Theme方法的工作。书中的大多数例子代码出自Andrew Jackson之手。Harold Ossher和William Harrison贡献了CME代码。Alan Gray、David McKitterick、Tonya McMorrow、Karl Quinn和Conor Ryan都是Crystal Game开发组的成员,本书的例子则是基于他们的工作。Christa Schwanninger和Ivana Dusparic建议并贡献了书中的案例研究。在P2P系统的开发方面,我们同Vinny Cahill有一些有趣的讨论。
  笔者同时也感谢在本书编写期间评审过手稿的评审者:Ron Bodkin、Adrian Colver、Yvonne Coady、Jo媜 M. Fernandes、Charles Haley、Paul Holser、Wes Isberg、Gregor Kiczales、Ramnivas Laddad、Awais Rashid、Ryan van Roode、Michael J. Ward和Tim Walsh。
  在Theme方法的发展历史上,William Harrison、Stuart Kent、Michael Kircher、Gail Murphy、John Murphy、Harold Ossher、Christa Schwanninger、Peri Tarr和Robert Walker的影响和贡献都难以估量,我们深受其惠。
  最后,我们感谢Addison-Wesley公司所有与本书相关的工作人员:Kristy Hart、Brenda Mulligan、Mary O誃rien、Kerry Reardon和Chris Zahn。

作者简介
Siobhan Clarke
  Siobhan Clarke是都柏林Trinity学院的讲师。她于1986和2000年分别从都柏林城市大学获得学士和博士学位。从1986到1997年,Siobh噉为IBM爱尔兰分公司工作,从事各种领导性的软件工程角色。在1997年她开始读博士,攻读方向是扩展UML的模块化和合成能力。该工作最终演变为Theme/UML。
  Siobhan当前研究的重点是:可移动的、能感知环境的系统的设计和编程模型。开发此类系统的复杂度很高,需要高级的软件工程技术。特别是,她正在研究并扩展面向aspect软件开发技术,作为一种解决此类复杂性系统的手段。
  Siobhan曾服务于AOSD和UML会议的程序委员会,以及AOSD和MoDELS会议的组织委员会。在诸如OOPSLA、ECOOP、ICSE、AOSD和UML之类的会议上,她还曾参与组织了设计和编程模型(design and programming models)与环境可感知计算(context-aware computing)方面的多次研讨会(或参与其程序委员会)。她还是IEEE Internet Computing和Springer Transactions on AOSD的编委会成员。

Elisa Baniassad
  Elisa Baniassad是香港中文大学的教授。在2002年于加拿大英属哥伦比亚大学获得博士学位,期间她与Gail Murphy协作,然后攻读了博士后,由National Science and Engineering Council of Canada赞助,在都柏林Trinity学院进行。
  在1997年访问Xerox PARC研究中心期间,Elisa接触到AOP方面最早的一些工作,开始对AO感兴趣。在进行关于Design Pattern Rationale Graphs方面的论文工作时,她开始查看文档中的关注点,发现设计模式中的关注点并追踪之,从设计一直到代码。这项工作包括了更广泛的研究:程序员如何把代码与所依赖的文档关联起来。她所使用的案例主要是通过Siemens AG的Christa Schwanninger收集的。
  然后她开始研究如何从需求进行面向aspect的设计,并由此开始研究Theme/Doc。这项工作当前正在进行中,包括了对程序员和工具开发的经验性研究。
  Elisa参与了几个软件工程会议,并任职于OOPSLA、ECOOP和AOSD的组织或程序委员会,也在这些会议(以及ICSE)上发表过论文。Elisa是Early Aspects研讨会的组织者之一,该研讨会通常在AOSD和OOPSLA会议中举行。

图书序言

对本书的赞誉

  “使用面向aspect程序设计的开发人员将对本书赞赏有加。本书的作者是本领域的先驱人物,她们总结了过去的研究结果,为早期的aspect建立了细致的方法学和符号表示法。”
—Ron Bodkin,New Aspects of Software公司
CTO

  “面向Aspect是用于复杂系统程序设计的一种强大方法。在建模与设计期间应用该方法,也同样收益良多。本书中的Theme方法向开发者提供了一些手段,能够在软件开发过程的早期应用面向aspect的方法,这在AOP的实践过程中是一个重要进步。”
—Ramnivas Laddad,《Aspect J in Action》一书的作者

  “Clarke和Baniassad写了一本有趣的书,说明了如何使用aspect来解决一个难题:组合功能重叠的独立程序段。书中的案例很好地说明了相关的原则。我推荐这本书。”
—Charles B. Haley
Open University研究员

  “该书介绍了一类很有用的技术,可以帮助软件开发人员识别aspect。我确信,对软件开发者群体而言,本书将很快成为一本里程碑式的参考书!”
—Jo媜 M. Fernandes博士,
Universidade do Minho

作者简介

Siobhan Clarke, Elisa Baniassad:Siobhan Clarke:  Siobhan Clarke 任教于爱尔兰都柏林大学Trinity学院计算机科学系,是面向aspect软件开发领域的一位学术带头人。本书描述的Theme/UML方法,即基于她的博士论文中分割和合成对称设计模型的相关工作。她目前正在研究将面向aspect设计和编程模型用于移动、可感知环境的计算中。
Elisa Baniassad: Elisa Baniassad 任教于香港中文大学计算机科学和工程系,是面向aspect分析领域的一位学术带头人。本书描述的Theme/UML方法,即基于她对程序员在代码和文档中碰到aspect的可能方式所做的观察、实践和研究。

译者简介

郭旭:暂无简介

译者序

在计算机出现以来,软件开发范型一直在不断发展。目前,面向对象是主流的软件开发范型。使用面向对象方法进行开发时,系统中各个不同“关注点”之间的“缠结”和“散射”难以消除,因此,在有些情况下开发的系统耦合度比较高,模块化较差,难于维护。aspect范型正是为消除“缠结”和“散射”而设计的,虽然目前其普及程度不如面向对象范型,而且还存在一些不足,但假以时日,面向aspect的开发范型很有可能替代面向对象,成为下一代软件开发范型。
  目前,aspect范型的应用还主要限于开发过程,这使得在开发的前期和后期,用于描述信息的模型很不一致。在需求或设计阶段,往往是使用面向对象的模型在描述,而到了开发阶段,又转向了面向aspect模型,这对开发的效率和描述的准确性有相当的影响。
  有鉴于此,本书描述了在软件开发的早期,即需求分析、设计阶段使用aspect范型的方法。两位作者都是这一领域的先驱人物,分别专精于需求和设计阶段的aspect应用,并联合提出了Theme方法。本书讲述的内容由浅入深,系统全面,涵盖了Theme方法在需求、设计阶段的应用,并讲述了在实现阶段,与各种具体的aspect实现语言之间的映射。对于应用aspect范型分析、设计、开发软件的读者,本书应该是很有裨益的。
  参与本书翻译的除封面署名外还有高小明、庞博、杨永明、何文峰、井铁军、杨华伟、崔华山、朱杰斌、李峰,在此一并致谢。
  由于译者的时间和水平有限,因此疏漏错误在所难免,请各位读者不吝赐教。

郭 旭
2006年5月

图书目录

第1章  简介 1
1.1  软件开发与面向对象范型 1
1.2  aspect案例 2
1.3  什么是aspect 2
1.4  为何要在分析和设计中考虑aspect 4
1.5  aspect及其他问题 4
1.5.1  非对称分割 4
1.5.2  对称分割 6
1.6  Theme方法 8
1.6.1  何为theme 9
1.6.2  theme之间的关系 9
1.7  应用Theme方法 10
1.7.1  用Theme/Doc分析需求 10
1.7.2  用Theme/UML设计theme 12
1.8  Theme: 对称抑或非对称 13
1.9  Theme与现存开发过程的集成 14
1.10  实现 15
1.11  小结 15
第2章  面向对象方法 17
2.1  不同的关注点单位 17
2.1.1  描述需求 17
2.1.2  描述对象 19
2.1.3  比较需求和对象 21
2.2  表达式例子 22
2.2.1  面向对象设计 23
2.2.2  EES设计中需求的散射与缠结 26
2.3  适应演化 27
2.3.1  设计模式中的散射与缠结 29
2.3.2  面向对象方法的演化 30
2.4  小结 31
第3章  Theme方法 33
3.1  theme的结构与关系 33
3.1.1  分析、设计与合成时的theme 33
3.1.2  theme之间的关系 33
3.2  theme过程概述 35
3.3  查找theme 35
3.3.1  识别潜在的theme和实体 37
3.3.2  细化theme集合 38
3.3.3  识别横切theme 40
3.3.4  准备设计 41
3.4  设计theme 42
3.5  合成theme 48
3.5.1  指定theme之间的关系 48
3.5.2  合成后的theme 49
3.6  再论演化 51
3.6.1  查找theme 52
3.6.2  设计并合成theme 54
3.6.3  演化终篇语 55
3.7  theme最适当的规模 56
3.8  theme与现存开发过程的集成 56
3.8.1  瀑布过程 56
3.8.2  迭代方法 56
3.8.3  敏捷过程 57
3.9  小结 58
第4章  分析 61
4.1  Theme/Doc视图和支持工具 63
4.1.1  theme关系图 63
4.1.2  横切theme视图 64
4.1.3  单项图 65
4.2  Theme/Doc过程概览 66
4.3  确定theme 67
4.3.1  选择初始theme 67
4.3.2  考察theme关系图 69
4.3.3  对theme进行的操作 72
4.3.4  对需求的操作 77
4.4  确定theme职责 80
4.4.1  如果可能则分裂共享需求 81
4.4.2  识别aspect theme 82
4.4.3  推迟某些决策 87
4.5  了解何时决策已经完成 87
4.6  规划设计 90
4.6.1  识别对象 90
4.6.2  了解base theme 91
4.6.3  了解aspect theme 91
4.7  小结 92
第5章  theme设计 95
5.1  Theme/UML设计概览 95
5.1.1  base theme设计概览 96
5.1.2  aspect theme设计概览 97
5.2  设计base theme 100
5.2.1  游戏的体系结构 101
5.2.2  enter-location theme 102
5.2.3  start theme 103
5.2.4  distribute-crystals theme 105
5.2.5  setup-NPC theme 106
5.2.6  duel theme 106
5.3  设计横切theme 107
5.3.1  对UML的改动 108
5.3.2  P2P Communication theme 116
5.4  小结 120
第6章  theme合成 121
6.1  theme合成概览 121
6.1.1  选择theme 122
6.1.2  识别匹配的设计要素 123
6.1.3  定义集成方式 125
6.1.4  解决冲突 126
6.1.5  为aspect theme定义绑定 128
6.2  合成Game里的theme 130
6.3  匹配设计要素 131
6.3.1  显式匹配 131
6.3.2  隐式匹配 132
6.3.3  使用合成关系时用于概念匹配的规则 134
6.4  集成选项 135
6.4.1  覆盖集成 137
6.4.2  结合不同的集成策略 139
6.5  解决冲突 140
6.5.1  theme优先级 140
6.5.2  默认值 140
6.5.3  显式值 141
6.6  绑定到横切theme 141
6.7  对过程的一些评注 146
6.8  小结 146
第7章  到实现的映射 147
7.1  AspectJ 147
7.1.1  步骤概览 148
7.1.2  track-energy 149
7.1.3  P2Pcommunication 156
7.1.4  base theme 161
7.2  AspectWerkz 163
7.3  CME 169
7.3.1  base theme 169
7.3.2  aspect theme 173
7.4  小结 178
第8章  案例:电话的功能特性 179
8.1  分析需求并识别初始theme 179
8.2  细化theme 180
8.3  识别横切theme 181
8.4  设计概念共享theme 183
8.5  设计横切theme 184
8.6  小结 187
第9章  案例二:软件使用授权 189
9.1  需求 190
9.2  细化theme集合 191
9.2.1  删除次要theme 193
9.2.2  theme分组 194
9.3  划分行为性职责 195
9.3.1  需要分裂的需求 196
9.3.2  需要推迟的需求 196
9.3.3  由enforce theme共享的需求 196
9.3.4  由bill theme共享的需求 198
9.3.5  由launch theme共享的需求 198
9.4  设计theme 198
9.4.1  注册/下载theme 198
9.4.2  licensing theme 201
9.5  看看代码 204
9.6  小结 206
附录  Crystal Game游戏 207
参考文献 213

教学资源推荐
作者: [美] 弗兰克•徐(Frank Tsui) 奥兰多•卡拉姆(Orlando Karam) 芭芭拉•博纳尔(Barbara Bernal)著
作者: 窦万峰
参考读物推荐
作者: G.Gordon Schulmeyer James I.McManus
作者: 蔡亮 梁秀波 宣章炯 著
作者: TMQ 专项测试团队 编著