วิธีที่ดีที่สุดในการสร้างไดอะแกรม UML จากซอร์สโค้ด Python คืออะไร [ปิด]


258

เพื่อนร่วมงานกำลังมองหาการสร้างไดอะแกรมคลาส UML จากกองรหัสแหล่ง Python เขาสนใจในเรื่องความสัมพันธ์ระหว่างการรับมรดกและสนใจในความสัมพันธ์แบบประพันธ์และไม่สนใจคุณสมบัติของคลาสที่เป็นเพียงแค่ภาษา Python เท่านั้น

ซอร์สโค้ดค่อนข้างตรงไปตรงมาและไม่ชั่วร้ายมาก - มันไม่ได้ทำเวทย์มนตร์แฟนซีใด ๆ (ส่วนใหญ่มาจากยุคของ Python 1.5.2 พร้อมกับสิ่งที่ "ทันสมัย" 2.3ish โรย)

ทางออกที่ดีที่สุดในการแนะนำคืออะไร


29
Mods ไม่พบคำถามนี้สร้างสรรค์ ฉัน (และคนอื่น ๆ ที่ชื่นชอบสิ่งนี้) พบว่ามีประโยชน์ แล้วอะไรล่ะ นั่นไม่ใช่เรื่องใหญ่ไปกว่านี้ไม่ใช่การ "สร้างสรรค์"!
yati sagade

13
ไม่สร้างสรรค์เพราะจะขอการอภิปรายการโต้เถียงการอภิปราย ?????? นั่นไม่ใช่สิ่งที่เราต้องการหรือ นี่คือคำถามที่เกี่ยวข้องมาก ..
ภูชัน

2
@ พอใจถ้าคุณทราบว่ามันถูกปิดไม่ได้ถูกลบ (และด้วย upvotes มากมายนี้อาจไม่สามารถลบได้ในทางปฏิบัติ) การปิดเพียงหมายความว่าไม่สามารถรับคำตอบใหม่ได้
tacaswell

7
@Bushan ไม่เราไม่ต้องการสนทนาเราต้องการคู่คำถามและคำตอบที่มีคำตอบที่ชัดเจน มันไม่ได้เป็นการตัดสินว่ามันเป็นคำถามที่น่าสนใจหรือเป็นคำถามที่มีประโยชน์ แต่เป็นเรื่องของการเป็นหัวข้อสำหรับ SO แน่นอนคุณเห็นด้วยว่า "ตัวแก้ไขที่ดีที่สุดคืออะไร" (obs emacs) ไม่ใช่คำถามที่สร้างสรรค์คำถามนี้มีความเหมือนกันทุกประการ
tacaswell

@tacaswell การสนทนาบางอย่างมีความเกี่ยวข้องมากเมื่อพูดถึงการปรับคำถามเป็นรูปแบบคำถาม & คำตอบ
user32882

คำตอบ:


128

คุณอาจเคยได้ยินPylintที่ช่วยตรวจสอบรหัสหลามแบบคงที่ มีคนไม่กี่คนที่รู้ว่ามันมาพร้อมกับเครื่องมือชื่อPyreverseที่ดึงไดอะแกรม UML จากรหัสไพ ธ อนที่อ่าน Pyreverse ใช้ graphviz เป็นแบ็กเอนด์


คุณรู้วิธีการเห็นภาพวิธีการส่วนตัวเริ่มต้นด้วย "_"
gustavz

