介绍
本文是关于面向对象思维过程系列文章的第一部分,选择这个主题作为书籍或专栏的标题是一个重大 的决定,做出这个选择并不简单,因为已经有很多面向对象主题的好书和文章了,包括面向对象分析、面 向对象设计、面向对象编程,设计模式、面向对象的数据库、统一建模语言(UML)、不同的面向对象编 程语言以及其它许多面向对象的主题。
但读完这些书之后,许多人忘记了这些主题都是建立在一个基础之上的:你是如何思考面向对象方法 的。不幸的是,许多软件专业人员花费了大量时间在这些书中,但却没有努力真正理解包含在它们之中的 思想。
我主张学习面向对象思想时不是靠学习一个特定的开发方法或一套工具来完成的,面向对象做事的方 法是一个简化表达的思维方式,本专栏所有文章都是与面向对象思维过程有关的。
从面向对象思维过程中将开发方法和工具分开不是一件容易的事情,许多人都是通过一个开发方法或 一个开发工具引入面向对象的思想的,许多C程序员都是通过向C++移植才接触面向对象的思想的,还有一 些软件专业人员是使用UML表达对象模型时才接触到面向对象思想的。
理解学习面向对象思想和使用支持范例的方法和工具之间的重要不同之处是很重要的,在这篇文章中 ,Craig Larman表述了“UML是什么,不是什么”。
不幸的是,按照软件工程和UML图形表示语言的背景,学习阅读和编写UML标记的技巧看起来就和面向 对象分析和面向对象设计差不多,当然,这并不是面向对象,后者比前者重要得多,因此,我建议学习面 向对象分析和设计的技巧,它比UML标记或使用一个用例工具重要多了。
虽然学习一门建模语言是很重要的一步,但首先学习面向对象技巧更重要,在没有面向对象思想之前 学习UML就和没有一点电气知识就去学习如何阅读一个电气图有点类似。
相同的问题发生在选择编程语言,正如前面谈到的,许多C程序员是通过移植C++而接触到面向对象思 想的,通常,C++开发人员只是使用C++编译器的C程序员。
即使面向对象语言如Java、C# .NET和Visual Basic .NET已经变得非常流行,但这个问题仍然存在, 有许多Visual Basic程序员现在必须跳跃到Visual Basic .NET,同样,也有许多C++程序员可能被迫执行 面向对象的实践,被要求转移到Java或C#,除了思考面向对象的方法外他们没有别的选择。
早期的Visual Basic不是面向对象的,C++也是向后兼容C,正是因为如此,就出现了大量的使用C++编 译器,但同时只使用了C语法的情况,放弃了所有C++面向对象的特性,更糟糕的是,一个使用了足够多面 向对象特性的程序使得程序难以理解,这就是对面向对象思想的滥用。因此,当你在使用面向对象的开发 方式时,首先学习面向对象思想的基础显得非常重要,不要受到编程语言(如C++,C#或Java)或建模语 言(如UML)的影响,多花点时间学习面向对象的思维过程。
当我在1980年末上我的第一堂Smalltalk课时,老师说这堂课是一堂全新的面向对象范例的思维方法, 它接着说即使我们大多数人都是非常优秀的程序员,但我们中肯定有大约10%到20%的人永远都不会掌握面 向对象的思维方式,如果这种情况确实属实,很有可能是那部分人从来都没有花时间研究范例和学习面向 对象思想。
本专栏的范围
现在应该非常清楚了,在一头扎进编程语言和建模语言之前,先成为面向对象思维过程的忠实信徒吧 ,专栏内容将会包括Java、C#和VB .NET代码示例,同样也会有UML图表,但真正理解面向对象思想时,你 不需要知道Java、C#或UML。我已经说过,首先应学习思想,为什么要那么多代码或UML图表呢?首先,它 们都是描述面向对象思想的好工具,第二,它们对面向对象过程都非常重要,关键是不要集中在代码或 UML,而是使用它们来理解这个思想。
并不是这个专栏就不教代码语法或UML了,我希望通过这个专栏让你对其它面向对象主题引起兴趣,如 面向对象分析、面向对象设计和面向对象编程。