UML如何有用?

可能重复:
UML是否实用?

我在大学做UML,我不明白为什么要这样做。 它看起来像是OO数据库的模型,但我想我可以在没有UML的情况下编写Java。

我想知道为什么在专业领域使用UML的技术原因; 为什么这很重要。 不只是学习它,因为教授这样说。

您可能能够很好地编写java,但UML与语言无关。 在将设计传达给同事时,您需要一种共同的“语言”。 我认为UML是最佳方式。

我现在正准备与同事讨论api设计,考虑到他提出的一些情况。 一些序列图明确地显示了我们如何提出满足他的需求。 他不需要成为java程序员来理解设计。

我们发现UML作为一种交换媒介非常有用,可以为其他人绘制设计在将其提交给代码或可视化现有代码之前的样子。

我们并不特别关注我们的UML与规范的匹配,因为我们都没有完全确定我们应该使用哪些小巧的位,并且因为图表通常不会持续很长时间。 我想我们可能使用铅笔绘制更多UML而不是使用软件。

实际用途包括尝试确定新类适合现有层次结构的位置,确定层次结构中重构接口的位置,在开始新function之前绘制潜在设计以供讨论。

不要误以为UML只是类图。 用例图是开发人员和管理人员之间的沟通桥梁,序列图允许在视觉上描述精确算法等。

使用这些,UML做两件事:

  1. 当有人编写应用程序时,它会强制您开始生成代码之前绘制软件如何组合在一起
  2. 作为团队加入的人,它可以让您比浏览所有代码更快地获得代码库的概述。

编辑这个添加另一点。 UML用于设计,就像为您的软件创建蓝图一样。 一个简单的类比就是在实际构建房屋/建筑物之前设计和审查房屋/建筑物的架构图。 它充当了沟通,思考和挑战设计的媒介。 最终确定后,它将成为蓝图 – 然后构建您的软件的参考点。


UML不用于OO数据库设计。 它用于模拟软件的不同设计。 例如,您将使用Use Case捕获系统边界或actor / users与系统的交互。 此设计有助于捕获用户需求。 您可以使用静态图来建模类及其关系。 您可以使用序列图建模交互,它在IMHO中非常有用。

好的,现在回到回答您的具体问题。 如果您正在进行小型任务和单人项目,是的,您可以认为UML不会添加太多值。 在现实生活中,您拥有更大的团队和不同的角色(架构师,设计师,BA,开发人员等),UML用于以一致和标准的方式捕获和交流架构,需求和设计信息。 例如,我可以根据需求信息和设计师/ BA提供的用例图设计银行模型,我将转换为类图的技术设计,并使用序列图捕获它们的交互和消息流,并传递给其他4个成员。我的团队实现了这一点。

UML可用于不同目的:

1)在编写代码之前,您(与您的团队)希望就组件(甚至项目)架构达成一致,以避免误解,这就是为什么您可以绘制类图

2)您想要创建用例图并将其放在您经常看到的某个地方,以便记住您的应用程序应该执行哪些主要function(以及您应该集中注意哪些任务)

3)类图可以作为项目宏架构的文档。 如果您想邀请新开发人员加入您的项目,那么拥有这样的类图非常重要。

为您提供项目的可视化设计

作为程序员,您可能会为小型商店建立一个小型网站。 这可能很简单。 您可能没有设计文档,没有UML,没有测试,它可能工作正常。

但是,您可能会从事空中交通管制系统,汽车的防抱死制动系统或世界上最大的银行之一的交易系统。 在这种情况下,您不会自己编写代码。 你必须说服其他几个人,你的代码确实会做正确的事情 – 不仅仅是你的同事,还有独立的审计师。 为了帮助他们快速理解代码,他们需要一些图表。 什么可能比标准符号更好,以帮助他们了解您的代码? (当然,您还需要您的设计文档和测试!)

我有超过10年的经验编写经验,在金融领域的C / C ++ / C#,而不是曾经使用过UML。
这可能是对我工作的反思哈哈,但我也从未见过它。 设计文档倾向于基于书面描述和/或故事板。
关键在于,当您编写一个准确而全面的UML图表并将其转换为代码时,您也可以编写代码。
有一种观点认为,如果你需要将设计传达给其他人,它可能会有用……但我想你需要知道:

  • 你需要多久做一次这样的设计(大概是从头开始)? 没有多少系统如此需要如此完整的设计。
  • 那些你告诉它的人是否会像你一样充分地理解它,谁已经花时间去做它? 商界人士不太可能。
  • 将流程图/故事板/谈话充分? 通常更直观,更广泛的受众。
  • 由于竞争/原型需求,商业人士是否希望您在开始实施之前开始实施? 这样一个正式的图表是否重要,如果在你完成它的时候,需求变化那么多,你必须重新制作它?

    我想如果你正在编写真正的软件,例如飞机控制系统,它需要是一个摇滚设计,但我不知道这是不是这种方法。

我在UML中发现的一个优点是它可以帮助人们以平台无关的方式传达设计和意图。

我们假设您正在使用其他团队提供的API方法编写代码。 如果您有API类的UML图(类图),并且如果遵守了正确的命名约定,那么您可以轻松地找出可以为特定类提供的所有API方法。 例如,如果类图指示要聚合的两个类之间的关系,并且基数是1 .. *,则可以合理地假设容器类可能提供访问组成元素的迭代器。 在本案例中,与通过API文档和找出他想要使用的方法相比,使用API​​类的开发人员可以快速获得API类的高级概述。

作为开发人员,您几乎不需要制作uml模式,但是您必须阅读很多模式。

图很酷,但总是过时,所以不是很重要。

另一方面,没有用例活动图的规范更难以阅读和转换为代码。