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

UML和模式应用(原书第3版)
作者 : Craig Larman
译者 : 李洋 郑龑
出版日期 : 2006-05-26
ISBN : 7-111-18682-6
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 500
开本 : 16开
原书名 : Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (Third Edition)
原出版社: Prentice Hall
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

■关于面向对象分析与设计及UML的经典之作。
  ■全面升级到UML 2和最新的迭代/敏捷实践。
  ■增加了全新的案例研究,阐述了大量关键思想。

  无论对于专业人士还是教师来说,本书都堪称经典之作。本书介绍了对象思想,并在实际的面向对象分析和设计中应用这一观点。本书的第1版和第2版广受赞誉,在第3版中,作者Craig Larman所作的更新充分反映了新的UML 2标准,有助于读者掌握对象设计,并且提倡具有高度影响的、迭代和有效的敏捷建模实践。
  开发者和学生可以通过两个贯穿全书的案例研究来学习面向对象分析和设计(OOA/D)。这些案例研究循序渐进地介绍了关键技能、OO的本质原则和模式、UML表示法和最佳实践。读者不仅能够学习UML图,更重要的是能够理解如何在OO软件开发环境下应用UML。
  作为成功的导师和顾问,Larman拥有丰富的实践经验,能够帮助读者理解进化式需求和用例、领域对象建模、职责驱动设计、OO设计本质、分层架构、GoF设计模式、GRASP、迭代方法、UP的敏捷途径等知识。
  第3版实用、易懂,介绍了如何以对象进行思考和设计,以及如何创建健壮和可维护的系统。

本书的特点
  ●注重帮助读者掌握OOA/D,本书通过案例研究论述了关键的OO原则和模式,同时应用了UML。
  ●增加对UML 2、敏捷建模、测试驱动开发和重构的介绍。
  ●增加大量结合迭代和进化式开发的技巧。
  ●引入了新的学习帮助和插图,使读者更容易学习。
  ●增加了新的教学资源。
  ●对以轻量和敏捷精神应用UP给予了指导,补充了诸如XP和Scrum等迭代方法。
  ●介绍应用UML对架构进行文档化的技术。
  ●更详细地介绍进化式需求。

图书特色

图书前言

感谢你阅读本书!我可以提供(OOA/D、UML、建模、迭代和敏捷方法等方面的)问题解答、咨询或培训等服务,欢迎访问我的网站www.craiglarman.com(中文站点是www.craiglarman.cn)。
  本书是面向对象分析和设计(OOA/D)的实用指南,并且阐述与迭代开发相关的内容。我很高兴地看到本书的第1版和第2版在全世界范围内得到了广泛认可。我衷心地感谢所有读者!
  通过阅读本书,你将会有如下收益:
  第一,对象技术已获得广泛应用,掌握OOA/D对于成功进行软件开发是至关重要的。
  第二,如果你刚刚接触OOA/D,你将会面临如何掌握这个复杂主题的挑战。本书提供了一个良好定义的迭代式路线图(统一过程的敏捷方法),帮助你一步一步地完成从需求到编码的全部工作。
  第三,统一建模语言(UML)已成为建模的标准表示法,所以能够熟练应用UML是很有用的。
  第四,设计模式表达了面向对象设计专家用于创建系统的“最佳实践”的习惯用法和方案。在本书中,你将学习如何应用设计模式,包括流行的GoF模式和GRASP模式。学习和应用这些模式将有助于你更快地掌握分析和设计技能。
  第五,本书的结构和重点基于作者多年来教授和培训成千上万学生掌握OOA/D的经验,它提供了一个精炼的、已证明的和高效的掌握OOA/D的学习方法,使你能够用尽量少的阅读和学习时间掌握OOA/D。
  第六,本书详尽地说明两个案例研究,以便实际地说明整个OOA/D过程,并深入讨论棘手的细节问题。
  第七,本书说明如何将对象设计制品映射成Java代码,还介绍了测试驱动开发和重构。
  第八,本书解释如何设计一个分层架构,以及如何将用户界面层与领域层和技术服务层关联起来。
  最后,本书展示如何设计一个面向对象框架的相关知识,并应用这些知识来创建一个在数据库中持久化存储的框架。

