-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Sunday 03 March 2002 12:01, Bert Lange wrote:
Leider konnte ich zu dem Vortrag von Thomas nicht erscheinen. Dafür habe ich mir das Material im Netz angeschaut.
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.
Vor allem was das Objektorientierte angeht.
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.
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 5000Zeilen (in C, 1000 in Tcl, 300 in Bash, 1500 in PHP).
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).
Nun habe ich demnächst ein paar größere Sachen vor (eine Kombination aus Bilddatenbank, Webarchiv, Artikelarchiv, Linksammlung und Dokumentsammlung) und stehe vor der Überlegung die Sache in LAMP zu machen (alles schön einzeln, das man auch Zwischenergebnisse sieht) oder mich in Zope einzuarbeiten.
Soweit ich weiss wurde Zope doch speziell dafuer entworfen. Da wuerden also schon einige Mannjahre Arbeit und Hirnschmalz reingesteckt. Das sollte man doch nutzen!
Nachdem, was ich in Thomas Vortragsunterlagen gesehen habe, scheinen mir beide Lösungen geeignet, nur das mir das objektorientierte nicht so liegt. Das ich damit nicht der einzige bin, sondern auch prominentere Leute (ct 5/02 S.192) sowas sagen, hat mich etwas beruhigt. Sonst bekommt man immer irgendwie den Eindruck vermittelt, das "Objektorientiert" etwas besseres wäre.
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? ;-)
Im Ernst: OOP ist eine Programmiertechnik, die ihre Vor- und Nachteile hat: +steigert die Uebersichtlichkeit +besser wart-/aenderbar +besser erweiterbar +Code kann (nahezu unveraendert) von einem Projekt zum naechsten transportiert werden (im Fachjargon: Wiederverwendbarkeit) +der Code kann meistens Klassenweise getestet werden - -sehr lange Designphase noetig (allerdings gibt es keinen Bruch zwischen Design und Implementation, ob viel Design negativ ist wagen auch viele zu bezweifeln...) - -der Code ist meist langsamer als vergleichbarer linearer Code (Je nach Anwendung teilweise bis Faktor 2 oder 3)
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.
Wie seht ihr das? Wo liegen die Vorteile der objektorientierten Programmierung, gerade auch bei Web-Anwendungen?
Wie auch bei anderen Applikationen: in der Kapselung. Web-Anwendungen neigen dazu sich sehr schnell aendern zu muessen. Neue Seiten kommen hinzu, andere verschwinden, das Layout wird andauernd geaendert, der Inhalt aendert sich und damit auch die Anforderungen.
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.
OOP (PHP mit Objekten, Zope, etc.) macht sich am Anfang natuerlich wesentlich aufwaendiger, dafuer wird es dann aber immer schneller und leichter (jedenfalls wenn man schon etwas geuebt ist im OO-Design, am Anfang gibt es immernoch ein paar Schluckaufs, wenn man sein Design ueberarbeiten muss). Wird eine Seite hinzugefuegt sieht der Code (PHP) bei mir meist so aus: - ----- <? include 'inc/loadallobjects.php' //check parameters //... $page=new Page($HTTP_VARS["page"]);
if(!$page->hasaccess($user,"admin")){ header("Location: home.php"); exit; } ?> <html> <title>Admin <? print($page->getname()) ?></title> <body> <h1>Admin <? print($page->getname()) ?></h1>
<form action="pageadmdo.php" method="POST"> <.....> <input type="text" name="pname" value=<? print("\"".page->getname()."\"") ?>>
<input type="submit"> </form>
</html> - -----
Der ganze Code, der ueberall gleich ist versteckt sich in loadallobjects.php, dort wird die User-authentifikation gemacht und gleich ein $user- und ein $session-Objekt gefuellt, die Datenbank wird geoeffnet und wichtige Daten gelesen, und so weiter.
$page=new Page(...) erzeugt ein Seitenobjekt, das so nebenbei alle wichtigen Daten zusammenholt, checkt wie die Zugriffsrechte aussehen, und solche Sachen, wie Renderingfunktionen ($irgendeinformat zu HTML) fuer verschiedene Teile des Inhalts oder Pruefroutinen fuer verschiedene Szenarien (z.B. Zugriffsrechte: hasaccess(...)) enthaelt.
Will ich nun die Authentifizierung aendern, dann aendere ich nur die Klassen User und Group (alle anderen fragen ja User oder Group). Will ich auf eine andere Datenbank umsteigen (z.B. PostgreSQL), dann aendere ich DB. Will ich das Layout von Seitenueberschriften aendern, dann kommt Page dran.
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.)
Konrad
- -- "I can give you one advice. If you see a Neo: do the same as we do - run!" -- Agent Jones