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.
Benutzeravatar
__blackjack__
User
Beiträge: 13006
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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
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: 13006
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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
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: 17712
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?
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

@Sirius3: Ich meinte die "objektorientierten Programmiersprachen" aus dem vorherigen Beitrag von __blackjack__:
__blackjack__ hat geschrieben: Sonntag 23. September 2018, 19:33 Das was den ”Hype” ausgelöst hat, sind ja Entwurfsmuster für statisch typisierte, objektorientierte Programmiersprachen.
Gruß
Atalanttore
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Atalanttore hat geschrieben: Sonntag 23. September 2018, 19:57 Reichen Typinformationen in Python nicht aus, um die Vorteile von statischer Typisierung über Umwege auch in Python zu bekommen?
Nein. Allerdings reichen die Typinformationen in den meisten Sprachen mit statischer Typisierung nicht aus um die Vorteile von statischer Typisierung zu bekommen. Insofern sollte dies eigentlich nicht stören.
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Atalanttore: Ob ein Entwurfsmuster zu einer Sprache passt, erkennt man daran ob es a) das Problem, welches mit dem Entwurfsmuster gelöst werden soll in der Sprache überhaupt gibt, und b) ob das Muster dieses Problem idiomatisch löst, oder ob es nicht beispielsweise Syntaxkonstrukte gibt, die das schon mit Sprachmitteln erledigen.

Du hast mein Zitat zu weit verkürzt: das „statisch typisierte“ gehört noch dazu. Python ist nicht statisch typisiert und objektorientiert, sondern dynamisch typisiert und nicht nur objektorientiert. Es gibt einige Entwurfsmuster die in statisch typisierten Programmiersprachen Sinn machen, in Python aber das entsprechende Problem gar nicht besteht was man damit lösen möchte. Und Python ist nicht nur objektrientiert, sondern bietet auch einiges was man in funktionaler Programmierung findet. Plus natürlich noch die prozedurale Grundlage.

Zum einen reichen Typannotationen nicht aus um die Vorteile von statischer Typisierung zu bekommen, zum anderen bekommt man damit, je besser das mit den Vorteilen funktioniert, natürlich auch die Nachteile. Ich mag Python gerade weil es dynamisch typisiert ist.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

DasIch hat geschrieben: Sonntag 23. September 2018, 20:24 Nein. Allerdings reichen die Typinformationen in den meisten Sprachen mit statischer Typisierung nicht aus um die Vorteile von statischer Typisierung zu bekommen. Insofern sollte dies eigentlich nicht stören.
Meinst du damit, dass viele Sprachen mit eigentlich statischer Typisierung nicht von den Vorteilen statischer Typisierung profitieren?


Dynamische Typisierung nutze ich bisher lediglich bei Berechnungen, wenn eine Integer-Variable mit einer Float-Variablen verrechnet wird und anschließend selbst zu einer Float-Variablen wird.

Für welche Einsatzzwecke nutzt ihr die dynamische Typisierung von Python?

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

Fuer alles. Der Begriff dazu ist "Duck-Typing". Hier muss man auch ein bisschen aufpassen: was du beschreibst ist nicht die Achse statisch/dynamische Typisierung. Die bestimmt, *wann* die Entscheidung ueber einen Typen getroffen wird. Was sie nicht sagt ist, ob sich ein Typ aendern kann abhaengig davon, was man damit machen will. Das ist die Achse schwach/stark. Python ist stark typisiert: ein Wert aendert seinen Typ nicht abhaengig davon, wie er verwendet wird.

"hallo" + 10

gibt in Python einen Fehler. In PHP und anderen, schwach typisierten Sprachen, wird eine Typwandlung implizit vorgenommen.

Eine Ausnahme bilden Zahltypen in Python, weil es oft sonst sehr muehselig werden wuerde. Dabei ist die Regel, dass der Datentyp mit dem groesseren Werteumfang genommen wird. Also von int->float.
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: Ich weiss das ist ein bisschen Korinthenkackerei, aber in Python ist der Werteumfang von `int` eigentlich grösser als der von `float`. Letztlich ja nur durch die Speichermenge begrenzt. :-)
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@Atalanttore: dass int in float, short in long, real in complex automatisch konvertiert werden, kennen viele Sprachen, auch statisch typisierte, das kann manchmal auch ziemlich kompliziert werden: https://en.cppreference.com/w/cpp/langu ... conversion
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Ohne Fachbegriffe habe ich das jetzt so verstanden:

