Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einleitung
2 Die Basis der Objektorientierung
3 Die Prinzipien des objektorientierten Entwurfs
4 Die Struktur objektorientierter Software
5 Vererbung und Polymorphie
6 Persistenz
7 Abläufe in einem objektorientierten System
8 Module und Architektur
9 Aspekte und Objektorientierung
10 Objektorientierung am Beispiel: Eine Web-Applikation mit PHP 5 und Ajax
A Verwendete Programmiersprachen
B Literaturverzeichnis
Stichwort
Ihre Meinung?

Spacer
 <<   zurück
Objektorientierte Programmierung von Bernhard Lahres, Gregor Rayman
Das umfassende Handbuch
Buch: Objektorientierte Programmierung

Objektorientierte Programmierung
2., aktualisierte und erweiterte Auflage, geb.
656 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1401-8
Pfeil 10 Objektorientierung am Beispiel: Eine Web-Applikation mit PHP 5 und Ajax
  Pfeil 10.1 OOP in PHP
    Pfeil 10.1.1 Klassen in PHP
    Pfeil 10.1.2 Dynamische Natur von PHP
  Pfeil 10.2 Das entwickelte Framework – Trennung der Anliegen – Model View Controller
    Pfeil 10.2.1 Trennung der Daten von der Darstellung
  Pfeil 10.3 Ein Dienst in PHP
    Pfeil 10.3.1 Datenmodell
    Pfeil 10.3.2 Dienste – Version 1
  Pfeil 10.4 Ein Klient in Ajax
    Pfeil 10.4.1 Bereitstellung der Daten
    Pfeil 10.4.2 Darstellung der Daten
  Pfeil 10.5 Ein Container für Dienste in PHP
    Pfeil 10.5.1 Dispatcher
    Pfeil 10.5.2 Fabrik
    Pfeil 10.5.3 Dependency Injection
    Pfeil 10.5.4 Sicherheit
  Pfeil 10.6 Ein Klient ohne JavaScript
  Pfeil 10.7 Was noch übrigbleibt

In diesem Praxiskapitel werden wir die besprochenen Prinzipien an einem konkreten Anwendungsfall demonstrieren.

10 Objektorientierung am Beispiel: Eine Web-Applikation mit PHP 5 und Ajax

Galileo: Euer Buch ist jetzt schon fast ausverkauft, und wir sollten uns überlegen, ob wir es einfach nachdrucken oder eine überarbeitete Version mit aktualisiertem und neuem Inhalt herausbringen. Ich weiß, ihr seid beide ziemlich beschäftigt, aber wir im Verlag denken, eine überarbeitete Version wäre die bessere Wahl.

Bernhard: Wir sollten schon ein paar Ecken und Kanten glätten und die Hinweise der Leser in die neue Auflage einfließen lassen. Zum Beispiel könnten wir in einem praktischen Kapitel eine kleine Anwendung programmieren, an der wir die objektorientierte Vorgehensweise und die hier vorgestellten Prinzipien demonstrieren könnten.

Gregor: Gute Idee! Wir könnten zum Beispiel eine coole Anwendung für das iPhone programmieren. Dabei könnten wir auch ObjectiveC vorstellen, eine schöne Programmiersprache, die mir als ein objektorientierter Nachfolger von C einfach besser gefällt als C++.

Bernhard: Na ja, ObjectiveC ist schon interessant, allerdings wird es kaum verwendet. Der Mac und das iPhone sind zwar elegant, aber die Mehrheit unserer Leser programmiert nicht für MacOS X oder das iPhone. Ich bin mir nicht sicher, ob das Kapitel dann auch für sie so praktisch wäre.

Gregor: Was machen wir dann? Etwas in Java, Python oder Ruby? C++ wäre hier meine letzte Wahl.Galileo: Im Bereich der Web-Programmierung ist seit Jahren die Sprache PHP populär und wird häufig eingesetzt. Wäre das denn eine mögliche Basis für das Kapitel mit der praktischen Anwendung?

Gregor: Das trifft sich gut, in der aktuellen Version 5 hat PHP nun auch echte objektorientierte Eigenschaften mitbekommen. Damit können wir eine ganze Reihe der im Buch vorgestellten Konzepte gut illustrieren.