教学和Web资源
  你可以在www.craiglarman.com找到相关文章。
  在全球范围内,有成百上千名教师在使用本书,并且本书至少已被翻译为10种语言。在我的网站上有各种教师资源,包括PowerPoint形式的本书所有插图、OOA/D的PowerPoint演示以及其他更多内容。如果你是教师,欢迎与我联系以获取这些资源。
  我从使用过本书的教师那里收集了一些资料,以便与其他教师共享。如果你也有可以共享的资料,请与我联系。

读者对象—入门级
  本书是一本入门书,主要介绍OOA/D以及相关的需求分析,并以统一过程作为样例过程来阐述迭代开发。本书不是有关OOA/D的高级教材。它适合以下读者阅读:
  * 具有面向对象编程经验但是刚刚接触OOA/D的开发者和学生。
  * 在计算机科学和软件工程课程中学习对象技术的学生。
  * 熟悉OOA/D但希望学习UML表示法、应用模式的读者,或者希望加强和提高自己的分析和设计技能的读者。

预备知识
  本书假设读者已具备如下必需的知识:
  * 面向对象程序设计语言(如Java、C#、C++或Python)的知识和经验。
  * 面向对象技术的基本概念和知识,如类、实例、接口、多态、封装和继承。
  在本书中没有定义基本的面向对象技术概念。

Java示例,但是……
  本书一般用Java语言编写示例代码,这是因为Java使用广泛。然而,本书的观点适用于大多数(即使不是全部)的面向对象程序设计语言,包括C#、Python等。

本书的组织结构
  本书按与软件开发项目类似的顺序引入分析和设计的主题,包括“初始”阶段(统一过程中的术语)及后续的三个迭代(见图P-1)。
  1) 初始阶段的各章介绍需求分析的基本知识。
  2) 迭代1介绍OOA/D的基本知识以及如何为对象分配职责。
  3) 迭代2重点介绍对象设计,特别是介绍一些常用的“设计模式”。
  4) 迭代3介绍多个不同的主题,如架构分析和框架设计。
图P-1  本书的组织结构遵循项目的开发过程

关于作者
  Craig Larman是Valtech公司的首席科学家。Valtech公司是一家国际性的咨询和技术转让公司,在欧洲、亚洲和北美洲都有分支机构。他还是《敏捷迭代开发:管理者指南》(Agile and Iterative Development: A Manager誷 Guide)一书的作者,这是一本关于软件工程和迭代、敏捷开发方面的畅销书籍。他在全球各地游历,足迹遍布从美国印地安那州到印度的很多地方,为开发团队和管理人员进行培训。
  20世纪80年代中期以来,Craig帮助了数以千计的开发者,使他们能够应用OOA/D、熟练使用UML建模技术、采用迭代开发实践。
  在结束其街头流浪音乐家生涯后,Craig在20世纪70年代开始使用APL、PL/I和CICS建立系统。从20世纪80年代初期开始,他开始对人工智能产生兴趣,并用Lisp机器、Lisp、Prolog和Smalltalk建立过知识系统。他也为使用Java、.NET、C++和Smalltalk建立系统的公司工作过。他在大部分业余时间里担任过Changing Requirement乐队(曾经称为Requirement,但是成员上有些变动)的主音吉他手。
  他在加拿大温哥华Simon Fraser大学获得计算机科学学士和硕士学位。

联系方式
  可以通过craig@craiglarman.com和www.craiglarman.com 联系Craig。他欢迎广大读者和教师提出问题,并愿意接受演讲、教学和咨询的邀请。

新版本的改进之处
  除保留以前版本的核心内容之外,新版本在许多方面进行了精化,包括:
* UML 2。
* 第二个案例研究。
* 更多结合OOA/D进行迭代和进化式开发的技巧。
* 为方便学习,再次编写了新的学习工具和图形。
* 新的大学教师资源。
* 敏捷建模、测试驱动开发和重构。
* 更多UML活动图建模过程。
* 以轻量和敏捷思维,并辅以诸如XP和Scrum等其他迭代方法来应用UP的指导。
* 应用UML对架构进行文档化。
* 增加了一章内容以阐述进化式需求。
* 使用了[Cockburn01]中最为流行的方法精化用例章节。

