Python Code-Design im Vergleich zu Java

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.
Antworten
Marky
User
Beiträge: 24
Registriert: Donnerstag 22. Januar 2009, 08:12

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.
Gruß
Marky
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

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
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

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
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Moin,

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

Gruß,
Manuel
Marky
User
Beiträge: 24
Registriert: Donnerstag 22. Januar 2009, 08:12

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.
Gruß
Marky
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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 ._.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 ;)
Antworten