UML类图概念与规范与实现

UML类图概念与规范与实现,uml,diagrams,Uml,Diagrams,我目前正在读马丁·福勒的著作。我刚刚介绍了类图的部分,在那里,他非常强调在建模类图之前整理自己的观点的必要性。然而,当我实际绘制类图时,我对它的实际外观有点困惑。例如,我理解,理论含义会从一个角度到下一个角度改变关联的含义 我想我的主要问题是,例如,如果我像他在书中那样对一个简单的排序系统建模,类图从一个角度到另一个角度会看起来不同,并且包含不同数量的符号吗。例如,从概念的角度来看,我只会显示类和一些模糊的关联及其多样性,然后在规范角度建模时,包括导航性和基本类操作和字段 我真的很想在这方面得到

我目前正在读马丁·福勒的著作。我刚刚介绍了类图的部分,在那里,他非常强调在建模类图之前整理自己的观点的必要性。然而,当我实际绘制类图时,我对它的实际外观有点困惑。例如,我理解,理论含义会从一个角度到下一个角度改变关联的含义

我想我的主要问题是,例如,如果我像他在书中那样对一个简单的排序系统建模,类图从一个角度到另一个角度会看起来不同,并且包含不同数量的符号吗。例如,从概念的角度来看,我只会显示类和一些模糊的关联及其多样性,然后在规范角度建模时,包括导航性和基本类操作和字段


我真的很想在这方面得到一些指导,因为我真的很想更好地掌握这一主题

好问题。以下是我自己的一些体会;不能说马丁是否会同意,但希望还是有用的

总而言之:主要区别在于关系的形式和设计选择

我发现以下几点很有用:

  • 基本结构:大致映射到Fowler的UML作为草图,并在白板上交互完成。主要目的是了解整体结构。非常随便。特别是,关注关系只是为了识别它们,而不是形式化——因此没有基数、删除行为、容器类的选择等等

  • 域模型。一个精确的模型,专注于关系的形式化。具体来说,命名关联结束,定义基数并确认删除行为。不考虑导航性或选择容器类别的基数>1。我所知道的学习问题领域的最好技巧之一

我几乎总是使用以上两种方法。域模型的关键是使用基于动词的命名,而不是基于角色的命名,因为它描述了关系存在的原因(有效地揭示了业务规则:例如,“订单必须由一个客户下”)。我使用的命名模板在的书中描述

在将域模型转换为工作代码方面还有很多工作要做,特别是在关系方面。编程语言不太支持关系,因此必须将关联转换为参与类的属性。正是在这一点上,可导航性开始发挥作用,并为多样性>1选择集合类型。它也是需要指定所有操作的地方。我个人并不觉得这种类型的图表特别有用。一个域模型加上代码给了我所需要的一切

只有在使用可执行的UML工具时,我才会使用“UML作为编程语言”

抱歉,如果这有点漫无边际,希望能有所帮助


PS:如果你想要一个更好的基于动词的命名的例子,我有一个。请不要认为这是自我推销,只是在这里重复没有意义。

马丁·福勒(Martin fowler)的书对我来说是垃圾(例如我的个人感觉),只要他开始谈论类图!!我同意其他的图表,但是类图应该更加实用,而不仅仅是高级设计

你需要在更高的抽象层次上建模,然后对你真正需要的东西建模,这总是同一个理论。 我更喜欢快速提供一个运行的代码并向客户展示。从第一个阶段开始,我们开始建模,以获得功能需求和代码。一旦我们完成了第二阶段,我们将再次向客户展示它,并再次提供UML类图来更改需要做的事情。经过10次迭代之后,我的项目通常完成了。
例如,我的项目持续3到6个月。这是一个非常复杂的项目,我的客户通常都很满意。使用Martin fowler的建议,我的项目在12-18个月内不会完成,客户肯定会失望。

确切地说,UML类图只是一种符号,您可以(也应该)根据您所处的软件开发阶段而有所不同。您可以仅从类、属性和关联开始,然后优化图表以添加属性的类型信息,然后是导航、类方法、关联的限定符。。。直到为实现阶段准备好完整的类图


请注意,您甚至可以迭代到删除关联并用复杂类型的属性替换它们的点,以获得与最终实现更相似的类图。如何在每个阶段使用类图取决于您。

下面是我如何向开发人员解释这些想法的

  • 概念是关系。这是应该发生耦合的级别。你不应该看到从概念到实现的耦合——这是一个糟糕设计的信号

  • 规范定义了算法,但没有定义实现。在类图中,这可能表示为一个抽象类。Alan Shalloway将属于这个领域的方法称为“中士方法”:它们只是发出命令

  • 实现是实际工作发生的地方。这可能由实现抽象规范的具体类表示


好久不见。感谢您在
UML标签中所做的努力
您真是太棒了,我希望您继续在您的博客中撰写有关UML和相关主题的文章。我希望我也能这样做,但我仍然是2002年John Daniels在Martin Fowler网站上发表的IEEE文章的初学者。本文描述了概念模型、规范模型和实现模型之间的有用区别。