IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Rational  >

Rational Edge: 书评:Head First Object-Oriented Analysis & Design —— 关于 OOA&D 的一篇简单易懂的指南

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

James Schementi, 硕士研究生, Worcester Polytechnic Institute

2007 年 4 月 16 日

本文来自于 Rational Edge:一篇很好的 O'Reilly Head First 系列书籍的述评

封皮Brett D McLaughlin、Gary Pollice、David West
O'Reilly Media -- Head First Series,2006
ISBN 0596008678
平装本:600 页

不论您认为您的软件有多么的好,如果他不是人们想要的,那么它能有多杰出?O'Reilly 的“Head First spin”的Object Oriented Analysis & Design 介绍了开发杰出的软件 —— 确实满足客户要求的软件 —— 的意义。通过以用户为中心的观点,读者根据图画书中关于苛刻的客户及自动的狗门的指导,展示出 OOA&D 为什么真的重要。

“Head First”方式

对于 O'Reilly 的 Head First 系列的新读者来说,这些不是您日常乏味的技术书籍。虽然 600 页的书最初看起来很恐怖,但是每一页平均有三小段文字 —— 也就是,帮助您理解文章的手写笔记。而且,每一页都由图片和插图作为向导,从而引发您思考。听起来像本图画书,对吗?然而,Head First 的编辑相当直白地说出这个谚语,“一副图画能够比得上千字的描述”,并且他们肯定找到了用图片取代冗长文章的好方法。

该书实际地问您问题,并且为您的解答提供空间。而且,本书还有其练习部分,称为 Code Magnets,它像填空,但用代码填写!“magnets”是词库,填空是读者的责任(不要着急,稍后他们会给出答案)。

欢迎来到 Objectville

Head First OOA&D 使您置身于这个虚构的世界中,Objectville,其中有虚构的团队和虚构的客户。我说虚构的,因为您会快速地忘掉您在本书中所遇到的问题不是真实的:在阅读本书的过程中,读者会进入四个项目,全都针对客户需求的满足。

Rick 的吉他

Rick 是吉他爱好者,吉他商店的老板,他雇用您的公司为他创建吉他搜索工具。然而,读者读到了棘手的情况:应用程序不工作!您与您的团队成员整理设计并修复 Rick 的搜索工具,但紧接着在那之后,Rick 变更了他的需求。您和您的团队能够满足他的需求,但此章节的主要目标是向您展示开发软件中的真实问题,以及着重于客户想要的内容和可复用性设计如何真正地带来好处。

Doug 的狗门

解决了 Rick 的问题之后,您来到了新的项目:Doug 的 Dog Doors。这些是能让狗出来的高科技狗门。读者的第一批客户对他们想让狗门做的事情相当清楚,但是本书描述了,当我们没有收集需求时,会发生什么,也就是,有可能软件不按照客户想要的方式工作。在此实例中,狗门没有按照客户希望的关上门,而其他的家畜,如小兔子,死在屋子里狗的旁边。

这些向读者表现出需求收集的重要性,并且让读者与客户交流,确切地找出客户打算如何使用该狗门。作者继续说明如何根据需求撰写用例(但将练习假设为“仅仅找出门能做什么”)。该部分讨论用例是用于什么的,并且最后介绍如何根据用例检查需求。正好在您认为完成的时候,Doug 有了更多的客户,他们对狗门应该如何工作都有不同的需求!该练习再次重述了如何收集需求并由它们来创建用例。

到此为止,您确信每个人都满意 Doug 的 Dog Doors,但是客户回复了一些新的想法,像 Bark Recognizer。这引入了软件分析和设计中的一个常量:变更。您更新需求和用例,进入场景(通过用例的路径),然后到达代码,并做出必要的变更。

然而,Doug 的 Dog Doors 出现另一个问题,当所有狗叫时,吠声识别器都把狗门打开。这一点说明,软件必须在真实世界中工作,不仅仅在您的测试环境中。您确认该问题、计划解决方案,并最终更新门用例来反应这些变更。该问题也表现出需要一个新用例:存储狗吠声。该书带您经过了几个不同的解决方案,开始关注于耦合及授权,引入文字分析(分析用例,以找出什么是重点),和 UML 类图。哟!这里有很多隐藏的部分,但组织得很好,进行得很好。作者出色地让您理解了许多内容。

Rick 的弦乐器

该部分是关于泛化和聚集的,展示了事情能有多么的费解。您手边有一堆糟糕的代码,读者跳进了“火坑”!该部分测试了先前的设计,对“UMLOOCatastrophe!”Objectville 的 Favorite Quiz Show(我没有对此进行补充)都进行了一些解释。该部分有四个 Jeopardy 风格的回答,如“该代码构造有双重作用,确定应用于多个类型的行为,还有成为使用那些类型的类的首选焦点”。INTERFACE 是什么?Bingo!

