문제

나는 보통 UML과 혼란스러워 하며이 상황은 다르지 않습니다. 인터페이스 Ianimal, 클래스 음식 및 고양이가 있다고 가정 해 봅시다.

interface IAnimal {
    void Feed(Food food);
}

class Cat : IAnimal {
    void Feed(Food food) {
        //code
    }
}

이 3 가지 요소에 대해 UML 클래스 다이어그램을 그리는 것에 관한 3 가지 질문이 있습니다.

  • 나는 Ianimal과 음식, 고양이와 음식 사이의 연관성을 사용해야한다고 가정합니다. 연관 라인의 한쪽에 화살이 있어야한다면 그렇다면 어느쪽에 그리고 왜 거기에 있습니까?

  • 피드를 다이어그램에서 Ianimal 메소드로 작성하는 경우 클래스 고양이 내부에 메소드 피드를 작성해야합니까? 아니면 추가 고양이 방법 만 작성해야합니까?

  • 가장 중요한 : 협회는 Ianimal과 음식, 고양이와 음식, 또는 둘 다 사이에 있어야합니까?

도움이 되었습니까?

해결책

UML은 여러 가지를 정의합니다 관계 유형.

관계에는 여러 가지 표기법이 있습니다.

  • 협회 관계는 견고한 경로의 기본 표기법이 있습니다.
  • 종속성 관계는 점선 화살표의 기본 표기법이 있습니다.
  • 일반화 관계에는 삼각형 화살촉이있는 견고한 경로의 기본 표기법이 있습니다.
  • 실현 관계는 삼각형 화살촉이있는 점선 화살표의 기본 표기법을 가지고 있습니다 (종속성과 일반화의 혼합)

그림으로

+---------------------------+
|       <<interface>>       |
|           IAnimal         |
+---------------------------+                        +--------+
| + Feed(food: Food) : void |- - - - <<use>> - - - ->|  Food  |
+---------------------------+                        +--------+
              ^
             /_\
              |

              |

              |
        +-----------+
        |    Cat    |
        +-----------+

그건:

  • 사이의 관계 IAnimal 그리고 Food a 용법 관계. 이것은 고정 관념«use»의 종속성으로 표시됩니다.
  • 사이의 관계 IAnimal 그리고 Cat a 실현 관계.

연관 관계는 표시하는 데 사용됩니다 사이 둘 이상의 분류기 사이. 이것은 수업 중 적어도 하나가 기인하다 다른 유형 (또는 컬렉션)의. 실제로, 속성 및 연관 끝에는 동일한 정보가 포함되어 있으며 상호 교환 할 수 있습니다.

따라서 IMHO, 설명하는 관계는 협회로 모델링되어서는 안됩니다.

다른 팁

클래스 다이어그램을 가정하면 Ianimal과 Food 사이의 "사용"연관성이 있어야하고 "고양이와 Ianimal과 Dog와 Ianimal 사이의 연관성이 있어야합니다.

    IAnimal ----> Food
     ^   ^
    //   \\
   //     \\
 Cat      Dog

당신이 이런 종류의 물건에 대해 얼마나 까다 롭는가는 처음에 UML을 사용하는 것에 달려 있습니다.

당신이 일종의 whizzy uml-to-code translator가 있다면, 당신은 까다로워 야합니다 (그러나 상자와 줄보다 코드가 더 편한 것 같습니다. 왜 그러한 도구를 사용하겠습니까?)

단순히 UML을 사용하여 다른 사람들과 의사 소통하는 경우 다소 덜 까다로울 수 있습니다.

Craig Larman의 "UML 및 패턴 적용"은 화이트 보드에서 스케치 된 것처럼 보이는 다이어그램을 포함 시켜이 점을 강조합니다. UML 표준이 말하는 실선은 이런 종류의 다이어그램에서는 정상입니다. 화살촉 등이 있습니다.

선이 나에게 있어야한다는 것이 분명합니다 IAnimal 에게 Food.

화살촉이 명확성을 추가하는지 (인간 독자를위한) 선택의 문제이지만 단방향 관계를 나타냅니다.

에서 이 입문 기사 :

"단방향 협회에서는 두 개의 클래스가 관련되어 있지만 한 클래스만이 관계가 존재한다는 것을 알고 있습니다."

나는 Ianimal이 음식을 대사했기 때문에 음식을 가지고 있다고 주장하지만, 당신이 실제로 HAS를 나타내고 싶다면-나는 그것이에 따라 집계 (오픈 다이아몬드) 또는 구성 기호 (다이아몬드로 채워짐)라고 생각합니다. 계단식 삭제 특성.

Martin Fowler에 따르면 UML에는 두 가지 사고 학교가 있습니다. 화이트 보드와 이상한 종이에 대한 표기법을 사용하여 동료 개발자에게 충분한 아이디어를 전달하는 "스케치 자"가 있습니다.

그런 다음 UML을 엔지니어링 도면으로 보는 사람들이 있으며, 디자인의 모든 세부 사항을 캡처해야합니다.

나는 전 캠프에 단단히 있습니다. 전 엔지니어로서, UML은 소프트웨어 설계를 완전히 포착하기위한 실제 엔지니어링 도면의 힘이 없다고 개인적인 경험을 통해 알려줄 수 있습니다.

후자를 믿는 경우 UML을 사용하여 완전한 데스크탑 또는 웹 UI 디자인을 수행하고 여기에 게시하십시오.

1) 인터페이스 IANIMAL과 Type Food 사이에 연관성을 작성해서는 안됩니다. 협회는 유형을 수업 내에서 특성과 연결하는 데만 사용됩니다. 예를 들어

class Animal
{
   Food foodEaten;
}

class Food
{
 //Implementation code
}

그런 다음이 두 유형 사이의 연결을 나타내는 연관성을 작성해야합니다.

대신 그려야 할 것은 인터페이스 Ianimal이 음식 유형에 따라 다르다는 것을 나타내는 종속성입니다. 의존성은 위 그림의 연관성과 동일하게 그려지며 직선을 점선으로 변경하십시오.

2) 아니요, 그러한 방법을 쓰지 말고 종속성을 쓰지 마십시오. 모든 표기법은 인터페이스 Ianimal에만 두십시오

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top