Ich beschwere mich ja nicht das du mein Programm zerflederst, ich versuche nur zu erfahren warum du anderer Meinung bist als meine Quellen, z.b.
http://www.galileocomputing.de/openbook/oo/
Ich sehe das ganze auch nicht so ernst, sondern freue mich auf deine Meinungen, in der Hoffnung von der Erfahrung anderer zu profitieren
Dennoch sollte es klar sein das ich Meinungen nicht ungeprüft übernehme. Garnichtdenker gibt es ja schon genug.
BlackJack hat geschrieben:
Kein Grund jeden Sch*#% in eine Klasse zu zwingen.
Kein Grund mit Sonderzeichen um sich zu werfen, wir sind ja nicht im Perl Forum
Wie sieht es mit diesen beiden aus:
Macht es irgendeinen Unterschied das eine dem anderen vorzuziehen?
BlackJack hat geschrieben:Du fragtest nach Kommentaren zum Programm so wie es ist.
Ja, wahrscheinlich wäre es hilfreicher gewesen wenn ich meine Gedanken auch dazugeschrieben hätte. Sicherlich Faulheit, aber ich werde mich bessern, ich versprechs
BlackJack hat geschrieben:
Da kommt in der Regel viel Quelltext bei heraus, der am Ende doch nicht gebraucht wird. Und in einigen Fällen hat man dann sogar eine Klassenhierarchie, bei der sich zu spät heraus stellt, dass sie nicht so aufgebaut ist, wie man es letztendlich eigentlich bräuchte.
Hmm... ist das aber nicht eher ein generelles Problem das man überall, auch ohne Klassen haben könnte? Am Ende kommt man auf vieles drauf, Datenformat passt nicht, Zeichenroutinen fürn "Popsch", nichts passt zusammen. Ich glaub das liegt nicht an den Klassen selbst. Selbst wenn die Klassenhierarchie, von Klassen die man benutzen muss und vielleicht selbst nicht ändern kann da es z.b. "Fremdklassen" sind, nicht passt bietet doch gerade OO die Lösung diese Klassen zu kapseln. Und Performance lass ich hier nicht gelten, immerhin programmieren wir hier in Python und nicht in C.
Die Frage die sich mir nun stellt: Sind Klassen böse? Brauchen sie womöglich so viel mehr "Ressourcen"? Was passt an Ihnen nicht um sie eben nicht für alles zu verwenden? Ich persönlich sehe jetzt keinen Grund auf die Strukturierungen mithilfe von Klassen zu verzichten selbst wenn nur eine Liste drinnen ist. Sind es wirklich die 4 Zeilen Code mehr die ich dazu zu tippen habe an denen sich viele stören? Darf ich sie nicht dazu verwenden etwas Struktur zu erreichen? Wandern wir hier möglicherweise wieder in ein Gebiet voller Angst vor verlorener Performance ab? Wenn nicht, was ist es dann?
BlackJack hat geschrieben:Nicht so viel anders. Was Du bei einer Liste in diesem Zusammenhang benötigst ist der Indexzugriff ``rules[5]`` und eventuell die Länge ``len(rules)``. Diese Schnittstelle kann man auch in einer eigenen Klasse anbieten, wenn man die Liste ersetzen möchte.
Wobei vielleicht noch die Frage ist, was genau so eine `Rules`-Klasse an Bearbeitungsmethoden bieten soll, die Listen nicht bieten. Denn wirklich bearbeiten möchte man ja eher die Regeln *in* der Liste.
Primär ging es mir hier um das Speichern und Laden der Regeln. Interessant wäre es auch wenn sich das Datenformat (die Liste selbst) aus mir noch nicht bekannten Gründen ändern würde. Dann würde man nach außen hin nichts von der Änderung merken, ich dachte das dies eine Grundüberlegung von OO sei. Natürlich, im mom. Zustand der Daten wäre eine Liste einfacher, aber auch um soviel besser? "Aus mir noch nicht bekannten Gründen" ist natürlich falsch und ein Platzhalter, denkbar wäre z.B. für ein 'F' mehrere Regeln mit Warscheinlichkeiten zu definieren um "Wildwuchs" bei Pflanzen zu ermöglichen. Da ist es natürlich schön wenn man sich außerhalb nicht mehr darum kümmern muss.
BlackJack hat geschrieben:
Ich benutze nicht `replace()` um die Regeln zu ersetzen, sondern *am Ende* um die 'L's und 'R's durch 'F's zu ersetzen, weil das für den Quelltext zum Zeichnen einfacher wird.
Interessant wäre es sicherlich auch die L's und R's eigen zu lassen, ich habe z.b. Implementationen gesehen die damit die Zeichenfarbe ändern (damit lassen sich hübsche Pflänzchen malen). Natürlich hast du recht, ich habe deinen Code nicht auf Anhieb verstanden und ihn absolut falsch gesehen
Aber ist das nicht auch wieder voreilige Optimierung?
BlackJack hat geschrieben:
Das Ersetzen der Regeln mache ich genau wie Du. Nur dass ich nicht ``+=`` auf Zeichenketten benutze und damit wesentlich weniger temporäre Zeichenketten und damit Kopieraktionen verursache. Ab Python 2.5 ist ``+=`` in bestimmten Fällen optimiert, aber darauf sollte man sich nicht verlassen.
Ich sehe das jetzt einfach mal als voreilige Optimierung an, da:
1. Du hast du optimiert bevor du wahre Engpässe erkannt hast. In der Tat ist es nämlich eher so das die Zeichenroutine selbst ausschlaggebend für die Performance ist. Warum sollte ich an anderen Stellen optimieren die realtiv wenig Gewinn bringen?
2. Die Ausbeute bei path.append() ist nicht berauschend. Meiner Meinung nach liest sich += auch einfacher und kann eher nachvollzogen werden.
Testparameter: 'Islands and Lakes' mit depth=6, ohne Zeichnen, ohne Ausgabe auf Konsole
Wie groß wird eigentlich der endgültige Zeichenstring?
Code: Alles auswählen
thelittlebug@ubuntu:~/Desktop/python$ ./linden.py -p --system=20 | wc
1 1 277370836
277 Mio. Zeichen, das ist ne ganze Menge, und wie lange dauert das mit der alten aber besser lesbaren "+="-Methode?
Code: Alles auswählen
thelittlebug@ubuntu:~/Desktop/python$ time ./linden.py --system=20
real 0m21.208s
user 0m17.385s
sys 0m2.764s
Deine Methode mit path.append.
Code: Alles auswählen
thelittlebug@ubuntu:~/Desktop/python$ time ./linden.py --system=20
real 0m18.286s
user 0m16.337s
sys 0m1.044s
Mich haut das Ergebnis nicht um. Ich hätte mir hier mehr erwartet da ich wahrscheinlich so wie du immer über das böse "+=" bei Strings gelesen habe.
Bei der "alltäglichen" Arbeit fällt der unterschied der beiden Methoden mit 0.009 Sekunden in einen Bereich den ich als absolut "wurscht" bezeichnet hätte. Die ganze Zeit die wir da schon darüber gequatscht haben hat schon wesentlich mehr Zeit gekostet als wir hier jemals einsparen könnten
Zum Thema Optimieren, ich bin kein Feind. Sollte daran erkennbar sein das ich eine eigene Turtleimplementation gebastelt habe die der Tkinter Version in Sachen Geschwindigkeit um längen vorraus ist. Die Tkinter Turtle wird, je mehr Linien am Bildschirm sind, immer langsamer. Bei ~5000 Linien war es schon unerträglich.
Bitte glaube nicht das ich deine Kritik einfach umdrehe, ich freue mich auf eine Diskussion um deine Argumente besser zu verstehen, vielleicht kann man ja gegenseitig von den Gedanken des anderen profitieren. Ich habe bewusst mehr Smileys eingesetzt als du um gewissen Stellen zu entschärfen, bei dir klingt vieles, für meinen Geschmack, viel zu hart
lgherby & thx fürs durchlesen