致谢
  首先,非常感谢我的朋友们以及我在Valtech公司的同事,他们是世界一流的对象开发和迭代开发专家,他们以各种方式促成、支持或评审了本书,他们是Chris Tarr、Tim Snyder、Curtis Hite、Celso Gonzalez、Pascal Roques、Ken DeLong、Brett Schuchert、Ashley Johnson、Chris Jones、Thomas Liou、Darryl Gebert,还有许多我叫不出名字的人。
  感谢Philippe Kruchten为本书撰写了序言,对本书进行了评审,并以多种方式提供了帮助。
  感谢Martin Fowler和Alistair Cockburn在有关设计和过程方面的真知灼见。感谢同意我引用他们的观点,并对本书提供了评审意见。
  感谢Oystein Haugen、Cris Kobryn、Jim Rumbaugh和Bran Selic对UML 2内容的评审。
  感谢John Vlissides和Cris Kobryn,本书引用了他们的观点。
  感谢Chelsea Systems和John Gray,他们使用Java技术的ChelseaStore POS系统启发了一些需求,为本书提供了帮助。
  感谢Pete Coad和Dave Astels对本书的支持。
  感谢其他的评审者,他们是Steve Adolph、Bruce Anderson、Len Bass、Gary K. Evans、Al Goerner、Luke Hohmann、Eric Lefebvre、David Nunn和Robert J. White。
  感谢Prentice-Hall出版公司的Paul Becker,正是他深信本书的第1版是一个有价值的项目,同时感谢Paul Petralia对后续版本的指导。
  最后,特别感谢Graham Glass提供的一切便利。

图书序言

编程很有乐趣,但开发高质量的软件却是困难的。从好的观点、需求或“构想”开始,到最终变成一个实际运行的软件产品,所需要的不仅仅是编码这一项工作。分析和设计,定义如何解决问题,需要对哪些内容编程,用易于交流、评审、实现和演化的多种方式来获取这个设计,这正是本书的核心所在。这也是你将要学习的内容。
  统一建模语言(UML)已经成为被用户广泛接受的描述软件设计蓝图的语言。在本书中,UML是用来传递设计理念的可视化语言。本书重点讲述开发者如何真正地应用常用的UML元素而不是讲述UML的特征。
  在很多学科中,人们早就认识到模式在构造复杂系统时的重要性。软件设计模式可以帮助开发人员描述设计片断、重用设计思想、使用其他人的专业经验。模式给出了抽象的探索式过程的名称和形式,以及面向对象技术的规则和最佳实践。明智的工程师是不会完全从头开始工作的,而本书则为方便地使用模式提供了一个范例。
  然而,如果没有软件工程过程作为背景,软件设计就显得有些枯燥和神秘。关于软件设计这个主题,我很高兴地看到在本书的新版本中,Craig Larman已经加入并介绍了统一过程(Unified Process),并介绍如何以一种相对简单和实际的方式来应用统一过程。通过在一个迭代的、风险驱动的、以架构为中心的过程中介绍案例研究,Craig的建议有其现实的环境。他揭示了软件开发中实际的动态发展,并分析外部作用的影响。设计活动与其他任务相关,它们不再是一个纯粹的系统化转换或使用创造性直觉的脑力活动。同时,Craig和我都深信迭代开发的益处,你可以在本书中看到对此问题的详细说明。
  所以我认为,本书融合了多种技术。你将师从一位一流的老师、卓越的方法论学家及OO专家(有极为丰富的教学经验)学习应用面向对象分析和设计(OOA/D)的系统化方法。Craig在统一过程的背景下描述了面向对象分析和设计的系统化方法,逐步介绍了更复杂的设计模式,因此当你面临现实世界的设计挑战时,本书非常方便实用。同时,他在本书中使用了人们广泛接受的表示法。
  我非常荣幸有机会与作者一起参与了本书的写作。我阅读过本书的第1版,并愉快地接受了Craig请我评阅本书新版本的邀请。我们多次会面并通过邮件讨论了本书的内容。我从Craig那里学到了很多东西,其中甚至涉及我所从事的统一过程工作,包括如何改进统一过程,如何在不同组织中定位统一过程。我敢肯定,你将通过阅读本书学到很多知识,即使你非常熟悉OOA/D。而且,像我一样,你将发现自己重温并更新了过去的知识,或从Craig的解释和经验中获得了更深入的理解。
  阅读愉快!


