无缝面向对象软件架构

作者:Dan Wilder

作者: Kim Wald 和 Jean-Marc Nerson

出版社: Prentice Hall

ISBN 0-13-031303-3

评论者: Dan Wilder

如果您有一些面向对象编程的经验,并且正在寻找一种兼容的设计方法,请阅读本书。作者描述了一种完全基于面向对象概念的方法(他们避免使用“方法论”一词,并在第 6 章中告诉我们原因)。自 1990 年以来,业务对象表示法 (BON) 避免从熟悉的数据流、实体关系或状态转换图开始。系统用例场景在其他方法中很突出,但在本书中也有,但不是以基本角色出现。您将发现的是类,具有继承和客户端关系;集群,类的灵活分组;以及对象,即类的运行时实例。书中描述了原创且相当明智的图形和文本表示法,适用于车库地板、白板或 CASE 工具。本书大致花费相同的时间在表示法、过程和案例研究上。几个附录提供了浓缩的信息。一个不错的词汇表和一个优秀的参考书目为这本书锦上添花。

无缝面向对象软件架构是第一本广泛提供的关于 BON 的完整讨论。对于面向对象软件开发问题的新鲜视角,即使您对另一种方法感到满意,本书也值得一读。如果不是,请考虑这一本。本书通俗易懂;它没有陷入细枝末节,但涵盖了大量材料。请注意:这些作者一开始就步入正轨。如果您还不熟悉面向对象概念,请从更入门的书籍开始。

在 BON 的主要思想中,我将简要讨论两个。首先,缩小设计和实现之间的概念差距。其次,提供从大量低级细节中选择性抽象的方法。这两个想法很好地结合在一起。由此产生的模型是浑然一体的,即使它的视图可能跨越许多不同的抽象级别。因此使用了“无缝”。仔细查看模型的一小部分,在其余部分最抽象视图的上下文中,它完美地融入其中。

设计和实现之间的概念差距通过消除图片中困难、笨拙或不可逆的转换来缩小。数据流图、状态转换模型、实体关系图等等,虽然被认为对专门问题有用,但在这里被视为通用方法的基础而被驳回。相反,努力探索类、对象、继承、多态性和软件合同在系统更高级别表示中的应用。

BON 模型中细节级别之间易于转换,以及软件合同赋予类接口描述的丰富语义内容,促进了抽象。该合同是类接口的一部分,阐明了类的需求和义务,独立于程序代码,程序代码通常在首次描述接口时不存在。合同的这种使用在设计中提供了真正的实质内容,这是气泡和箭头无法做到的。它以一种在更抽象的气泡和箭头的上下文中可以理解的方式做到这一点。缩小以获得视角。放大以获得细节。而且细节总是与更大的图景相符。否则就不相符,这会告诉您细节或图景必须更改!最好在系统即将实现之前尽早发现这一点,并且更改变得更加昂贵。一个好的设计方法应该帮助您找到这类事情。

重点始终是设计连贯、经过深思熟虑的类,这些类体现了您对某些概念或想法的了解。这些为软件重用奠定了基础。在短期内,在其发起项目的范围内,它们可能会被多次连接在一起,因为项目的定义会发生变化,使用相对短暂的“粘合”类,这些类赋予特定系统其形状和细节。因此,重用从家里开始,系统不受过早僵化的定义限制,在许多情况下,过早僵化的定义是系统最不稳定的方面:其外部接口。

连贯的可重用类的概念与传统的 Unix “小而精的工具”理念有些相似,在这种理念中,做好一件事的程序可以以意想不到的方式组合起来,以执行编写工具时未曾考虑的工作。然而,面向对象框架的灵活性要大得多。关键在于拥有重点突出的工具:在 Unix 案例中,像 lsfind 这样的二进制文件;对于面向对象编程,像 LINEAR_ITERATORBINARY_TREE 这样的类。或者可能是 PATIENT_ACCOUNTSTEPPER_MOTOR

发明此类类并将它们与预先存在的类组合以形成工作系统是一个增量过程,需要多次从高级设计到实现的来回往复。与许多其他方法一样,您从高层开始,对设计进行粗略的裁剪,然后立即开始实现。选择选定的子系统,通常不是最简单的子系统。这为设计提供了现实检验。然后,回到高层,根据您学到的知识进行修改,返回实现,依此类推。实现为设计投射了冷静清晰的日光,设计指导实现。

您不时会进行系统用例场景的支路旅行。这些不指导系统的组织,而是测试不断演进的设计。典型的情况是:这里有一些合理的事情要做;这组类是否支持合理的行为?有时不支持,因此您返回并找出哪些额外的有用想法可以包装在类中。用例场景伴随着对象场景,展示对象为完成用例场景而进行的交互。使用了一种新颖的图形表示法,该表示法允许轻松描绘比通常在其他地方使用的传统阶梯或格子状交互图更多的对象之间的交互。

本书的中间部分,第 6 章到第 8 章,讨论了 BON 下的系统开发过程。一些读者可能想从这里开始阅读,因为本书的这一部分更多地谈论了该方法的“如何”和“为什么”。完成了九项标准任务,不一定按顺序进行,每项任务都由九项标准活动的某种组合完成。任务是第 7 章的主题,包括

  1. 划定系统边界

  2. 列出候选类

  3. 选择类并分组到集群中

  4. 进一步定义类

  5. 草绘系统行为

  6. 定义公共功能

  7. 改进系统

  8. 概括

  9. 完成和审查系统

活动是第 8 章的主题,包括

  1. 查找类

  2. 分类

  3. 聚类

  4. 定义类功能

  5. 选择和描述对象场景

  6. 制定合同条件

  7. 评估重用

  8. 索引和文档化

  9. 演进系统架构

每项任务和活动都进行了详细讨论。这些作者不仅仅向您倾倒一种表示法,然后让您漂泊不定;他们花了一些心思来描述您可能如何进行。Waldán 和 Nerson 再三强调,令人满意的性能不受现成的答案的约束,而是需要才能、经验和洞察力,但他们仍然设法为我提供了关于每项任务和活动的良好建议。在文献中,过于简单的解决方案比比皆是(“对物理对象建模”、“不要使用多重继承”、“将接口、数据和过程封装在单独的类中”),这些章节中经过深思熟虑的建议值得欢迎。

我将在几个月后向您带来进一步的报告。借助 Linux 版本的 EiffelCase(来自加利福尼亚州圣巴巴拉市 Interactive Software Engineering 的 BON 工具),我将尝试使用本书中的建议进行一个小型的免费软件项目。我的成功或失败,以及遇到的喜悦或挫折,将成为我的下一篇文章的主题。

Dan Wilder (dan@gasboy.com) 在华盛顿州西雅图市编写程序和散文。白天是构建大师,晚上是 Linux 狂热者和新闻组冲浪者,他还抽出时间到户外活动,与他的两个可爱孩子玩耍,以及摘苹果。

加载 Disqus 评论