Как создать диаграмму UML на основе существующих классов в PHP?
Генератор PHP UML [закрыт]
Ответы (11)
Существует также инструмент PHP UML, доступный на pear.
PHP_UML:
- Может создавать файлы UML/XMI в версии 1.4 или версии 2.1 (логические представления, представления компонентов и развертывания).
- Может генерировать документацию API в формате HTML.
- Может генерировать PHP-код (скелет кода) из заданного файла XMI.
- Может преобразовывать содержимое UML/XMI из версии 1.4 в версию 2.1.
Установите его в командной строке через:
$ pear install pear/php_uml
(Раньше это был $ pear install pear/php_uml-alpha
, но с тех пор пакет стал стабильным.)
Создайте свой xmi:
$ phpuml -o project.xmi
pear install PHP_UML-1.6.1
(см. pear.php.net/package/PHP_UML/ загрузить/Все или pear.php.net/package/PHP_UML)
- person Ben; 22.11.2013
Я настоятельно рекомендую BOUML, который:
- чрезвычайно быстр (самый быстрый инструмент UML из когда-либо созданных, ознакомьтесь с тестами),
- имеет надежную поддержку импорта и экспорта PHP (также поддерживает C++, Java, Python)
- мультиплатформенность (Linux, Windows, другие ОС),
- полнофункциональный, впечатляюще интенсивно развивающийся (посмотрите историю разработки, трудно поверить, что такой быстрый прогресс возможно).
- поддерживает плагины, имеет модульную архитектуру (это позволяет вносить вклад пользователей, похоже, сообщество BOUML формируется)
phUML
phUML — это полностью автоматический генератор диаграмм классов UML, написанный на PHP под лицензией BSD. Он способен анализировать любой объектно-ориентированный исходный код PHP5 и создавать соответствующее изображение структуры oo на основе спецификации UML.
./phuml -r /var/www/my_project -graphviz -createAssociations false -neato out.png
dot
, в котором все объекты располагаются линейно, а не в форме звезды (неато) с ассоциациями по всей папке класса проекта: ~/phuml/app/phuml -r ~/path_to_your/classes/ -graphviz -createAssociations true -dot ~/output_folder/test_dot.png
- person Anthony Hatzopoulos; 05.02.2014
лучшее программное обеспечение (Windows), которое я нашел для работы с PHP и UML, — это Sparx Systems Архитектор предприятия. помимо множества функций, он поддерживает следующие для PHP:
- Реконструировать объектно-ориентированный PHP в диаграммы классов UML
- Создание определений классов PHP из диаграмм классов UML
- Синхронизируйте изменения, сделанные в классе UML, с соответствующим определением класса PHP.
- Синхронизируйте изменения, сделанные в определении класса PHP, с соответствующим классом UML.
- Создайте диаграммы последовательности UML, чтобы показать, какие классы PHP используют и как они используются.
- Создание подробной документации вашего PHP-кода в стандартном формате RTF и HTML.
- Выполняйте разработку кода на моделях для создания базовых страниц PHP.
не бесплатно (199 долларов), но определенно стоит своих денег.
Вы уже пробовали Autodia? В прошлый раз, когда я пробовал это, это было не идеально, но это было достаточно хорошо.
Также есть php2xmi. Вам нужно немного поработать вручную, но он генерирует все классы, поэтому все, что вам нужно сделать, это перетащить их в диаграмму классов в Зонтик.
В противном случае создание диаграммы с использованием отражения и графической визуализации довольно просто. У меня есть фрагмент здесь, который вы можете использовать как отправная точка.
Вот как я это сделал (непосредственно из кода в чертеж PDF без ручного рисования чего-либо):
- Используйте BOUML для "реверсивного проектирования PHP-кода" [sic] для извлечения модели класса (BOUML доступен из "universe "репозиторий Ubuntu). Я серьезно рекомендую BOUML для этого шага, потому что это очень быстро по сравнению со многими другими программами, которые я пробовал. Кроме того, кажется, что BOUML правильно извлекает модель (для тех частей, которые BOUML даже пытается извлечь).
- Используйте BOUML для экспорта модели в файл XMI 1.4.
- Используйте ArgoUML для импорта указанного файла XMI (для этого шага вы можете использовать версию для веб-старта)
- Экспорт XMI из ArgoUML (я не знаю, какая версия/вариант XMI является результатом, но это не тот же результат, что и вывод из BOUML. argouml-graphviz не может обрабатывать файл XMI непосредственно из BOUML).
- Используйте argouml-graphviz, чтобы преобразовать файл XMI, экспортированный ArgoUML, в точечный формат (возможно, вам потребуется использовать saxon вместо xsltproc, чтобы заставить его работать из-за использования XSLT2)
- Используйте точку или fdp или sfdp для отображения диаграммы классов.
Вот пример подходящей командной строки для использования fdp для вывода диаграммы PDF (при условии, что файл точек, сгенерированный обработкой XLST argouml-graphviz, сохранен как xmi-model.dot):
fdp -Tpdf -Gmaxiter=1000 -Gmindist=0.5 -Gpackmode=node \
-Eweight=0.05 -Elen=1.0 -Eminlen=1.0 -Gsplines=true \
-Goverlap=false xmi-model.dot -oxmi-model.pdf
В качестве альтернативы вы можете попробовать PHP_UML или php2xmi вместо BOUML для выполнения части "обратного инжиниринга". Я еще не пробовал это.
(Я использую фразу «реверс-инжиниринг», потому что кажется, что люди, использующие UML, используют эти слова, когда имеют в виду извлечение информации о классе и методе из исходного кода. Лично я интерпретирую эти слова как извлечение информации из исполняемого двоичного файла или захваченных необработанных данных проводки.)
Если вы предпочитаете рисовать диаграмму классов вручную (вместо использования компьютера для всего рисунка), вы можете использовать для рисования либо BOUML, либо ArgoUML. В этом случае поможет использование данных «обратного инжиниринга» через BOUML.
Если вы хотите легко генерировать UML из существующих классов PHP, вы можете рассмотреть PHPStorm 3.0 IDE. Он хорошо воспроизводит существующий код в UML.
Взгляните на список функций PHP Storm.
Вы можете использовать Visual Paradigm для UML. Это может быть не самый высокооплачиваемый продукт (699 долларов США), просто как вариант, если кто-то захочет попробовать. Он может создавать диаграмму классов из PHP и наоборот, и не только PHP, есть множество языков, которые вы можете выбрать, такие как C #, C ++, Ruby, Java, VB.NET, Python, Objective C, Perl и т. д. Также есть пробная версия, которую вы можете проверить.
Теоретически вы можете использовать PhpStorm для визуализации ваших классов с использованием UML. Генерация не очень хороша, но вы можете эффективно реорганизовать материал и снова, по крайней мере, предварительно просмотреть родителей, реализации, константы, атрибуты, методы и их видимость в хорошем виде.
Ситуация
Я хочу визуализировать связь между уже существующими компонентами для коллеги.
Обработка с использованием PHPStorm
https://blog.jetbrains.com/phpstorm/2017/09/uml-diagrams-in-phpstorm-2017-2/
Преимущества
- Хороший пользовательский интерфейс, окончательная диаграмма.
- Умеет рефакторить код из диаграммы.
- Возможность добавлять заметки.
- Диаграмма классов красиво символизирует частные/публичные свойства, конструкторы, методы.
Недостатки
- Нет поддержки PHP 7.
- Больно пользоваться. Невозможно изменить размер сгенерированных блоков.
- При добавлении нового отношения предыдущие случайно теряются :O wtf?
- Перезапуск PhpStorm уничтожает диаграммы
- Передумал, невозможно использовать отношения
Результат
Так или иначе, после некоторого мучительного часа работы я смог создать только несвязанные блоки, и мне пришлось использовать дополнительную программу для связывания отношений. Действительно плохо. Но я верю, что как только они заставят его работать правильно, это будет отличная функция, потому что по мере изменения кода диаграммы будут автоматически обновляться!
Пока не используйте PhpStorm для диаграмм UML.
Ну, если честно, в первую очередь вы должны генерировать не модель UML из кода, а код из модели UML;).
Даже если вы находитесь в редкой ситуации, когда вам нужно выполнить обратный инжиниринг, обычно предлагается сделать это вручную или, по крайней мере, привести в порядок диаграммы, поскольку автоматически сгенерированный UML имеет очень плохое визуальное (=информационное) представление. значение большую часть времени.
Если вам просто нужно сгенерировать диаграммы, возможно, стоит спросить себя, почему именно? Кто является целевой аудиторией и какова цель? Что может предложить автоматически сгенерированная диаграмма, а чего нет в коде?
В основном я принимаю только один ответ на этот вопрос. Он просто стал слишком большим и непонятным.
Что опять-таки является причиной начать с UML в первую очередь, а не начинать кодирование ;) Это называется анализом, и он находится в упадке, потому что каждый второй человек в бизнесе считает, что это слишком дорого и не очень необходимо.