Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UML帮助C#设计原则_C#_Oop_Uml_Design Principles - Fatal编程技术网

UML帮助C#设计原则

UML帮助C#设计原则,c#,oop,uml,design-principles,C#,Oop,Uml,Design Principles,我在理解以下UML时遇到问题: 具体来说,PersistentSet和ThirdPartyPersistentSet之间的关系是什么? PersistentObject和ThirdPartyPersistentSet之间的关系是什么 请注意,UML来自C语言中的敏捷原则、模式和实践# 马丁·C·罗伯特,马丁·迈卡2006。第十章 提前谢谢 具体来说,PersistentSet和ThirdPartyPersistentSet之间的关系是什么 PersistentSet有许多第三方类型集 Pers

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

具体来说,
PersistentSet
ThirdPartyPersistentSet
之间的关系是什么?
PersistentObject
ThirdPartyPersistentSet
之间的关系是什么

请注意,UML来自C语言中的敏捷原则、模式和实践# 马丁·C·罗伯特,马丁·迈卡2006。第十章

提前谢谢

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

PersistentSet有许多第三方类型集

PersistentObject和第三方类型RSistentSet之间的关系是什么

第三方类型RSistentSet依赖于(使用-a)PersistentObject


uml类图中的所有行都表示一种或另一种依赖关系,除了类似于注释的虚线(弯角框)。不带箭头的实线表示双向(双向)依赖关系。

PersistentSet和第三方TypersistentSet之间的关系是聚合,这意味着PersistentSet包含一个或多个第三方TypersistentSet实例。这是一种“弱”关系,意味着第三方TypersistentSet的实例可以存在于PersistentSet之外


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

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

public class PersistentSet
{
    public List<ThirdPartyPersistentSet> Items { get; }
    ...
}
public class ThirdPartyPersistentSet
{
    private PersistentObject _object;
    public ThirdPartyPersistentSet(PersistentObject obj)
    {
        _object = obj;
    }
    ...
}

黑钻石代表成分,包含(如具有箭头所指类型的字段):
PersistentSet
实体包含
ThirdPartyPersistentSet
实体 销毁PersistenSet时,包含的所有第三方TyperSitenSet对象也将被销毁

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

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

PersistentObject和第三方类型RSistentSet之间的关系是什么

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

实心钻石是(“有”)的,当“整体”被破坏时,“部分”被破坏。在下图中,如果你摧毁一辆汽车,你就摧毁了化油器

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


(来源:)

PersistentObject和第三方类型RSistentSet之间的关系是什么

这是一种依赖关系。更多信息请参见我的答案

那么,当使用参数传递时,依赖关系何时变为关联关系

如果将参数存储在本地,则它将从依赖关系更改为关联关系。如果仅在本地使用该参数,则它将保持依赖关系

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.
    }
}

代码第三方TypersistentSet中的Ckramer与PersistentObject关联。依赖是一种较弱的依赖形式。例如,ThirdPartyPersistentSet可以接受PersistentObject的参数并在本地使用它,这仍然是依赖项。@proxon-是的,您是正确的,但是由于类图不包含任何方法定义,我不想添加太多额外的内容,以免混淆太多内容。构造函数参数是一个更难的依赖项,但它们也很容易解释。谢谢你们。因此,第三方TypersistentSet和PersistentObject可以通过constructor参数和method参数来实现。@Pingpong-如果您决定这样编码,正如proxon所指出的,您将把UML图更改为带箭头的实线(关联)。一旦存储传入局部变量的参数,它就成为一个关联。如果您将PersistentObject作为参数传递给函数,并且不在本地存储它,那么它就是一个依赖项。我添加了一个示例来说明我的意思。