2016-11-10 8 views
2

Мне нужно проверить, срабатывает ли модель для одного или нескольких ограничений OCL. Модели хранятся в XMI, загружаемом EMF. Ограничения OCL генерируются автоматически (String или тому подобное).Оценка модели OCL vs Оценка объекта

я нашел способ проверить ограничение на EObject

helper.setContext(ecClass); 
query = helper.createQuery(expression); 
Object o = ocl.check(eo, invariant); 

о затем содержит результат: истина или ложь.

Должен ли я проверять каждый объект модели «вручную» или есть способ, метод или класс, которые могли бы сделать это напрямую (и, возможно, более эффективно)?

Обратите внимание, что: - Никакая информации моделирования не является жестко: метамодели, модель и OCL манипулируют в наиболее общем виде, - Я работаю на автономном мягком: все банки добавляют специально. Я пытался использовать DresdenOCL, но я не знаю, почему регистрация пакетов затруднительна.

+0

Вы имеете в виду «нарушает» авторские права? Вам требуется, чтобы проверка OCL запускалась из кода Java? Последний вопрос, потому что если вы не возражаете против использования Eclipse, то проверка легко выполнима, и вы можете протестировать все экземпляры данного класса с использованием универсальной квантификации в OCL. –

+0

Да, я имею в виду «нарушает» (но слово немного тяжелое). И нет, я не против использования Eclipse. Автономные звуки легче выполнять на калькуляторе (возможно, я ошибаюсь). –

+0

Я не понимаю, что вы подразумеваете под «регистрацией пакетов является неприятным» в исходном вопросе. Также я не понимаю, что вы подразумеваете под «проще выполнить на калькуляторе». Вы уточните? Я могу написать ответ, в котором я покажу, как оценивать ограничения OCL для экземпляров моделей Ecore с использованием Eclipse, используя простой пример фиктивного кода (например, проверка того, что все экземпляры автомобилей имеют 4 установленных шины). Другой вариант заключается в том, чтобы вы могли поделиться некоторыми из моделей, которые у вас есть (и соответствующими моделями Ecore), а также несколькими ограничениями OCL - я мог бы написать ответ на основе этого. –

ответ

0

В зависимости от ваших требований (когда и где проверять объекты) вы можете попытаться использовать уведомления и/или добавить некоторую логику в свою собственную реализацию EObject, расширяющую EObject EMF.

+0

Это более или менее то, что я сделал: цикл на объектах, которые проверяют их один за другим. Поскольку мне не обязательно их проверять, эта версия работает очень хорошо. –