Model 如何在UML中表示映射类成员?

Model 如何在UML中表示映射类成员?,model,map,uml,diagram,Model,Map,Uml,Diagram,当我有一个带有映射成员的类时,我不想绘制一个单独的类/接口对象来表示映射本身,但我更愿意将映射视为一个本机类型,而不是一个复杂的对象 考虑下面的例子 public class IndexManagerImpl implements IndexManager { /* ... */ private static Map<Searcher, Integer> searcherCache; } 公共类IndexManagerImpl实现IndexManager{ /*

当我有一个带有映射成员的类时,我不想绘制一个单独的类/接口对象来表示映射本身,但我更愿意将映射视为一个本机类型,而不是一个复杂的对象

考虑下面的例子

public class IndexManagerImpl implements IndexManager {
    /* ... */

    private static Map<Searcher, Integer> searcherCache;
}
公共类IndexManagerImpl实现IndexManager{
/* ... */
私有静态地图搜索缓存;
}
我想强调一个事实,
IndexManagerImpl
包含(尽管是间接的)对
Searcher
实例的引用。
如果表示还可以显示
searcherCache

的类型参数,那就太好了。实际上,集合对象表示两个类之间的一对多关联。
因此,在图表上应该有一个IndexManagerImpl类,该类与搜索器类有一对多的关联。。。地图是我们在任何计算机毕业课程中学习的基本数据结构!它存在于大多数现代语言中,是分析师的重要设计资源。在某些情况下,可以将映射绘制为关联,但需要某种类型的扩展(原型),或者您可以定义模板类。我不喜欢模板方法-它隐藏了主要参与者之间的关联。 最后一个资源是AssociationClass,一个特殊的UML类,用于定义与属性的nxn关系,我认为这适合您的问题,其中“integer”字段是与indexManager相关的搜索器的某种计数器。
还请记住,通过代码,您无法看到关系的另一面,而UML旨在显示双方、导航问题等。

地图不能被视为集合,因为它们与集合具有不同的属性。实际上,映射是具有特定(映射)关系的集合的倍数。在我看来,表示映射在很大程度上取决于需求,根据您的需求可能有几种映射UML表示。 因此,可以以简单的形式表示映射关系,即与键集元素的一对多关联和键集元素与值元素的一对一关联。 其中,key元素和value元素是原始元素的包装,因为关联实际上并没有和原始元素关联


希望这能有所帮助……

如果我必须处理一个简单的列表(或一组),我会同意你的观点,并使用一对多关联。在我看来,映射更为复杂:如果我使用关联,我将失去映射的键值性质。我不确定是否有标准的方法将映射显示为关联,但我认为您可以使用原型为映射创建自定义关联类型。UML模型是一种抽象,不应该与语言习惯用法联系在一起。在本例中,MAP是一种语言习惯用法(Java的内置部分)。大多数工具支持对实现语言使用概要文件,这将提供内置的复杂类型。据我所知,您可以根据您的需求使用原型来扩展UML图的使用。谢谢you@MartinSpamer:您的意思是,任何与特定实现语言相关的事情都应该使用UML概要文件来解决吗?UML不应该与数据结构绑定。