Python kaynak kodundan bir UML diyagramı oluşturmanın en iyi yolu nedir? [kapalı]


258

Bir meslektaş, Python kaynak kodu yığınlarından UML sınıf diyagramları oluşturmak istiyor. Öncelikle miras ilişkileriyle ilgileniyor ve kompozisyon ilişkileriyle biraz ilgileniyor ve sadece Python ilkelleri olan sınıf öznitelikleri ile pek ilgilenmiyor.

Kaynak kodu oldukça basittir ve muazzam derecede kötü değildir - örneğin herhangi bir fantezi metasınıf büyüsü yapmaz. (Çoğunlukla Python 1.5.2 günlerinden, bazı "modern" 2.3ish şeyler serpilir.)

Önerilen en iyi çözüm hangisidir?


29
Modlar bu soruyu yapıcı bulmadı. Ben (ve bunu destekleyen birçok kişi) bunu yararlı buldum. Ne olmuş yani? bu "yapıcı" olmamaktan daha büyük bir anlaşma değildir!
yati sagade

13
Yapıcı değil çünkü tartışmalar, tartışmalar, tartışmalar isteyecek ?????? İstediğimiz bu değil mi? Bu çok alakalı bir soru ..
Bhushan

2
@yatisagade kapatıldığını, silinmediğini (ve bu kadar upvotes ile muhtemelen pratik olarak asla silinemez) dikkat ederseniz. Kapatmak, yeni cevaplar alamayacağı anlamına gelir.
tacaswell

7
@Bhushan Hayır, tartışma istemiyoruz, net cevapları olan soru ve cevap çiftleri istiyoruz. Bu ilginç bir soru veya yararlı bir soru olduğuna dair bir yargı değil, SO için konuya bağlı olma meselesidir. Şüphesiz, "En iyi editör nedir?" (obs emacs) yapıcı bir soru değildir, bu soru tamamen aynı kalıptadır.
tacaswell

@tacaswell Soruları Soru-Cevap biçiminde hassaslaştırma söz konusu olduğunda bazı tartışmalar çok önemlidir.
user32882

Yanıtlar:


129

Python kodunun statik olarak kontrol edilmesine yardımcı olan Pylint'i duymuş olabilirsiniz . Çok az kişi , UML diyagramlarını okuduğu python kodundan çizen Pyreverse adlı bir araçla geldiğini biliyor . Pyreverse, graphviz'i arka uç olarak kullanır.

Bu şekilde kullanılır:

pyreverse -o png -p yourpackage .

burada .tek bir dosya da olabilir.


"_" ile başlayan özel yöntemleri nasıl görselleştirebileceğinizi biliyor musunuz
gustavz

1
Ne yazık ki, pyreverse paket diyagramları çok büyüktür, çünkü her şey yatay olarak yerleştirilmiştir (daha fazla grafik sınırlaması, ancak yine de). Belgelere dahil etmek için yararlı değildir.
Oarfish

Geçici çözüm olarak, dahil etmek istediğiniz modülleri kiraz olarak seçebilir ve birkaç ayrı grafik oluşturabilirsiniz.
jjmontes

95

Epydoc , Python kaynak kodundan API belgeleri oluşturmak için bir araçtır. Aynı zamanda Graphviz'i süslü şekillerde kullanarak UML sınıf diyagramları oluşturur . İşte Epydoc'un kaynak kodundan oluşturulan bir diyagram örneği .

Epydoc, hem nesne içgözlemi hem de kaynak ayrıştırma gerçekleştirdiği için Doxygen gibi statik kod analizörlerine ilişkin daha fazla bilgi toplayabilir: dinamik olarak oluşturulmuş sınıfları ve işlevleri önemli miktarda inceleyebilir, ancak açıklamaları veya atanmamış dizeleri belge kaynağı olarak da kullanabilir; değişkenler ve sınıf genel özellikleri için.


Gif yerine vektör grafikleri çıkarmanın bir yolu var mı? Bu konuda hiçbir belge bulamadım ve grafikler html doc dışında bir şey için oldukça işe yaramaz.
oarfish

3
Şu anda, epydocgrafik üretemiyor gibi görünüyor. Bu hata raporuna göz atın .
Luís de Sousa

14
python 3 ile çalışmaz
tomsv

23

Python için yedi uml aracının bu listesine göz atın


