UML에서 인터페이스가 클래스와 관계를 가지고 있다면 그 관계는 그것을 구현하는 모든 클래스에도 적용됩니까?
인터페이스를 구현하는 모든 클래스가 상기 인터페이스와 동일한 유형이기 때문에 인터페이스와의 관계가이를 구현하는 모든 것에 적용됩니까?
예를 들어, Colour 클래스의 인스턴스를 반환하는 메서드 서명이있는 Product라는 인터페이스가 있다고 가정합니다. 그런 다음이 인터페이스를 구현하는 Shelf 및 Desk라는 2 개의 클래스가 있습니다. 이 두 클래스는 Colour 클래스의 속성을 포함합니다.

또는

관계가 제품과 색상 사이에만 표시되어야합니까? 아니면 제품, 선반 및 책상이 모두 색상 클래스와의 관계를 표시해야합니까?
답변
인터페이스 연결이 구현에 적용됩니까?
인터페이스는 구현 클래스가 제공해야하는 기능과 충족해야하는 제약 조건을 나타내는 계약을 정의합니다. 인터페이스가 클래스 T와 연결되어 있으면 모든 구현이 마치 T 클래스와 연결되어있는 것처럼 정확하게 동작해야합니다.
다음은 UML 사양이 알려주는 내용입니다.
인터페이스가 소유 한 속성 (연관 종료 포함)은 실현 BehavioredClassifier가 속성의 유형 및 다중성에 해당하는 정보를 유지하고 해당 정보의 검색 및 수정을 용이하게해야 함을 의미합니다. 인터페이스에 선언 된 속성이 BehavioredClassifier를 실현하는 데 이러한 속성이 있다는 것을 반드시 의미하지는 않습니다 (예 : 동등한 get 및 set 작업에 의해 실현 될 수 있음).
따라서 귀하의 질문에 대한 대답은 모호합니다.
- 구현 클래스를 사용하는 경우 다이어그램에 표시되지 않더라도 이러한 연관이 있다고 가정 할 수 있습니다.
- 이러한 구현 클래스를 설계하는 경우 연관이 자동으로 존재한다고 가정 할 수 없습니다. implementation is not inheriting . 모델에 아무것도 표시하지 않으면 클래스가 계약을 이행하는 방법이 지정되지 않습니다. 완전하게하려면 구현 클래스에서 필요한 연관을 정의해야합니다. 따라서 두 번째 다이어그램이 더 정확하고 포괄적입니다.
구현 중 하나의 경우 연관이 다른 연관에서 파생되고 명시 적으로 유지되지 않는 다른 상황이 발생할 수도 있습니다.
내러티브에 정말 연관성이 필요합니까?
내러티브에서 유형 T를 반환하는 메서드로 인해 연결의 필요성을 정당화합니다. 그러나 매개 변수 또는 반환 유형이있는 것은 이 다른 SO 답변 에서 설명한대로 연결을 요구하기에 충분하지 않습니다 . 연결에는 의미 관계 가 필요합니다 .
따라서 인터페이스에는 Color
.
기타 비고
두 다이어그램 모두 열린 화살표 끝이 아닌 일반 빈 화살표 머리 (끝의 흰색 삼각형)로 실현 종속성을 표시해야합니다.
이전 UML 버전 1.xx에서 인터페이스는 추상 클래스와 동일한 의미를 가지며 자체 속성을 가질 수 없습니다. 이제 상황이 더 편안해졌지만 다음과 같은 이유로이 접근 방식을 고수하는 것이 좋습니다.
- 인터페이스는 일련의 동작을 제공함을 의미합니다.
- 동작은 작업에서 구현됩니다.
- 비공개 속성은 외부 세계에 표시되지 않으므로 인터페이스에서 할 일이 없습니다. 캡슐화 및 디커플링의 위험 때문에 공용 속성은 피해야합니다.
- 재산이 정말로 필요한 경우 수업이 필요하다는 증상 일 수 있습니다.