UML-Werkzeug zur Generierung von Python-Code und umgekehrt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Hallo

Verwendet hier jemand ein (kostenloses) UML-Werkzeug zur Generierung von Python-Code und umgekehrt?

Gruß
Atalanttore
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich nicht. Zumal nur UML zu Python wirklich funktioniert. Allgemein Python zu UML wird schwierig weil UML nicht gut für dynamisch typisierte Programmiersprachen geeignet ist. Was auf der anderen Seite bedeutet, das aus UML generiertes Python ist nicht unbedingt idiomatisch.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Meinst du mit "idiomatisch" professionell programmiert?

PS: PyCharm soll UML-Klassendiagramme aus Python-Code erstellen können, aber leider nicht in der kostenlosen Community Edition.

Gruß
Atalanttore
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Atalanttore: Nein, mit nicht idiomatisch meine ich nicht wie man das in Python üblicherweise schreiben würde.

Wozu brauchst Du das denn?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Ich würde gerne eigene UML-Klassendiagramme mit einem aus Python-Code erstellten und korrekten Klassendiagramm vergleichen und so Fehlern auf die Spur kommen. Ich kenne einigermaßen die Grundlagen von UML, aber mehr auch nicht. Ob meine UML-Diagramme tatsächlich richtig sind, hat mehr von raten als von wissen.

Gruß
Atalanttore
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das geht nicht. Schon mit einer statisch typisierten Sprache ist die Abstraktion von UML zu echtem Code eigentlich zu gross. Bei Python kommt kein Code-Analyse-Tool hinterher, da eine korrekte Abhaengigkeitstruktur abzuleiten.

UML ist als Modellierungshilfe fuer den ein oder anderen gut, aber die feuchten Fantasien von Rational Rose, dass man damit einfach per Bildchen-malen die vermaledeiten Programmierer durch BWL-Master-geschulte Businessanalysten ersetzen kann hat sich zumindest bis dato noch nicht erfuellt. Wenn dein Code Bugs hat, dann ist es unwahrscheinlich, dass UML dir da einen AHA-Moment beschert.
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Welche Diagramme und Werkzeuge nimmt man üblicherweise für Python?

Gruß
Atalanttore
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Keine. Für keine Sprache funktioniert UML wie beworben. Aber für statische Programmiersprachen deutlich besser. Wenn dir das wichtig ist, nimm Java.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Also ich habe UML auch schon für Python verwendet um jemand anderem etwas komplexere Zusammenhänge zwischen Klassen in einem Programm zu vermitteln. Allerdings habe ich da nichts aus dem Code generiert und zum Teil waren die Werkzeuge ein Whiteboard und die dazugehörigen Stifte. :-)

Für Sphinx gibt es ein Plugin um SQLAlchemy-ORM-Klassen in einem UML-Diagramm darzustellen, das verwende ich um eine Übersicht der Tabellenbeziehungen in der Dokumentation zu erzeugen. Das Plugin verwendet PlantUML um das Bild zu erstellen. PlantUML habe ich auch schon ”manuell” verwendet um UML-Diagramme zu erstellen. Zum Beispiel Deployment-Diagramme um eine grobe Übersicht über Systeme zu erstellen die nicht aus einer einzelnen Anwendung und einer Datenbank bestehen, sondern aus vielen verschiedenen Systemen und Diensten, die auf viele Rechner verteilt sind.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Was verwenden erfahrene Python-Entwickler dann, um ein neues Softwareprojekt zu planen?

Gruß
Atalanttore
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Atalanttore: Erfahrung, gesunden Menschenverstand, Papier und Stift(e), Texteditor, … :-)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Der Großteil der Planung geht bei uns in die API und da gibt es Swagger. Ansonsten sieht man Level 1-2 C4 Diagramme, welche als Dokumentation schon nützlich sind, vorausgesetzt man nutzt Microservices.

Das betrifft auch nicht nur Python sondern auch viele andere Sprachen, meiner Erfahrung nach auch Java.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

@DasIch das ist natuerlich schon speziell fuer uServices und REST-APIs. Aber Swagger sieht cool aus, falls das jemals wieder mein Bereich wird.

Fuer meine Echtzeit-Linux-Umgebung mit C++ sind es hauptsaechlich Entwurfsdokumente und persoenliche Diskussionen, und dann testgetriebene Entwicklung plus Code-Reviews.
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

