2014-12-27 10 views
2

추상 클래스를 분리하는 방법이 있으며 시퀀스 다이어그램에서 구체적인 분기가 있습니까?시퀀스 다이어그램에서 추상/구체적인 클래스 분리

일부 사례는 추상 클래스에서 구현 된 메소드와 구체적인 구현에서 나온 메소드를 사용해야한다는 유스 케이스가 있습니다.

또는 클래스 다이어그램이 아닌 시퀀스 다이어그램이 염려합니까?

+1

할 일은 그것을위한 별도의 생명선을 추가하고 그것에 메시징을 보여주는 것입니다. 클래스와 현대 엔티티 관계 다이어그램에서 볼 수있는 표준 표기법까지는 그렇게 확신 할 수 없습니다. SD는 내가 본 다이어그램을 기반으로 단순해야하며, 클래스 다이어그램에 더 적절할 것이라고 생각합니다. – ChiefTwoPencils

+0

추상 클래스와 구체적인 클래스 사이의 관계를 보여줄 수 없다면 새로운 라이프 라인을 추가하지 않겠습니다. 그러나 나는 그것이 클래스 다이어그램의 관심사 일 가능성이 높다는 데 동의한다. –

+1

두 개의 다른 클래스를 모델링하려면 시퀀스 다이어그램에서 두 개의 다른 라이프 라인을 의미합니다. 그게 다야. 다음 예와 같이 라이프 라인 헤드에 '<>'('<> 포함)을 표시 할 수 있습니다. http://www.uml-diagrams.org/sequence-diagrams-examples.html#pluck-comments – xmojmr

답변

3

시퀀스 다이어그램에서는 실행중인 특정 지점에있는 것으로 알고있는 유형의 객체 만 사용해야합니다.

그런 다음 개체가 추상 부모 클래스에 구현 된 메서드 인 경우에도 해당 개체에 대한 메서드를 호출합니다.

시퀀스 다이어그램은 코드 int hat과 매우 흡사합니다.

그래서 당신은 상황을 다음했다고 가정 : Class diagram

그런 다음 모두 호출 구현 ConcreteSubClass의 개체에 대한 추상적 인 조작으로 사용자 클래스에 관계없이 어디 ConcreteSubClass에 대한 연관을 가지고 있기 때문에 작업이 구현됩니다.

Sequence diagram

사용자 클래스는 다음 형식의 개체에 작업을 호출 AbstractClass에 대한 연관이 있다면 AbstractClass 당신이 두 개의 서로 다른 클래스을 모델링하려면

+0

이것은 아주 좋은 설명입니다, Geert. – BobRodes

0

시퀀스 다이어그램에서는 두 개의 다른 라이프 라인을 의미합니다. 그게 전부입니다 (내가 아는 한).

당신이 예에서와 같이 생명선 헤드의 모든 <<stereotype>> (<<abstract>> 포함) 표시 할 수 있습니다 : 이제 우리는이 (쓸모없는) C# 코드가 있다고 가정하자 예를 들어, uml-diagrams.org: UML Sequence Diagrams Examples → Submit Comments to Pluck

:

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

나는 추상 클래스를 실제 클래스 인스턴스와 함께 평생 (그리고 대부분의 메모리)을 공유하는 암시 적 friend 객체로 그렸다. 실제로 일부 언어에서는 클래스 상속이 어떻게 구현되어 시나리오가 완전히 "구성"되지는 않습니다.

그러나 세부 수준은 구현에 너무 집중하여 유용한 추상화를위한 공간을 제공하지 않을 수 있습니다. 이 다이어그램은 작은 코드를 다시 고려해도 살아남지 못할 것입니다.

+1

"<>"에 대해 * 표준 * 스테레오 타입이 무엇인지 설명해주십시오. 그건 고정 관념이 아니며 당신이 말하는 것이 잘못되었습니다 - <>은 고정 관념이 아닙니다 - IOW, 그것은 당신이 제안하는 방식으로 표현되지 않습니다. – ChiefTwoPencils

+0

[읽으십시오] (http://stackoverflow.com/questions/13107893/uml-questions-about-abstract-and-stereotypes/13118076#13118076)! – ChiefTwoPencils

+0

위 다이어그램을 작성하는 데 사용한 도구는 무엇입니까? – ChiefTwoPencils