UML软件工程组织

如何走好面向对象开发实践之路?
作者:不详 来源:blog

作为一位 IT 人员,您常阅读什么样的专业书籍呢?是喜欢偏向程序语言和系统的书还是目前流行的软件工程书籍?是喜欢讨论程序技巧的书籍还是设计架构的书呢?说实在的这些笔者都喜欢,尤其是工作需要时一定得阅读所有必要的信息,不过一个有趣的问题是在阅读每一本技术书籍时您会有什么样的感觉?

当笔者阅读有关偏向程序语言和系统的书籍时,例如 Delphi/C#/Java/.NET Framework 等,脑中却常常在想如何和软件工程以及设计架构结合在一起,因为这些书籍讨论的主要是实现技术,但是许多专家不是告诉我们使用专业的开发流程和设计架构的是影响软件开发更重要因素吗?

当笔者阅读有关软件工程方面的书籍时,也常常觉得不同的软件工程似乎适合不同风格的 IT 人员和组织使用,有的 IT 人员非常严谨,他们喜欢使用拥有正式、一定流程的软件工程来发展软件。而有的 IT 人员则非常喜欢自由风格,开发软件也非常具有弹性,他们喜欢极为灵活的软件工程,然而有更多的 IT 人员介于这两者之间。不同的 IT 人员使用不同的程序语言,因为不同的 IT 人员有着不同的应用,或者对于程序语言有着不同的喜好,这是很自然的事情。软件工程也应该是一样的,不同的组织适用不同的软件工程或是喜好不同的软件工程。例如 RUP 对于笔者个人而言感觉太沉重,而完全使用 XP 又让笔者觉得有些单薄,因为笔者还是喜欢进行先期的基础设计。当笔者阅读系统架构的书籍时经常看到许多作者和专业人员询问:要“多少的设计才足够?”。就笔者在工作的经验来说,过多的设计的确会造成失败的结果,请注意笔者在这里说的失败是指软件无法在限制的时程中完成。

最后一个笔者最常思考的问题是我们应该如何结合不同的程序语言、系统架构、软件工程等等来开发软件?例如当笔者阅读 XP 的书籍时觉得很棒,因此接下来的软件开发就自然受到 XP 的影响,但是笔者以前使用、喜欢和接受的 OOA/OOD 呢? TDD(Test-Driven Development) 很酷,改变了笔者的想法、视野以及开发软件的方法,但是 TDD 一定只能和 XP 使用吗?不能和设计导向的开发方式一起使用吗?这似乎也不尽然。

对于许多使用 Delphi 的开发人员来说,可能习惯了使用 RAD 开发模式,因此许多 Delphi 开发人员并不熟悉如何使用面向对象的方式来开发软件。使用 RAD 并没有问题, RAD 如果加上良好的架构仍然可以开发出很棒的软件, RAD 加上 TDD 可以产生快速而质量优秀的软件,然而不可否认的是,现在我们身处的开发环境几乎都是面向对象的框架 (Framework) 、程序语言和集成开发环境了,因此开始试着结合 RAD 、面向对象、面向对象分析 / 面向对象设计、 TDD 等应该能够让 Delphi 的开发人员学习到更多的观念和技术,不但可以提升生产力、增加软件的质量,也可以了解 C++/Java 那边的开发人员如何开发软件。结合 RAD 和面向对象能够提供更强大的力量,至少笔者是如此体会的。

在笔者阅读许多的 IT 书籍时,最喜欢看的是结合技术 / 理论从头设计软件的一本 IT 书籍,这个场景软件无须很大,只须完整地讨论从分析 / 设计到如何实现出来即可。这个发展过程应该说明设计是如何出的,也就是说,类图 (Class Diagram) 之中的类、类架构、类中的 PME(Property , Method 和 Event) 是如何找出来的,也要说明如何根据设计架构实现出软件,在实现过程中会发生什么事?实现如何结合设计等细节。可惜的是这样的书很少,大多的书不是偏重设计讨论,不然就是用一堆程序代码展示程序代码技巧而已。笔者相信在许多 OOA/OOD 中漂漂亮亮,设计良好的类图或是设计架构绝不是那些作者第一次就能画 / 设计出来的,一定经过某些的刺激 / 化学作用才出现的,类中的 PME 也是一样,问题是这些刺激 / 化学作用是什么?

