Hi Konrad!
Danke für Deine umfangreiche Antwort, werden mal sehen:
On Sun, Mar 03, 2002 at 03:19:30PM +0100, Konrad Rosenbaum wrote:
Und es ergab sich für mich nun die Frage ob sich denn der Vergleich LAMP <-> Zope ungefähr so ist wie Pascal <-> Delphi.
Vorsicht: ich kenne Zope nicht, also beziehen sich meine Kommentare auf das Allgemeine weiter unten.
Hmm, na ich auch noch nicht ;-)
Ich habe zwar mal gelernt objektorientiert zu programmiern, aber irgendwie nervt der ganze Overhead, der dabei entsteht. Konstruktoren, Destruktoren, Pseudo-Klassen, etc.pp.
Wenn es nervt, bist Du entweder einer der wenigen, die sehr komplexe Strukturen im Kopf behalten kann (wenn auch noch ohne Kopfschmerzen zu bekommen wuerde ich gerne den Trick von Dir lernen) oder Du hast es noch nicht richtig gelernt.
Naja, ich denke gelernt schon, aber wenig angewendet. Trick -> siehe nächster Absatz.
Außerdem muß ich mir mehr Gedanken machen, wie mein Gebilde letztendlich mal aussehen soll. Nicht, das ich mir sonst keine Gedanken mache, aber ich kann mit "normaler" Programmierung einfach drauf loshacken und habe relativ schnell ein Ergebnis, welches ich dann Schritt für Schritt erweitern kann, je nachdem wie mir die Ideen kommen.
Wow! Dieses Prinzip funktioniert nur bis ungefaehr 5000 Zeilen (in C, 1000 in Tcl, 300 in Bash, 1500 in PHP).
Hab gerade mal nachgeschaut: Java 400 C 600 Pascal 1000 PHP 1000 Und da liegt nämlich der Trick. Meine Projekte sind einfach nicht größer. Und Deine Zeilenzahlen nehme ich Dir glatt ab, da brauch ich mich nicht wundern, das mir OOP etwas überflüssig vorkommt.
Auch bei modularen oder gar linearen Programmen sollte man etwas Design machen, bevor man "loshackt". Das lernt man uebrigens, wenn man seine ersten drei Projekte, in der Region 10000-Codezeilen aufwaerts, gegen die Wand gefahren hat (nach Moeglichkeit zwei davon mehrfach reprogrammiert).
Siehe oben. Aber in diesen Regionen würde ich vorneweg auch ein paar Schnittstellen definieren, damit auch mehrere dran arbeiten können.
Nun habe ich demnächst ein paar größere Sachen vor (eine Kombination aus Bilddatenbank, Webarchiv, Artikelarchiv, Linksammlung und Dokumentsammlung) und ...
Soweit ich weiss wurde Zope doch speziell dafuer entworfen. Da wuerden also schon einige Mannjahre Arbeit und Hirnschmalz reingesteckt. Das sollte man doch nutzen!
Naja, aber PHP/MySQL ist ja auch für sowas gedacht, oder eher doch nicht?
Ich nehme an, Du meinst dieses Zitat von D.E.Knuth: "Die Idee hat mir sofort gefallen, [....] Ich mag die Idee von Modulen und Klassen, aber irgendwie gefaellt sie mir doch nicht so sehr, dass ich sie in meinen eigenen Programmen fuer noetig halten wuerde."
Knuth hat die Ausrede 64 zu sein. Welche hast Du? ;-)
Das ich noch keine 64 bin? ;-) Aber OOP gibt es ja auch nicht erst seit gestern...
Im Ernst: OOP ist eine Programmiertechnik, die ihre Vor- und Nachteile hat: +steigert die Uebersichtlichkeit
Jein. Ich durfte mal ein Stück Java debuggen, da bestand eine Funktion aus 300 Zeilen, in denen die Datenbank ordentlich durcheinander gebracht wurde...
+besser wart-/aenderbar +besser erweiterbar
Jein.
+Code kann (nahezu unveraendert) von einem Projekt zum naechsten transportiert werden (im Fachjargon: Wiederverwendbarkeit)
Hmm. Wie oft braucht man das? Und wie oft wird es wirklich angewendet? Ich schaue dann kurz in dem alten Projekt nach und suche mir die 5 oder lass es 10 Codezeilen raus, die ich brauche und baue mir 'ne neue Funktion oder so draus. Das alte Projekt, wird deswegen trotzdem nicht mehr verändert.
+der Code kann meistens Klassenweise getestet werden
Ja.
- -sehr lange Designphase noetig (allerdings gibt es keinen Bruch zwischen
Design und Implementation, ob viel Design negativ ist wagen auch viele zu bezweifeln...)
Genau, das meinte ich mit "ich muß mir so ziemlich alles vorneweg überlegen".
- -der Code ist meist langsamer als vergleichbarer linearer Code (Je nach
Anwendung teilweise bis Faktor 2 oder 3)
Geschwindigkeit spielt inzwischen eher eine untergeordnete Rolle bei mir. Meines Erachtens führen schnellere Prozessoren hauptsächlich dazu, das bloat entsteht...
Kurzgefasst: OOP unterstuetzt die Programmierung von besser wartbarem und uebersichtlicherem Code, wird dabei jedoch langsamer als gut optimierter linearer Code. Egal welches Paradigma Du anwendest: sich selbst in den Fuss schiessen und dabei noch den ganzen Code verhunzen geht immer.
Schön gesagt...;-)
Programmierst Du das linear (Perl, PHP, Python ohne OOP und Zope, etc.pp) dann musst Du bei jeder neuen Seite das Ganze Teil neu aufsetzen, inklusive Authentifikation, Session-Tracking, etc.pp. Bei Layout-aenderungen gehst Du alle Seiten durch und guckst wo was geaendert werden muss. Das wird schnell sehr aufwaendig, wenn die Datenstrukturen wachsen und der Code kompliziert wird.
Nein, muß ich nicht. Spätestens wenn ich merke, das ich irgendeine Funktionalität zum dritten Mal in einem Projekt programmiere, wird das Ding in eine Funktion ausgelagert. Egal ob Layout, Auth, DB-Init. Aber solange wie sich z.B. das Layout nicht ständig wiederholt, kann ich es so lassen wie es ist.
Wird eine Seite hinzugefuegt sieht der Code (PHP) bei mir meist so aus:
[Code snipp] [Erklärung snipp]
Das kann ich auch alles ohne OOP machen...
Ausserdem hat es den Vorteil, dass man immer wieder die selben Klassen fuer die selben Standardaufgaben benutzen kann. Man muss den Code nicht erst umstaendlich aus linearen Files heraus-sezieren. (Ich benutze z.B. immer die selbe Authentifikationsklasse.)
Siehe oben. Das mache ich einmal und dann habe ich auch eine Funktion die wiederverwertbar ist.
Trotzdem nochmal vielen Dank für Deine ausführlichen Erläuterungen. Ich glaube der Punkt mit der Zeilenzahl ist entscheidend (zumindest solange, wie man alleine hackt).
Bert