Seite 1 von 1

Python Code-Design im Vergleich zu Java

Verfasst: Donnerstag 22. Januar 2009, 08:20
von Marky
Hallo zusammen,

ich komme aus der Java-Welt und arbeite mich gerade in Python und auch in bestehenden Code ein.
In Java gilt ja generell eine Datei eine Klasse (mal von inneren Klassen abgesehen).
In Python sehe ich oft die Verwendung von mehreren Klassendefinitionen in einer Modul-Datei. Das trägt meines Erachtens nicht zur Übersicht bei, wenn man davon ausgeht, dass man nicht nur ein kleines Script schreiben möchte, sondern eine größe Applikation, bestehend aus verschiedenen Dateien und Paketen.

Da ich überhaupt keine Programmiererfahrung in Python habe, würde mich die Meinung im Forum interessieren, wie dieser Codierungs-Stil beurteilt wird und ob davon eher abzuraten ist oder ob das eigentlich üblich ist.

Verfasst: Donnerstag 22. Januar 2009, 08:43
von Hyperion
Ich denke das lässt sich doch einfach durch Dokumentation lösen! Sobald man das Modul kennt, kann es einem doch herzlich egal sein, in welcher physischen Datei da etwas steht!

Und wer sich dann für den Code interessiert, wird sich sicherlich auch einmal durch eine >1000 Zeilen Datei wursteln.

Verfasst: Donnerstag 22. Januar 2009, 08:55
von HerrHagen
Python ist in Gegensatz zu Java weit weniger auf ein bestimmtes Paradigma beschränkt. Python hat sowohl imperative, OO, als auch funktionale Aspekte. Du versuchst daher das Problem so zu lösen wie es "sinnvoll" wäre. Daher sind die Klassen auch selten so groß wie in Java, weil du sie nur dort verwendest wo es auch der Sache dienlich ist. Dementsprechend gliederst du deinen Code nicht nach Klassen sondern eher nach Sinneinheiten.
Wenn zwei Klassen thematisch zusammengehören, spricht ja auch nichts dagegen sie in eine Datei zu packen. Das dient dann eher der Übersichtlichkeit, weil du alles was zusammengehört auch in einer Datei hast.
Ich empfehle dir, dich erst mal ein wenig tiefer in Python einzuarbeiten - dann wird dir vieles sicherlich von allein klar werden.

MFG HerrHagen

Re: Python Code-Design im Vergleich zu Java

Verfasst: Donnerstag 22. Januar 2009, 09:19
von Darii
Marky hat geschrieben:In Python sehe ich oft die Verwendung von mehreren Klassendefinitionen in einer Modul-Datei. Das trägt meines Erachtens nicht zur Übersicht bei, wenn man davon ausgeht, dass man nicht nur ein kleines Script schreiben möchte, sondern eine größe Applikation, bestehend aus verschiedenen Dateien und Paketen.
Wenn die Datei zu groß/unübersichtlich wird, kann man sie ja immer noch in mehrere Dateien aufteilen. Außerdem gibt es in Python ja nicht nur Klassen, was wäre da die Alternative? Eine Funktion pro Datei?

Im Grunde benommen wird das Problem der Unübersichtlich ja nur verschoben, in Python hat man viele Klassen/Funktionen pro Datei und in Java hat man eine Unmenge von Dateien.

Verfasst: Donnerstag 22. Januar 2009, 09:39
von rayo
Hi

Für mich ist Java unübersichtlich, vorallem machen mir die vielen unötigen Ordner bei den Packeten mühe. Warum das auch immer nach Organisation und nicht nach Inhalt gruppiert wird, ist mir nach wie vor ein Rätsel (z.B. org.apache..., da weiss ich jetzt nicht was alles da drin ist). Und diese Ordnertiefe, 4 oder 5 Ebenen tief hab ich schon häufig angetroffen und erst in der untersten Ebene waren Dateien. Die restlichen Ebenen sind nur nötig weil Java eine Packetstruktur auf das Dateisystem abbilden muss.

Mir gefällts, dass ich so Strukturieren kann, wie ich es für sinnvoll halte und nicht wie es die Sprache für mich vorsieht.
Ein kleines Modul kann gut nur eine Python-Datei sein, ein grösseres kann man dann transparent in einen Ordner mit mehreren Python-Dateien verteilen und der Benutzer kann immer noch import modulname schreiben.

Gruss

Verfasst: Donnerstag 22. Januar 2009, 13:37
von helduel
Moin,

http://dirtsimple.org/2004/12/python-is-not-java.html bringt einige Unterschiede zwischen Python und Java auf den Punkt.

Gruß,
Manuel

Verfasst: Donnerstag 22. Januar 2009, 14:06
von Marky
Hi,

danke schon mal für die Infos, speziell für den Link zum Blog. Da stehen einige gute Tipps zur JavaToPython-Transformation im Gehirn drin.
:wink:
Die eine oder andere Sache zu dem dort erwähnten werde ich sicher nochmal hier ansprechen müssen.

Re: Python Code-Design im Vergleich zu Java

Verfasst: Sonntag 25. Januar 2009, 10:42
von sma
Marky hat geschrieben:In Java gilt ja generell eine Datei eine Klasse (mal von inneren Klassen abgesehen).
Ich würde sagen, in der Java-Welt haben die IDEs davon inzwischen abstrahiert und es ist einfach egal. Ich lege eine neue Klasse an oder schaue mir den Quelltext einer Klasse an, aber ich denke da niemals in Dateien. Das aber nur nebenbei.

