Генератор PHP UML [закрыто]

110

Как создать диаграмму UML на основе существующих классов в PHP?

Джеффри04
источник
2
Я больше не работаю с PHP, поэтому у меня нет кода для тестирования. Когда я опубликовал это, ни один из первоначальных ответов не давал достаточного ответа, но с тех пор многое изменилось. Я работал с PHP 5.2, а сейчас это PHP7.
Jeffrey04,

Ответы:

42

Есть также инструмент 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

kguest
источник
2
по какой-то причине pear.com не нравится эта ссылка без косой черты в конце: pear.php.net/package/PHP_UML
Стивен Фьюри
1
@ Стивен, да, я тоже это заметил! Если вы щелкнете ссылку, она выдаст вам 404, но если вы выберете адресную строку и нажмете клавишу ввода, она работает.
nickf
1
Несколько лет спустя команда теперь pear install PHP_UML-1.6.1(см. Pear.php.net/package/PHP_UML/download/All или pear.php.net/package/PHP_UML )
Бен
1
Это должен быть принятый ответ. Средство эффектное.
Xofo
3
не работает с php 7
DevWL 05
41

Я настоятельно рекомендую BOUML, который:

  • чрезвычайно быстр (самый быстрый инструмент UML из когда-либо созданных, проверьте тесты ),
  • имеет надежную поддержку импорта и экспорта PHP (также поддерживает C ++, Java, Python)
  • является мультиплатформенным (Linux, Windows, другие ОС),
  • полнофункциональный, впечатляюще интенсивно развитый (посмотрите на историю разработки , сложно поверить, что такой быстрый прогресс возможен).
  • поддерживает плагины, имеет модульную архитектуру (это позволяет пользователям вносить свой вклад , похоже, что сообщество BOUML формируется)
Дэниел Геллинг
источник
Тесты выглядят действительно впечатляюще. Мне нравится корпоративный архитектор, но он не поддерживает PHP. Я передам этот инструмент, спасибо.
Пол Драгунис
1
@Paul Dragoonis Sparx Systems Enterprise Architect делает имеют PHP поддержку - и не самый худший .
топор.
5
На веб-странице BOUML теперь говорится: «ВНИМАНИЕ: из-за постоянных нарушений лицензий, нападок и оскорблений со стороны людей из Википедии [...] я решил прекратить работу над Bouml, кроме как для исправления ошибок».
MPV
1
«[18 декабря 2011 г.] Загрузки приостановлены до дальнейшего уведомления» с их официального веб-сайта. http://bouml.free.fr/download.html - это потому, что мне нужна была версия для Win7. Я предполагаю, что он все еще может быть доступен в репозиториях Ubuntu - нужно проверить
Вал Редченко
4
Версия 6.1 выпущена 23 сентября 2012 . Похоже, развитие снова пошло в гору. Никаких уведомлений о замедлении, остановке и т. Д. Bouml.fr/historic.html
Эндрю Энсли,
24

phUML

phUML - это полностью автоматический генератор диаграмм классов UML, написанный на PHP, под лицензией BSD. Он способен анализировать любой объектно-ориентированный исходный код PHP5 и создавать соответствующее графическое представление структуры oo на основе спецификации UML.

Пример UML

./phuml -r /var/www/my_project -graphviz -createAssociations false -neato out.png

Пошаговое руководство

Энтони Хацопулос
источник
требует загрузки SVN / subversion и на самом деле не говорит, какая лицензия на исходный код, но выглядит хорошо! да, я бы внимательно посмотрел на исходный код, на него нет абсолютно никакой лицензии, и на сайте, я думаю, есть только
Ссылка на
это лицензия на содержание сайта, ЛИЦЕНЗИЯ на проект должна быть включена в сам проект.
3
Я отправил электронное письмо автору, Якобу, и он ответил обновлением репозитория с четкой и понятной лицензией bsd с
тремя пунктами
Я загрузил это и заставил его работать, немного поработав. Было действительно неплохо, за исключением того, что я не могу заставить ассоциации работать, но я уверен, что разберусь. Красиво, просто. Хотя нет графического интерфейса, но это не так уж важно.
Impulss
19

