Генерация диаграммы классов из XMI

Ситуация

У меня есть проект PHP с большим количеством классов с множеством взаимосвязей во множестве папок, следующих Соглашение об именах Zend.

Я использую среду IDE NetBeans 7.1. Работаю под Windows 7.

Цель

Мне нужно увидеть графическое представление отношений классов, возможно, разной глубины и разной степени сложности. Также было бы неплохо, если бы классы на диаграмме были кликабельными. Мне не обязательно создавать документацию.

Попытки

1. В NetBeans

NetBeans — отличная IDE с множеством функций. На самом деле, он распознает зависимости классов, и было бы разумно предположить, что у него есть какой-то способ графического представления этой связи, изначально или через плагин. Такой плагин существует, но для версии 5.5. У меня 7.1, и она не совместима. Потерпеть поражение.

2. Архитектор предприятия

Простой поиск в Google выдает Enterprise Architect как универсальное, всеобъемлющее средство для решения такие проблемы. Итак, скачиваю и устанавливаю. Я не буду вдаваться в подробности того, как я не мог понять, как что-то делать, и как в руководствах хвастается, что может делать программа, но редко упоминается как.

Итак, я импортировал источник. Он сгенерировал множество разных классов и проанализировал все члены. Кроме того, он сгенерировал диаграммы классов. Идеально!, хотя я, но увы. На диаграммах классов показаны только отношения между классами, файлы которых находились в одной исходной папке, несмотря на то, что отношения явно зарегистрированы в свойствах классов. Поиск документации о том, как мне объединить все эти диаграммы в одну, не увенчался успехом. Потерпеть поражение.

ПРИМЕЧАНИЕ. Я создал параллельный поток перед этим здесь.

3. PHP_UML

Найден этот инструмент PEAR. Выглядело хорошо. Итак, я прочитал документацию о том, как установить его для моей установки из разных источников, и запустил его. Сначала я использовал выходной формат html. Здорово! Много документации с указателем, бла-бла-бла. Однако лучшее, что он мог сделать в нужном мне направлении, это: Диаграмма классов? Излишне говорить, что это очень бедная, суперупрощенная версия того, что мне действительно нужно. Вывод: провал.

4. Архитектор предприятия + PHP_UML

Однако PHP_UML также может генерировать XMI. Ух ты. Очень хорошо. Я могу хранить свои отношения и просматривать их по-разному и обмениваться с другими людьми.

Итак, я импортировал его в Enterprise Architect. Результат: тот же, что и раньше только с Enterprise Architect, только без диаграмм классов. Просто классы. Насколько я читал об этом, теперь я могу вручную создавать отношения. Эпический провал.

5. АргоУМЛ + PHP_UML

Где-то во время поиска решения я наткнулся на чей-то комментарий, в котором говорилось, что они используют ArgoUML. Скачал и установил. XMI импортировался с некоторыми трудностями (пришлось явно изменить версию на 1). Ошибка (см. Попытка 3).

Вывод

Такая, казалось бы, тривиальная задача, и в то же время такая сложная. Нужно ли мне просматривать весь список, пробуя каждое приложение?


