我是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
两者都使用。M2D
将String
类型的键Map到M
。M
将String
类型的键Map到String
。在我的理解中,M2D
代表Hashmap<String, Hashmap<String, String>>
(Java实现),因为M
代表Hashmap<String String>
。
1条答案
按热度按时间rryofs0p1#
什么问题?
阅读您在评论中的附加解释,我理解您试图拥有一个非常动态的实现,学校有几个动态配置参数,学生由一组动态属性表示:
在建模过程中您面临的问题是UML旨在帮助您提供设计的清晰度,而不是可视化地编程代码中已经存在的内容。
如何解决?
我知道你的
School
中的config
实际上是一组配置参数,每个参数由给定学校的唯一键标识:config属性必须是类似Hashmap<String,String>(Java)或dict[str,str](Python)的结构体
有两种方法,都从学校属性中删除了配置:
School
使用限定符(带有限定符属性Key:String
的小矩形),并将其与String
关联,或者更好地与ConfigurationParameter
关联,后者将是一个字符串,但稍后可能会演变成更复杂的东西。这将非常接近您的实现。ConfigurationElements
,这将是一个具有属性key
和属性parameter
的类,属性key
和parameter
都是字符串。这将允许其他实现,如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
类关联。再一次:getSudentdById(...):Student
之外,您还希望提供更多创造性的查询,例如。getStudentsByAge(...):Student[*]
现在,如果您的
Student
是作为一组对值实现的(例如:你不希望学生的属性是固定的,而是动态的),然后将Student
与StudentAttribute
类的限定符(字符串)相关联。优点是这种建模使
Hashmap<String, Hasmap<String, String>>
中的导航更加清晰:第一个字符串给出学生,第二个字符串给出学生的属性,该属性是字符串。x1c 0d1x当然,您可以删除中间体并直接关联到字符串,就像散列表所做的那样,但是您至少应该添加一个注解来解释与String的关联应该传达的信息。