有没有办法在序列图中分离抽象类及其具体分支?
我的用例是某些事务必须命中抽象类中实现的方法,而某些事务必须来自其具体实现。
或者它是类图而不是序列图的关注点?
答案 0 :(得分:5)
在序列图中,您应该只使用您认识它们的类型的对象来执行该特定点。
然后在该对象上调用该方法,即使它是在抽象父类上实现的方法。
序列图与代码方面非常相似。
假设您有以下情况:
然后在 ConcreteSubClass 的对象上调用已实现的抽象操作,因为您的用户类与 ConcreteSubClass 有关联,无论操作在何处实现
如果用户类与 AbstractClass 有关联,那么您可以对 AbstractClass
类型的对象调用操作答案 1 :(得分: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
发生的事情可能如下所示:
我将抽象类绘制为隐式友元对象,使用具体类实例共享生命周期(和大部分内存)。实际上,如何在某些语言中实现类继承,因此该方案不是完全“组成”的。
但是,详细程度可能过于集中于实现,没有任何有用的抽象空间。即使是小代码重新分解,该图也无法存活