PHP: OOP, Design Patterns und UML

Werbung
PHP
OOP, Design Patterns und UML
Marco Skulschus
Page Controller
ataTwo-Step-View
Transfer
Object
Row
Data
Mapper
Transaction Script
Application Controller
Data Gateway
Table
Module
Transform View
Front Controller
bietet
dem
Programmierer
die
Moeglichkeit,
PHP
obje
eCase
Interface
tiert und unter Einsatz
von
gaengigen
objektorientie
Klasse
entkoppelun
Entwurfstechniken
zu
verwenden.
Dieses
Buch
will An
Abstraktion
Design
Patterns
ngern
in
der
OOP,
die
aber
gleichzeitig
fortgeschritten
Programmierer
sind, UML
die
OOP
anhand
eflection
Vererbung
Syntax
erlaeutern.
Nach
einerPrinzipien
Darstellung
der der
neu
bietet dem Programmierer die Moeglichkeit, PHP objekttiert und unter Einsatz von gaengigen objektorientierntwurfstechniken zu verwenden. Dieses Buch will Angern in der OOP, die aber gleichzeitig fortgeschrittene
Programmierer sind, die OOP Prinzipien anhand der
PHP
OOP, Design Patterns und UML
Marco Skulschus
Webseite zum Buch:
www.comelio-medien.com/buch-katalog/php/php_und_oop
© Comelio Medien 2012
Alle Rechte vorbehalten. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jeder Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Das
gilt insbesondere für die Vervielfältigung, Übersetzung, Mikroverfilmung und die
Einspeicherung und Verbreitung in elektronischen Systemen.
© Comelio GmbH
Comelio GmbH
Goethestr. 34
D-13086 Berlin
Fon:+49 (0) 30-8 14 56 22-00
Fax:+49 (0) 30-8 14 56 22-10
www.comelio-medien.com
[email protected]
Umschlaggestaltung, Comelio-Grafiken, Layout & Satz: Nadine Kilian
ISBN 978-3-939701-66-8
Inhaltsverzeichnis
Inhaltsverzeichnis
1. Einfache Klassen 17
1. 1. Aufbau einer Klasse 18
1. 1. 1. Eigenschaften und Methoden 18
1. 1. 2. Konstruktoren und Destruktoren 27
1. 1. 3. Zugriffsschutz und Zugriffsmethoden 31
1. 2. Erweiterte Klassenstrukturen 39
1. 2. 1. Statische Methoden und Eigenschaften 39
1. 2. 2. Konstanten 45
1. 3. Klassenverbünde 49
1. 3. 1. Klassen kombinieren 49
1. 3. 2. Referenzen verstehen und beherrschen 56
1. 3. 3. Algorithmen auslagern 60
2. Erweiterte Klassen 66
2. 1. Vererbung 66
2. 1. 1. Einfache Vererbung 67
2. 1. 2. Programmierung auf eine Schnittstelle hin 74
2. 1. 3. Dynamische Bindung und Polymorphismus 88
2. 2. Abstraktion 92
2. 2. 1. Vererbungshierarchie und Prinzip 93
2. 2. 2. Klienten 99
2. 2. 3. Beziehungen zwischen Klassen 104
2. 3. Schnittstellen 108
2. 3. 1. Einfache Verwendung 108
2. 3. 2. Mehrfache Implementierung 116
3. Das UML-Klassendiagramm 119
3. 1. Grundlagen 119
3. 1. 1. Definition 119
3. 1. 2. Einsatz der UML in PHP 123
3. 1. 3. UML als Modellierungswerkzeug 126
5
Inhaltsverzeichnis
3. 2. Einfache Klassen und Verbünde 126
3. 2. 1. Einfaches Klassendiagramm 126
3. 2. 2. Statische Mitglieder und Konstanten 128
3. 2. 3. Beziehungen zwischen Klassen 129
3. 3. Klassenhierarchien 132
3. 3. 1. Vererbung 132
3. 3. 2. Abstraktion 136
3. 3. 3. Schnittstellen 138
3. 4. Beziehungen zwischen Klassen 139
3. 4. 1. Assoziation 139
3. 4. 2. Aggregation 140
3. 4. 3. Komposition 141
4. PHP-Spezialitäten 143
4. 1. Magische Methoden 143
4. 1. 1. Überladung von Eigenschaften 144
4. 1. 2. Überladung von Methoden 147
4. 1. 3. Zustand überprüfen 150
4. 1. 4. Zeichenkette-Ausgabe 154
4. 1. 5. Serialisierung 156
4. 1. 6. Klassen exportieren 161
4. 1. 7. Klassen automatisch laden 162
4. 2. Ausnahmen 163
4. 2. 1. Standard-Ausnahmen 165
4. 2. 2. Abgeleitete Ausnahmen 169
4. 3. Reflection 172
4. 3. 1. Einfache Reflection 173
4. 3. 2. PHP5-Reflection 183
4. 3. 3. Dynamische Instanziierung 192
5. Entwurfsmuster des Standardkatalogs (GoF) 197
5. 1. Erzeugung 197
5. 1. 1. Singleton 200
5. 1. 2. Einfache Fabrik und Fabrikmethode 204
5. 2. Struktur 211
5. 2. 1. Dekorierer 211
5. 2. 2. Kompositum 217
5. 2. 3. Adapter 222
5. 2. 4. Fassade 227
6
Inhaltsverzeichnis
5. 3. Verhalten 232
5. 3. 1. Befehl 232
5. 3. 2. Schablonenmethode 241
5. 3. 3. Besucher 246
5. 3. 4. Strategie 249
6. Mehrschichtigkeit 253
6. 1. Architekturvarianten 253
6. 1. 1. Einführung 254
6. 1. 2. Zwei Schichten 260
6. 1. 3. Drei Schichten 261
6. 1. 4. Vier und mehr Schichten 262
6. 1. 5. Übersicht 265
6. 2. Umsetzung in PHP 266
6. 2. 1. Prozedurale Lösung mit Arrays 268
6. 2. 2. Objektorientierte Variante 278
6. 2. 3. XML 290
6. 2. 4. WebServices 302
7. Enterprise Application Muster 319
7. 1. Basis-Muster 319
7. 1. 1. Registry 320
7. 1. 2. Weitere Basis-Muster 323
7. 2. Datenzugriffsschicht 324
7. 2. 1. Active Record 324
7. 2. 2. Data Mapper 332
7. 2. 3. Row Data Gateway 339
7. 2. 4. Table Data Gateway 346
7. 2. 5. Beziehungen 351
7. 2. 6. Sonstige Muster 356
7. 3. Domänenlogik 360
7. 3. 1. Allgemeine Überlegungen 360
7. 3. 2. Transaction Script 363
7. 3. 3. Domain Model 366
7. 3. 4. Table Module 370
7. 3. 5. Service Layer 372
7. 4. Präsentationsschicht 374
7. 4. 1. Page Controller 374
7. 4. 2. Front Controller 376
7
Inhaltsverzeichnis
7. 4. 3. Transform View 377
7. 4. 4. Two Step View 380
8. Planung mit Use Cases 383
8. 1. Darstellung der Use Case-Technik 383
8. 1. 1. Einführung 384
8. 1. 2. Basismethodik 385
8. 1. 3. Format der Anwendungsfälle 395
8. 2. Anwendungsfälle in Text und UML 396
8. 2. 1. Anwendungserzählungen 397
8. 2. 2. Tabellarische Anwendungsfälle 399
8. 2. 3. Use Case-Diagramm der UML 402
8. 2. 4. Aktivitätsdiagramm der UML 410
8
Vorwort
Vorwort
Vorwort
Herzlich willkommen zu einem Fachbuch von Comelio Medien, ein Bereich der Comelio GmbH. In diesem Buch finden Sie als PHP-Programmierer eine eingehende
Darstellung, wie Sie in Zukunft PHP objektorientiert programmieren können, und
übersichtliche Abhandlungen über zusätzliche Techniken der OOP-Verwendung.
Zu dieser Reihe
Diese Buchreihe konzentriert sich auf verschiedene Aspekte der Programmierung
mit Hilfe von PHP. Dabei stehen eher spezialisierte Themen wie PHP und XML,
Objektorientierung und Muster sowie spezielle Datenbanksysteme wie Oracle im
Vordergrund.
Autor
Marco Skulschus (Jahrgang 1978) studierte Ökonomie in Wuppertal und Paris.
Während des Studiums arbeitete er als Programmierer bei einem Internet-Startup
und dann als Trainer/Berater für verschiedene IT-Unternehmen, bis er zu seinem
heutigen Arbeitgeber kam. Bei der Comelio GmbH ist er im Bereich Softwareentwicklung tätig und plant betriebswirtschaftliche Software im Bereich Auswertungen und Reporting. Er interessiert sich besonders für XML und Datenmodellierung, wobei er hier auch fortgeschrittene Techniken wie Ontologien verwendet.
Er hat bereits eine ganze Reihe von Büchern herausgebracht und blickt auf vier
Bücher zum Thema XML (darunter XML Schema, XSLT und XSL-FO) sowie auch vier
Bücher zur Software-Entwicklung mit Oracle, in denen die Themen SQL, PL/SQL
und XML-Integration behandelt werden. Im Bereich PHP begann er seine AutorenTätigkeit mit einem Grundlagen-Buch zu PHP und MySQL sowie einem Werk zu
Standard-SQL. Zurzeit sind von ihm zusammen mit diesem Buch drei Bücher zur
PHP-Programmierung bei Comelio Medien erhältlich.
10
Vorwort
Aufbau des Buchs
Die einzelnen Kapitel begleiten den Leser dabei, zunächst die objektorientierte
Syntax in PHP 5 sowie die allgemeinen Prinzipien und Techniken bei der Erstellung von Klassen, Schnittstellen, Vererbungshierarchien sowie die speziellen PHPTechniken zu erlernen. Dann folgt ein großer Teil mit mehreren Kapiteln, in dem
diese neuen Fähigkeiten dann um zusätzliche Techniken des objektorientierten
Entwurfs mit Entwurfsmustern, dem Konzept der Mehrschichtigkeit sowie der Planung mit Anwendungsfällen und der Dokumentation mit der UML (Unified Modeling Language) erweitert werden.
1. Das erste Kapitel zeigt, wie man überhaupt in PHP eine Klasse mit Eigenschaften und Methoden erstellt, wie diese Klassen-Mitglieder zusammenarbeiten
und wie man auf Basis einer solchen Klasse Objekte erstellt und verwendet.
Es zeigt die Nützlichkeit von Zugriffsmethoden (Getter-/Setter-Methoden),
den Einsatz von Konstruktoren und Destruktoren sowie statische Eigenschaften und Methoden und die Verwendung von Konstanten. Neben der allgemeinen Programierung in PHP enthält es auch einfache Überlegungen zum
Aufbau solcher einfachen Klassen.
2. Das zweite Kapitel beschäftigt sich mit den erweiterten Techniken des Klassenaufbaus. Hier findet man solche Themen wie Vererbung von gewöhnlichen und abstrakten Eltern-Klassen, den Einsatzbereich von Abstraktion sowie die Entwicklung und Implementierung von Schnittstellen (Interfaces). Es
zeigt sehr ausführlich, wie die verschiedenen Techniken miteinander kombiniert werden können. Dabei beschäftigt man sich als Leser beispielhaft mit
den Themen Polymorphismus (Vielgestaltigkeit), dynamische Bindung, Substitutionsprinzip der OOP und verschiedenen allgemeinen objektorientierten
Entwurfstechniken.
3. Auf Basis der in den ersten beiden Kapiteln erarbeiteten Syntax-Techniken
hilft das dritte Kapitel, den Überblick im geplanten oder schon programmierten Klassensystem zu behalten. Dabei stellt es das Klassendiagramm der UML
vor. Nach einer kurzen Einführung in die Unified Modeling Language folgen
die Beispiele aus dem ersten beiden Kapiteln in einer grafischen Aufbereitung, sodass man einen Vergleich zwischen Syntax und modellhafter Abbildung im Klassendiagramm hat.
11
Vorwort
4. PHP bietet immer noch nicht alle Syntax-Möglichkeiten, die bspw. in Java oder
.NET genutzt werden können, aber es sind einige Besonderheiten vorhanden,
die einen Teil der fehlenden Techniken ausgleichen. Das vierte Kapitel konzentriert sich daher genau auf diese Techniken wie bspw. die magischen Methoden für Überladung. In einem zweiten Teil zeigt es dann die neuen Techniken
für die Entwicklung und Nutzung von Ausnahmen zur besseren Fehlerbehandlung, die Serialisierung/Deserialisierung sowie die umfangreichen Reflection API, mit der man zur Laufzeit sämtliche objektorientierten Konstrukte
(Klassen, Schnittstellen, Objekte) untersuchen und verwenden kann.
5. Da man nach dem vierten Kapitel eine umfassende Basis über alle objektorientierten Techniken von PHP gewonnen hat, zeigt das fünfte Kapitel dem
Leser, wie man wiederkehrende Probleme beim objektorientierten Entwurf
mit Entwurfsmustern (Design Patterns) lösen kann. Dabei konzentriert sich
dieses Kapitel auf den GoF-Katalog (Gang of Four) an Entwurfsmustern. Es
enthält eine Auswahl an in PHP sinnvoll einsetzbaren Mustern wie u.a. Schablonenmethode, Adapter, Besucher, Kompositium, Befehl.
6. Das sechste Kapitel führt mit einer Reihe von Beispielen und einem ausführlichen theoretischen Fundament den Begriff und das Konzept der Mehrschichtigkeit ein. Es bildet dabei eine Überleitung zu den Entwurfsmustern für Unternehmensanwendungen des siebten Kapitels und stellt so eine Brücke zur
erfolgreichen Anwendung der Objektorientierung in PHP-Anwendungen dar.
Als Beispiel wird gezeigt, wie eine mehrschichtige Software mit Arrays, Objekten, XML und auch mit Web Services erstellt wird. Der Bereich Web Services
wird durch eine ausführliche theoretische Erläuterung abgerundet.
7. Das siebte Kapitel setzt den Gedanken der Mehrschichtigkeit fort und liefert
eine teilweise beispielhafte Einführung in die Entwurfsmuster für Unternehmensanwendungen. Dabei enthält es auch mit PHP sinnvoll und gut umsetzbare Muster für die Datenzugriffs-, Geschäftslogik- und Präsentationsschichten.
8. Im achten Kapitel wird schließlich mit Hilfe der Anwendungsfallanalyse (Use
Cases) eine Technik vorgestellt, mit der Software geplant und sowohl in Textform (Use Cases, Anwendungserzählungen) als auch mit Hilfe der UML (Use
Case- und Aktivitätsdiagramm) dargestellt werden kann.
12
Vorwort
Persönliches Vorwort
Einige Leser wissen möglicherweise, dass ich meistens alles indirekt und ohne
persönliche Ansprache formuliere, sodass ich hier extra ein persönliches Vorwort
einfügen muss, um einmal kurz aus diesem Formulieren ausbrechen zu können.
Ich beschäftige mich mit PHP professionell seit Veröffentlichung der Version 4
und habe in den vergangenen Jahren immer wieder in Büchern und Magazinen
Techniken der PHP-Programmierung vorgestellt. Sogar mein allererstes Buch war
ein klassisches Einsteigerbuch für PHP und MySQL. Laut aktuellem Plan werde ich
ein solches Buch wohl erst zur nächsten Version schreiben, denn auch dieses ist
ein Buch, das ich wie dieses OOP-Buch immer einmal bzw. noch einmal schreiben
wollte. Wesentlich sind natürlich auch die vielen Seminare, die ich zur PHP-Programmierung und angrenzenden Themen wie Entwurfsmustern oder SoftwarePlanung seit Jahren durchführe.
Als die Version 5 herauskam, gab es einen beeindruckenden Boom an Seminarund Beratungsanfragen zum Thema Objektorientierung, Planung und Programmierung im Team. Es ist nicht häufig, dass man ein Seminar erst dann konzipiert,
wenn man es schon mehrfach durchgeführt hat oder man es erst dann als Standard-Thema anbietet, wenn eine Reihe von Kunden sich mehr mit der richtigen
Themenauswahl und Präsentationsform beschäftigt haben als der Dozent - aber
genau in diesem Bereich verhielt es sich so. Dass ich erst zwei Jahre später dazu
kam, endlich die erste Auflage dieses Buch zu schreiben, war ein wenig ärgerlich,
aber andererseits vielleicht auch ein besonderer Vorteil. Denn nur so konnte ich
das, was ich PHP-Programmierern vermitteln wollte, auch am besten auswählen.
Aus den vielen Seminarterminen zu diesem Thema sowie den vielen Besuchen
bei PHP-Teams und Firmen, die ausschließlich PHP-Software erstellen, konnte ich
den Inhalt so destillieren, dass ich meine, behaupten zu könnten, dass Sie eine
sehr gute Quelle in der Hand halten, mit der Sie sich bedenkenlos in die Welt der
Objektorientierung begeben können.
Wenn man wie ich zwischen der Java/.NET- und PHP-Welt wandelt, dann kennt
man nicht nur die vielen Diskussionen rund um Open oder Closed Source-Software, sondern natürlich auch die Vorbehalte oder Vergötterungen von prozeduralen oder objektorientierten Techniken. Im Buch finden Sie noch an verschiedenen
Stellen persönliche Anmerkungen, sodass ich diese hier auf die beiden Allerweltssprüche „Es kommt darauf an“ und „Die Mischung macht´s“ reduzieren kann. Hätte ich das Buch unmittelbar nach Veröffentlichung der PHP 5-Version geschrieben,
13
Vorwort
hätte ich vermutlich ausschließlich die neue Syntax beschrieben und Ihnen nebenbei auch noch versucht, ausführlich zu erklären, dass ein Gästebuch mit 200
Zeilen nur objektorientiert funktionieren kann. Mittlerweile sehe ich das durchaus
differenzierter. Dass objektorientiertes Vorgehen die beste Technik darstellt, die
man zurzeit bei der Anwendungsentwicklung nutzen kann, steht für mich ebenso
wie ein Fels in der Brandung wie auch die Erkenntnis, dass man den Charakter
von PHP weiterhin bei der Wahl der Werkzeuge berücksichtigen muss. Nicht jede
OOP-Technik ist in PHP sinnvoll nutzbar, nicht jeder komplizierte Entwurf ist die
beste Wahl, aber sobald eine Software ernsthaft und mit langem Lebenszyklus
und einiger Komplexität entwickelt werden soll, sollte man allen alten Techniken
den Rücken zukehren.
Dabei kommt es aber nicht nur darauf an, überhaupt irgendeine Klasse zu formulieren und quasi ein prozedurales Programm in einer einzigen Methode zu formulieren und diese dann aufzurufen. Vielmehr finden Sie in diesem Buch nach der
Darstellung der verfügbaren Syntax zum größten Teil ganz andere Themen, die
direkt mit PHP nichts zu tun haben, sondern die ein Rüstzeug für die objektorientierte Arbeit auch in anderen Sprachen bieten, aber hier speziell für PHP-Programmierer von mir zusammen gestellt wurden. Themen wie die UML, Entwurfsmuster sowie Software-Planung lassen sich schlecht vollständig in einem einzigen
Buch abhandeln, denn zu jedem dieser Themen könnte man sich ein eigenes Werk
vorstellen. Ich habe allerdings versucht, die wesentlichen Inhalte beispielhaft und
mit erklärenden Abbildungen so aufzubereiten, dass man sofort nach der Lektüre
gute Werkzeuge in der Hand hält, mit denen man in jedem Fall bessere Software
als in der Vergangenheit erstellen kann.
Hat man dann mit dem Wissen, welches ich in diesem Buch vermittele, wiederum
einen gewissen Weg hinter sich gebracht und neue – hoffentlich positive – Erfahrungen gesammelt, dann ist es Zeit für Literatur, welche die Themen, die ich bspw.
in den Kapiteln zu Entwurfsmustern oder UML vermittele, deutlich umfangreicher
darstellen.
Online-Materialien
Die Webseite zum Buch lautet:
http://www.comelio-medien.com/buch-katalog/php/php_und_oop
14
Herunterladen