1
น่าเสียดายที่ไดอะแกรมแพ็คเกจ pyreverse มีขนาดใหญ่มากเนื่องจากทุกอย่างวางในแนวนอน (มากกว่าข้อ จำกัด ของกราฟวิซ ไม่มีประโยชน์สำหรับการรวมไว้ในเอกสาร
oarfish

@ ทำให้เป็นวิธีการแก้ปัญหาคุณสามารถเลือกโมดูลที่คุณต้องการรวมและสร้างกราฟที่แยกจากกันหลาย ๆ
jjmontes

95

Epydocเป็นเครื่องมือในการสร้างเอกสาร API จากรหัสแหล่ง Python นอกจากนี้ยังสร้างไดอะแกรมคลาส UML โดยใช้Graphvizด้วยวิธีที่แปลกใหม่ นี่คือตัวอย่างของแผนภาพที่สร้างขึ้นจากซอร์สโค้ดของ Epydoc เอง

เนื่องจาก Epydoc ดำเนินการทั้งการวิปัสสนาวัตถุและการแยกวิเคราะห์แหล่งข้อมูลจึงสามารถรวบรวมข้อมูลที่เกี่ยวกับการวิเคราะห์โค้ดแบบคงที่เช่น Doxygen: สามารถตรวจสอบจำนวนและคลาสของฟังก์ชันที่สร้างขึ้นแบบไดนามิก แต่ยังสามารถใช้ข้อคิดเห็นหรือสตริงที่ไม่ได้กำหนด สำหรับตัวแปรและแอตทริบิวต์สาธารณะของคลาส


มีวิธีการที่จะมีกราฟิกแบบเวกเตอร์แทน gif หรือไม่? ฉันไม่พบเอกสารเกี่ยวกับเรื่องนั้นและกราฟนั้นไม่มีประโยชน์อะไรเลยนอกจากเอกสาร html
oarfish

3
ปัจจุบันepydocดูเหมือนว่าจะไม่สามารถสร้างกราฟได้ ตรวจสอบรายงานข้อผิดพลาดนี้
Luís de Sousa

14
ไม่ทำงานกับ python 3
tomsv

23

2
เครื่องมือ UML แบบโอเพ่นซอร์สของฉัน Pynsource pynsource.com ที่อ้างถึงในหน้าดังกล่าวได้รับการเปลี่ยนแปลงหลายเวอร์ชันนับตั้งแต่มีการกล่าวถึง ตอนนี้แยกวิเคราะห์ Python 3 มีการซูมเค้าโครง ASCII UML และการสนับสนุนการเรนเดอร์ PlantUML Pynsource ยังเป็นเท่าที่ฉันรู้เครื่องมือ UML เพียงตัวเดียวที่รับรู้คุณลักษณะของอินสแตนซ์ Python (ไม่ใช่แค่แอตทริบิวต์คลาส) ซึ่งหมายความว่านิพจน์เช่น self.myattr จะส่งผลให้มีแอตทริบิวต์ที่เหมาะสม“ myattr” ในคลาส UML ที่เกิดขึ้น ไบนารีพร้อมใช้งานพร้อมใช้งานสำหรับ Mac, Windows, Ubuntu 18 และ 16 - รวมถึง Github repo แบบโอเพ่นซอร์ส
abulka

8

บางคลาสของโปรแกรมที่ทำงานได้ดีอาจเป็นไดอะแกรม แต่ในกรณีทั่วไปมันไม่สามารถทำได้ วัตถุ Python สามารถขยายได้ในเวลาใช้งานและสามารถกำหนดวัตถุประเภทใด ๆ ให้กับตัวแปรอินสแตนซ์ใดก็ได้ การหาว่าคลาสใดที่ออบเจ็กต์สามารถมีพอยน์เตอร์ไปที่ (องค์ประกอบ) จะต้องมีความเข้าใจอย่างเต็มที่เกี่ยวกับพฤติกรรมการทำงานของโปรแกรม

ความสามารถในการ metaclass ของงูใหญ่หมายความว่าการให้เหตุผลเกี่ยวกับโครงสร้างการสืบทอดจะต้องมีความเข้าใจอย่างเต็มที่เกี่ยวกับพฤติกรรมการทำงานของโปรแกรม

เพื่อพิสูจน์ว่าสิ่งเหล่านี้เป็นไปไม่ได้คุณให้เหตุผลว่าถ้ามี UML diagrammer อยู่คุณสามารถใช้โปรแกรมโดยพลการแปลงคำสั่ง "halt" เป็นข้อความที่จะกระทบกับแผนภาพ UML และใช้ UML diagrammer เพื่อแก้ปัญหาการหยุดชะงัก ซึ่งอย่างที่เรารู้ว่าเป็นไปไม่ได้


8
สิ่งที่ดีบางอย่าง แต่การหยุดยั้งการทำให้มือถี่ถ้วนหยุดลง กรณีทางพยาธิวิทยาไม่ใช่เรื่องที่นี่ ความประพฤติดีก็เพียงพอแล้ว
ddaa

คุณหมายถึง "การยกเว้นด้วยมือ"? ฉันไม่ได้เขียนบทพิสูจน์อย่างสมบูรณ์ แต่ฉันให้ข้อมูลมากพอที่ใครก็ตามที่ได้เห็นหลักฐานที่คล้ายกันสามารถสร้างพวกเขาหนึ่งสำหรับองค์ประกอบและหนึ่งสำหรับมรดก
Andru Luvisi

14
นี่คือการเปรียบเทียบ: diff / patch สามารถล้มเหลวได้หลายวิธีบางอย่างก็เล็กน้อย มันยังคงมีประโยชน์มากในหลายกรณีในโลกแห่งความเป็นจริง ในกรณีที่เหมาะสมการถ่ายทอดไดอะแกรมเป็นเรื่องเล็กน้อย การมอบหมายนั้นยุ่งยากมากขึ้น แต่ทำได้โดยการอนุมานประเภทภายในขอบเขตของแพ็คเกจ
ddaa

7

ถ้าคุณใช้คราสอาจPyUML ยังไม่ได้ใช้มัน


1
นั่นเป็นคำแนะนำที่ดีจริงๆ แต่ FWIW ที่ฉันสังเกตเห็นในไซต์โครงการ PyUML ว่าพวกเขายังไม่รองรับ Eclipse 3.4 (Ganymede) ฉันจะตั้งตาคอยที่จะลองใช้งานเมื่อมันทำงานออกมา
Bill Karwin

คุณได้รับ PyUML กับ 3.4 หรือไม่
anijhaw

2
ล่าสุดส่งมอบโครงการวันที่นี้กลับไปที่ 2009 มันไม่แสดงใน Marketplace และ Eclipse ไม่สามารถติดตั้งได้จากที่.zipเก็บถาวร
Luís de Sousa


5

Umbrello ก็ทำเช่นกัน ในเมนูไปที่รหัส -> นำเข้าโครงการแล้วชี้ไปที่ไดเรกทอรีหลักของโครงการของคุณ แล้วมันจะกลับรหัสสำหรับยา ...


คุณรู้วิธีที่จะทำให้ Umbrello สร้างไดอะแกรมคลาสที่สมบูรณ์ (และความสัมพันธ์ระหว่างพวกเขาไม่ใช่แค่คลาสเอง - จำได้ว่าไดอะแกรมนั้นเรียกว่าอย่างไร)
vlad-ardelean

2
ใช่แล้วคุณต้องนำเข้าไฟล์จากนั้นเมื่อคุณลากและวางคลาสลงในพื้นที่วาดรูปการเชื่อมต่อจะถูกเพิ่มโดยอัตโนมัติ
Hosane

5

vipera เป็นผู้ออกแบบแอปพลิเคชั่นขนาดเล็กและรวม uml ไว้ด้วย คุณสามารถดูได้ใน:

Vipera

ขอแสดงความนับถืออย่างสูง.


4

SPE IDE มีในตัว UML ผู้สร้าง เพียงเปิดไฟล์ใน SPE และคลิกที่แท็บ UML

ฉันไม่ทราบว่ามันประกอบไปด้วยความต้องการของคุณอย่างไร แต่ไม่ต้องการการดาวน์โหลดเพิ่มเติมหรือการกำหนดค่าใด ๆ ที่จะใช้


น่าเศร้าที่มันหยุดพัฒนาไม่ได้ แต่ยังใช้ได้ที่นี่! (2013)
Abdelouahab

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.