OO 设计过程(一):入门

发布时间: 2007-05-21 09:43    作者: 未知    来源: 未知    浏览:    评论

          OO 设计过程(一):入门---如何设定优先级
-------------------------------------------------------
前言:本文的原作者,Allen Holub
撰稿编辑,JavaWorld
2000 年 7 月
-------------------------------------------------------
<注释>有的地方省略了我认为无用的东西。
--------------------------------------------------------
   我打算让您实际操作,以亲身体验面向对象 (OO) 的设计和开发过程。与其说本专栏是一个活动,不如说

它是一个旅程,因为需要几个月才能完成整个过程。我们将从需求搜集入手,从分析到设计,然后完成设计

的Java 实现。到结束时,您将经历开发 OO 程序的全过程,真正地从开始到结束。我将花很大的篇幅讨论基

本理论,但主要重点仍将集中在如何应用该理论的实际示例上。
   下个月我们将正式开始,在此之前,我有一些忠告、意见和评论,这些意见将告诉您我对设计主题的个人

观点和看法。

一:OO 并非关于结构
      首先,就其核心而言,面向对象与派生、类层次结构、UML、Java 技术等毫无关系。这些是 OO 设计

人员用来构成分析、设计和实现的工具,但它们并不是使程序面向对象的主要部分。当然,随着过程的展开

,我将使用面向对象的所有这些结构性部件,但如果您将实现结构与面向对象等同起来,那么前几篇专栏文

章可能特别难以理解。面向对象的关键概念是建模,所以在动手之前,必须决定建立什么模型。Adele

Goldberg(在 Succeeding with Objects 中,请参阅参考资料)叙述了一位犹太教教士在新年依始的宗教

集会上讲述的故事:

      一位教登上一列火车,由于他经常乘坐这辆车,因此列车长认识他。教士伸手到口袋中掏车票。但没

有找到,他开始翻他的行李。列车长阻止了他:“教士,我知道您肯定有车票。现在别急着找。等找到后再

向我出示。”但教士仍在找那张车票。当列车长再次见到他时,教士说:“你不明白。我知道你相信我有车

票,但 -- 我要去哪里呢?
      有太多项目失败就是因为它们没有明确的目标就开始了。OO 过程试图通过首先解决这个问题来应付这

种困境;需要几篇专栏文章才能足以细致地做到那一步,以便继续进行分析和设计阶段。即,在可以分析之

前,要有东西可以分析。

二:随意定制
    下一步,描述的过程是我个人使用的。我并不打算使这些文章成为权威。我的工作方法类似于 Booch、

Rumbaugh 和 Jacobsen 的 RUP(Rational Unified Process,请参阅参考资料),但我并非有意为之。事

情就是那样解决的。我的工作方法还类似于 Kent Beck 的所谓 Extreme Programming(XP,请参阅参考资

料),但这只是一种巧合。我希望您能够根据自己的需要定制我所用的过程,以使之更可工作。考虑到文学

作品十分缺乏任何过程的实践讨论,因此看起来对任何过程的实践讨论(甚至个人过程的讨论)都将十分有

益。请不要费时考虑我是“对”还是错,只要记住我所做的只适用我个人,并且为使之更好地为您工作而变

更我所做的方式完全没有错。

三:工具或工具的缺乏
    有关 OO 设计还要指出一点。有人曾告诉我说,他无法进行 OO 设计,因为他支付不起:Rose 每客户

要 2500 美元,而且显然,没有 Rose 就无法设计。这里所讲的 "Rose" 是 Rational Software 所售的一

种 OO CASE(计算机辅助软件工程)工具。(我可能会在以后的专栏中详述 OO-CASE)。撇开 Rose 既不是

最划算、也不是功能最强大,更不是现有工具中最易使用的事实不说,我常常只用铅笔和纸、而不用任何高

科技工具就能有效工作 - 根本不用计算机。

    正如我们要在即将出现的专栏中所见,OO 过程实际上是一种语意分析形式。它与正式的语言学、而不是

