第二章 使用图(Diagrams)
为什么用模型?
为什么工程师要建造模型(models)?为什么航天工程师要建造航天器的模型?为什么
桥梁工程师要建造桥的模型?提供这些模型的目的是什么?
这些工程师建造模型来查明他们的设计是否可以正常工作。航天工程师建造好了航天器
的模型,然后把他们放入风洞中了解这些航天器是否可以飞行。桥梁工程师建造桥的模型来
了解桥能否接立起来。建筑工程师建造建筑的模型了解客户是否喜欢这种建筑模样。通过建
立模型来验证事物是否可工作。
模型意味着它们必须是可被检验的。为了检验它,如果一个模型没有一个可用的检验标
准,它是相当糟糕的。如果你不能评估一个模型,这个模型是没有价值的。
为什么航天工程师不马上建造一个飞机然后去试飞呢?为什么桥梁工程师不立即建造
一座桥然后看它是否可以接立起来呢?因为航天器和桥的造价比模型昂贵多了。当模型比我
们实际建造的东西划算多了的时候,我们用模型来研究设计。
为什么给软件建模?
一个UML 图可被检验吗?它比创建、检验这个软件更划算吗?对于这两个问题,这个
答案是无法像航天工程师和桥梁工程师那样清楚地了解境况。没有一个检验一个UML 图的
固定标准。我们能够观察它、评估它,然后应用原则和模式于它,但是最后的评估仍然是相
当主观的。画UML 图比编写软件花费更少,但不是重要的因素。当然,改变一个UML 图
比修改源代码容易多了,用UML 是不是有意义呢?
如果使用UML 没有什么意义的话,我就不会写这本书了。不过,以上举例说明UML
的易用是误用了。当我们需要通过检验确定某些东西的时候,或是使用UML 来检验比编码
来检验更划算的时候,我们就使用UML。
举一个例子,我有一个特定设计的主意,我需要通过我的团队中的开发人员来考虑它是
不是一个好主意去检验,因此,我在白板上画出了一个UML 图,然后询问队友们的反馈。
我们为什么应该在编码前构造一个全面的设计?
桥梁工程师、航天工程师和建筑工程师都画设计图,为什么呢?因为画一个房子的设计
图一个人就可以了,而建造它需要五个或更多人。区区十来个航天工程师能画一个飞机的设
计图,而需要上千人去建造它。绘制设计图不需挖掘地基、浇注混凝土和悬挂窗户。简而言
之,预先计划一个建筑物远比没有计划的情况下试图建筑它更划算。丢弃一张有错误的设计
图花不了多少钱,而拆卸一栋失败的建筑物却要花不少的钱。
另外,软件中的裁剪也不是那样彻底,比编写代码更划算的编制UML 图的裁剪也不是
特别地彻底。实际上,许多项目团队在UML 图上花费了比编写代码本身更多的时间。弃用
一个图比弃用代码是不是更划算,这也不一定。因此,在编写代码前去创建一个全面的UML
设计作为一个有价值、有效的选项,也是不一定的。
为什么用模型?
为什么工程师要建造模型(models)?为什么航天工程师要建造航天器的模型?为什么
桥梁工程师要建造桥的模型?提供这些模型的目的是什么?
这些工程师建造模型来查明他们的设计是否可以正常工作。航天工程师建造好了航天器
的模型,然后把他们放入风洞中了解这些航天器是否可以飞行。桥梁工程师建造桥的模型来
了解桥能否接立起来。建筑工程师建造建筑的模型了解客户是否喜欢这种建筑模样。通过建
立模型来验证事物是否可工作。
模型意味着它们必须是可被检验的。为了检验它,如果一个模型没有一个可用的检验标
准,它是相当糟糕的。如果你不能评估一个模型,这个模型是没有价值的。
为什么航天工程师不马上建造一个飞机然后去试飞呢?为什么桥梁工程师不立即建造
一座桥然后看它是否可以接立起来呢?因为航天器和桥的造价比模型昂贵多了。当模型比我
们实际建造的东西划算多了的时候,我们用模型来研究设计。
为什么给软件建模?
一个UML 图可被检验吗?它比创建、检验这个软件更划算吗?对于这两个问题,这个
答案是无法像航天工程师和桥梁工程师那样清楚地了解境况。没有一个检验一个UML 图的
固定标准。我们能够观察它、评估它,然后应用原则和模式于它,但是最后的评估仍然是相
当主观的。画UML 图比编写软件花费更少,但不是重要的因素。当然,改变一个UML 图
比修改源代码容易多了,用UML 是不是有意义呢?
如果使用UML 没有什么意义的话,我就不会写这本书了。不过,以上举例说明UML
的易用是误用了。当我们需要通过检验确定某些东西的时候,或是使用UML 来检验比编码
来检验更划算的时候,我们就使用UML。
举一个例子,我有一个特定设计的主意,我需要通过我的团队中的开发人员来考虑它是
不是一个好主意去检验,因此,我在白板上画出了一个UML 图,然后询问队友们的反馈。
我们为什么应该在编码前构造一个全面的设计?
桥梁工程师、航天工程师和建筑工程师都画设计图,为什么呢?因为画一个房子的设计
图一个人就可以了,而建造它需要五个或更多人。区区十来个航天工程师能画一个飞机的设
计图,而需要上千人去建造它。绘制设计图不需挖掘地基、浇注混凝土和悬挂窗户。简而言
之,预先计划一个建筑物远比没有计划的情况下试图建筑它更划算。丢弃一张有错误的设计
图花不了多少钱,而拆卸一栋失败的建筑物却要花不少的钱。
另外,软件中的裁剪也不是那样彻底,比编写代码更划算的编制UML 图的裁剪也不是
特别地彻底。实际上,许多项目团队在UML 图上花费了比编写代码本身更多的时间。弃用
一个图比弃用代码是不是更划算,这也不一定。因此,在编写代码前去创建一个全面的UML
设计作为一个有价值、有效的选项,也是不一定的。