Bernhard: Dann lass uns ein praktisches Kapitel über objektorientiertes Programmieren in PHP schreiben.

Gregor: Und um die Beispielanwendung noch interessanter zu machen, werden wir eine Webanwendung schreiben, die intensiv Ajax verwendet. Daher werden wir uns auch JavaScript praktisch widmen.

Und so entstand dieses Kapitel ...


Rheinwerk Computing - Zum Seitenanfang

10.1 OOP in PHP  Zur nächsten ÜberschriftZur vorigen Überschrift

Bei Programmiersprachen wie Python oder Ruby kann man darüber streiten, welche der Sprachen eleganter ist – PHP ist über jegliche Eleganzdiskussion erhaben. Es hat sich bereits in der Domäne der Webentwicklung etabliert, als es noch gar kein Ruby oder Python gab. PHP entstand als einfache Alternative zu Perl zur Erstellung von dynamischen Webseiten.

Im Laufe der Zeit erhielt PHP die Fähigkeiten mächtigerer Programmiersprachen, und seit den Versionen 4 und 5 kann man PHP zur Familie der objektorientierten Programmiersprachen zählen.

PHP wird noch immer sehr häufig in der Webprogrammierung (und fast nur dort) verwendet, weil es eine einfache, frei verfügbare und mächtige Programmiersprache mit sehr umfangreichen Bibliotheken ist.

PHP wurde nicht von Anfang an als objektorientierte Programmiersprache entworfen. Die Fähigkeiten der Objektorientierung erschienen erst in der Version 4. Diese Implementierung wurde in der Version 5 komplett ersetzt, um mehr Funktionalität zu integrieren und die Performance der objektorientierten PHP-Programme stark zu verbessern. Wobei das Wort »ersetzt« nicht ganz korrekt ist: Da die Implementierungen der objektorientierten Sprachanteile von PHP in den Versionen 4 und 5 nicht kompatibel sind, blieb die alte Implementierung in PHP 5 erhalten, um alte Skripte auch unter PHP 5 laufen lassen zu können.

Neue Skripte, sofern man sie objektorientiert programmieren möchte, sollten allerdings nur die neue, in der Version 5 eingeführte Syntax verwenden. Daher werden wir uns hier auch nur dieser Syntax widmen.


Rheinwerk Computing - Zum Seitenanfang

10.1.1 Klassen in PHP  Zur nächsten ÜberschriftZur vorigen Überschrift

Abgesehen von der dynamischen Natur von PHP ähneln die Klassen in PHP den Klassen in Java. PHP unterstützt die einfache Vererbung von implementierenden Klassen und die Mehrfachvererbung von explizit deklarierten Schnittstellen.

Hier das Beispiel einer Klassendeklaration in PHP:

abstract class MeineKlasse  
         extends MeineBasisKlasse 
         implements SchnittstelleA, SchnittstelleB { 
   protected $id; 
   public $value;
   public static $count = 1; 
   const MAX = 1000; 
 
   public function __construct($id) { 
      $this->id = $id; 
   } 
 
   public function ausgabe() { 
      print "Meine Klasse " . $this->id . " " . $this->value; 
   } 
 
   public abstract function auswerten(); 
}

Listing 10.1    Beispiel der Syntax einer Klasse in PHP

An diesem Beispiel sehen wir die Grundelemente der Syntax einer Klasse in PHP. Eine Klasse wird mit dem Schlüsselwort class deklariert.

Klassen- und Objektvariablen, Konstanten

Klassen- und Objektvariablen werden in PHP mit ihrer Sichtbarkeitsstufe vorangestellt deklariert: »Öffentlich« (public), »Geschützt« (protected) und »Privat« (private).

Da PHP eine dynamisch typisierte Sprache ist, braucht man keinen Datentyp zu deklarieren. Man kann einer Objektvariablen einen An-fangswert zuweisen, allerdings muss dieser Anfangswert konstant sein und darf zum Beispiel keinen Funktionsaufruf enthalten.