Лучшее (Windows) программное обеспечение, которое я нашел для PHP и UML, - это Sparx Systems Enterprise Architect . Помимо множества функций , он поддерживает следующее для PHP:

  • Обратное проектирование объектно-ориентированного PHP в диаграммы классов UML
  • Создание определений классов PHP из диаграмм классов UML
  • Синхронизировать изменения, сделанные в классе UML, с соответствующим определением класса PHP
  • Синхронизировать изменения, внесенные в определение класса PHP, в соответствующий класс UML
  • Создавайте диаграммы последовательности UML, чтобы показать, какие классы PHP используют и как они используются.
  • Создавайте подробную документацию по вашему PHP-коду в стандартном формате RTF и HTML.
  • Выполните разработку кода на моделях для создания базовых страниц PHP.

не бесплатно (199 долларов), но определенно стоит своих денег.

топор.
источник
1
Вау, это действительно полезная и профессиональная программа, спасибо за совет !! Я просто попробовал создать диаграмму классов UML с помощью метода обратного проектирования советника Sparx из исходного кода PHP, и это сработало как шарм, я был шокирован, насколько хорошо это работает. : D По мере того, как наши проекты становятся все больше и больше, и мы создаем все больше и больше объектов, становится все труднее следить за нашим собственным кодом, но он очень помогает в этом, поскольку он правильно генерирует диаграммы UML (из конечно, могут быть исключения) ПОСЛЕ того, как мы закончили код. Это даже помогает упростить отношения между объектами.
Sk8erPeter 09
@ax - я новичок, и я немного теряюсь в их списке функций (в разделе «сравнить выпуски»). Как будет называться функция, которая позволяет мне вводить код PHP (или ссылаться на файлы PHP) и получать взамен диаграмму? Пытаюсь понять, какая версия мне может понадобиться.
JDelage
7

Вы уже пробовали Autodia ? В прошлый раз, когда я попробовал, это было не идеально, но было достаточно.

Винко Врсалович
источник
Я пробовал autodia, но почему-то не могу создать точную диаграмму классов (php5)
Jeffrey04,
7

Также есть php2xmi . Вам придется немного поработать вручную, но он генерирует все классы, поэтому все, что вам нужно сделать, это перетащить их на диаграмму классов в Umbrello .

В противном случае создать диаграмму с помощью отражения и графвиза довольно просто. У меня есть фрагмент кода здесь , что вы можете использовать в качестве отправной точки.

troelskn
источник
7

Вот как я это сделал (прямо из кода в чертеж PDF без рисования вручную):

  1. Используйте BOUML для «обратного проектирования PHP-кода» [sic], чтобы извлечь модель класса (BOUML доступен из репозитория «Universe» Ubuntu). Я серьезно рекомендую BOUML для этого шага, потому что он действительно быстрый по сравнению со многими другими программами, которые я пробовал. Вдобавок кажется, что BOUML правильно извлекает модель (для тех частей, которые BOUML даже пытается извлечь).
  2. Используйте BOUML для экспорта модели в виде файла XMI 1.4.
  3. Используйте ArgoUML для импорта указанного файла XMI (для этого шага вы можете использовать версию для веб-запуска)
  4. Экспорт XMI из ArgoUML (я не знаю, какая версия / вариант XMI выводится, но это не тот же результат, что и вывод из BOUML. Argouml-graphviz не может обрабатывать файл XMI непосредственно из BOUML).
  5. Используйте argouml-graphviz для преобразования экспортированного файла XMI ArgoUML в точечный формат (вам может потребоваться использовать saxon вместо xsltproc, чтобы заставить его работать из-за использования XSLT2)
  6. Использование точка или FDP или ПРМФ , чтобы сделать диаграмму классов.

Вот пример подходящей командной строки для использования 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.

Микко Ранталайнен
источник
5