总之,在游戏结束之后,我们回到了 Rick 的问题上:添加对更多乐器的支持。在 24 页之后,我们看到了更好的设计,主要用 map 来存储属性,而不是为每种乐器类型建立子类。然后 bureau de change 突然出现,并将内聚性作为消除变更的度量。他们主张类只有一个变更原因,就是要从该部分中消除很大部分。

Gary 的游戏

在项目 #3 中,Gary 的游戏 雇佣您创建基于旋转的策略游戏框架。您能得到想象的描述,但是关于此问题的,您的工作是找出客户想要的内容。该书介绍了通用性及可变性分析,来真正地找出客户想要的特性(需求集合),并详细地讨论用例图,帮助您开始看到系统的整体框架。该书还介绍了领域分析,这是确保您的特性列表与客户需求相符的方法。

这是一个更大的项目,因此该书开始大力介绍如何将大问题划分为许多较小的问题,通过将功能划分为独立运行的包。该书还介绍了“设计模式”,并且通过包设计是 Model-View_Controller 模式,说明设计模式可以在此阶段出现。这样,Gary 想要解决的一个大问题就成为了一些读者已经知道如何解决的较小的问题

那么,既然所有内容都是分解的,那么我们要从哪里开始?这时架构师出现了,帮助您将所有部分联系起来。然而,您仍旧需要从某个地方开始,因此,我们从架构上重要的地方开始 ——- 真正重要的部分。该书指导读者如何通过询问“这是基本特性吗?”、“这个特性意味着什么?”,和“如何构建这个特性?”找出重要的部分。这些地方都说明了“管理风险”,它是架构所涉及内容的核心。

该书饶了一段路,并且更详细地讨论设计原则。它指导读者经历这样的原则 Open-Closed Principle (OCP)、Don't Repeat Yourself (DRY)、Single Responsibility Principle (SRP)、Liskov Substitution Principle (LSP)、DelegationCompositionAggregation。作者慢慢地讲述这些内容,并提供真实的好实例,因此,没有看起来那么令人畏惧。

因为是时候开始对设计进行迭代了,所以该书介绍了两种不同的选项 —— 用例或特性驱动的开发 —— 并讨论什么时候一个会比另一个更好。您选择特性驱动的开发,选择一个特性,并且开始构建...按照您的意愿做出设计决策。该书还阐述了在客户请求框架代码进行检查的智能情况下,承包程序设计和防错性程序设计之间的差别。

Objectville RouteFinder

噢! 发生什么了?在我们还没有完成前面一个项目的时候,为什么要进行新的项目?当我们留给 Gary 一个完成一半的框架时,我们刚要开始关注客户!可能是大意了,但我容忍这最后的项目,也许这是出于好意。我们实际上也从没完成其他的两个项目。总之,在这个新的章节中,我们从头到尾经历了 OOA&D 项目生命周期,并且实际地构建完成了项目。

Objectville RouteFinder 将帮助人们在 Objectville 周围获得方向。所有内容都来自于工作说明,我们得到特性列表和用例图,分解问题,然后选择一个用例开始迭代。对于具体的用例,我们弄清问题、撰写用例、分析找出我们需要考虑的内容,并且做一些初步的设计。在那之后,我们准备进行实现。然后对其他用例 和 BAM 重复该过程!现在 Objectville 有了一个工作 RouteFinder。

其余的:十大主题及欢迎来到 Objectville

本部分介绍了作者不想放入书籍主要部分的主题。这包括 IS-A/HAS-A 关系、用例格式化、反模式、CRC 卡、标准、序列图、状态图、单元测试、编码标准,以及重构。好的,我们在书的最后来到了 Objectville 中?这部分看起来应该是最开始介绍的,因此它似乎是最后的变更。总之,该部分讨论了 UML 和类图、继承、多态性、封装...一些应该在开头为您介绍的东西。

结束语!

Head First OOA&D 提供了对软件开发的新观点,即真正地关注重要的内容:愉快的客户及可维护/可复用的设计。该书的确是面向技术软件初学者的,但是对撰写杰出软件感兴趣的人也能从中得到知识。不要让页数吓跑。该书很快就能读完(花了我大约八个小时,并且我通常读得非常慢)。他们非常好地表现出了内容,以至于这些信息都真正地进入了我的脑子。

推荐:如果您想让您的客户(及您自己)开心,那么就看看此书。



参考资料



关于作者

author photo

James Schementi 是麻萨诸塞州伍斯特工学院的硕士研究生,他的研究领域包括动态语言、Web 框架和用户界面设计。他的 Web 站点是 http://users.wpi.edu/~jimsch06,您可以通过 jimsch06@wpi.edu 联系他。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款