Как получить абстрактные методы из моего суперкласса на языке MTL

Я использую Acceleo-MTL для генерации классов Java. Как мне получить все мои абстрактные методы из моего абстрактного суперкласса?

Чтобы получить простые операции и интерфейсы, я использую это:

[comment]Operators[/comment]
[for (o : Operation | class.getOperations())]
[o.generateOperation()/]
[/for]

[comment]Interface Methods[/comment]
[for (interf : Interface | class.getImplementedInterfaces())]
[for (o : Operation | interf.ownedOperation)]
[o.generateInterace()/]
[/for]
[/for]

Существует ли метод получения для абстрактных методов, как у вас getImplementedInterfaces() для интерфейсов?

1 ответ

Все зависит от вашей метамодели и от того, как на ней ориентироваться. IIRC, Class.getImplementedInterfaces() это то, что исходит от UML, поэтому я предполагаю, что это то, что вы используете.

Более того, то, что вы, похоже, пытаетесь сделать, это "извлечь все операции для данного классификатора, включая унаследованные". Никогда не должно быть никаких причин самостоятельно обращаться к иерархии суперклассов и интерфейсов для таких нужд. В UML это делается через Classifier.getAllOperations()Это означает, что вы можете сделать все через:

[for (o : Operation | class.getAllOperations())]
[o.generateOperation()/]
[/for]

Если вам абсолютно необходимо перебирать интерфейсы и суперкласс (ы) самостоятельно, помните, что вам нужно рекурсивно перемещаться по всей иерархии: суперклассы и интерфейсы вашего класса, суперклассы и интерфейсы суперклассов ваш класс, суперклассы... до корня (ов) дерева наследования. Вам также придется обрабатывать возможности множественного наследования UML и, таким образом, решать потенциальную неопределенность, которую он приносит. Для этого вам необходимо ознакомиться с моделью UML. Например, получение суперклассов осуществляется через Class.getSuperClasses(), Определение того, является ли один из этих суперклассов абстрактным, выполняется через Class.isAbstract()... и так далее.

Дополнительное примечание, которое может вам помочь: вы можете импортировать метамодель UML в свое рабочее пространство, чтобы получить краткий обзор ее концепций и способов навигации по ним. За это:

  • использование File > Import...
  • Во всплывающем окне перейдите к Plug-in Development > Plug-ins and fragments и ударил Next
  • Ничего не изменить на этой странице, нажмите Next второй раз
  • В области фильтра введите org.eclipse.uml2.uml
  • Двойной щелчок org.eclipse.uml2.uml в левой панели, чтобы он появился в правой.
  • Удар Finish

Теперь у вас есть новый проект в вашей рабочей области с именем org.eclipse.uml2.uml, Вы можете открыть org.eclipse.uml2.uml\model\uml.ecore файл, чтобы увидеть метамодель UML.

Другие вопросы по тегам