还是言归正传,那么本书的主要讨论内容是什么呢?很简单,本书将从一个笔者以前使用 RAD 方式开发的小工具为起点,讨论如何使用 OOA/OOD 并且结合 XP/TDD(Test-Driven Development) 来实现这个工具。在整个的设计和实现流程中读者将会实际地看到如何使用面向对象技术以及敏捷开发方式来完成软件开发的工作。读者将会学习到如何把用户需求借助 OOA/OOD 转换为观念上的设计,当然这会产生用户案例 (Use Case) 、类图、循序图 (Sequence Diagram) 甚至是活动图 (Activity Diagram) ,不过最重要的是借助书中的讨论、观察和设计,读者可以真正看到类架构是如何形成的。在形成了初步的设计之后本书会结合敏捷开发和 TDD 来快速进入实现阶段,而在使用敏捷开发和 TDD 的过程中,我们又会发现这个步骤可以更进一步地让我们了解在 OOA/OOD 阶段的盲点并且让我们能够再精致化原先的设计。笔者发现这样的结合非常有效果,不但设计架构能够真正反映实现的程序代码,而且几乎所有的实现程序代码又都能够被 TDD 所验证,这样的结果使开发人员对于进行的设计和实现的程序代码都拥有高度的信心,这是笔者在没有这样做之前从来没有的感觉 ( 如果读者真正开发过大型的项目就可以了解笔者说的,当项目实现的程序代码愈来愈多时,到了最后就会愈来愈心虚 。

因此,本书主要是给习惯使用 RAD 方式而想学习如何使用 OOA/OOD/XP/TDD 开发软件的 Delphi 开发人员阅读的,如果您已经是 OOA/OOD 的专家,那么您就不需要阅读本书。本书除了可以让 Delphi 开发人员学习如何使用 OOA/OOD/XP/TDD 之外,在本书讨论的过程中读者也可以看到设计样例 (Design Pattern) 如何自然地出现在我们的设计中并且实现在程序代码中,本书另外一个附加的功能则是读者也可以在本书中学习到许多 .NET 程序设计的技巧。

在十年前笔者使用 C/C++ 学习 OOA/OOD 时也曾经迷惘过,不知道如何设计面向对象应用程序,经过这些年工作的历练,笔者认为学习 OOA/OOD 也和学习程序语言和程序设计一样,只要具备扎实基础知识再加上多看、多听、多学、多练就可以具备一定的技巧和经验,之后就像使用 Delphi 一样会发现这些技能都是很自然的。开放的学习之心、积极的学习态度和追求更好的欲望可以让开发人员成为 IT 领域的顶尖人才,笔者在此也鼓励 Delphi 的开发人员能够顺利地从 RAD 进入面向对象的世界,进而结合 RAD/ 面向对象让 Delphi 能够发挥比其它程序语言 / 工具更为强大的开发能力。

利瓦伊 7/2004 于台北新店

最先 在脑中浮现在您脑中的东西问题可能是 : 『 “ 这本书到底在说些什么? ” 、 』 , “ 『 这本书对我有没有什么帮助? ” 』 , 以及 或者 “ 『 为什么要写这本书? ” 』 。如果您会这么想 , 代表那 您一定 是心中有主见的读者,也应该是适合阅读本书的读者。本书 《 『 面向对象 开发 实践之路 》 』 叙述的内容就在于讨论如何完完整整地的使用面向对象导向 技术以及测试驱动开发( ( Test-Driven Development,TDD 模式方式 ) 方法来开发一个完整而实际的软件。如果您想了解更多本书更多的发展背景,那么请再花 一 、 两 1,2 分钟的时间看看下面的内容 , 以便决定这本书是否适合您。

 缘由

当笔者在 10 年前第一次为 Delphi 撰写书籍时,最主要的目的是想把 Delphi介绍给当时的开发人员。随着 Delphi 不断的地发展, Delphi 其最著名的开发模式 —— : RAD ( ( 快速应用开发, Rapid Application Development )—— 也深植于大多数 Delphi 开发人员的思想之中 。 , 笔者在前几年的著作之中也比较偏向于讨论Delphi 的高级进阶功能及其和新奇技术的介绍 。然而随着面向对象导向技术逐渐普及于软件开发流程中,笔者心想 : 现在是到了为 Delphi 开发人员介绍如何使用 Delphi 真正强大的开发模式来开发软件的时候了 。因此 , 本书就 是要 , 那就是介绍如何使用 Delphi ,并 结合OOA/D 的开发模式 , 以及使用 Delphi 以 OOA/ OO D 开发模式再结合最新的软件开发技术 —— XP ( (极限编程, Extreme Programming ) / 与 TDD ( (测试驱动开发, Test-Driven Development )—— 来 撰写开发软件的 。

为什么现在是为向Delphi开发人员介绍 OOA/ OO D 与 / XP 、 / TDD 的 成熟 的 时机呢?原因很简单,那 就 是因为 Delphi 产品本身已经发展到了适当的时机 , 以及软件开发环境也开始强迫开发人员必须采用新的开发模式。这是怎么说呢?让我们看看下面发生的事情:

Delphi 开始在产品中加入 OOA/D 的功能,这代表 Delphi愈来愈适合在 Win32/.NET 下使用面向对象导向开发模式 技术来发展开发中/大/中型应用软件 。

Microsoft .NET本身即以面向对象导向为设计思想 , , .NET架框框架更是以接口 、 , 类别类和设计样例模式 为中心,因此 , 在 .NET 平台下的开发人员必须了解和掌握面向对象导向技术。这也是新的软件平台强迫开发人员行技术再升级的最好范例 。

在新的 Delphi 产品中加入了更多更新的软件工程技术,例如 重构( Refactoring ) 、 , TDD ( Test-Driven Development ,测试驱动开发) 、 , MDA ( Model-Driven Architect ure ,模型驱动 构架 ) 、 / DDA ( Design-Driven Architecture , 设计驱动构架 ) 等。 这样一来, 导致开发人员如果想彻底发挥 Delphi 强大 的 强大 功能 , 就必须学习和使用这些已经实践过证实为是有效的软件工程开发模式 。

就像数年前 Delphi 2 为开发人员介绍了主从客户端 / 服务器 架构 ( ( Client/Server ) 技术 、 , Delphi 3 开始引入了多层 ( ( Multi- T t ier ) 技术 一样 ,现在正是 Delphi 开发人员再次开始学习和采用新的思维与和新的开发模式的大好时机, 而这个想法也正是促使笔者撰写本书的火花。

许多开发人员认为 , 要使用 OOA/ OOD开发模式 , 就一定要使用 C++ 、 , Java 或是 C# 这样的编程语言 , 其实 这并不正确并非如此 。 , 因为 Delphi开发环境所用的 ( Object Pascal 语言( 在 Delphi 的 最新版本中已经改称为 Delphi 语言了) 就是一个纯粹的面向对象导向程序编程语言 。 , 和 C++ 、 , Java 或是 C# 比较起来 ,它 不但丝毫不逊色,而且 Delphi 仍然持续在面向对象导向方面还提供 了更新 、 , 更好的面向对象开发导向机制。然而 , Delphi 之所以会造成让许多人误认为 Delphi只能以使用 RAD 的方式开发软件 , 主要的原因就是因为当 Delphi 以 的 RAD 的方式进行开发时 , Delphi 确实太好用了 。 , 另外 , 一个主要的原因则是因为目前几乎没有 Delphi 的书籍来说明如何以 Delphi 结合使用面向对象导向技术来撰写开发软件也是一个原因 。

远早在 Delphi 8 面世之际 , 笔者就开始构思 、 , 准备并且撰写这本书 了 。 , 然而由于笔者本身工作的繁忙, 因此 一直无法完成这本书。但是在 Delphi 2005 进入 Beta 测试后,当笔者看到 Delphi 2005 其中 加入了更多的面向对象导向技术 , 又加入了 , Refactoring 重构 、 , TDD 以及和其他软工程相关的功能时,笔者心中就想, 知道 一定要完成这本书 , —— 因为改变的时机已经成熟了, Delphi 开发人员也应该像 Java 社 区群一样开始使用 面向对象导向技术 、 , Refactoring 重构 、 , 设计样例模式等软件工程技术来开发质量更好的软件。笔者希望本书就能像数年前笔者的 “实战 Delphi 5.x ” 实战 Delphi 5.x 系列书籍一样,引导 做为作为Delphi开发人员进入软件开发的新领域 , 成为大家的引航指南 。更重要的是 , 要 让大家意识到 , 更重要的是软件技术并 没有 无 语言 的 界线,学习这些软件技术和软件工程知识 对于每一个 Delphi 开发人员而言都是非常重要的。

本书主要的目的是在帮助使用 Delphi RAD 开发模式的读者正式进入 OOA/ OO D 以及 / XP 、 / TDD 的开发世界。这 个世界是一个庞大的宇宙世界 ,其中有无穷的知识和学习书籍 。 , 本书的目的并不是只和读者讨论 OOA/ OO D 的理论,本书最主要的目的是让读者学习和掌握如何实际的地运用 OOA/ OO D 来开发软件 。 , 因为在笔者本身 的 学习 与和工作的经验中发现到讨论 OOA/ OO D 理论的书籍多不胜数,但是实际讨论如何完整运用 OOA/ OO D 来开发软件的书籍却少之又少。因此笔者希望以一个实际的、 , 有步骤而又真实的方式和读者讨论如何以面向对象导向技术开发软件, 希望并引导读者进入实际的面向对象导向开发世界。

任何想要真正看到如何使用 OOA/ OO D 以及 / XP 和 / TDD 开发一个完整又实际的软件的读者 ;

熟悉Delph RAD 开发模式的开发人员,想要学习使用 Delphi 结合面向对象导向开发模式的读者 ;

想要在 .NET平台下学习开发软件的读者 ;

对学习开发软件有兴趣的读者 。

具备如下必需的知识:

面向对象编程导向程序语言的知识和经验,当然本书使用的面向对象导向程序语言是Delphi ( ( Object Pascal ) ;

面向对象导向基础的基础知识,例如接口 、 , 类别 类 、 , 多 形 态 、 , 封装和继承等等 ;

基本的 UML 知识 。

实际运用 OOA/ OO D 技术 来 开发软件的章节中都以讨论每这一章要解决的问题开始, 讨论研究如何从以问题入手来引导进行设计架构设计 , 又如何以 导设计 架构 设计 发展 形成 类别 类 架构 结构 , 。 进而 之后 将 以 类别 类 架构 结构 为基础 来 进入 讨论 类的 实作 实现 的阶段 , 而 而 实作 实现 阶段的成果又会回馈到 设计的 类别 类 架构 结构的设计之中 ,从而 形成 迭代式的开发模式。

在 实作 实现 阶段完成之后就会进入 TDD 测试阶段,以测试案例来验证 已 实作 实现 的程序代码 , 并 且 不断 地 的 累积测试案例,持续 地 累积软件开发的资源 。 , 而累积的测试案例又可以 做为 作为 其它章节回归测试的基础,前面章节的 实作 实现 成果又形成了稍后章节的开发基础,最后 , 每一章的 实作 实现 和测试案例都会 被 Check I n 到版本控制系统之中。这整个流程如下图所 签入( Check-in )到版本控制系统之中。

思考软件设计架构 ;

设计 类别 类 架构 结构 ,学习 面向 对象 导向 分析 与 / 面向 对象 导向 设计 ;

实作 实现 技巧和迭代式开发,学习 XP 程序设计 ;

使用 TDD 和 回归测试 ;

撰写高效率的程序代码。

 

版权所有:UML软件工程组织