Webstatt.org - Community seit 2006 - 2012 (2024?)

Wie schafft man den Sprung von prozeduraler zu objektorienter Programmierung?

Avatar user-118
25.11.2006 21:16

Guten Tag,

Wie schafft man den Sprung von prozeduraler zu objektorienter Programmierung?

Ich habe (leider) beim erlernen von PHP den Fehler gemacht, mich nicht von anfang an mit objektorientierter Programmierung zu beschäftigen. Nun, nach circa 2-3 Jahren Erfahrung mit PHP ist es längst überfällig umzusteigen. Ich habe mir ein Buch zu PHP5, welches auch Erklärung zur OOP umfasst, gekauft. Zur Zeit ist es bei mir so, dass ich etwas anfange zu programmieren aber mir sobald ich sehe, was ich für einen Mist verzapfe (MischMasch aus Design und Programmiercode), die Lust vergeht und das soll sich ändern.
Ich habe mir das Kapitel in dem Buch und einige Webseiten (unteranderen die Wikiartikel) durchgelesen und muss sagen, ich verstehe davon nicht viel.
Das Prinzip einer Klasse ist mir klar aber ich sehe mich nicht in der Lage zu entscheiden wann eine Funktion private, public oder protected sein sollte und auch mit __construct kann ich (noch) nicht sonderlich viel anfangen. Zur Zeit wäre mir sehr daran gelegen, OOP an der Programmierung einer Template Engine zu erlernen.
[list=1]
  • Empfiehlt sich dies ?
  • Hat jemand Beispiele, die ein "Learning by doing" ermöglichen ?
  • Kennt ihr vielleicht Links zum Thema OOP die evtl. auch die verschiedenen "Eigenschaften" für Funktionen erläutern?
  • Könnte jemand den Begriff "Abstraktion" einmal ausführen, der Wikibeitrag leuchtet mir nicht wirklich ein?
  • Sind Methoden Funktionen in einer Klasse oder habe ich das falsch verstanden ? Wenn ja, wieso heißen sie Methoden und nicht Funktionen ?
  • Was macht der Konstruktur ? Definiert der Klassenvariablen ?
  • [/list=1]

    Der Großteil der Fragen lässt sich mit Sicherheit mit Links beantworten. Das was ich bis jetzt gefunden habe enthält Fachbegriffe, nach denen ich dann wieder Suche und so drehe ich mich dann immer weiter im Kreis.


    vielen user-158k für die Füllung meiner Wissenlücken

    mfg Alex

    Ich brauche keine Signatur
    user-343
    25.11.2006 21:33

    Der Konstruktor ist eine magische Funktion (symbolisieren die __). Diese Methode wird aufgerufen, wenn du die Klasse initialisierst:
    $class = new Class('var'zwinkern;


    Das, was die Klasse Clas als Parameter, wie in einer Funktion, bekommt, sind die Parameter für die Methode __construct selbst.

    private/public/protected zu erklären ist einfach. "public" muss alles sein, dass auch von aussen "gesehen" werden soll. "protected" Sind alle Methoden und Variablen, die nur für das Objekt und dessen Kindern intressant sind, andere Teile des Programms aber nicht zu intressieren haben ("unwichtig"zwinkern. private sind Methoden und Variablen, die nicht einmal die für Kindklassen intressant sind.

    user-157
    26.11.2006 08:46

    naja php ist nicht so schön um oop einzusetzen.. Python, Ruby und so sind viel objektorientierter lächeln

    asdf!
    Avatar user-118
    26.11.2006 11:20

    Original von user-157
    naja php ist nicht so schön um oop einzusetzen.. Python, Ruby und so sind viel objektorientierter lächeln


    inwiefern hilft das hier weiter ?

    Ich brauche keine Signatur
    Avatar user-300
    26.11.2006 11:28

    Eine Klasse ist im Prinzip eine Sammlung "zusammengehörender" Funktionen. Es ist generell bei grösseren Projekten immer auf OOP zu setzen.



    Sind Funktionen in Klassen zusammengefasst, werden sie Methoden genannt um die beiden auseinander zu halten.

    function name() { }

    class klasse {
    public function name() { }
    }


    Wie du siehst ist es also möglich, innerhalb und ausserhalb einer Klasse dieselben Funktions- bzw. Methodennamen zu wählen. Durch die unterschiedliche user-129amsung kann man diese einfach auseinanderhalten.



    Der Konstruktor kann man zum Beispiel dazu verwenden, Attribute (die Variablen einer Klasse) festzulegen. Diese können am Anfang einer Klasse nur mit statischen Werten gefüllt werden.

    class klasse1 {
    public $var = funktion(); // FEHLERMELDUNG!
    }

    class klasse2 {
    public $var;
    public __construct() {
    $this->var = funktion(); // funktioniert
    }
    }


    Der Konstruktor wird jeweils aufgerufen wenn die Klasse initialisiert (gestartet) wird:
    $klasse = new klasse2();


    Bei Fragen oder Fehlern meinerseits, melden zwinkern

    Avatar user-118
    26.11.2006 11:49

    Ich habe mich nun hingesetzt und mit einer Mysql Klasse angefangen. Das Problem ist, dass ich mir die hier geposteten schon so oft angeguckt habe, dass es fast schon abschreiben ist. Mal sehen was dabei raus kommt.

    edit:// Wie rufe ich den __destructor auf ?

    Ich brauche keine Signatur
    user-343
    26.11.2006 13:58

    final class DeineKlasse {
    final public function __destruct() {
    print "Blub";
    }
    }
    $class = New DeineKlasse();

    unset($class);


    Müsste "Blub" ausgeben. Sobald alle Referenzen auf eine Funktion gelöscht sind, wird der Destruktor aufgerufen.

    Avatar user-118
    26.11.2006 14:01

    Hasb auch mit unset gelöst... Was beudetet der Zusatz final ?

    edit:// Ok hat sich erledigt. Finale Klassen lassen sich nicht mehr vererben.

    Ich brauche keine Signatur
    Avatar user-180
    26.11.2006 14:25

    wäre einer mal bereit einen ausführlichen LEICHT verständlichen artikel über oop mit php zu scjreiben. alles was ich bis jetzt darüber gelesen haben (und das war nun mal zum allergrößten teil theorie) ist weder leicht verständlich (= angereichert mit unnötigen fachwörtern die das verstehen deutlich erschweren) noch mit guten beispielen aufbereitet.
    also könnte sich jemand mal bereiterklären so eine einfürhrung zu schreiben? danke.

    may the force be with you. but mostly with me.
    user-150
    26.11.2006 14:31

    wäre ich auch dafür Fettes Grinsen

    Mehr schlaue Sprüche gibt es auf: anotherstyle.de Psicologia
    Avatar user-118
    26.11.2006 14:33

    Können ja ein Unterforum aufmachen. Der Name "Klassenfahrt" scheint sich anzubieten Fettes Grinsen

    Ich brauche keine Signatur
    Avatar user-168
    26.11.2006 15:00

    Da ich damals keine Antwort erhielt: Kann man eine große Klasse schreiben, oder sollten alle Seitenelemente einzelne Klassen sein und dann in klassischer Form zusammen arbeiten?

    Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
    Avatar user-162
    26.11.2006 15:07

    Original von user-168
    Da ich damals keine Antwort erhielt: Kann man eine große Klasse schreiben, oder sollten alle Seitenelemente einzelne Klassen sein und dann in klassischer Form zusammen arbeiten?

    es empfiehlt sich nur die Methoden und Variablen in einer Klasse zusammen zu fassen die logischerweise zusammen gehören... und nicht einfach alles in eine Klasse, weil dann hat man ja keinen Vorteil mehr zum "normalen" Programmierenzwinkern
    aber natürlich nicht für jede einzelne Funktion eine eigene Klasse anlegen.

    Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
    Avatar user-168
    26.11.2006 15:32

    Das schon. Aber wäre es sinnvoll, wenn ich mir nen Template-, Datenbank-, Statistik- Class-Gerüst anlege und dann entsprechend zur aufgerufenen Seite zum Beispiel die Unterklasse Artikelsystem aufrufe.

    Oder sollte die eigentliche Seite dann doch "Stand Alone" bleiben und bloß auf die Grundfunktionen als Klassen zurückgreifen?


    Sprich ich könnte ja eine Grundklasse schreiben und dann alle möglichen Unterklassen für die einzelnen Seiten. So könnte ich eine Unterklasse erzeugen und diese würde automatisch über die Parameter und übergeordneten Classes die gewünschte Seite erzeugen.

    Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
    Avatar user-118
    26.11.2006 15:57

    Du meinst also eine Klasse, die die anderen Klassen verwaltet und je nach Parameter ansteuert ? Halt ich für sinnvoll.

    Ich brauche keine Signatur
    Avatar user-118
    01.12.2006 14:41

    Habe grade eine Tempalteklasse gefunden ( hier ). Ist die Umsetzung so empfehlenswert ? Lohnt es sich, die Klasse weiter anzugucken ? Und vorallem kann man das irgendwie so machen, dass man nicht jeden Variable einzeln ersetzen muss, sondern das das in einer Art Automatismus geschieht ?

    Thx for help

    mfg alex

    Ich brauche keine Signatur
    Avatar user-236
    01.12.2006 16:02

    ich denke die Klasse ist ein gutes Beispiel. Es würde meiner Meinung nach nicht viel Sinn machen die Variablen in einem Ruck zu ersetzen. Eigentlich könntest du das auch in ein array reinhauen und dann über den Key ersetzen, in etwa so:

    str_replace(array_keys($array), array_values($array), $this->content);

    Aber das stört nur die Übersicht, finde ich. Vielleicht gibts ja noch eiinen besseren Vorschlag.

    Übrigens würde ich eine einfache Template Klasse auch nur für ein kleines Projekt einsetzen. Ansonsten kannst dir auch gleich Smarty oder ähnliches anschauen. Da gibts gleich caching und weiß Gott was dazu Fettes Grinsen

    signature in progress
    Avatar user-118
    01.12.2006 16:14

    Irgendwie denke ich hat es Sinn sich mal Smarty anzugucken.... Das Projekt wird doch etwas komplexer ....
    danke

    mfg alex

    Ich brauche keine Signatur