谈到UML,第一个绕不开的话题就是面向对象。面向对象,现在在我们软件行业,是如此洋气的一个词。在我们看来面向过程和面向对象是两种软件技术,面向对象就是继承,封装,多态,复用等一些特性不同于面向过程的结构化程序设计,DFD图等。事实上,现在看来,以上所有的技术特性都是我们用来描述这个世界时所采用的工具,只不过手段不同罢了。
这几天一直在看一本书《大象-Thinking_in_UML》很好的一本书,作者在书中开头写出了UML创始人之一的GradyBooch讲过的一段流传甚广的一段话,大致意思就是:面向对象编程的目标从来就不是复用,相反,对象提供了一种处理复杂性问题的方式。这个问题可以追溯到亚里士多德;在面向对象兴起之前,编程以过程为中心,例如:结构化设计方法,然而,现在系统已经达到了超越其处理能力的发展极点,有了对象,我们能够通过提升抽象级别来构建更大的,更复杂的系统。所以,大师认为以上这才是面向对象编程运动的真正胜利。所以现在看来,对于面向对象思想的理解并不复杂,面向对象方法只是用来帮助我们构造更为复杂的系统来解释越来越复杂的世界的。在掌握具体技术之前,更重要的是掌握解决问题所采用的方法和分析过程。也就是我们常提的“思想上移-行动下移”。
*下面首先我们先了解一下面向过程与面向对象之间到底有什么本质不同,在解决问题时有各有什么困难。
所以大家看到了,在面向对象的设计里,抽象是其精髓所在,却也是其困难所在。接下来我们看看在UML中怎么解决这些困难的。
对于UML,就是一种面向对象的建模语言,通过上图的“功能”部分,我们找到了一种验证对象世界是否正确反映了现实世界的方法。我们将在下一篇具体介绍UML是如何实现其功能,从现实世界到达设计模式的。