0
가 나는 EMF의 메타 모델을 가지고 : 주어진 Application
실제로 (직접 또는 이적으로) 실행되는 모든 PhysicalMachine
의를 찾을 수 :혼합 된 분류자를 사용하여 재귀 OCL 쿼리를 작성하는 방법은 무엇입니까? 아래에 설명 된대로
class Application
- runsOn: Host [0..*]
interface Host
class VirtualMachine implements Host
- runsOn: Host [0..*]
class PhysicalMachine implements Host
문제는 내가 OCL는 사용하여 응답 할. 다음 경로의 모든 인스턴스 모델에서 발생할 수 있습니다 :
- Application runsOn PhysicalServer
- Application runsOn VirtualMachine runsOn PhysicalServer
- Application runsOn VirtualMachine runsOn VirtualMachine runsOn PhysicalServer
- ...
나는이 어떻게 든 OCL의 closure
연산자를 사용하여 표현 될 수도 있지만 매우 올바른 구문을 알아낼 수 없습니다 상상.
외부 - <자산() 적용 이후 아마 중복 : runOn 아마 유일하다. –
응용 프로그램 : runsOn은 아마도 고유하기 때문에 외부 - asSet()은 아마도 중복됩니다. asSet() 내부는 이미 누적 된 호스트에 대한 재귀를 초대하기 때문에 비효율적입니다. 한 번 방문 만 확인하면 클로저가 무한대가되지 않도록 보장합니다. {} 세트가 더 좋을 것입니다. 어휘 효율성이 뛰어나면 on-> closure (host | host-> selectByKind (VirtualMachine) .runsOn)가 더 간단합니다. –
포인터 주셔서 감사합니다, 많이 감사드립니다! – Alan47