Auf öffentliche Elemente eines Objekts kann man immer zugreifen, auf die privaten nur innerhalb der Methode der Klasse, in der die Elemente deklariert wurden. Auf die geschützten Elemente darf man von der Methode der deklarierenden Klasse und der von ihr abgeleiteten Unterklassen zugreifen.

Um zum Beispiel auf die Objektvariable $value eines Objekts, das der Variablen $x zugeordnet ist, zuzugreifen, schreibt man $x->value. Man lässt das zweite Dollarzeichen also weg. $x->$value wäre allerdings kein Syntaxfehler, sondern hätte eine andere Bedeutung. $x->$value würde zuerst den Wert der lokalen Variablen $value auswerten und dann auf die öffentliche Objektvariable mit dem ausgewerteten Namen zugreifen.

Im Gegensatz zu Objektvariablen werden die Klassenvariablen mit dem Schlüsselwort static gekennzeichnet.

Um auf die Klassenvariable $count der Klasse MeineKlasse zuzugreifen, schreibt man MeineKlasse::$count [Der Operator :: heißt in PHP Paamayim Nekudotayim. Im Hebräischen bedeutet dies »doppelter Doppelpunkt«. ] .

Man kann auch klassenspezifische Konstanten deklarieren, und zwar mit dem Schlüsselwort const. Im Gegensatz zu Variablen beginnen die Namen von Konstanten nicht mit einem Dollarzeichen. Um auf die Konstante MAX der Klasse MeineKlasse zuzugreifen, schreibt man MeineKlasse::MAX.

Klassen- und Objektmethoden

Methoden werden in den Klassen ähnlich wie globale Funktionen mit dem Schlüsselwort function deklariert. Auch die Funktionen können mit den Schlüsselwörtern public, protected und private den drei Sichtbarkeitsstufen zugeordnet werden. Wenn kein solches Schlüsselwort angegeben wird, wird die öffentliche Sichtbarkeitsstufe angenommen.

Wenn man innerhalb eine Methode auf die eigene Objektvariable zugreifen möchte, muss man dazu die Spezialreferenz $this verwenden. Um also auf die private Objektvariable $id zuzugreifen, schreibt man $this->id. Die Schreibweise $id würde auf eine lokale Methodenvariable zeigen.

Um auf die eigenen Klassenvariablen oder Klassenkonstanten zuzugreifen, kann man statt des Klassennamens die Klassenreferenz self verwenden. Man kann also self::$count statt MeineKlasse::$count schreiben.

In PHP kann man auch Klassenmethoden deklarieren, sie werden ähnlich wie Klassenvariablen mit dem Schlüsselwort static gekennzeichnet. Innerhalb einer »statischen« Klassenmethode ist die Referenz $this nicht definiert, und so hat man keinen Zugriff auf die Objektvariablen. Interessanterweise kann man aber auch jede Objektmethode in einem »statischen Kontext« aufrufen. Zum Beispiel kann man MeineKlasse:: ausgabe() statt $x->ausgabe() schreiben. Ein solcher Aufruf ist kein Fehler, allerdings setzt er die Spezialreferenz $this nicht. In diesem Falle bleibt die Spezialreferenz $this unverändert, so dass man auf diese Art eine überschriebene Methode auf einer Oberklasse im Kontext des aktuellen Objekts aufrufen kann (ähnlich wie in C++). Um die Methode der direkten Oberklasse aufzurufen, kann man statt des Namens der Oberklasse die Spezialklassenreferenz parent verwenden. [Seit der Version 5.3 kann man statt des direkt angegebenen Namens der Klasse auch eine Variable verwenden, deren Wert der Name der Klasse ist. ]

Vererbung in PHP

Mit dem Schlüsselwort extends wird gekennzeichnet, von welcher Oberklasse die deklarierte Klasse abgeleitet wird. Mit dem Schlüsselwort implements werden die von der Klasse implementierten Schnittstellen eingeleitet.

Eine Klasse muss alle Methoden der Schnittstellen implementieren, oder sie muss als abstrakt deklariert werden. Wie in Java kann man keine Exemplare einer abstrakten Klasse erstellen.

Die Bedeutung von abstrakten Klassen und Methoden sowie von Schnittstellen in PHP ist allerdings geringer als in Java. In PHP haben die Variablen keinen festen Typ, so dass man keine explizit deklarierten Schnittstellen braucht, um Operationen eines Objekts aufrufen zu können.

