2

我在理解下面的 UML 时遇到问题:

UML 图像

PersistentSet具体来说,和之间的关系是什么ThirdPartyPersistentSetPersistentObject和之间有什么关系ThirdPartyPersistentSet

请注意,UML 来自 Martin C. Robert,Martin Micah 的敏捷原则、模式和 C# 实践,2006 年。第 10 章

提前致谢!

4

5 回答 5

2

具体来说,PersistentSet 和 ThirdPartyPersistentSet 是什么关系?

实心菱形 <|>-----> 是Composition(“有一个”),当“整体”存在时,“部分”被破坏。在下图中,如果你摧毁一辆汽车,你就摧毁了化油器。

空的菱形 < >-----> 是Aggregation(“有一个”),当“整体”存在时,“部分”可能不会被破坏。在下图中,如果你摧毁了一个池塘,你不一定会摧毁鸭子(如果它们很聪明,它们会搬到另一个池塘)。

作品
(来源:wikimedia.org

PersistentObject 和 ThirdPartyPersistentSet 是什么关系?

这是一种依赖关系。请在此处查看我的答案以获取更多信息。

那么在使用参数传递时,依赖关系何时会变为关联关系呢?

如果将参数存储在本地,则它会从依赖关系变为关联关系。如果您只在本地使用该参数,那么它仍然是一个依赖项。

C#代码示例:

// Association 
public class ThirdPartyPersistentSet
{
    private PersistentObject _object;
    public ThirdPartyPersistentSet(PersistentObject obj)
    {
        _object = obj; // Store it to a local variable.
        // Now ThirdPartyPersistentSet 'knows' about
        // the PersistentObject.
    }
}

// Dependency
public class ThirdPartyPersistentSet
{
    public ThirdPartyPersistentSet(PersistentObject obj)
    {
        obj.GetSomething(); // Do something with obj,
        // but do not store it to a local variable.
        // You only 'use' it and ThirdPartyPersistentSet
        // does not 'know' about it.
    }
}
于 2011-06-03T18:56:00.423 回答
1

PersistentSet 和ThirdPartyPersistentSet 之间的关系是一种Aggregation,即PersistentSet 包含一个或多个ThridPartyPersistenSet 实例。这是一种“弱”关系,这意味着 ThirdPartyPersistentSet 的实例可以存在于 PersistentSet 之外。

PersistentObject 和 ThirdPartyPersistentSet 之间的关系是依赖关系,这意味着基本上 ThirdPartyPersistentSet 需要一个 PersistentObject 来完成它的工作。

因此,要将其转换为代码,您的 PersistentSet 将包含如下内容:

public class PersistentSet
{
    public List<ThirdPartyPersistentSet> Items { get; }
    ...
}

您的 ThirdPartyPersistentSet 看起来像这样:

public class ThirdPartyPersistentSet
{
    private PersistentObject _object;
    public ThirdPartyPersistentSet(PersistentObject obj)
    {
        _object = obj;
    }
    ...
}
于 2011-06-01T22:22:02.827 回答
0

具体来说,PersistentSet 和 ThirdPartyPersistentSet 是什么关系?

PersistentSet 有许多 ThirdPartyPersistentSets

PersistentObject 和 ThirdPartyPersistentSet 是什么关系?

ThirdPartyPersistentSet 依赖于(使用-a)PersistentObject

uml 类图中的所有行都表示一种或另一种依赖关系,除了对注释的虚线(折角框)。没有箭头的实线表示两 (2) 路(双向)依赖关系。

于 2011-06-01T22:18:45.743 回答
0

黑色菱形表示组合、包含(如具有箭头所指类型的字段): PersistentSet实体包含ThirdPartyPersistentSet实体当 PersistenSet 被销毁时,包含的所有 ThirdPartyPersistenSet 对象也将被销毁。

虚线表示依赖项,如进行具有箭头所指类型的参数的函数调用): ThirdPartyPersistentSet取决于PersistentObject

查看 Wikipedia 条目以获取更多详细信息

于 2011-06-01T22:25:45.057 回答
0

具体来说,PersistentSet 和 ThirdPartyPersistentSet 是什么关系?

http://en.wikipedia.org/wiki/Class_diagram#Aggregation

PersistentObject 和 ThirdPartyPersistentSet 是什么关系?

http://en.wikipedia.org/wiki/Class_diagram#Dependency

于 2011-06-01T22:26:37.460 回答