我有一個問題的理解之下的UML:UML幫助C#設計原則
具體來說,什麼是PersistentSet
和ThirdPartyPersistentSet
之間的關係? PersistentObject
和ThirdPartyPersistentSet
之間有什麼關係?
請注意,UML是敏捷原則,模式與實踐在C# 馬丁·羅伯特C.馬丁彌2006年第10章
提前感謝!
我有一個問題的理解之下的UML:UML幫助C#設計原則
具體來說,什麼是PersistentSet
和ThirdPartyPersistentSet
之間的關係? PersistentObject
和ThirdPartyPersistentSet
之間有什麼關係?
請注意,UML是敏捷原則,模式與實踐在C# 馬丁·羅伯特C.馬丁彌2006年第10章
提前感謝!
PersistentSet和ThirdPartyPersistentSet之間的關係是一個聚合,這意味着PersistentSet包含一個或多個ThridPartyPersistenSet實例。這是一個「弱」關係,這意味着ThirdPartyPersistentSet的實例可以存在於PersistentSet之外。
PersistentObject和ThirdPartyPersistentSet之間的關係是一個Dependency,這意味着ThirdPartyPersistentSet需要一個PersistentObject來完成它的工作。
所以,這個翻譯成代碼,您PersistentSet將包含這樣的事情:
public class PersistentSet
{
public List<ThirdPartyPersistentSet> Items { get; }
...
}
和你ThirdPartyPersistentSet會是這個樣子:
public class ThirdPartyPersistentSet
{
private PersistentObject _object;
public ThirdPartyPersistentSet(PersistentObject obj)
{
_object = obj;
}
...
}
具體來說,PersistentSet和ThirdPartyPersistentSet之間的關係是什麼?
PersistentSet具有一對多ThirdPartyPersistentSets
什麼是持久性對象和ThirdPartyPersistentSet之間的關係?
ThirdPartyPersistentSet取決於(使用-a)的持久性對象
所有在UML類圖的線條指示一個排序的依賴性或另一種除虛線等來註釋(折角框)。沒有箭頭的實線表示兩(2)路(雙向)依賴性。
感謝您的諮詢! – Pingpong 2011-06-01 22:37:40
黑色鑽石代表組成 ,遏制(如在具有由箭頭指出的類型的字段中): PersistentSet
實體包含ThirdPartyPersistentSet
實體 當PersistenSet被銷燬時,包含的所有ThirdPartyPersistenSet對象也將被銷燬。
虛線表示依賴性,如在使一個函數調用,其具有由箭頭指出的類型的參數): ThirdPartyPersistentSet
取決於PersistentObject
感謝您的諮詢! – Pingpong 2011-06-01 22:39:37
具體而言,什麼PersistentSet和ThirdPartyPersistentSet之間的關係是什麼?
http://en.wikipedia.org/wiki/Class_diagram#Aggregation
什麼是持久性對象和ThirdPartyPersistentSet之間的關係?
@Provon,謝謝你的建議! – Pingpong 2011-06-01 22:39:53
具體來說,什麼是PersistentSet和ThirdPartyPersistentSet之間的關係?
固體金剛石< |> ----->是Composition
(「擁有」)其中當「整體」是「份」被破壞。在下面的圖片中,如果你摧毀了一輛汽車,你會摧毀化油器。
空鑽石<> ----->是Aggregation
(「有一個」),其中「部分」可能不會在「整體」時被破壞。在下面的圖片中,如果你摧毀一個池塘,你不一定會破壞鴨子(如果它們很聰明,它們會移動到另一個池塘)。
什麼是持久性對象和ThirdPartyPersistentSet之間的關係?
這是一種依賴關係。有關更多信息,請參閱我的回答here。
那麼在使用參數傳遞時,何時依賴關係會變爲關聯關係?
如果您在本地存儲參數,則它會從依賴關係變爲關聯關係。如果您只在本地使用該參數,則它保持依賴關係。
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.
}
}
代碼中的Ckramer ThirdPartyPersistentSet與PersistentObject相關聯。依賴是較弱的依賴形式。 ThirdPartyPersistentSet例如可以接受PersistentObject的參數並在本地使用它,這仍然是依賴關係。 – StanislawSwierc 2011-06-01 22:31:34
感謝您的建議和您的C#代碼。 – Pingpong 2011-06-01 22:38:07
@proxon - 是的,你是正確的,但是因爲類圖沒有包含任何方法defs我不想添加太多額外的東西,因爲擔心會讓事情變得過於混亂。構造器參數是一個更難的依賴項,但它們也很明顯。 – ckramer 2011-06-01 23:41:19