Die abstrakten Klassen und Methoden und auch die Schnittstellen sollten in PHP verwendet werden, um eigene Programmierfehler zu vermeiden. Zur Laufzeit kann man mit dem Operator instanceof die Zugehörigkeit von Objekten zu bestimmten Klassen und Schnittstellen überprüfen.

PHP kennt finale Klassen und Methoden. Diese werden mit dem Schlüsselwort final bezeichnet. Ähnlich wie bei anderen Programmiersprachen kann man finale Methoden in abgeleiteten Klassen nicht überschreiben, und von finalen Klassen kann nicht geerbt werden.

Lebenszyklus der Objekte

Exemplare einer Klasse werden mit dem Schlüsselwort new erstellt. Eine Klasse kann eine Konstruktor-Methode deklarieren. Der Name der Methode muss __construct lauten [Alternativ kann man auch den Namen der Klasse verwenden, intern wird dieser Name zu __construct umgewandelt. ] und kann eine beliebige Anzahl von Parametern haben. Im Gegensatz zu Programmiersprachen wie Java, C# oder C++ wird der Konstruktor der Oberklasse nicht automatisch aufgerufen. Dies muss explizit mit dem Aufruf parent::__construct(...) geschehen.

Eine Klasse kann auch einen Destruktor mit dem Namen __destruct deklarieren. Dieser kann keine Parameter haben. Ähnlich wie bei dem Konstruktor werden die Destruktoren der Oberklassen nicht implizit aufgerufen. Der Destruktor wird automatisch aufgerufen, wenn das Objekt nicht mehr erreichbar ist oder wenn das Skript beendet wird. Bei Destruktoren sollte man besonders aufpassen – sobald eine Ausnahme (Exception) in einem Destruktor geworfen und nicht gefangen wird, wird das Skript mit einem fatalen Fehler terminiert.


Rheinwerk Computing - Zum Seitenanfang

10.1.2 Dynamische Natur von PHP  topZur vorigen Überschrift

PHP ist eine dynamische Programmiersprache. Die Dynamik zeichnet sich nicht zuletzt dadurch aus, dass man Objektvariablen auch dynamisch erstellen kann. Wenn zum Beispiel $x auf ein Exemplar der Klasse MeineKlasse zeigt, führt der Aufruf

$x->beschreibung = "Ein Beispielobjekt"

nicht zu einem Fehler, sondern erstellt eine neue Objektvariable des Objekts $x.

Ein wenig Magie

Wie sich PHP verhält, wenn man auf nichtexistierende Objektvariablen zugreift oder nichtexistierende Methoden aufruft, kann man mit wenigen »magischen« Methoden beeinflussen. Sofern Sie eine Methode __get($name) deklariert haben, wird diese aufgerufen, sobald man auf eine nichtexistierende Objektvariable mit dem Name $name lesend zugreift. Bei einem schreibenden Zugriff wird __set($name, $value) aufgerufen, sofern Sie diese Methode deklariert haben.

Eine ähnliche »Magie« tritt auch beim Aufrufen nichtexistierender Methoden zutage. Je nachdem, ob die nichtexistierende Methode in einem Objektkontext (mit $this gesetzt) oder einem statischen Kontext aufgerufen wird, wird eine der »magischen« Methoden __call($name, $arguments) oder __callStatic($name, $arguments) aufgerufen.

Wer mehr von dieser »Magie«, die in PHP Überladen (Overloading) heißt, erfahren möchte, den verweisen wir auf das sehr umfassende Handbuch von PHP (http://de.php.net).



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

 <<   zurück
  Zum Rheinwerk-Shop
Neuauflage: Objektorientierte Programmierung






Neuauflage:
Objektorientierte Programmierung

Jetzt Buch bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Java ist auch eine Insel






 Java ist auch
 eine Insel


Zum Rheinwerk-Shop: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Rheinwerk-Shop: C++ Handbuch






 C++ Handbuch


Zum Rheinwerk-Shop: Einstieg in Python






 Einstieg in Python


Zum Rheinwerk-Shop: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern