为什么使用UML图计划代码的组织方式不合适?


9

因此,是的,图表有时可能不合适。什么时候不合适?当您创建没有代码的代码来验证它们时,然后打算遵循它们。绘制图表探索想法没有错。

敏捷软件开发:原理,模式和实践 -Robert C. Martin

他到底是什么意思?UML是否旨在帮助计划如何 “切入” 之前构造代码?如果您不遵循自己想到的图,使用它有什么意义?

上下文:在本章中,鲍伯叔叔为保龄球比赛的得分保持者制作了一个UML图。然后,他继续以测试驱动的方式开发程序,而无需查阅UML图。生成的程序与UML图完全不同,鲍勃叔叔得出了上面引用的结论。


4
Bob叔叔的观点是,测试驱动开发中出现的体系结构可能与UML图有根本的不同。
罗伯特·哈维

1
还阅读设计死了吗?马丁·福勒(Martin Fowler)对该主题与敏捷运动进行了平衡的讨论
Eliezer Steinbock

4
回应@RobertHarvey等人的不佳判断,投票赞成关闭一个重要且有用的问题,因此提出了这个问题。
大卫·阿诺

3
@DavidArno如果您对应该关闭或不应该关闭的内容有强烈的意见,我强烈建议您参与我们的meta网站上的讨论。目前在此发布信息的每个人(包括我在内)都可能属于“ @RobertHarvey等人”,除了少数SE员工外,我们一直担心还有另一种观点没有得到代表,但到目前为止,还没有人出现来代表它。
Ixrec 2015年

1
@Ixrec,除了检查一次我是否可以在答案中引用自己的开源库之外,我从未参与过元讨论(答案是可以的)。也许我应该听取您的建议,并更多地参与其中。谢谢你的建议。
David Arno

Answers:


19

为了正确解释这一点,我们需要简短的历史课程。在软件工程的早期,经常使用的比喻是盖房子。建筑师和结构工程师与客户讨论计划并提出设计方案。然后,建造者按照该设计来建造实际房屋。编写代码被视为等同于建造实际房屋。因此,在构建之前就已经意识到需要先期设计。创建了各种图形设计工具,其中UML是其中之一。

最初使用UML的想法是,人们将使用UML完全设计一个系统,然后将其移交给编码人员以将该设计转换为代码。实际上,这根本行不通,并导致多年的程序员被视为“实施者”,而不是“设计师”,项目迟到,设计必须在完成后必须不断更改等。

原因很简单。编码是设计。与房屋类似,代码是建筑师的图纸。编译器是构建器,他们接受这些设计并从中构建程序。然后,这种认识导致了敏捷技术,TDD等的诞生:帮助提高该代码设计质量的工具。

就像架构师可能会生成初步草图来帮助她和她的团队可视化整个设计一样,开发人员可能会使用UML或其他工具来可视化所需的设计。正如这些草图不是盲目遵循的一样,UML也不应盲目遵循。代码设计应从敏捷迭代和使用TDD演变而来。同样,就像建筑师可以构建房屋模型来帮助她和她的团队可视化图纸一样,UML可以用于帮助可视化代码结构。

正如Bob叔叔所说的,您不能验证UML,只能验证代码。因此,该代码是主要的设计文档,而UML(如果使用)仅是辅助文档。


7
今年早些时候,我把房子的一部分屋顶抬起了,这很有教育意义。建筑师实际上并没有画出最终产品的外观。他将艰苦的计算和结构设计交给了建筑工程师。然后,建造者必须将理论设计与房屋的实际情况相匹配(一旦关闭石膏板,发现横梁位于稍有不同的位置),因此设计工作在每个步骤中进行。
Jaydee 2015年

1
这是一个有用的答案,尽管如此,它却简化了某些方面。恕我直言,UML不能以“高级设计符号”很好地起作用的主要原因之一是恕我直言,他们的发明家过于顽固,无法添加数据流程图。我知道这是唯一适合顶层设计的表示法,它允许表达不同比例的组件和接口之间的抽象,并且还可以具有定义良好的代码映射。相反,UML包含了很多没人真正需要的废话。
布朗

3

我想并不是每个编程习惯(或设计或代码)都适合UML(我承认我不太了解-只读了几本书,但我从未使用过,我可能不喜欢它)。

UML 可能无法完全建模纯C代码(例如Linux内核的源代码)。

Ocaml代码(及其模块和函子)甚至C ++ 11代码(具有lambda和模板)可能都不适合UML。

MetaOcaml的多阶段编程可能不适合UML。

Prolog代码或Common Lisp代码可能不适合UML。

另请参阅答案和问题。

阅读Scott的《Programming Language Pragmatics》和Van Roy的《计算机编程概念,技术和模型》书籍,然后问问自己每个编程模型是否都适合UML。

另请参阅马丁·福勒(Martin Fowler)的《设计死了吗?博客。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.