Abstraktion von Objekten (objektorientierte Programmierung)
Pitchen Puk
- php
0 FICHTL0 Pitchen Puk0 FICHTL
Hi,
also ich schreibe eine Homepage in PHP.
Ich habe mit einem UML Programm die erforderlichen Diagramme erstellt.
Ich habe eine News Seite auf der Homepage auf der News angezeigt werden.
Jetzt habe ich ein "Datenbank"-Objekt von dem das "Newsdesk"-Objekt
die Daten bekommt. Das "Newsdesk"-Objekt erzeugt ein "News"-Objkekte.
Also ich dachte mir ich schaffe für alles ein Objekt was zusammenfassen kann. Also beim Newsobjekt Titel, Datum, Newstext, Überschift. Aber ich denke mir ein mehrdim. Array wäre da besser, oder?
Jetzt frage ich mich, ob ich wirklich so viele Objekte bei der Homepageprogrammierung benötige, da ja sowieso alles Serverseitig abläuft.
Wenn ich ja mit einer Datenbank wie mysql zusammenarbeite benötige ich dann überhaupt Objekte? Oder besser gefragt, wie weit sollte man abstrahieren und welche Objekte kann man sich schenken?
Danke
PS: Bin OOP Anfänger. Sollte man nicht immer alles zu Objektten zusammenfassen was zusammengehört?
Also ich dachte mir ich schaffe für alles ein Objekt was zusammenfassen kann. Also beim Newsobjekt Titel, Datum, Newstext, Überschift. Aber ich denke mir ein mehrdim. Array wäre da besser, oder?
Aber ein mehrdim. Array hat keine Methoden, kann nicht extenden,
usw.. Klar kannst du das alles mit Arrays machen dann brauchst du
aber gar nicht erst OO programmieren.
Jetzt frage ich mich, ob ich wirklich so viele Objekte bei der Homepageprogrammierung benötige, da ja sowieso alles Serverseitig abläuft.
Was das eine mit dem anderen zu tun hat ist mir schleierhaft.
Wenn ich ja mit einer Datenbank wie mysql zusammenarbeite benötige ich dann überhaupt Objekte? Oder besser gefragt, wie weit sollte man abstrahieren und welche Objekte kann man sich schenken?
Das ist immer die Frage. Normalerweise sollte man so viel wie
möglich abstrahieren um nicht später draufzukommen das man wieder
alles wegschmeißen muß nur weil zB. die Datenbank geändert werden
muß.
Andererseits bedeutet natürlich jede Abstraktion mehr Code und
damit mehr Arbeit. Außerdem bedeutet mehr Code auch immer mehr
Fehler und damit wieder mehr Arbeit.
Kurz gesagt mußt du selber wissen. Entweder mehr Arbeit und
leichteres Updaten oder weniger Abstraktion und mehr Ärger bei
Änderungen.
PS: Bin OOP Anfänger. Sollte man nicht immer alles zu Objektten zusammenfassen was zusammengehört?
Wenn man alles zusammenfassen würde was zusammengehört hätte man
ja zu Schluß ein großes Object/Klasse;-) Aber ich denke ich weiß
was du meinst.
Ein Objekt sollte eine bestimmte Aufgabe erfüllen bzw. zusammengehörige
Daten kapseln. News zb.: hat einen Titel, Datum und Inhalt. Diese
Daten gehören zusammen. Außerdem kann News Methoden zum speichern
und laden enthalten. Diese Methoden greifen über ein DB Objekt auf
die Datenbank zu.
Das Newsdesk Objekt könnte ein Array mit News-Objekten enthalten
und wiederum eine Methode zum laden mehrer Objekte (über ein DB-Objekt).
Man kann aber alles auch ganz anders anordnen kommt eben darauf an
was man wann wie braucht.
Jetzt hab ich so viel Zeugs geschrieben aber ob dir das irgendwie
weiterhilft? Ich weiß nicht so recht. Vielleicht solltest du
noch etwas nach OOP und dergleichen googlen oder die ein Buch
besorgen das hilft sicher mehr.
Schöne Grüße
FICHTL
Hi,
Danke für Deine Antwort!
Was das eine mit dem anderen zu tun hat ist mir schleierhaft.
Ich meine damit, dass ja bei jedem http request der Server nix mehr von den vorher erzeugten Objekten weiß und man für jede Seite wieder alles neu erzeugen muss.
Das Newsdesk Objekt könnte ein Array mit News-Objekten enthalten
und wiederum eine Methode zum laden mehrer Objekte (über ein DB-Objekt).
OK, hiermit hast Du Nagel auf den Kopf getroffen!!!
Das ist genau mein Problem. Ist das news Objekt mit seinen Attributen nun ein enity Objekt? Wenn ja, dann darf es doch nur set und get Methoden haben und keine Control logic,oder? Deswegen habe ich das Newsdesk Objekt geschaffen dass die "News" Objekte füllt.
Aber was habe ich von gefüllten "News"-Objekten?
Wenn die "News"-Objekte selber mit dem "DB"-Objekt kommunizieren können und sich damit selber füllen können, wozu brauche ich dann och das "newsdesk"-Objekt?
Also Masterfrage: Was habe ich davon wenn das "Newsdesk"-Objekt ein Array von "news"-Objekten erzeugt? Dieses Array wird an meine SMARTY html template übergeben. Klick der User auf eine Headline der Newsseite, wird die gleiche Seite wieder aufgerufen das "newsdesk"-Objekt muss wieder alle "news"-Objekte erzeugen und an die Template übergeben.
Wenn ich ein C++ oder Java Programm schreibe sind diese Strukturen ja immer im Speicher des eigenen Rechners.
Bei Homepageprogrammierung nicht.
Verstehst DU was mein Verständnisproblem ist?
Danke
PP
Also Masterfrage: Was habe ich davon wenn das "Newsdesk"-Objekt ein Array von "news"-Objekten erzeugt? Dieses Array wird an meine SMARTY html template übergeben. Klick der User auf eine Headline der Newsseite, wird die gleiche Seite wieder aufgerufen das "newsdesk"-Objekt muss wieder alle "news"-Objekte erzeugen und an die Template übergeben.
Ahh jetzt verstehe ich du kommst von C++. "Echte" Programmierer
haben am Anfang immer das Problem das sie eine Website als
Applikation sehen und deshalb glauben das ein Objekt vom ersten
bis zum letzten Klick vorhanden sein muß.
Da ich kein "echter" Programmierer bin kenne ich dieses Problem
nur vom hören sagen. Für mich ist es ganz normal das ich bei jedem
Request alle Objekte erzeuge. Du mußt dich von der Vorstellung
lösen das die Website die Applikation ist, sondern stell dir vor
das ein einzelner Aufruf (Klick) dein Programm ist. Also vom Klick
bis zum senden des HTMLs an den Browser. Für diesen Zeitraum
programmierst du.
Der Vollständigkeit halber sei gesagt das man Objekt auch in PHP
über mehrere Seiten behalten kann, Stichwort SESSION, allerdings
hat das einen riesen Nachteil. Das Objekt behält nur die Variablen
nicht aber die Methoden (Siehe php.net Sessionhandling).
Weiters gibt es meines Wissens nach auch Application-Server die
eine Website als ganzes betrachten und einer Desktop-Applikation
sehr ähnlich sind. Ich glaube ColdFusion ist so einer.
Einfach den Kopf schütteln und alles (vieles) vergessen, was du
geglaubt hast über programmierung zu wissen.
Schöne Grüße
FICHTL
Hi,
danke....
werde es versuchen!
:-)))
PP
Hallo!
Ahh jetzt verstehe ich du kommst von C++. "Echte" Programmierer
haben am Anfang immer das Problem das sie eine Website als
Applikation sehen und deshalb glauben das ein Objekt vom ersten
bis zum letzten Klick vorhanden sein muß.
Das ja auch kein dummer Denkansatz, nur kann das PHP eben nicht. Java oder .NET können das dagegen - soweit ich weiß. Das was mich an PHP letzte Zeit richtig stört ist dass man so schlecht abstrahieren kann. Damit meine ich nicht nur die OOP-Implementierung, sondern auch so Dinge wie Umgang mit HTTP... man darf sich um alles selbst kümmern, um jedes protokollspezifische Problem, um jedes clientspezifische Problem...
Weiters gibt es meines Wissens nach auch Application-Server die
eine Website als ganzes betrachten und einer Desktop-Applikation
sehr ähnlich sind. Ich glaube ColdFusion ist so einer.
genau.
Grüße
Andreas
hi,
man darf sich um alles selbst kümmern, um jedes protokollspezifische Problem, um jedes clientspezifische Problem...
bitte näher erläutern, verstehe ich nicht.
danke, bis dann
FICHTL