java 使用UML类图表示散列表

6qftjkof  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(99)

我是UML的新手。这个类图是否正确地表示了Hashmap<String, Hashmap<String, String>>结构?

更确切地说,config属性必须是一个类似Hashmap<String, String>(Java)或dict[str, str](Python)的结构体,students对象必须是Hashmap<String, Hasmap<String, String>>(Java)或Python中的dict[str, dict[str, str]]。如何用uml类图来表示这个结构(属性的数据类型)?
我在图表中尝试做的是:我有两次M,因为有一个类M和一个类M2D两者都使用。M2DString类型的键Map到MMString类型的键Map到String。在我的理解中,M2D代表Hashmap<String, Hashmap<String, String>>(Java实现),因为M代表Hashmap<String String>

rryofs0p

rryofs0p1#

什么问题?

阅读您在评论中的附加解释,我理解您试图拥有一个非常动态的实现,学校有几个动态配置参数,学生由一组动态属性表示:

  • 在您的实现中,这些动态结构可以作为散列表轻松有效地处理。
  • 然而,在实践中,人们很快就会迷失在应该表示的哈希Map中。现在你对它很舒服,但是如果你做另一个项目,6个月后回来,你就会明白我的意思。

在建模过程中您面临的问题是UML旨在帮助您提供设计的清晰度,而不是可视化地编程代码中已经存在的内容。

如何解决?

我知道你的School中的config实际上是一组配置参数,每个参数由给定学校的唯一键标识:
config属性必须是类似Hashmap<String,String>(Java)或dict[str,str](Python)的结构体
有两种方法,都从学校属性中删除了配置:

  • 直接为School使用限定符(带有限定符属性Key:String的小矩形),并将其与String关联,或者更好地与ConfigurationParameter关联,后者将是一个字符串,但稍后可能会演变成更复杂的东西。这将非常接近您的实现。
  • 从您实现配置的方式中抽象出来,并将一个学校关联到多个ConfigurationElements,这将是一个具有属性key和属性parameter的类,属性keyparameter都是字符串。这将允许其他实现,如Hashmap

对于更复杂的Hashmap<String, Hasmap<String, String>>,它更具挑战性:
students对象必须是一个Hashmap<String,Hasmap<String,String>>(Java)或Python中的dict[str,dict[str,str]]。
首先,我看到一个School类,而没有Student类。但我看到您使用了students属性,并注意其复数形式。你使用了一个M2 D类型,我们看到你试图把它和一个限定符联系起来。所以我认为你的设计忘记了展示设计意图。如果学校有很多学生,请将您的学校与Student类关联。再一次:

  • 您可以使用限定关联(例如,如果学生ID允许为学校找到恰好一个学生)。我会在我的图表中用到这个
  • 或者可以使用简单的一对多关联。如果学校充当学生的存储库,这似乎是一种更好的方法,如果除了getSudentdById(...):Student之外,您还希望提供更多创造性的查询,例如。getStudentsByAge(...):Student[*]

现在,如果您的Student是作为一组对值实现的(例如:你不希望学生的属性是固定的,而是动态的),然后将StudentStudentAttribute类的限定符(字符串)相关联。
优点是这种建模使Hashmap<String, Hasmap<String, String>>中的导航更加清晰:第一个字符串给出学生,第二个字符串给出学生的属性,该属性是字符串。x1c 0d1x当然,您可以删除中间体并直接关联到字符串,就像散列表所做的那样,但是您至少应该添加一个注解来解释与String的关联应该传达的信息。

相关问题