Zum Inhalt springen

OOP Struktur


Empfohlene Beiträge

Hi und hallo,

ich versuche mich mal wieder am OOP Ansatz in PHP.

Ist nicht so, dass ichs nicht kapiere. Im Gegenteil: Ich kann schon ganz nette Anwendungen auf OOP Basis schreiben.

Aber irgendwie fehlt mir (auch nach diversen Tutorials) noch die Sicherheit, wie ich eine Anwendung am besten aufbaue.

Dazu ein ganz einfach beispiel.

- Ich möchte gerne eine Internetseite bauen

- Die soll aus der Seite an sich, einer Navigation, und dem Inhalt bestehen.

Wie lege ich nun am besten meine Klassen an?

Es gibt ja mehrer Ansätze. z.b

1. Eine einzige Klasse "Seite", in der alle Methoden zur findung des Templates, zur Erzeugung der Navigation und zum Rendern des Inhalts enthalten sind.

2. (und jetzt die Frage ob das besser/klüger/eleganter/ ist)

Eine Klasse "Seite", die nur das Seitentamplate holt

Eine Klasse Navigation, die die Navigation schreibt

Eine Klasse Inhalt, die den Inhalt rendert und ausgibt

Und dann müsste z.b. die Klasse "Seite" in sich ein Objekt "Navigation" instanziiren...? Ist das gut?

Danke für jeden Tipp, ich wäre auch nicht abgeneigt, mal einen Tipp für ein OOP Tutorial zu erhalten, das auch wirklich mal einen "Einsatz im Leben" aufzeigt und nicht immer nur von Hamburgern, Tieren und der Evolution spricht ;)

Viele Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und dann müsste z.b. die Klasse "Seite" in sich ein Objekt "Navigation" instanziiren...? Ist das gut?

Es ist auf jeden Fall nicht schlecht. Ob es in deinem speziellen Fall gut ist, ist wiederum eine andere Frage ;)

Ansich wird OOP genutzt, um verschiedene Dinge zusammenzufassen und zu kapseln. In deinem Beispiel also z.B. die Erzeugung der Navigation und die Erzeugung des Seiteninhalts. Das sind ja 2 verschiedene Dinge, die nicht unbedingt was miteinander zu tun haben. All diese einzelnen Dinge kapselst du wiederum in eine Oberklasse (Seite z.B.). Nach außen hin hast du dann nur diese eine Klasse Seite und zur Ausgabe der Seite rufst du dann auf:



$seite = new Seite();
$seite->ausgabeSeite("Index");

[/php]

Das nur mal als kleines Beispiel. Mehr musst du dann zum ausgeben der Seite gar nicht kennen und wissen. Die Klasse Seite wiederum tut nichts anderes als ihrerseite Methoden von spezielleren Klassen auszurufen um die Teile der Seite zu bekommen.

Z.B.

[php]

function ausgabeSeite($seitenName)
{
$result = $this->navigation->ausgabeNavi($seitenName);
$result.= $this->inhalt->ausgabeInhalt($seitenName);
return $result;
}

Dazu muss die Klasse Seite ja gar nichts über den weiteren Aufbau zur Bestimmung der Inhalte wisen o.ä.

Nach außenhin haben diese Klassen jeweils eine definierte Schnittstelle, nämlich die Methoden die aufgerufen werden. Wenn sich jetzt mal was ändert an deiner Struktur zum Ablegen der Seiteninhalte o.ä. dann änderst du nur die Klasse Inhalt und alles andere bleibt gleich. Nach außen ändert sich dabei dann nichts und die Inhalte werden korrekt angezeigt.

Um mal bei den Beispielen zu bleiben (Beispiel Auto, was ja auch aus dem realen Leben ist ;) ): Du startest den Motor. Das machst du indem du den Zündschlüssel rumdrehst in Zündschloss. Was dahinter alles abläuft braucht dich dabei gar nicht zu interessieren. Und wenn du z.B. in der Klasse Motor, die ja eine Unterklasse der Klasse Auto ist, die Klasse Zündkerze austauschst, kann die neue Zündkerze ja intern ganz anders und besser funktionieren. Die Klasse Motor muss das aber gar nicht wissen, weil nach außenhin immernoch alles funktioniert wie immer. Und du musst das beim Anlassen erstrecht nicht wissen.

Du solltest beim OOP also immer das zusammenfassen, was zusammen gehört. Keine Klasse sollte mehr tun, als sie unbedingt tun muss. Genauso sollte das auch mit einzelnen Funktionen sein. Jede Funktion, die größer als 20 Zeilen ist, kann man in mehrere funktionen aufteilen (*). Das macht Änderungen und Erweiterungen später um so viel leichter. Und das ist auch der Vorteil von OOP. Du weißt außen gar nicht, was drin wirklich passiert und musst das auch nicht wissen um eine Klasse zu nutzen. Gleichzeitig kannst du Änderungen in einer Klasse recht einfach machen, da der Rest außerhalb davon gar nichts mitbekommt.

*: Das ist nur mal so grob gesagt. Ich hab das früher mal mit 1 Bildschirm gehört und jetzt einfach mal 20 Zeilen genommen. Aber es ist wie bei den Klassen/Objekten: Je speziallisierter deine Funktionen sind, desto weniger Aufwand hast du bei Änderungen/Korrekturen.

EDIT:

Ach ja, das Beispiel oben wird so natürlich gar nicht korrekt funktionieren (bin jetzt aber auch zu faul da groß was zu machen dran ;) ). Ich mach es aber eigentlich immer so, dass eine ausgabe nur ganz oben passiert. Also nie in einer Unterklasse/-funktion. Ein echo $seite->ausgabeSeite("Index"); wäre dann oben korrekt. Somit hab ich immer nur genau einen Punkt, an dem Ausgaben erfolgen und nicht verteilt irgendwo im ganzen Projekt ;)

EDIT2:

Ach ja, was mit wieder aufgefallen ist: Ich schwanke immer hin und her zwischen den ausdrücken Klasse und Objekt. Mir ist schon klar, dass die Klasse nur der Bauplan für das Objekt ist, welches dann im Speicher später vorhanden ist. Wenn ich darüber erzähle vermisch is das vielleicht schonmal. Aber so strikt Trennen kann man das ja nicht unbedingt wenn man theoretisch davon erzählt, finde ich. Also beim Auto oben. Wenn ich sage "die Klasse Motor" dann ist das ja soweit ok, auch wenn im eigentlichen Auto ja eher das Objekt Motor drin ist. Aber auch da müsste ich ja die Klasse anpacken um was zu ändern...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dem ist eigentlich nix mehr hinzuzufügen.

Als kleiner Tipp im Bereich OOP:

Es gibt für das Erstellen von Klassen sehr schöne Editoren. (Stichwort UML)

Für Linux User gibt es "umbrello" und für XP User gibt es "argouml".

Beide Programme sind so aufgebaut, dass man dem Editor über eine grafische Oberfläche mitteilt was man gerne tun möchte und der Editor zum Schluss automatisch den PHP5 Code generiert.

Das spart eine Menge Arbeit und funktioniert ganz prima.

Das Programm "argouml" hat nebenbei noch die schöne Funktion, dass man dort seine fertigen Klassen importieren kann und das Programm dann die Diagramme erstellt.

Beide Programme sind Freeware, wobei mir UMBRELLO unter Linux besser gefällt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...