__blackjack__ hat geschrieben: Sonntag 16. September 2018, 18:31 @Atalanttore: Erfahrung, gesunden Menschenverstand, Papier und Stift(e), Texteditor, … :-)
Meinst du mit "gesunder Menschenverstand" aussagekräftige Bezeichnernamen und hilfreiche Kommentare im Quellcode?

__deets__ hat geschrieben: Sonntag 16. September 2018, 19:22 Fuer meine Echtzeit-Linux-Umgebung mit C++ sind es hauptsaechlich Entwurfsdokumente und persoenliche Diskussionen, und dann testgetriebene Entwicklung plus Code-Reviews.
Schreibst du die Entwurfsdokumente selbst und setzt sie anschließend in Software um?
Bei einem Vortrag auf YouTube (34C3) wurde aber der Eindruck erweckt, dass testgetriebene Entwicklung in der Praxis nicht vorkommt. :roll:


Gruß
Atalanttore
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wir sind ja ein freies Land, in dem jeder sagen darf, was er will. Unabhängig davon, ob es nun wahr ist oder nicht. Ich habe schon viel Code Test getrieben entwickelt. Und das “in der Praxis”. Natürlich ist TDD in einem Kernel-Modul nicht möglich. Aber für bestimmte Units, die zB die Übersetzung von rohen Bytes in einen Anwedungsspezifischen Typen erlauben, habe ich genau das vor einigen Tagen gemacht. Und in Python, bei dem sowas viel einfacher geht, ganze Teilprojekte. Die Aussage aus dem Video ist also in allgemeiner Form Bullshit.

Und ja, die Dokumente schreiben wir selbst, kommentieren, klären Fragen, und setzen dann um. Wobei es die Dokumente nur gibt, wenn man den Input verschiedener Entwickler die ggf auch nicht im eigenen Team sind braucht, oder zu anderen Kommunikationszwecken. Viel öfter sind Pair-Programming, Whiteboard und Codereviews das Mittel der Wahl.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Atalanttore: Mit gesundem Menschenverstand meinte ich das man nachdenkt was man da macht und nicht blind irgendwelche Werkzeuge oder Glaubensrichtungen einsetzt, sondern schaut was im konkreten Fall Sinn macht.

Es kommt denke ich auch immer darauf an was und in welchem Umfeld man umsetzt. Bei mir ist das in der Regel firmenintern verwendete Software die eher organisch wächst und wo ich einen sehr kurzen Draht zu den Endanwendern habe. Da kann man sich weniger und vor allem weniger starre Planung erlauben. Die Entwicklung ist hauptsächlich durch die Bedürfnisse der Anwender getrieben. Manchmal gibt es Sachen die zeitnah umgesetzt werden müssen, ansonsten gibt es immer einen Vorrat von Tickets mit Aufgaben. Teilweise neue Features, teilweise kleinere Änderungen/Verbesserungen, und dann auch regelmässige Wartungsarbeiten, wie regelmässig schauen ob es von eingesetzten Bibliotheken neue Versionen gibt, oder jetzt auch mittel- bis langfristig ein Umstieg auf Python 3 bei den Projekten wo das Sinn macht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Kommen Entwurfsmuster bei Python-Projekten in der Praxis häufiger zum Einsatz, also lohnt es sich damit zu beschäftigen oder eher nicht?

Gruß
Atalanttore
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Atalanttore: Entwurfsmuster kommen eigentlich überall zum Einsatz. Man muss allerdings vorsichtig sein ob sie zur Sprache passen. Das was den ”Hype” ausgelöst hat, sind ja Entwurfsmuster für statisch typisierte, objektorientierte Programmiersprachen. Also immer dran denken das Python kein Java oder C++ ist und nicht jedes Muster in jeder Sprache Sinn macht, oder so aussehen muss wie in Java oder C++ & Co.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

@__blackjack__: Dazu habe ich mehrere Fragen:
  • Wie erkennt man, ob ein Entwurfsmuster zur Sprache passt?
  • Was unterscheidet die objektorientierte Programmierung in Python von objektorientierten Programmiersprachen?
  • Reichen Typinformationen in Python nicht aus, um die Vorteile von statischer Typisierung über Umwege auch in Python zu bekommen?
Gruß
Atalanttore
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Frage ist, ob es Dir hilft, ein bestimmtes Tool zu benutzen. Von welchen "objektorientierten Programmiersprachen" redest Du? Es gibt etliche Umsetzungen von Objektorientierung.
Welche Vorteile soll denn statische Typisierung überhaupt haben? Wenn Du das willst, warum willst Du dann Python benutzen?
Antworten