Statische Typisierung: Typprüfungen bereits beim Kompilieren.
Dynamische Typisierung: Typprüfungen erst zur Laufzeit.

Starke Typisierung: Typwandlungen werden nicht automatisch vorgenommen. Der Programmierer muss sich selbst (explizit) darum kümmern.
Schwache Typisierung: Typwandlungen werden, falls erforderlich, zur Laufzeit automatisch vorgenommen. Der Programmierer muss sich nicht darum kümmern, weil es automatisch (implizit) gemacht wird.

Gruß
Atalanttore
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Atalanttore hat geschrieben: Montag 24. September 2018, 16:17
DasIch hat geschrieben: Sonntag 23. September 2018, 20:24 Nein. Allerdings reichen die Typinformationen in den meisten Sprachen mit statischer Typisierung nicht aus um die Vorteile von statischer Typisierung zu bekommen. Insofern sollte dies eigentlich nicht stören.
Meinst du damit, dass viele Sprachen mit eigentlich statischer Typisierung nicht von den Vorteilen statischer Typisierung profitieren?
Ja. Haskell, Idris oder wenn es etwas praktischer sein soll Rust nutzen Typisierung tatsächlich aus. C nutzt Typen letztendlich nur um festzustellen wieviel Speicher man allokieren muss und aus irgendeinem Grund haben Leute bei C++, Java, etc. gedacht dass es irgendwie Sinn macht darauf aufzubauen.
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

@DasIch: Danke für die Antwort.

Sind meine obigen Überlegungen zur Typisierung richtig?

Gruß
Atalanttore
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Ich arbeite seit einiger Zeit intensiv mit Java und finde in meinem Arbeitsumfeld so gut wie nichts an UML und dergleichen. Ich kann mir auch nicht so wirklich vorstellen, dass es Unternehmen gibt die dafür großartig Ressourcen verbrennen (können), UML hilft doch auch nur bedingt um mal so "Lala" gesehen zu haben, was ein Framework / Projekt / Applikation prinzipiell macht, i.d.R. reicht aber eben dieses Wissen nicht aus, sondern man hangelt sich in der IDE durch die Beziehungen von Methoden und Klassen um genau zu verstehen was Sache ist.

Wofür man in Python nun UML brauchen sollte, ist mir noch weniger klar. Die Sprache erklärt sich im besten Falle von selbst :-)

Als Einsteiger in Software-Entwicklung hat mir UML für reale Projekte noch nicht geholfen, am Ende fehlt immer die Zeit. Auch dieser ganze Käse mit Typ-Annotationen (die ich erstmal ganz toll fand, wenn man durch Java vergiftet wurde ;-)) nervt, weil sie den sonst übersichtlichen und einfach verständlichen Python-Quellcode aufblähen und kryptischer machen.
When we say computer, we mean the electronic computer.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Das mit der Typprüfung ist vielleicht etwas ungenau. Ob und wie Typen geprüft werden, ist ja ganz unterschiedlich. In Python, z.B. haben zwar alle Objekte einen Typ, geprüft wird der aber nur selten. Was zur Laufzeit geprüft wird, ist, ob das Objekt eine bestimmte Eigenschaft hat, und da Objekte zur Laufzeit Eigenschaften bekommen können, hängt die nicht mal direkt vom Typ ab. In C haben zwar alle Variablen einen festen Typ, ob der Speicherinhalt der Variable zum Typ passt, wird nicht geprüft. Java hat zwar auch irgendwie statische Typen, Teile der Prüfung finden aber erst zur Laufzeit statt. Große Teile der C++-Standardbibliothek arbeiten inzwischen mit dynamischer Typisierung, wobei die Typen zur Compilezeit festgelegt werden. Und die meisten Programmiersprachen haben einen fließenden Übergang von starker bis schwacher Typisierung.
Atalanttore
User
Beiträge: 407
Registriert: Freitag 6. August 2010, 17:03

Danke für die Erklärungen.

Vorerst habe ich keine weiteren Fragen, aber das kann sich auch ganz schnell wieder ändern. :P

Gruß
Atalanttore
Antworten