Philippe Kruchten
现任加拿大英属哥伦比亚大学软件工程教授
曾任Rational公司RUP产品的过程开发总监
并获得“Rational Fellow”称号

作者简介

Craig Larman:Craig Larman: Craig Larman Valtech公司首席科学家,Valtech是一家领先的跨国技术咨询公司,在美国、欧洲和亚洲都有分支机构。他是国际软件界知名的专家和导师,专长为OOA/D与设计模式、敏捷/迭代方法、统一过程的敏捷途径和UML建模。除本书外,他还著有畅销的《Agile and Iterative Development: A Manager's Guide》(敏捷迭代开发,该书影印版由机械工业出版社引进出版)一书,并且与Rhett Guthrie合著了《Java 2Performance and Idiom Guide》一书。Larman是ACM和IEEE会员,拥有计算机科学学士和硕士学位。他的中文网站是www.craiglarman.cn。

译者简介

李洋 郑龑:暂无简介

译者序

学习总是由厚至薄,由薄至厚。学习面向对象分析和设计的过程亦是如此,我们既要掌握最本质的原则,又要熟练使用大量的技巧,这样才能在实践中加以灵活应用。Craig Larman的这本书恰好为我们提供了这样的途径,他将OOA/D的基本原则、开发方法、辅助工具结合起来,并辅以贯穿全书的深入实例,为我们展示了一个广阔的对象世界。这本书历经三个版本的锤炼,吸收了大量OOA/D的精华思想和现代实践方法,为我们提供了最佳指导。这无疑是一本优秀的软件设计书籍。也正因为这个原因,译者在翻译过程中诚惶诚恐,如履薄冰,但愿能够忠实反映Craig Larman的真知灼见。
  在翻译过程中,本书在以下三个方面给我留下了极为深刻的印象:
  其一,Craig Larman使用大量篇幅反复强调瀑布式方法的谬误和迭代方法的真谛。这看上去似乎是赘语,但我们在实践中却往往忽视了这一简单道理,总是将谬误当成真理,甚至对其视而不见,有意为之。由此可见Craig Larman的用心良苦。
  其二,在OOA/D领域里充斥大量模式,难以记忆,更不用说灵活应用了。而本书则强调了OOA/D最为本质的原则,即GRASP原则或模式。这9种基本原则正是对大量模式的归纳和总结,能够帮助我们了解复杂现象背后的本质思想,使我们提升到“无招胜有招”的境界,这正是由厚至薄的过程;另一方面,本书在这些基本原则之上,还深入探讨了常见模式的应用,在精致的示例中展示模式的巧妙,这正是由薄至厚的过程。
  其三,Graig Larman吸收了大量轻量级的敏捷方法和实践。敏捷方法与重量级方法并不矛盾;反之,敏捷方法为重量级方法赋予新的活力,使其更为实用。我们乐于见到理论界中的这种融合,它使我们在实践中更易于遵循和采纳这些方法。总而言之,阅读本书,受益匪浅。
  本书第一部分~第四部分由李洋翻译,第五、六部分由郑翻译。不免俗套,在这里感谢程道超、刘兰对翻译工作的帮助。同时,感谢家人对我们的一贯支持和鼓励。书中翻译不当之处,望读者批评指正。
  祝阅读愉快!


李洋 郑龑
2006年3月

图书目录