person XedinUnknown    schedule 25.09.2012    source источник
comment
Это четыре разных вопроса, только два из которых связаны с XMI. Вопросы и ответы StackOverflow предназначены для формирования репозитория, в котором другие могут найти решения той же проблемы в будущем. Пожалуйста, разделите этот вопрос на один для каждого инструмента, и я отвечу на вопрос об EA.   -  person Uffe    schedule 26.09.2012
comment
Я уже говорил вам в вашем (довольно дублирующемся вопросе), что вы также можете просто использовать Phpstorm для его создания. Кроме того, этот вопрос больше похож на напыщенную речь, которая бесполезна. Если вам нужно использовать Netbeans, вы должны подать запрос на функцию (один, который, я думаю, связан с этим, был закрыт, потому что в этом нет интереса, поэтому вы могли просто выбрать неправильный продукт, если вы') недостаточно гибок или компетентен, чтобы использовать другие существующие инструменты).   -  person hakre    schedule 26.09.2012
comment
Хакра, Четыре разных вопроса не бывает. Я указал, что мне нужно в разделе «Цель». В разделе «Попытки» перечислено то, что я сделал, чтобы не было одинаковых предложений.   -  person XedinUnknown    schedule 26.09.2012
comment
Я тот, кто сказал, что это четыре разных вопроса, и я поддерживаю это. Первые два не имеют ничего общего с XMI, как следует из названия. Тот факт, что вы не можете добавить все соответствующие теги к вопросу, также является очень явным признаком того, что он охватывает слишком много разных тем. Я понимаю ваше разочарование, но, пожалуйста, примите во внимание, что это не дискуссионный форум с диалогами, а сайт вопросов и ответов, где вопросы и ответы должны быть актуальны для других (stackoverflow.com/questions/how-to-ask), и лучший способ добиться этого — сделать их конкретными.   -  person Uffe    schedule 27.09.2012
comment
Уффе, я не понимаю, где вы видите 4 разных вопроса. Попытки иллюстрируют, как я пришел туда, где я сейчас. Вопрос в следующем: я хочу создать диаграмму классов из исходного кода. Прямо сейчас у меня есть файл XMI, и я хочу создать из него диаграмму, как указано в заголовке вопроса.   -  person XedinUnknown    schedule 28.09.2012


Ответы (2)


Один из способов сделать это - использовать подход, показанный в моей попытке 2 или 4, а затем следовать инструкциям, приведенным здесь для корпоративного архитектора.

Чтобы сгенерировать файл XMI с помощью PHP_UML:

  • Следуйте этим инструкциям, чтобы установить PEAR, если он еще не установлен, если у вас есть PHP устанавливается отдельно.
  • Если вы используете XAMPP под Windows (мой случай), следуйте эти инструкции, чтобы добавить PEAR в переменную окружения PATH и таким образом сделать PEAR доступным через CMD, а также узнать, как устанавливать пакеты в обоих *nix и системы Windows. Совет: разделитель PATH — ";" (точка с запятой) для Windows.
  • В некоторых случаях, например при использовании XAMPP, вы может потребоваться активировать расширение XSL. В этом случае откройте файл php.ini (для сохранения могут потребоваться права администратора). это) и раскомментируйте или добавьте следующую строку внизу раздела «Динамические расширения»: extension=php_xsl.dll.
  • Установите пакет PHP_UML с pear install PHP_UML.
  • Выполнить phpuml -f xmi -o name_of_output_dir. Если вы планируете позже использовать сгенерированный XMI с некоторыми более старыми программами, вам может потребоваться указать XMI версии 1, добавив -x 1.
  • У меня это не сработало сразу, мол пропал ../../data/xmlschema.rng. Не знаю, почему это произошло, но если вы получите подобную ошибку, вы можете загрузить ее с здесь и поместите его в папку data прямо в вашем каталоге PEAR.

Позже этот XMI можно будет использовать с Enterprise Architect, ArgoUML и другие инструменты XMI.

person XedinUnknown    schedule 28.09.2012
comment
Было бы здорово добавить краткую инструкцию, как визуализировать граф классов, например. Архитектор предприятия. 1) Импортировать xmi в EA с помощью: Ctrl+Alt+I или Menu > Package > Import/Export > Import Package From XMI File. 2) Показать схему: ??? - person Vladimir Vukanac; 29.07.2016
comment
@VladimirVukanac Первая ссылка в этом ответе (названа здесь). - person cprn; 15.10.2019
comment
Это было давно. Я должен помнить, что было целью. Но спасибо! - person Vladimir Vukanac; 17.10.2019

(Изменить: этот ответ является альтернативой для людей, которые хотят создать диаграмму классов UML из проекта PHP, он не объясняет, как читать файлы XMI)

Цель

Мне нужно увидеть графическое представление отношений классов, возможно, разной глубины и разной степени сложности. Также было бы неплохо, если бы классы на диаграмме были кликабельными. Мне не обязательно создавать документацию.

Если вашей целью было создать диаграмму классов из проекта PHP, я нашел лучшее решение, чем использование PHP_UML. Что вам, вероятно, нужно, так это BoUML, с помощью этого программного обеспечения вы можете выбрать папку проекта PHP и выполнить ее обратный инжиниринг. Затем создайте диаграмму классов. Когда вы перетаскиваете класс на него, отношения там в отличие от AlgoUML (если я не ошибаюсь). В этом случае файлы XMI больше не используются.

person snoob dogg    schedule 07.06.2017
comment
Обидно, но BoUML устарел, например. он не поддерживает смешанные типы возврата (function Foo: ?Bar), что нарушает реверсирование. PHP_UML генерирует правильный XMI, но BoUML ломается во время импорта по той же причине. - person cprn; 15.10.2019