2009-07-17 4 views
8

저는 잠시 동안 UML을 사용해 왔지만 그것에 관한 기사, 책, 포럼을 거의 읽지는 않았지만 두 클래스가 연관 줄 (간단한 줄 또는 화살표 (또는 이들이 동일하지 않은가?)). 나는 세 가지 예를 제시 할 것입니다. 두 가지가이 관계에 어느 것이 될지를 말해 줄 수 있습니까?UML 연관 이해 문제

1.

//a field of OtherClass 
    public class MainClass 
    { 
     private OtherClass other; 
    } 

2.

//method argument 
    public class MainClass 
    { 
     public void Action(OtherClass other) 
     { } 
    } 

3.

//method return value 
    public class MainClass 
    { 
     public OtherClass Action() 
     { } 
    } 

4.

//used inside a method 
    public class MainClass 
    { 
     private Something something; 

     public void Action() 
     { 
      OtherClass other = something.GetOtherClass(); 
     } 
    } 

답변

0

나는 일반적으로 두 가지를 사용 UML의 다른 커넥터 :

  1. 클래스가 다른 클래스의 구현에 종속되는 경우. 이것은 클래스가 다른 클래스의 인스턴스를 생성하거나 처리하고 있음을 의미합니다. 따라서 호출 클래스는 구현 클래스에 종속됩니다. 이것은 모든 예에서 분명합니다.

  2. 클래스가 다른 클래스를 확장하거나 구현하는 경우.

+0

그래서 어떤 경우에 어떤 커넥터를 사용합니까? –

4

편집 : 주석 재 작성의 대답은 다음과 토론 (I 예에서 간과 것을 지적 Chimp에 힘 입어 4)

예 1 : OtherClass는 다음과 같이 모델링하여 MainClass의 속성이며, 협회.

예제 2 및 3 : OtherClass는 클래스 정의 내에서 참조되지만 속성 내에 저장되지는 ​​않으므로 종속성이 있습니다.

예제 4 : Something 클래스는 특성이므로 연관성이 있지만 참조 된 OtherClass는 특성에 저장되지 않으므로 종속성입니다.

UML 내에서 종속성과 연관성은 관계의 두 가지 유형이며 공통된 상위 유형을 제외하고 엄격하게 관련되지 않습니다. 제 생각에는 연관성은 종속성을 의미합니다.

연관성은 양 끝마다 다중성을 갖는 2 개의 클래스 사이에 선으로 표시됩니다. 탐색 가능성은 화살표로 표시되어 어느 클래스가 양쪽 방향으로 화살표로 표시되는지 (예 : 클래스 A ___> 클래스 B는 A가 B를 인식하지만 다른 방향으로는 그렇지 않음을 나타냄) 탐색 방향을 화살표로 표시합니다. 화살표가없는 곳에서는 다른 곳에서 언급하지 않는 한 항해에 대한 어떤 가정도하지 않는 것이 일반적으로 더 안전합니다.

종속성은 종속 클래스 (클라이언트)에서 의존하는 클래스 (공급자)에 대한 화살표가있는 점선으로 표시됩니다 (예 : A ----> B는 A가 B에 종속됨을 의미 함). 종속성은 클래스가 어떤 시점에서 참조된다는 것을 보여 주므로 클라이언트는 공급자가 제공하는 작업에 종속되지만 참조되는 방식을 나타내지는 않습니다 (속성에 저장된 참조를 제안하는 연관과 달리).

+0

괜찮지 만 인수로 제공된 클래스를 인식하는 클래스가 아닙니까? 그리고 당신은 당신이 말하는 것을 확신하고 있습니까? 왜냐하면 저는 "이것은 이론이 말하고있는, 주제의 끝"이라는 대답을 찾고 있기 때문입니다. – agnieszka

+0

흠, 아마 그 말을 조금 바꿔 쓸 수 있습니다. 마음에서부터 키보드까지의 여정이 항상 쉬운 것은 아니며, 나는 그 길에서 의미를 잃어 버렸다고 생각합니다. 연결은 특성으로 표시됩니다. 원시 데이터 유형과 동일한 방식으로 UML로 연관을 표시하는 것은 허용되지만, 일반적으로 연결 선을 사용하는 것이 더 유익합니다. 나는 왜 메서드에 대한 인수가 (전혀 설명이 아니기 때문에 "관련이 없다"이외의) 연결을 구성하지 않는지 설명하는 것을 생각할 수 없다. 하지만이 정보가 정확하다고 확신합니다. – chrisbunney

+0

그건 그렇고, 필자는 UML로 작업 할 때 항상 UML Distilled의 사본을 보관하고 있습니다. http://www.martinfowler.com/books.html#uml – chrisbunney

6

우선 화살표는 연관의 내비게이션을 나타냅니다.단일 화살표는 단방향 관계를 의미합니다.이 경우 소스 클래스 만 대상 클래스에 대해 알고 있습니다. 양끝의 화살표는 양방향 관계를 의미하며 두 클래스는 서로에 대해 알고 있습니다. 화살표가없는 경우 연결은 기본적으로 양방향이거나 가독성을 위해 표시되지 않을 수 있습니다. 실제로 협회의 방향을 강조하고 싶을 때만 화살표를 그려야합니다.

두 번째 질문의 경우 첫 번째 경우에만 MainClassOtherClass 사이의 (단방향) 연결이 설명됩니다. 인수 나 반환 값 모두 UML 의미에서의 연관성을 의미하지 않습니다 (두 가지 모두 종속성을 의미 함). 마지막 예에서 something 속성을 통해 MainClassSomething 클래스 사이의 연결이 있습니다. 일반적으로 속성의 연관을 찾아야합니다.

dependency의 개념이 UML에 있으며 점선으로 표시된다는 점에 유의하십시오.

포즈 주이 엔!

+0

꽤 많이 요약합니다. . +1 – Randolpho

1

연관은 두 개 이상의 관련 속성을 나타냅니다.

예제 1에서 MainClass는 OtherClass 유형의 속성을 가지고 있습니다. OtherClass에 MainClass 유형의 명시 적 속성이 있으면 클래스 사이에 양방향 연관이 있습니다. OtherClass에 MainClass 유형의 암시 적 속성이 있으면 (즉, 속성이 없지만 다른 방향으로 작업하여 관계를 파생시킬 수있는 경우) MainClass에서 OtherClass 로의 단방향 연결이 있습니다.

예제 2, 3 및 4에서 MainClass에는 OtherClass 유형의 특성이 없습니다. 그것은 OtherClass에 의존하기 때문에 MainClass에서 OtherClass 로의 종속성 관계가있을 것입니다. 코드에서 이것은 또는 #include을 사용하여 으로 표시됩니다.