第一部分 绪   论
第1章  面向对象分析和设计 2
1.1 本书的主要内容 2
1.2  最重要的学习目标 4
1.3  什么是分析和设计 5
1.4  什么是面向对象分析和设计 5
1.5  简单示例 5
1.6  什么是UML 8
1.7  可视化建模的优点 10
1.8  历史 10
1.9  参考资料 12
第2章  迭代、进化和敏捷 13
2.1  什么是UP?其他方法能否对其进行补充 13
2.2  什么是迭代和进化式开发 15
2.3  什么是瀑布生命周期 17
2.4  如何进行迭代和进化式分析和设计 18
2.5  什么是风险驱动和客户驱动的迭代计划 20
2.6  什么是敏捷方法及其观点 20
2.7  什么是敏捷建模 22
2.8  什么是敏捷UP 23
2.9  UP的其他关键实践 24
2.10  什么是UP的阶段 25
2.11  什么是UP科目 25
2.12  如何定制过程和UP开发案例 27
2.13  判断你是否理解迭代开发或UP 28
2.14  历史 29
2.15  参考资料 29
第3章  案例研究 31
3.1  案例研究中涵盖的内容 31
3.2  案例研究策略:迭代开发+迭代学习 32
3.3  案例一:NextGen POS系统 32
3.4  案例二:Monopoly游戏系统 33
第二部分  初 始 阶 段
第4章  初始不是需求阶段 36
4.1  什么是初始阶段 36
4.2  初始阶段的持续时间 37
4.3  初始阶段会创建的制品 38
4.4  何时知道自己并不了解初始阶段 39
4.5  初始阶段中有多少UML 39
第5章  进化式需求 40
5.1  定义:需求 40
5.2  进化式需求与瀑布式需求 41
5.3  寻找需求可以采用的方法 42
5.4  需求的类型和种类 42
5.5  UP制品如何组织需求 43
5.6  本书是否包含这些制品的示例 43
5.7  参考资料 44
第6章  用例 45
6.1  示例 45
6.2  定义:参与者、场景和用例 47
6.3  用例和用例模型 47
6.4  动机:为什么使用用例 48
6.5  定义:用例是功能性需求吗 48
6.6  定义:参与者的三种类型 48
6.7  表示法:用例的三种常用形式 49
6.8  示例:详述风格的处理销售 49
6.9  各小节的含义 55
6.10  表示法:有其他格式吗?两栏变体 60
6.11  准则:以无用户界面约束的本质风格编写用例 60
6.12  准则:编写简洁的用例 62
6.13  准则:编写黑盒用例 62
6.14  准则:采用参与者和参与者目标的视点 62
6.15  准则:如何发现用例 62
6.16  准则:什么样的测试有助于发现有用的用例 65
6.17  应用UML:用例图 67
6.18  应用UML:活动图 69
6.19  动机:用例还有其他益处吗?语境中的需求 69
6.20  示例:Monopoly游戏 70
6.21  过程:在迭代方法中如何使用用例 71
6.22  历史 75
6.23  参考资料 75
第7章  其他需求 76
7.1  如何完成这些示例 77
7.2  准则:初始阶段是否应该对此彻底地进行分析 77
7.3  准则:这些制品是否应该放在项目Web站点上 77
7.4  NextGen示例:(部分)补充性规格说明 78
7.5  注解:补充性规格说明 80
7.6  NextGen示例:(部分)设想 82
7.7  注解:设想 84
7.8  NextGen示例:(部分)词汇表 87
7.9  注解:词汇表(数据字典) 87
7.10  NextGen示例:业务规则(领域规则) 88
7.11  注解:领域规则 89
7.12  过程:迭代方法中的进化式需求 89
7.13  参考资料 90
第三部分  细化迭代1—基础
第8章  迭代1—基础 92
8.1  迭代1的需求和重点:OOA/D技术的核心 92
8.2  过程:初始和细化 94
8.3  过程:计划下一个迭代 96
第9章  领域模型 98
9.1  示例 99
9.2  什么是领域模型 100
9.3  动机:为什么要创建领域模型 102
9.4  准则:如何创建领域模型 104
9.5  准则:如何找到概念类 104
9.6  示例:寻找和描绘概念类 106
9.7  准则:敏捷建模—绘制类图的草图 107
9.8  准则:敏捷建模—是否要使用工具维护模型 107
9.9  准则:报表对象—模型中是否要包括“票据” 108
9.10  准则:像地图绘制者一样思考;使用领域术语 108
9.11  准则:如何对非现实世界建模 108
9.12  准则:属性与类的常见错误 109
9.13  准则:何时使用“描述”类建模 109
9.14  关联 111
9.15  示例:领域模型中的关联 115
9.16  属性 117
9.17  示例:领域模型中的属性 122
9.18  结论:领域模型是否正确 123
9.19  过程:迭代和进化式领域建模 124
9.20  参考资料 125
第10章  系统顺序图 126
10.1  示例:NextGen SSD 126
10.2  什么是系统顺序图 128
10.3  动机:为什么绘制SSD 128
10.4  应用UML:顺序图 129
10.5  SSD和用例之间的关系 129
10.6  如何为系统事件和操作命名 130
10.7  如何为涉及其他外部系统的SSD建模 130
10.8  SSD的哪些信息要放入词汇表中 130
10.9  示例:Monopoly SSD 130
10.10  过程:迭代和进化式SSD 131
10.11  历史和参考资料 132
第11章  操作契约 133
11.1  示例 133
11.2  定义:契约有哪些部分 135
11.3  定义:什么是系统操作 135
11.4  定义:后置条件 136
11.5  示例:enterItem后置条件 137
11.6  准则:是否应该更新领域模型 138
11.7  准则:契约在何时有效 138
11.8  准则:如何创建和编写契约 138
11.9  示例:NextGen POS契约 139
11.10  示例:Monopoly契约 140
11.11  应用UML:操作、契约和OCL 141
11.12  过程:UP的操作契约 141
11.13  历史 142
11.14  参考资料 142
第12章  从需求到设计—迭代进化 143
12.1  以迭代方式做正确的事,正确地做事 143
12.2  尽早引发变更 143
12.3  完成所有分析和建模工作是否需要几个星期 144
第13章  逻辑架构和UML包图 145
13.1  示例 146
13.2  什么是逻辑架构和层 146
13.3  案例研究中应该关注的层 147
13.4  什么是软件架构 147
13.5  应用UML:包图 148
13.6  准则:使用层进行设计 149
13.7  准则:模型-视图分离原则 153
13.8  SSD、系统操作和层之间的联系 154
13.9  示例:NextGen的逻辑架构和包图 155
13.10  示例:Monopoly逻辑架构 155
13.11  参考资料 155
第14章  迈向对象设计 156
14.1  敏捷建模和轻量级UML图形 157
14.2  UML CASE工具 157
14.3  编码前绘制UML需要花费多少时间 158
14.4  设计对象:什么是静态和动态建模 158
14.5  基于UML表示法技术的对象设计技术的重要性 159
14.6  其他对象设计技术:CRC卡 159
第15章  UML交互图 161
15.1  顺序图和通信图 161
15.2  UML建模初学者没有对交互图给予足够重视 164
15.3  常用的UML交互图表示法 164
15.4  顺序图的基本表示法 166
15.5  通信图的基本表示法 175
第16章  UML类图 180
16.1  应用UML:常用类图表示法 180
16.2  定义:设计类图 181
16.3  定义:类元 182
16.4  表示UML属性的方式:属性文本和关联线 182
16.5  注解符号:注解、注释、约束和方法体 185
16.6  操作和方法 185
16.7  关键字 187
16.8  构造型、简档和标记 187
16.9  UML特性和特性字符串 188
16.10  泛化、抽象类、抽象操作 188
16.11  依赖 189
16.12  接口 191
16.13  组合优于聚合 191
16.14  约束 192
16.15  限定关联 192
16.16  关联类 193
16.17  单实例类 193
16.18  模板类和接口 194
16.19  用户自定义的分栏 194
16.20  主动类 194
16.21  交互图和类图之间的关系 195
第17章  GRASP:基于职责设计对象 196
17.1  UML与设计原则 196
17.2  对象设计:输入、活动和输出的示例 197
17.3  职责和职责驱动设计 198
17.4  GRASP:基本OO设计的系统方法 200
17.5  职责、GRASP和UML图之间的联系 201
17.6  什么是模式 201
17.7  现在我们所处的位置 203
17.8  使用GRASP进行对象设计的简短示例 203
17.9  在对象设计中应用GRASP 210
17.10  创建者 210
17.11  信息专家(或专家) 212
17.12  低耦合 215
17.13  控制器 218
17.14  高内聚 227
17.15  参考资料 230
第18章  使用GRASP的对象设计示例 231
18.1  什么是用例实现 232
18.2  制品注释 233
18.3  下一步工作 235
18.4  NextGen迭代的用例实现 235
18.5  Monopoly迭代的用例实现 251
18.6  过程:迭代和进化式对象设计 258
18.7  总结 260
第19章  对可见性进行设计 261
19.1  对象之间的可见性 261
19.2  什么是可见性 261
第20章  将设计映射为代码 265
20.1  编程和迭代、进化式开发 265
20.2  将设计映射到代码 266
20.3  由DCD创建类的定义 266
20.4  从交互图创建方法 266
20.5  代码中的集合类 268
20.6  异常和错误处理 269
20.7  定义Sale.makeLineItem方法 269
20.8  实现的顺序 269
20.9  测试驱动或测试优先的开发 270
20.10  将设计映射为代码的总结 270
20.11  NextGen POS程序简介 270
20.12  Monopoly程序简介 274
第21章  测试驱动开发和重构 279
21.1  测试驱动开发 279
21.2  重构 282
21.3  参考资料 286
第22章  UML工具与UML蓝图 287
22.1  前向、逆向和双向工程 288
22.2  什么是有价值特性的常见报告 288
22.3  对工具有哪些期待 288
22.4  如果绘制了UML草图,如何在编码后更新该图形 289
22.5  参考资料 289
第四部分  细化迭代2—更多模式
第23章  迭代2:更多模式 292
23.1  从迭代1到迭代2 292
23.2  迭代2的需求和重点:对象设计和模式 293
第24章  快速地更新分析 296
24.1  案例研究:NextGen POS 296
24.2  案例研究:Monopoly 298
第25章  GRASP:更多具有职责的对象 300
25.1  多态 301
25.2  纯虚构 306
25.3  间接性 309
25.4  防止变异 310
第26章  应用GoF设计模式 316
26.1  适配器(GoF) 317
26.2  一些GRASP原则是对其他设计模式的归纳 318
26.3  设计中发现的“分析”:领域模型 319
26.4  工厂(Factory) 319
26.5  单实例类(GoF) 321
26.6  具有不同接口的外部服务问题的结论 323
26.7  策略(GoF) 324
26.8  组合(GoF)和其他设计原则 328
26.9  外观(GoF) 335
26.10  观察者/发布-订阅/委派事件模型(GoF) 337
26.11  结论 342
26.12  参考资料 342
第五部分  细化迭代3—中级主题
第27章  迭代3—中级主题 344
27.1  NextGen POS案例 344
27.2  Monopoly案例 344
第28章  UML活动图及其建模 346
28.1  示例 346
28.2  如何应用活动图 346
28.3  其他UML活动图表示法 348
28.4  准则 350
28.5  示例:NextGen中的活动图 350
28.6  过程:“统一过程”中的活动图 351
28.7  背景 351
第29章  UML状态机图和建模 352
29.1  示例 352
29.2  定义:事件、状态和转换 353
29.3  如何应用状态机图 353
29.4  更多UML状态机图表示法 354
29.5  示例:使用状态机进行UI导航建模 355
29.6  示例:NextGen用例的状态机图 356
29.7  过程:UP中的状态机图 356
29.8  参考资料 356
第30章  用例关联 357
30.1  包含关系 358
30.2  术语:具体用例、抽象用例、基础用例和附加用例 360
30.3  扩展关系 360
30.4  泛化关系 361
30.5  用例图 362
第31章  领域模型的精化 363
31.1  NextGen领域模型中的新概念 363
31.2  泛化 365
31.3  定义概念超类和子类 366
31.4  何时定义概念子类 368
31.5  何时定义概念超类 369
31.6  NextGen POS案例中的概念类层次结构 369
31.7  抽象概念类 371
31.8  对变化的状态建模 372
31.9  软件中的类层次结构和继承关系 373
31.10  关联类 373
31.11  聚合关系和组合关系 375
31.12  时间间隔和产品价格—解决迭代1阶段的“错误” 377
31.13  关联角色名称 377
31.14  作为概念的角色与关联中的角色 378
31.15  导出元素 379
31.16  受限关联 379
31.17  自反关联 380
31.18  使用包来组织领域模型 380
31.19  示例:Monopoly领域模型的精化 384
第32章  更多的SSD和契约 386
第33章  架构分析 390
33.1  过程:何时开始架构分析 391
33.2  定义:变化点和进化点 391
33.3  架构分析 391
33.4  架构分析的常用步骤 392
33.5  科学:架构因素的识别和分析 392
33.6  示例:NextGen POS的部分架构因素表 395
33.7  艺术:架构性因素的解决 396
33.8  架构分析主题的总结 400
33.9  过程:UP中的迭代架构 401
33.10  参考资料 402
第34章  逻辑架构的精化 403
34.1  示例:NextGen的逻辑架构 403
34.2  使用层模式的协作 407
34.3  有关层模式的其他问题 412
34.4  模型-视图分离和“向上”通信 415
34.5  参考资料 415
第35章  包的设计 416
35.1  组织包结构的准则 417
35.2  参考资料 421
第36章  使用GoF模式完成更多对象设计 422
36.1  示例:NextGen POS 422
36.2  本地服务容错;使用本地缓存提高性能 422
36.3  处理故障 426
36.4  通过代理(GoF)使用本地服务进行容错 431
36.5  对非功能性或质量需求的设计 433
36.6  使用适配器访问外部物理设备 433
36.7  对一组相关的对象使用抽象工厂模式 435
36.8  使用多态性和“Do It Myself”模式处理支付 437
36.9  示例:Monopoly案例 442
36.10  结论 445
第37章  使用模式设计持久性框架 446
37.1  问题:持久性对象 447
37.2  解决方案:持久性框架提供的持久性服务 447
37.3  框架 447
37.4  持久性服务和框架的需求 448
37.5  关键思想 448
37.6  模式:将对象表示为表 449
37.7  UML数据建模简档 449
37.8  模式:对象标识符 449
37.9  通过外观访问持久服务 450
37.10  映射对象:数据库映射器或数据库代理模式 450
37.11  使用模板方法模式进行框架设计 452
37.12  使用模板方法模式的具体化 453
37.13  使用MapperFactory配置Mapper 457
37.14  模式:缓存管理 458
37.15  在一个类中合并和隐藏SQL语句 458
37.16  事务状态和状态模式 459
37.17  使用命令模式设计事务 461
37.18  使用虚代理实现滞后具体化 463
37.19  如何在表中表示关系 465
37.20  PersistentObject超类和关注分离 465
37.21  未决问题 466
第38章  UML部署图和构件图 467
38.1  部署图 467
38.2  构件图 469
第39章  架构的文档化:UML和N+1视图模型 470
39.1 SAD和架构视图 470
39.2  表示法:SAD的结构 473
39.3  示例:NextGen POS的SAD 473
39.4  示例:Jakarta Struts 的SAD 478
39.5  过程:迭代式架构文档 481
39.6  参考资料 481
第六部分  其 他 主 题
第40章  迭代式开发和敏捷项目管理的进一步讨论 484
40.1  如何计划一次迭代 484
40.2  适应性计划与预测性计划 485
40.3  阶段计划和迭代计划 486
40.4  如何使用用例和场景来计划迭代 487
40.5  早期预算的有效性(无效性) 488
40.6  将项目制品组织起来 489
40.7  何时你会发现自己并没有理解迭代计划 489
40.8  参考资料 490
参考文献 491
术语表 497

教学资源推荐
作者: 窦万峰 主编 宋效东 史玉梅 李东振 赵菁 等参编
作者: (英)Bob Hughes, Mike Cotterell
参考读物推荐
作者: 吴文峻,张文博,王德庆,任健,张奎 等著
作者: Michael Kircher, Prashant Jain
作者: 张瑾 杜春晖
作者: (美)Capers Jones