컴포지션간에 연관성이 복잡해지는 클래스 다이어그램을 간단히 작성하고 싶습니다.
1을 표현하기 위해 다음과 같이 클래스 다이어그램을 작성합니다.
2를 표현하기 위해 다음과 같이 클래스 다이어그램을 작성합니다.
이 두 가지를 맞추면 다음과 같은 클래스 다이어그램이 됩니다.
그러나 이러한 글을 쓰면 리모컨이나 드론과 같은 부품의 종류가 늘어날 때 복잡하게 관련이 엉망이 됩니다. 어떻게 작성하면 간단해질까요?
일반화와 OCL을 이용한 해법 예
「일반화와 관련을 조합해 클래스도를 쓸 때, 서브 클래스의 인스턴스의 종류나 개수의 제약을 정의하고 싶다」 에서 소개한 것처럼, 일반화와 관련을 조합한 클래스도를 작성해, 거기에 OCL을 추가하는 것으로 해결해 보는 것을 생각합니다.
우선 리모컨과 드론의 슈퍼 클래스를 생각합니다만, 예를 들면 「페어링 기기」라고도 명명해 봅시다.
페어링 기기끼리가 1대 1의 자신에게의 관련을 가진다고 해서, 드론 시스템이 페어링 기기를 복수 가지는, 라고 하면 좋을 것 같습니다.
이제 OCL을 정의해 보겠습니다.
context ペアリング機器 inv:
self.oclAsType(リモコン) implies self.ペアリング.oclAsType(ドローン)
and self.oclAsType(ドローン) implies self.ペアリング.oclAsType(リモコン)
이것이 의미하는 곳을 일본어로 쓰면 다음과 같습니다.
context ペアリング機器 inv:
self.oclAsType(リモコン) implies self.ペアリング.oclAsType(ドローン)
and self.oclAsType(ドローン) implies self.ペアリング.oclAsType(リモコン)
즉, 페어링의 연관 중 하나가 리모컨이고 다른 하나가 드론임을 보장합니다.
덧붙여 페어링 기기가 리모컨 클래스가 아니었을 경우,
self.oclAsType(リモコン)
는 거짓이 되므로, self.oclAsType(リモコン) implies self.ペアリング.oclAsType(ドローン)
는 전제 조건을 만족하지 않고 참이 되는 것에 주의해 주세요. ("A라면 B"라는 명제가 있을 때, A가 거짓이었을 때에는 B가 참이든 거짓이라도 "A라면 B"는 참이 된다)
Reference
이 문제에 관하여(컴포지션간에 연관성이 복잡해지는 클래스 다이어그램을 간단히 작성하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zacky1972/items/3d0fc78409131bb262c9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)