统的过程设计技术有共同之处。我发现,计算机常常阻碍这种分析。您在工具上花的时间比实际完成工作

所需的时间还要多。更糟的是,很多这些工具(包括 Rose)都有令人讨厌而又苛刻的许可证管理器,它使您

无法在没有通过网络与许可证管理器连接的便携式电脑上运行这些工具。当我使用计算机时,我通常使用一

个绘图程序 (Visio),而不是 CASE 工具。(这并不是说,我认为 Visio 是用于该目的的极好工具。只不

过我恰巧有一份而已。我使用自己的模板 - 请参阅参考资料 -- 而不是内置 UML 支持。)

  我要说明的观点是设计与工具无关。设计是使您明确对复杂主题的自主想法,它是一种确保在开始编码之

前尽可能全面考虑问题的方法,并且是与其它程序员就编码进行交流的方法。

   由于在这里交流是真正的核心部分,任何对交流没有帮助的工具实际上都毫无价值。如果您单独坐在办公

室内,面对基于计算机的 CASE 工具,那么您就不是在交流。

    选择 CASE 工具无关紧要。我一般不使用任何工具,即使它们对较大的项目会有所帮助。其缺点是它们

都会生成极差的代码,所以我不使用这些工具的代码生成或“往返工程”特性。无论如何,往返工程的观念

--创建设计,生成代码,修改代码,然后将其逆向工程到“设计”,这是一种根本性错误的观念。设计本身

应该是单向过程。先设计,然后根据设计实现。修改设计,然后实现修改过的设计。大多数这些工具无论如

何创建出的设计都是不正确的,因为它们不能够仅仅通过查看代码就能逆向工程程序的动态行为。

对于我们的目的,相当好的绘图程序和字处理器就已足够。

四:设计环境和工具
  设计始终是一种团体行为。最起码,需要程序员、测试人员、用户(或者完全了解问题领域的人)、写作

很棒的人以及 UI 设计人员。您最好有书记方面的人员:能够记录和纂写,以及将手写的草图输入到绘图程

序等等。您也可以不需要这些,但设计进度会减慢,因为小组成员不能够集中精力做他们的本职工作。

   所有成员必须一起才能有效地工作,而且他们应该始终在一起。设计是专职活动,如果希望按时间表完成

,就应该不要被其他事情打扰。(虚拟合作,可能的话使用白板软件或类似的。如果需要有效地沟通,要有

视频和音频输入,才能使您看到和听到其他人员。)

    可以有的最好设计工具之一是一间专为该用途设计的房间。我的理想工作间是一间令我心情愉快的房间

。它有许多窗户和光线。墙上有可以挂白板的木板。(您可以买 4x8 大小,类似于 Home Depot 用的三聚

氰胺片,如果您愿意可以将它们安在墙上。)不要会议室 -- 扔掉会议桌和令人不舒适的椅子(我想,这样

使会议尽可能短),换上一只舒适的沙发和几只扶椅。您需要装满食物的冰箱和需要时可以移动的小桌子。

使用的主要设计工具是:白板笔和板擦,还有可以连到联网机器的 LCD 投影仪,所有这些可以使小组成员共

同书写文档。用高分辨率照相机将图像从白板传送到计算机。最理想的是,将设计室和如 Beck 在其 XP 一

书中所述风格的工作室组合起来 - 增加几个工作站群集和一些人们独处所需的私人空间。

   通常,办公室里没有这样的空间,因此您可能得自己设计。取出螺丝刀,拆开小房间,组合成一个大房间

。如果设备人员不喜欢这样,那么就强硬一些。对公司的成功更为重要的是:生产高质量软件,或支持“正

确”办公室应该是什么样子的陈旧观念。

五:设计和体系结构
   Microsoft 所犯的更可恶罪行之一是将动词 "to architect" 引入到英语。设计师设计房屋,但他们不

“建筑”。我提出这个词语误用的原因在于,这种语言的滥用人为地暗示:房屋设计师和计算机程序设计师