2
Yukarıdaki sayfada adı geçen açık kaynak UML aracım Pynsource pynsource.com , bahsedildiği günden bu yana birçok sürüm değişikliğine uğradı. Şimdi Python 3'ü ayrıştırıyor, yakınlaştırma, düzen, ASCII UML ve PlantUML görüntü oluşturma desteği var. Pynsource, bildiğim kadarıyla, Python örneği niteliklerini (sadece sınıf niteliklerini değil) tanıyan tek UML aracıdır. Bu, self.myattr gibi ifadelerin, sonuçta ortaya çıkan UML sınıfında uygun bir “myattr” niteliği ile sonuçlanacağı anlamına gelir. Mac, Windows, Ubuntu 18 ve 16 ve ayrıca açık kaynaklı bir Github repo için çalıştırılmaya hazır ikili dosyalar mevcuttur.
abulka

8

İyi davranılmış programların bazı sınıfları diyagramlanabilir olabilir, ancak genel durumda, yapılamaz. Python nesneleri çalışma zamanında genişletilebilir ve herhangi bir türdeki nesneler herhangi bir örnek değişkenine atanabilir. Bir nesnenin hangi sınıflara (kompozisyon) işaretçileri içerebileceğini bulmak, programın çalışma zamanı davranışının tam olarak anlaşılmasını gerektirir.

Python'un metasınıf yetenekleri, miras yapısı hakkında akıl yürütmenin, programın çalışma zamanı davranışının tam olarak anlaşılmasını gerektireceği anlamına gelir.

Bunların imkansız olduğunu kanıtlamak için, böyle bir UML diyagramı varsa, rasgele bir program alabileceğinizi, "dur" ifadelerini UML diyagramını etkileyecek ifadelere dönüştürebileceğinizi ve durdurma problemini çözmek için UML diyagramını kullanabileceğinizi, ki bildiğimiz gibi imkansız.


8
Bazı iyi şeyler, ancak durma çözme elinden feragat etmek onu mahveder. Patolojik vakalar burada mesele değildir. İyi davranmak yeterlidir.
ddaa

Ne demek "elden feragat"? Tam kanıtları yazmadım, ancak benzer kanıtlar gören herkesin bir kompozisyon ve bir miras için oluşturabileceği kadar yeterli bilgi verdim.
Andru Luvisi

14
İşte bir benzetme: diff / patch, bazıları önemsiz olan birçok farklı şekilde başarısız olabilir. Birçok gerçek dünya örneğinde hala çok faydalıdır. Makul durumlarda, diyagram mirası önemsizdir. Yetkilendirme daha karmaşıktır, ancak bir paketin sınırları içindeki türden çıkarımlara göre uygulanabilir.
ddaa

7

Tutulma kullanıyorsanız, belki PyUML . Yine de kullanmadım.


1
Bu gerçekten iyi bir öneri, ama FWIW PyUML proje sitesinde henüz Eclipse 3.4'ü (Ganymede) desteklemediklerini fark ettim. Bunu çözdüklerinde denemek için sabırsızlanıyorum.
Bill Karwin

PyUML'nin 3.4 ile çalışmasını sağladınız mı?
anijhaw

2
Bu projenin son taahhütleri 2009 yılına kadar uzanıyor. Marketplace'de görünmüyor ve Eclipse projeyi .ziparşivden yükleyemiyor .
Luís de Sousa


5

Umbrello da yapıyor. menüde Kod -> projeyi içe aktar'a gidin ve ardından projenizin kök dizinine gidin. o zaman sizin için kodu tersine çevirir ...


Umbrello'nun tüm sınıf diyagramını oluşturmasını sağlamanın bir yolunu biliyor musunuz (ve aralarındaki ilişkiler, sadece sınıflar tarafından değil - bu diyagramın nasıl adlandırıldığını hatırlamayın)
vlad-ardelean

2
AAhh, dosyaları içe aktarmanız gerekir ve ardından sınıfları çizim alanına sürükleyip bıraktığınızda bağlantılar otomatik olarak eklenir.
Hosane

5

vipera küçük bir uygulama tasarımcısıdır ve uml dahildir. Şurada görebilirsiniz:

vipera

Saygılarımla.


4

SPE IDE yerleşik UML yaratıcısı. Dosyaları SPE'de açın ve UML sekmesine tıklayın.

İhtiyaçlarınız için ne kadar kapsamlı olduğunu bilmiyorum, ancak kullanmak için ek indirme veya yapılandırma gerektirmez.


ne yazık ki gelişmeyi durdurdu, ama yine de burada çalışıyor! (2013)
Abdelouahab

4

Sparx'ın Kurumsal Mimarı Python kaynağının yuvarlak açma işlemini gerçekleştirir. Ücretsiz sınırlı bir deneme sürümüne sahipler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.