Який найкращий спосіб створити діаграму UML з вихідного коду Python? [зачинено]


258

Колега шукає для створення діаграм класів UML з купи вихідного коду Python. В першу чергу його цікавлять відносини успадкування, і м'яко цікавляться композиційними відносинами, і він не дуже переймається класовими атрибутами, які є просто примітивами Python.

Вихідний код досить простий і не надзвичайно злий - наприклад, він не робить ніякої химерної магії метакласу, наприклад. (В основному це з часів Python 1.5.2, дещо посипало "сучасними" 2.3ish речі.)

Яке найкраще існуюче рішення рекомендувати?


29
Модники не вважали це питання конструктивним. Я (та багато інших, хто любив це) вважав це корисним. І що? що не велика угода , ніж це не є «конструктивною»!
yati sagade

13
Не конструктивна, тому що вона буде вимагати дебатів, аргументів, дискусій ?????? Хіба це не те, що ми хочемо? Це дуже актуальне питання ..
Bhushan

2
@yatisagade, якщо ви зауважили, він був закритий, а не видалений (і при цьому багато оновлень, можливо, практично не можна видалити). Закриття просто означає, що він не може отримати нових відповідей.
tacaswell

7
@Bhushan Ні, ми не хочемо обговорення, ми хочемо пари питань і відповідей, які мають чіткі відповіді. Це не судження про те, що це цікаве запитання чи корисне запитання, це питання, наскільки це актуально для ЗО. Звичайно, ви погоджуєтесь, що "Який найкращий редактор?" (obs emacs) - це не конструктивне питання, це питання точно такої ж форми.
tacaswell

@tacaswell Деякі обговорення дуже актуальні, коли йдеться про уточнення питань у форматі запитань.
користувач32882

Відповіді:


128

Можливо, ви чули про Pylint, який допомагає статично перевіряти код Python. Мало хто знає, що він поставляється з інструментом на ім'я Pyreverse, який малює діаграми UML з зчитуваного кодом python. Pyreverse використовує графівіз як бекенд.


чи знаєте ви, як візуалізувати приватні методи, починаючи з "_"
gustavz

1
На жаль, діаграми пакету pyreverse є величезними, оскільки все розміщено горизонтально (більше обмеження в графіві, але все-таки). Не корисно для включення в документи.
морська риба

@oarfish як вирішення, ви можете вибрати вишні модулі, які потрібно включити, та створити кілька окремих графіків.
jjmontes

95

Epydoc - це інструмент для генерації документації API з вихідного коду Python. Він також генерує діаграми класів UML, використовуючи Graphviz на вигадкові способи. Ось приклад діаграми, згенерованої з вихідного коду самого Epydoc.

Оскільки Epydoc виконує як інтероспекцію об'єкта, так і розбір джерел, він може зібрати більше інформації щодо аналізаторів статичного коду, таких як Doxygen: він може перевіряти неабияку кількість динамічно сформованих класів і функцій, але також може використовувати коментарі або непризначені рядки як джерело документації, наприклад. для змінних та загальнодоступних атрибутів класу.


Чи є спосіб, щоб він виводив векторну графіку замість gif-файлів? Я не знайшов жодної документації на це, і графіки є досить марними для нічого, крім html doc.
туш

3
На сьогоднішній день, epydocздається, неможливо генерувати графіки. Перевірте цей звіт про помилку .
Luís de Sousa

14
не працює з python 3
tomsv

23

Перевірте цей список із семи інструментів uml для python


2
Мій інструмент UML з відкритим кодом Pynsource pynsource.com, про який згадувалося на вищезгаданій сторінці, зазнав багатьох змін версій з моменту згадування. Зараз він розбирає Python 3, має масштаб, компонування, підтримку надання UML ASCII та PlantUML. Наскільки я знаю, Pynsource є єдиним інструментом UML, який розпізнає атрибути екземпляра Python (а не лише атрибути класу). Це означає, що такі вирази, як self.myattr, призведуть до належного атрибута myattr в результуючому класі UML. Готові до запуску бінарні файли доступні для Mac, Windows, Ubuntu 18 і 16 - а також репо з відкритим кодом Github.
abulka

8

Певні класи добре сприйнятих програм можуть бути схематичними, але в загальному випадку цього зробити неможливо. Об'єкти Python можуть бути розширені під час виконання, а об'єкти будь-якого типу можуть бути призначені будь-якій змінній примірника. З'ясування того, які класи об’єкта можуть містити покажчики на (склад), вимагає повного розуміння поведінки програми під час виконання програми.

Метакласичні можливості Python означають, що міркування про структуру успадкування також вимагають повного розуміння поведінки програми під час виконання програми.

Щоб довести, що це неможливо, ви стверджуєте, що якщо такий діаграмний UML існував, ви можете взяти довільну програму, перетворити "зупинки" заяви в заяви, які впливатимуть на діаграму UML, і використовувати діаграмер UML для вирішення проблеми зупинки, що, як ми знаємо, неможливо.


8
Деякі хороші речі, але відмова від руки, яка вирішує, зупиняє її. Патологічні випадки тут не питання. Добре поводиться досить.
ddaa

Що ви маєте на увазі, "махнувши рукою"? Я не виписав повних доказів, але дав достатньо інформації, що кожен, хто бачив подібні докази, міг створити їх, один за складом і один за спадщиною.
Андру Лувісі

14
Ось аналогія: diff / patch може вийти з ладу різними способами, деякі з них банально. Він все ще дуже корисний у багатьох реальних випадках. У розумних випадках успадкування діаграм є тривіальним. Делегування є більш складним, але здійсненим за допомогою висновку типу в межах пакету.
ddaa

7

Якщо ви використовуєте затемнення, можливо, PyUML . Не використовував, хоча.


1
Це дійсно гарна пропозиція, але FWIW я помічаю на сайті проекту PyUML, що вони ще не підтримують Eclipse 3.4 (Ganymede). Я з нетерпінням чекаю спробувати це, коли вони це вирішать.
Білл Карвін

Чи траплялось вам отримати роботу PyUML з 3,4?
anijhaw

2
Останні зобов’язання щодо цього проекту відносяться до 2009 року. Він не відображається на Marketplace, і Eclipse не може встановити його з .zipархіву.
Luís de Sousa


5

Umbrello теж робить це. у меню перейдіть до коду -> імпортувати проект, а потім вкажіть на кореневий каталог вашого проекту. то він повертає код для ya ...


чи знаєте ви про те, як змусити Umbrello генерувати повну діаграму класів (і відносини між ними, а не лише класи самі по собі - не пам’ятайте, як називається ця діаграма)
vlad-ardelean

2
AAhh, вам потрібно імпортувати файли, і тоді, коли ви перетягуєте класи в область малювання, з'єднання автоматично додаються.
Hosane

5

vipera - це невеликий дизайнер програм, і uml включений. Ви можете побачити це в:

vipera

З найкращими побажаннями.


4

SPE IDE має вбудований UML творця. Просто відкрийте файли в SPE і натисніть на вкладку UML.

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


на жаль, він перестав розвиватися, але все ще працює тут! (2013)
Abdelouahab

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.