2012-01-15 133 views
4

我为我的Java应用程序构建UML 2.0类图。在我的代码中,我有HashMap数据类型的属性。但是,据我所知,在UML标准中没有HashMap数据类型。问题是 - 我可以使用HashMap作为类的属性的数据类型吗?类图中的HashMap(UML)

UPDATE

也许在图我只是应指向java.util包?并且可能将Map类放在此包中的图表上?

+1

的属性通常不应该的'HashMap'数据类型。它应该有'Map '数据类型。 – 2012-01-15 08:49:34

回答

0

HashMap只是许多java类中的一个。
您可以在UML 2.0类图表中使用任何Java类,接口或原始类型。
UML 2.0 java类图中的任何数据类型都对应于某个java类,接口或原语。

您正在使用UML图来开发您自己的应用程序。所以,为了您的方便,请随意扩展UML 2.0标准。没有人能为此责怪你。

+1

如果你真的有使用Java类的UML模型(我不会推荐它),这仅仅是扩展模型(或库模型)。通过配置文件扩展UML - 在这种情况下,它不是必需的。 – Christian 2012-01-15 15:46:08

1

只需在UML中使用普通类并将其称为HashMap即可。 UML是语言不可知的,并且不了解Java的预定义类。或者我误解了你的问题?

+1

HashMaps不属于UML模型。尤其不是一流的分类器。 – Christian 2012-01-15 15:44:08

+1

@Christian:你说的没道理。我可以在UML中创建任何数据类型。什么阻止我调用一个类HashMap并设置一个组合关系到另一个类如果我想? – Tudor 2012-01-15 15:46:46

+1

当然,您/可以将其放入UML模型中。没有什么能阻止你这样做。将实现细节放入不需要这样做的概念模型并不是一种好的方式。看到我的答案另一种方法。 – Christian 2012-01-16 15:15:21

3

无论如何,HashMap不应该出现在你的UML模型中。 HashMap只是一个合格关联的实现。可能它甚至只是一个提高速度的不合格协会。所以如果你有一个带有HashMap的类A,你可以建模一个UML Class A,一个UML Class B和一个从A到B的UML Association。如果通过一个不属于属性的键B.如果你的HashMap键是B的名字(而B有这个名字作为属性),你可以简单地忽略限定词。

为了表示您的关联的实现(您希望使用HashSet实现它),您可以将其添加为关键字或为其创建一个Stereotype(更复杂)。

+0

HashMap的是一流的,它应该在UML模型中肯定存在。然而,并不是每个班级都需要作为班级出现在图表上。 – 2012-01-16 12:15:42

0

HashMap的可能是这个概念在Java名称,但每一个编程语言有某种Hash<>Map<>类的,和等效东西应该包含在UML,因为很多车型包括哈希或地图容器的属性。

某些工具支持<<map>>刻板印象;如果你有,我会使用它,如果你主要关心视觉直觉 - 但是不可能说出暗示什么样的关键。

合格的关联图形化UML设备是非直观的,我怀疑工具很难转化为正向代码生成中的任何明智事物。我会避免它。

的另一种方式做到这一点(这是我平时)做的是以下几点:

  • 创建V和K作为通用参数的散列类。为了正确地做到这一点,K真的应该受到诸如'Ordered'之类的类的限制,该类也缺乏UML(我们总是添加这个)
  • 对于每次使用Hash例如Hash<Thing, String>(小心与订单 - 我用值第一,键秒),创建一个名为Hash<Thing,String> UML类和输出关系Hash<>然后映射V和K至实际参数ThingString
  • 然后在类想要使用它,定义一个属性,例如things其类型为Hash<Thing,String>类型。

MagicDraw例如支持此。

这样做的缺点是,您将看不到客户端类和值类型之间的关联链接(在我的示例中为Thing)。有利的一面是,如果你发布你的模型作为程序员的规范,这是我们做什么,程序员看到在类表中正确的事,因为你可以看到this example - translation_details attribute

在UML这样做基本任务的困难是刚刚的许多问题与UML之一,为什么大多数开发商我今天见面不使用它除了对白板或文档图片。