从事完全不同的活动。我坚信,无论设计房屋还是设计软件,设计就是设计。例如,Christopher

Alexander --房屋设计师 -- 设想了设计模式的概念(请参阅参考资料中的 A Pattern Language: Towns,

Buildings, Construction),而设计模式是当代软件设计的基础。

   如果您对一个承包商说:“希望您为我建造一所房屋,它的造价有多少,您是否能完成?”。那他一定以

为您疯了。然而,程序员肯定总在回答同样空泛的问题,而人们也在问:为什么软件很少按时并在预算内交

付。此外,没有承包商愿意在没有某种计划那样复杂的情况下开工。然而,承包商自己设计的计划通常不会

产生如设计师设计的那样好的房屋。承包商的设计很自然地会简化建造和降低成本,这不一定是您要居住的

房屋的最佳选择。类似地,程序员通常不是最好的程序设计人员,因为他们的侧重点与最终用户不同。这并

不是说,一名优秀的设计师不知道如何建造他所设计的房屋,- 我确信最好的软件设计师也是最好的程序员

- 而是说,设计和建造是两种不同的活动,不必由同一人来承担。

  设计房屋的第一步是与客户协商,并构想如何使用该房屋。设计师感兴趣的是客户的美学,当然,他们还

会问很多其它问题。有何爱好?(需要为这些爱好专门准备空间吗?)有宠物吗?要在厨房中准备喂猫的位

置吗?)有孩子吗?(他们需要玩耍房间吗?)要几个玩耍房间?(玩耍房间要多大?)所有这些都影响房

屋的设计。如果设计师对将在房间中发生的活动不熟悉,他们还必须学习这种活动,以达到令人满意的设计

。比如,如果孩子养宠物鱼,那么,设计师还要学习池塘技术 - 不必达到宠物鱼的水准(用设计行话说,“

领域专家”),但至少要达到具有相当知识的普通人水平。请注意,重点是将如何使用房屋。建造考虑,虽

然总在设计师的考虑之内并影响设计,但不是主要的。

   下一步是勾画大量房屋、房间、地面等。这时会有很多更改 -- 改变房间位置和外形、添加和除去固定设

备和墙壁。只有当草图正确反映出客户需求时才可以说定制出一组“最终”计划,但即使这些计划也并非真

正最终的计划。他们被提交给承包商和工程师,所有这些人都会请求更改,所有这些更改(如果可见,或至

少影响成本或进度)都要由客户同意。只有在这时才开始建造。

    计划中的细节级别也有关系。大多数设计工作在开始建造房屋时才开始进行。设计师指出墙壁伸展方向

,但由承包商构想细节 -- 壁骨放置、门窗的加框等。设计师指出电器开关的位置,而电工则构想如何布线

和电气出口的位置。计划指出排水沟和排水管固定装置,而管道工则构想如何布置管道和连接到总水管和下

水道。这不是说,不设计这些建筑部分 ,而是说,这部分设计由专门人员建造完成。设计工作常常是非正式

的 -随工作进度现场进行。而且,大部分设计产物,如上面有绘图的纸片或墙壁内壁骨的草图,都被丢弃,

因为在建好之后,它们不再有用。当技术人员需要做的事影响其他技术人员或整体建筑设计时,还要重新由

设计师修改主计划(在征询客户同意之后)。

   如果有简单和复杂的方法都可以解决同一问题,只要不影响结构的整体性和美感,则总是选用简单的方法

。但是,有时只有复杂方法可以解决问题。值得注意的是,在建造开始之前所需的细节程度也决定了结构的

复杂度。可以在一张餐巾纸上设计一间狗舍。而一间房屋则需要更多细节。事实上,一幢摩天大楼里的每一

根管道和电缆管都要设计(尽管有时不设计墙的位置!)。
六:结束语:以后将继续了解:下面内容
    了解问题领域。
    与用户交流,并确定他们的需求和目标。
    开发问题说明书。
    设计用户界面。
    开发用例。
    拟出草案静态模型。
    在细化静态模型时开发动态模型。
    实现。

TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多