Если вы хотите легко сгенерировать UML из существующих классов PHP, вы можете подумать о PHPStorm 3.0 IDE. Он хорошо воспроизводит существующий код в UML.

Взгляните на список функций PHP Storm .

Дэвид Лундквист
источник
2
Не визуализирует зависимости, только наследование.
Василий Муса
1

Вы можете использовать Visual Paradigm для UML. Это может быть не самый высокооплачиваемый (это 699 долларов США) продукт, просто как вариант, если кто-то захочет попробовать. Он может создавать диаграмму классов из PHP и наоборот, и не только из PHP, вы можете выбрать множество языков, таких как C #, C ++, Ruby, Java, VB.NET, Python, Objective C, Perl и т. Д. пробную версию вы можете проверить.

Хендра Узия
источник
1

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

ситуация

Я хочу визуализировать общение между уже существующими компонентами с коллегой.

Процесс с использованием PHPStorm

https://blog.jetbrains.com/phpstorm/2017/09/uml-diagrams-in-phpstorm-2017-2/

Преимущества

  • Хороший интерфейс, итоговая диаграмма.
  • Возможность рефакторинга кода по диаграмме.
  • Возможность добавлять заметки.
  • Диаграмма классов красиво символизирует частные / общедоступные свойства, конструкторы и методы.

Недостатки

  • Нет поддержки PHP 7.
  • Уж больно пользоваться. Невозможно изменить размер созданных ящиков.
  • При добавлении нового отношения предыдущие теряются случайным образом: O wtf?
  • Перезапуск PhpStorm уничтожает диаграммы
  • Передумал, нельзя использовать отношения

Результат

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

На данный момент не используйте PhpStorm для диаграмм UML.

Лукас Лукач
источник
Я полагаю, это новый (:
Jeffrey04
Верный. В настоящее время я в такой же ситуации. Я разработал сложную часть системы и хочу визуализировать ее для своего коллеги. Я пробовал несколько инструментов, но они хреновые и уродливые :) Я собираюсь сделать это с помощью PHPStorm и обновлю свой ответ, как он выглядит и насколько он действительно мощный. Я дам вам знать сегодня результат @ Jeffrey04
Лукас Лукач
Ничего страшного, на самом деле я уже довольно давно не занимаюсь PHP
Jeffrey04
0

Если честно, в первую очередь вы должны генерировать не UML-модель из кода, а код из UML-модели;).

Даже если вы находитесь в редкой ситуации, когда вам нужно провести обратный инжиниринг, обычно рекомендуется делать это вручную или, по крайней мере, приводить в порядок диаграммы, так как автоматически сгенерированный UML имеет очень плохую визуализацию (= информацию) ценить большую часть времени.

Если вам просто нужно сгенерировать диаграммы, вероятно, стоит спросить себя, почему именно? Кто целевая аудитория и какова цель? Что предлагает автоматически сгенерированная диаграмма, а какой код нет?

В основном я принимаю только один ответ на этот вопрос. Он стал слишком большим и непонятным.

Что снова является причиной в первую очередь начать с UML, а не начинать кодирование;) Это называется анализом, и он идет на спад, потому что каждый второй человек в бизнесе думает, что это слишком дорого и не совсем необходимо.

trueanalysis.eu
источник
7
Верно, но жизнь сложнее некоторых принципов, которыми разумно пользоваться. Возможно, вам потребуется сравнить реальный код с исходной диаграммой UML или проанализировать чей-то код или какой-то код, который был реализован без диаграмм UML.
DAH
3
Не согласен. Большое значение имеет визуализация кодовой базы / модуля с помощью диаграммы. Код похож на маршруты улиц, но при слишком большом количестве направлений иногда может пригодиться карта.
Василий Муса
1
Большинство программ для рисования UML имеют настолько плохой пользовательский интерфейс, что быстрее написать код и автоматически сгенерировать диаграмму UML, даже если вы затем выбросите код, который вы использовали для создания диаграммы ...
Микко Ранталайнен