UML帮助C#设计原则
我在理解以下UML时遇到问题: 具体来说,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
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作为参数传递给函数,并且不在本地存储它,那么它就是一个依赖项。我添加了一个示例来说明我的意思。