In Python ist die Daumenregel: Eine Datei entspricht einem "package" (was in Python Modul heißt) und definiert damit einen Namensraum und eine Sichtbarkeit. Alle Funktionen, Variablen und Klassen, die zu einem Paket gehört, kommen in diese Datei. Das ist nicht weniger übersichtlich als bei Java und wenn IDEs gut genug geworden sind, wird auch hier die Datei des Moduls immer unwichtiger.

Stefan

Re: Python Code-Design im Vergleich zu Java

Verfasst: Sonntag 25. Januar 2009, 10:56
von Leonidas
sma hat geschrieben:Das ist nicht weniger übersichtlich als bei Java und wenn IDEs gut genug geworden sind, wird auch hier die Datei des Moduls immer unwichtiger.
Na das hoffe ich mal nicht. Ich finde es gut, das Klassen in den entsprechenden Modulen zu finden sind statt dass sie entweder in einem Modul pro Klasse sind (was bei kurzen Klassen einfach nur nervt) oder nach irgendwelchen automatisierten Regeln in Module zusammengefasst sind.

Ja, in Java abstrahiert das die IDE. Macht die ganze Idee aber nicht besser und immer wenn ich in Eclipse Projekte importiere um sie in mein Projekt einzusetzen, dauert es recht lange bis ich die Struktur so habe, dass die Klassen etc. gefunden werden. Ein simples "Modul ins Verzeichnis kopieren" wäre da wesentlich einfacher und man bräuchte auch nicht die Rename/Refactoring-Fähigkeiten der IDE.

Re: Python Code-Design im Vergleich zu Java

Verfasst: Sonntag 25. Januar 2009, 18:31
von sma
Leonidas hat geschrieben:Na das hoffe ich mal nicht. Ich finde es gut, das Klassen in den entsprechenden Modulen zu finden sind statt dass sie entweder in einem Modul pro Klasse sind (was bei kurzen Klassen einfach nur nervt) oder nach irgendwelchen automatisierten Regeln in Module zusammengefasst sind.
So habe ich das nicht gemeint. So wie bei Java in den Hintergrund tritt, dass eine Klasse in einer Datei abgelegt wird und man nur noch mit Klassen hantiert, so sollte man bei Python mit Modulen arbeiten und es dem Tool überlassen, diese in jeweils einer Datei abzuspeichern. Eine Klasse pro Modul macht natürlich gar keinen Sinn.
Leonidas hat geschrieben:wenn ich in Eclipse Projekte importiere um sie in mein Projekt einzusetzen, dauert es recht lange bis ich die Struktur so habe, dass die Klassen etc. gefunden werden.
Das ist eine Frage der Übung. Solche Probleme hatte ich noch nie. Normalerweise ist der Code ja schon aus einer IDE und die gibt die Struktur vor. Oder wenn man Maven benutzt, ist die Struktur ja IDE-übergreifend vorgegeben.

Stefan

Re: Python Code-Design im Vergleich zu Java

Verfasst: Sonntag 25. Januar 2009, 18:36
von BlackVivi
sma hat geschrieben:
Leonidas hat geschrieben:wenn ich in Eclipse Projekte importiere um sie in mein Projekt einzusetzen, dauert es recht lange bis ich die Struktur so habe, dass die Klassen etc. gefunden werden.
Das ist eine Frage der Übung. Solche Probleme hatte ich noch nie. Normalerweise ist der Code ja schon aus einer IDE und die gibt die Struktur vor. Oder wenn man Maven benutzt, ist die Struktur ja IDE-übergreifend vorgegeben.

Stefan
Aber die Probleme würden gar nicht auftreten, wenn man'ne vernünftige Struktur von Anfang her hätte... (vernünftig hier lesen als ... simpel und verständlich)

Das ist für mich so typisch Java... Es löst Probleme, die man ohne gar nicht hätte. Vielleicht übertreib ich hier, aber Java ohne IDE zu programmieren ist für mich unendlich anstrengend. Für mich ist sowas... grundlos.

Aber wahrscheinlich bin ich nicht klug genug um Java richtig zu verstehen ._.

Re: Python Code-Design im Vergleich zu Java

Verfasst: Sonntag 25. Januar 2009, 18:48
von Leonidas
sma hat geschrieben:so sollte man bei Python mit Modulen arbeiten und es dem Tool überlassen, diese in jeweils einer Datei abzuspeichern. Eine Klasse pro Modul macht natürlich gar keinen Sinn.
Module und Dateien sind ja das gleiche, also wenn man mit Modulen hantiert, dann hantiert man automatisch mit Dateien. Ich sehe nicht wie hier eine IDE helfen könnte.
sma hat geschrieben:
Leonidas hat geschrieben:wenn ich in Eclipse Projekte importiere um sie in mein Projekt einzusetzen, dauert es recht lange bis ich die Struktur so habe, dass die Klassen etc. gefunden werden.
Das ist eine Frage der Übung. Solche Probleme hatte ich noch nie. Normalerweise ist der Code ja schon aus einer IDE und die gibt die Struktur vor.
Ja, ist einfach ein Zip, das (wohl von Eclipse) generiert wurde. Kann gut sein, dass ich für die IDE ein wenig zu doof bin, aber wenn ich die Probleme meiner Kommilitonen sehe, JUnit dazu zu überreden, die Tests aus dem importierten Projekt zu starten dann scheint mir das tatsächlich nicht so sonderlich einfach. Aber wir wissen ja beide, das Informatikstudenten sich gerne blöd stellen ;)