2014-12-27 20 views
2

有沒有一種方法可以在抽象序列圖中分離抽象類和它的具體分支?序列圖中的抽象/具體類分離

我的用例是一些事務必須打在抽象類中實現的方法,以及一些事務從其具體實現中實現。

或者它是類圖而不是序列圖的問題?

+1

要做到這一點,方法是爲其添加單獨的生命線並顯示消息。就像你在類和現代實體關係圖中看到的標準符號一樣,我不太確定。基於我所看到的圖表,SD應該很簡單,我認爲它對於類圖更合適。 – ChiefTwoPencils

+0

我不想添加新的生命線,除非我能夠顯示抽象類和具體類之間的關係。但是我確實認爲這更可能是類圖的關注。 –

+1

如果你想爲兩個不同的類建模,那麼在序列圖中它將意味着兩個不同的生命線。這就對了。您可以顯示任何'<>'(包括'<>')在如本例所示的生命線頭:http://www.uml-diagrams.org/sequence-diagrams-examples.html#pluck-comments – xmojmr

回答

3

在你的序列圖中,你應該只使用你認識它們的類型的對象在執行的特定點。

然後你調用該對象上的方法,即使它是在抽象父類上實現的方法。

序列圖非常像代碼int尊重。

因此,假設你有以下情況: Class diagram

然後調用無論是實現爲ConcreteSubClass的對象的抽象操作,因爲你的用戶類有關聯ConcreteSubClass,無論在哪裏該操作被執行。

Sequence diagram

如果用戶類有關聯的抽象類然後調用類型的對象上的操作抽象類

+0

這是一個非常好的解釋,吉爾特。 – BobRodes

0

如果您要建模兩個不同的類那麼在序列圖中它將意味着兩個不同的生命線。這是全部(據我所知)。

您可以在生命線頭顯示任何<<stereotype>>(包括<<abstract>>)如本例:uml-diagrams.org: UML Sequence Diagrams Examples → Submit Comments to Pluck

例如,假設我們有這個(沒用)C#代碼:

abstract class BaseClass 
{ 
    protected abstract string Name { get; } 

    public virtual void DoSomething() 
    { 
     Console.WriteLine("Something useful done."); 
    } 

    protected void SayHello(string to) 
    { 
     Console.WriteLine("Hi {0}, I'm {1}", to, this.Name); 
    } 
} 

class Case1 : BaseClass 
{ 
    protected override string Name { get { return "Case 1"; } } 

    public override void DoSomething() 
    { 
     base.DoSomething(); 
    } 
} 

class Case2 : BaseClass 
{ 
    protected override string Name { get { return "Case 2"; } } 

    public void DoSomething(string to) 
    { 
     this.SayHello(to); 
     base.DoSomething(); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var c1 = new Case1(); 
     var c2 = new Case2(); 
     c1.DoSomething(); 
     c2.DoSomething("Jane"); 
    } 
} 

然後UML捕獲Program.Main時發生的情況的序列圖可能如下所示:

enter image description here

我將抽象類繪製爲與具體類實例共享生命期(以及大部分內存)的隱式友元對象。實際上,在某些語言中實現類繼承是如何實現的,所以這種情況並非完全「組合」。

但是,詳細程度可能過於集中於實現,沒有有用的抽象。即使小代碼重新分解,該圖也不會生存

+1

向我解釋「<」存在*標準*刻板印象;這不是刻板印象,你說的是錯的 - <>不是刻板印象 - IOW,它不代表你的建議。 – ChiefTwoPencils

+0

[請閱讀](http://stackoverflow.com/questions/13107893/uml-questions-about-abstract-and-stereotypes/13118076#13118076)! – ChiefTwoPencils

+0

使用什麼工具製作上圖? – ChiefTwoPencils