Pitchen Puk: Abstraktion von Objekten (objektorientierte Programmierung)

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?

  1. 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

    1. 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

      1. 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

        1. Hi,

          danke....

          werde es versuchen!

          :-)))

          PP

        2. 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

          1. 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