Home

PHP - Endlich objektorientiert - OO- und UML

image

Contents

1. Abbildung 5 33 Ein frisch erstellter Bestand Ausgangspunkt der Betrachtung ist ein gerade angelegter Datenbestand der nun persis tent also dauerhaft in der Datenbank untergebracht werden soll Dieser Datenbestand ist in Abbildung 5 33 dargestellt Bei der Erstellung der Men f hrung wurde bereits eine Schaltfl che speichern vorgesehen die aus der Anwendungsfallbeschreibung unseres Auftraggebers stammt Diese Funktion wurde bislang jedoch noch nicht realisiert Listing 5 25 beschreibt die Datei speichern php die bei einem Klick auf die Schaltfl che ausgef hrt wird Dabei wird zuerst gepr ft ob sich berhaupt Aktien im Bestand befin den Ist dies nicht der Fall wird eine entsprechende Meldung ausgegeben Andernfalls wird ein neues MySQL Datenbankzugriffsobjekt erzeugt und eine Parame ter Liste gef llt die die Zugangsdaten zum Datenbankserver enth lt Im Anschluss daran wird eine Verbindung zum Server aufgebaut Ist dies erfolgreich so wird zun chst ein eventuell bestehender Inhalt in der Tabelle ent fernt um den aktuellen Bestand bzw die aktuellen Best nde abzulegen Die Anwen dung ist also noch nicht daf r geeignet Best nde mehrerer Benutzer zu verwalten In der anschlie enden for Schleife wird die Liste der Aktienbest nde durchlaufen und jeder einzelne Bestand deserialisiert Dann wird die aktuelle Bilanz des gerade deseriali sierten Bestands erstellt die ja alle notwendigen Informationen enth lt
2. http flocalhost Aktienverwaltung 004 uebersicht php Windows Internet Explorer ale 37 lel localhost Al m ltl E coo rJe Datei Bearbeiten Ansicht Favoriten Extras Tr Favoriten http flocalhost Aktienverwaltung 004 uebersicht php Depotverwaltungsprogramm Gew hlter Bestand E ON laden speichern bersicht w hlen neu hinzukaufen neue Dividende verkaufen E ON DEOOOENAG999 w hlen 90 St ck am 24 04 2009 gekauft vor 194 Tagen Stand vom 04 11 2009 18 36Uhr EK akt Wert gesamt incl Kosten 2 128 50 2 350 80 EK akt Kurs pro Aktie 3 54 26 12 Differenz pro Aktie 58 Dividenden Ges Diff incl Einnahmen amp Kosten 30 44 Zinsen Jahr Copyright by Dr Frank Dopatka am m F Lokales Intranet far K o Abbildung 5 38 Der geladene Aktienbestand 5 1 5 Die n chsten Schritte In diesem Kapitel haben Sie bisher erfahren wie Sie auf der Grundlage einer kurzen fachlichen objektorientierten Analyse mit anschlie endem technischen Design einen Das Fallbeispiel der Depotverwaltung PHP Prototypen erstellen der ber die MySQL Datenzugriffsschicht und die objektori entierte Fachlogik bis hin zu einem Bedieninterface auf Grundlage von HTML Formula ren reicht Dies entspricht einem Zyklus in der iterativ inkrementellen Softwareentwick lung Nachdem Sie das Vorgehen von der Idee unseres Auftraggebers
3. i return position public function setBezahlt bezahlt if bezahlt TR E Listing 4 40 Die neue Rechnungsklasse Forts PHP Endlich objektorientiert 259 4 PHP objektorientiert this gt bezahlt TRUE else this gt bezahlt FALSE public function addPosition artikel menge rabattPos this gt positionen this gt anzPositionen new Rechnungsposition artikel menge rabattPos this gt anzPositionent Listing 4 40 Die neue Rechnungsklasse Forts Um die Rechnungsklasse zu testen werden in Listing 4 41 zun chst drei Artikel und ein Kunde angelegt Im n chsten Schritt wird eine neue Rechnung f r diesen Kunden erstellt Dieser Rechnung werden neben der Rechnungsnummer dem Rechnungsdatum und der Referenz auf das betreffende Kundenobjekt auch alle Daten bergeben die zum Erzeugen der ersten Rechnungsposition notwendig sind Auf diese Weise wird unmittelbar eine g ltige Rechnung erzeugt Diese Rechnung erh lt noch zwei weitere Rechnungspositionen Das Erzeugen der Rechnung wird dem Kun den im Konstruktor der Rechnung mitgeteilt Daher k nnen Sie im Anschluss daran das Kundenobjekt direkt nach der Ausgabe seiner Rechnungen durch Aufruf der Methode getRechnungen fragen lt php require_once classloader inc php gt lt html gt lt body gt lt php definieren al new Artikel 1 Milch saure Milch 1 00 1 20 7 a2 new Artikel 2 Butter gute
4. p_ ffnen add db boerse if db gt ffnen p_ ffnen FALSE die FEHLER beim DB ffnen 2 schreiben p_schreiben new Parameterliste p_schreiben gt add sql UPDATE ag SET name Dopatka AG WHERE ID 6 echo Schreiben erfolgreich echo var_dump db schreiben p_schreiben echo lt br gt 3 lesen p_lesen new ParameterListe p_lesen gt add sql SELECT ID name FROM ag ORDER BY ID ausgabe db gt 1lesen p_lesen if ausgabe FALSE db gt schliessen die FEHLER beim DB Zugriff echo Anzahl Datens tze count ausgabe lt br gt echo Anzahl Spalten count ausgabe lt br gt 2 foreach ausgabe as index gt datensatz Listing 4 48 Test der Implementierung PHP Endlich objektorientiert 271 4 PHP objektorientiert foreach datensatz as index2 gt wert echo wert echo lt br 4 schliessen db gt schliessen gt lt body gt lt htm1 gt Listing 4 48 Test der Implementierung Forts Auf diese Weise wird die folgende Ausgabe erzeugt Als bung k nnen Sie diese Aus gabe in eine HTML Tabelle umformatieren Schreiben erfolgreich bool true Anzahl Datens tze 30 Anzahl Spalten 2 1 ADIDAS SALOMON AG 2 ALLIANZ AG VNA O N 3 ALTANA AG O N 4 BASF AG O N 5 BMW 6 Dopatka AG 4 2 6 Umsetzung von Sequenzdiagrammen Wie Sie aus einem bestehenden UML Klassendiagramm eine Klasse in PHP 5 ableiten k
5. ber einen Index angesprochen dessen Wert normalerweise mit 0 beginnt Speicher Abbildung 2 5 Zugriff auf ein Array Das in Abbildung 2 5 dargestellte Array kann mit dem Quellcode aus Listing 2 13 erzeugt werden Der Zugriff erfolgt ber den Bezeichner des Arrays mit anschlie ender Angabe des Index Da der Index aus Zahlen besteht spricht man von einem numeri schen Array lt html gt lt body gt lt php data Array datal 4 datal 34 datal 546 echo var_dump data echo lt br gt Listing 2 13 Das erste numerische Array 28 entwickler press Grundlegende Syntax echo var_dump data l echo lt br gt echo var_dump data 2 echo lt br gt echo var_dump data echo lt br gt gt lt body gt lt html gt Listing 2 13 Das erste numerische Array Forts Mit var_dump k nnen Sie die Anzahl der einzelnen Elemente jeweils mit ihrem Datentyp und Wert ausgeben Ebenso k nnen Sie Operationen mit den Elementen durchf hren z B istgr er3 data 0 gt 3 Profitipp Wenn Sie var_dump auf das Array selbst anwenden also var_dump data so erhalten Sie eine detaillierte Auflistung der Inhalte des Arrays n mlich array 3 0 gt int 4 1 gt int 34 2 gt int 546 Eine alternative Erzeugung des Arrays kann in einem Schritt ber den Befehl data array 4 34 546 erfolgen Beliebige Startwerte und negative nicht fortlaufende Indizes Den Startwert des
6. data5 p3 gt getStudenten foreach data5 as index gt wert echo amp nbsp amp nbsp amp nbsp wert gt getName gt lt body gt lt html gt Listing 4 38 Test der Klassen Student und Praktikum Forts Nach den Anmeldungen geben zun chst die Studenten ihre Praktika aus und im Anschluss daran die Praktika ihre Teilnehmer Die folgende Ausgabe zeigt die korrekte Funktionsweise anmelden Dopatka gt Betriebssysteme bool true anmelden PHP gt Dopatka bool true anmelden Grube gt PHP bool true anmelden Netzwerke gt Grube bool true Dopatka Betriebssysteme PHP f r Anf nger PHP Endlich objektorientiert 255 4 PHP objektorientiert Grube Betriebssysteme Netzwerke Betriebssysteme Dopatka Grube PHP Dopatka Netzwerke Grube 4 2 4 Komposition und Aggregation Die Klassen Student und Praktikum aus dem letzten Kapitel waren relativ unabh ngig voneinander Eine Aggregation bzw eine Komposition realisiert eine Besteht aus Beziehung Wenn ein Objekt aus anderen Objekten zusammengesetzt ist sorgt dies f r eine h here Abh ngigkeit als eine Kennt Beziehung Lediglich die Ist ein Bezie hung der Vererbung bindet zwei Klassen noch st rker aneinander In den vorherigen Kapiteln wurden bereits die Klassen Person Kunde Artikel und Rech nungsposition vorgestellt In diesem Kapitel werden die Klassen nun ber die neue Klasse Rechnung miteinander verbunden
7. echo Die DAX AG mit der ID datensatz ID ist datensatz name lt br gt 2 break case 2 Kurs eines Tages Kurs DB_Kurs frmAG frmTag echo Der Kurs von frmAG am Tag frmTag war number_format Kurs 2 EUR break case 3 Mittelwert MW DB_MW frmAG echo Der Mittelwert des Kurses von frmAG ist number_format MW 2 EUR break default echo Ung ltiger Dienst Aufruf break DB_close Listing 2 72 Fachlogik Teil 2 Ausf hren der Dienste PHP Endlich objektorientiert 97 2 Die Sprache PHP Prozedural lt br gt lt a href gui html gt zur ck lt ar lt body lt html gt Listing 2 72 Fachlogik Teil 2 Ausf hren der Dienste Forts Versand von E Mails In diesem Kapitel wird beschrieben wie Sie mit PHP E Mails selbst versenden k nnen Dazu ist nur ein einziger Befehl vorhanden mail empfanger betreff nachricht sender Dieser Befehl sendet die in der Variablen nachricht gespeicherte Nachricht von dem Sen der sender an den Empf nger empf nger Zus tzlich wird noch der Betreff in der Variablen betreff bergeben Es f llt vielleicht auf dass die Absendeadresse beliebig eingegeben wer den darf Das E Mail Protokoll verlangt n mlich keine Authentifizierung vom Absender Zus tzlich stellt sich die Frage warum dem E Mail Versand ein eigenes Kapitel gewid met wird Die Ursache liegt n mlich darin dass der mail Befehl unter
8. entwickler press Das Fallbeispiel der Depotverwaltung datalekGeb hr this bestand gt getKaufGeb hren datalekEinzelpreis this gt bestand gt getEkEinzelpreis if this bestand gt isVerkauft alles wurde bereits verkauft datalaktDatum this gt verkauf gt getDatum datalaktGeb hr this gt verkauf gt getGeb hr datalaktEinzelpreis this gt verkauf getEinzelpreis elsef verkauf w ren die aktuellen Verkaufsgeb hren akt this gt ermittelnAktuelleDaten datalaktDatum akt Datum datalaktGeb hr verkauf datalaktZeit aktl Zeit datalaktEinzelpreis akt Kurs dataltagelmBesitz strtotime datalaktDatum strtotime datalekDatum 86400 datalekSumme datalekEinzelpreis datalanzahl datalekGeb hr datalaktSumme datalaktEinzelpreis datalanzahl datalaktGeb hr dataldiffAktiekur datalaktEinzelpreis datalekEinzelpreis dataldiffAktieProz datalaktEinzelpreis datalekEinzelpreis 1 100 ohne Kosten datalgewinnEur datalaktSumme datalekSumme dataldividenden datalgewinnProz datalgewinnEur datalekSumme 100 datalgewinnProzProJahr 100 datalgewinnkur dataltagelmBesitz 365 25 datalekSumme if datalgewinnProzProJahr lt 0 datalgewinnProzProJahr 0 return data Listing 5 11 Die neue Klasse Bilanz Forts Im ersten Schritt wird die Methode ermitteln AktuelleDaten beschrieben Die Home
9. lt body gt lt htm1 gt Listing 2 42 Eine Suchfunktion in einem Datenfeld und das break Kommando Forts Die Ausgabe des Listings lautet Der Name Hugo ist NICHT der Suchbegriff Der Name Uli ist NICHT der Suchbegriff Frank gefunden Suche war erfolgreich Diese Funktion muss in PHP jedoch nicht ber eine zeitaufwendige Schleife realisiert werden obwohl das im Alltag oft geschieht Tabelle 2 10 beschreibt bereits die Funktion in_array die in einem einzigen Aufruf das Datenfeld pr ft Listing 2 43 zeigt wie die Funktionalit t wesentlich kompakter und performanter realisiert werden kann lt html gt lt body gt lt php data Array data Hugo data Uli data Frank data 01ga suche Frank gefunden in_array suche data if gefunden echo wert gefunden lt br gt echo Suche war erfolgreich lt br gt lt body gt lt html gt Listing 2 43 Eine verbesserte Suchfunktion Der PHP Befehl continue bricht im Gegensatz zu break nicht die ganze Schleife ab son dern beendet nur den aktuellen Schleifendurchlauf Das hat zur Folge dass unmittelbar nach einem continue Kommando die Bedingung der Schleife wieder gepr ft wird Dann wird entschieden ob die Schleife ein weiteres Mal durchlaufen wird oder nicht Auch hier ist der Befehl nur in Verbindung mit einer Verzweigung sinnvoll mit deren Bedin gung das berspringen des jetzigen Schleifendurchlaufs gesteuert wird 54 ent
10. lt php require_once classloader inc php gt lt html gt lt body gt lt php commerz new Aktie Commerzbank DE0008032904 http www boerse ISIN DE0008032004 k new Kauforder commerz 300 07 05 2009 6 29 13 15 commerzBestand new Aktienbestand commerz k 9 9 vk new Verkauforder commerz 300 02 10 2009 8 00 9 9 commerzBestand gt addVerkauforder vk data commerzBestand getBilanz echo COMMERZ lt br gt echo EK number_format datalekSumme 2 lt br gt echo VK number_format datalaktSumme 2 lt br gt echo Gewinn number_format datalgewinnEur 2 in number_format dataltageImBesitz Tagen lt br gt echo Gewinn number_format datalgewinnProz 2 lt br gt Listing 5 9 Test des Aktienbestands mit Verkauf und Bilanz Das Fallbeispiel der Depotverwaltung echo Gewinn number_format datalgewinnProzProJahr 2 Jahr lt br gt metro new Aktie Metro AG Stammaktien o N DE0007257503 http www boerse ISIN DE0007257503 k new Kauforder metro 100 01 01 2009 20 00 9 90 metroBestand new Aktienbestand metro k 9 9 metroBestand gt addDividende 135 00 data metroBestand gt getBilanz echo METRO lt br gt echo EK number_format datalekSumme 2 lt br gt echo VK number_format datalaktSumme 2 lt br gt echo Gewinn number_format datalgewinnkur 2 in number_format d
11. lt html lt body gt lt php a new Kunde 1 Frank Dopatka Hauptstrasse 4 51580 Reichshof echo a getAnschrift b new Mitarbeiter E34 Ul1 i Streber Sackgasse 2 12234 Berlin Tv D13 31 01 2008 echo b getAnschrift echo get_parent_class b gt lt body gt lt htm1 gt Listing 4 27 Testklasse der Vererbung Die Ausgabe der Testklasse lautet wie erwartet Frank Dopatka Hauptstrasse 4 51580 Reichshof Ulli Streber Sackgasse 2 12234 Berlin Person Im zweiten Beispiel der Vererbung wird die Tierhierarchie aus dem dritten Kapitel umgesetzt Dort wurden im objektorientierten Design die Klassen aus Abbildung 4 5 ermittelt PHP Endlich objektorientiert 241 4 PHP objektorientiert Die abstrakte Klasse Tier hat eine Eigenschaft name die als protected deklariert ist Somit kann der Zugriff f r abgeleitete Klassen wie auf eine public deklarierte Eigenschaft erfol gen Zus tzlich dazu ist auch die Methode gibLaut im Tier laut der Definition im Klassendia gramm der UML abstrakt definiert Man m chte also dass jedes konkrete Tier Laut geben kann Wie dieser Laut jedoch aussieht h ngt von dem konkreten Tier ab Abgeleitet von der Tierklasse werden die Klassen Hund und Katze Sie implementieren das Lautgeben und zus tzlich noch die eigenen Methoden bellen und miauen Jemand der einen Hund verwaltet m chte den konkreten Laut unter Umst nden direkt abfragen Zus tzl
12. t Falls Sie auf keine bestehende Datenbank zugreifen geh rt das Erstellen der Datenbank tabellen mit zu Ihren Aufgaben Als Hilfsmittel dient die ER Modellierung mit dem Ziel Namen von Datenbanktabellen deren Inhalte und Beziehungen zu anderen Tabellen zu ermitteln Die ER Modellierung hat eine enge Verwandtschaft mit der Modellierung von Klassen in der Objektorientierung Kapitel 3 2 Jeder Datensatz einer Tabelle sollte ber einen eindeutigen Identifier angesprochen werden den Prim rschl ssel Dies sorgt f r einen robusten schnellen Zugriff Typische Prim rschl ssel sind die Kundennummer der Kundentabelle die Rechnungsnummer der Rechnungstabelle die ISBN Nummer der B chertabelle und die Fahrgestellnummer der Fahrzeugtabelle Datenbanktabellen k nnen in drei Arten von Beziehungen zueinander stehen m 1 1 Beziehung Ein Fahrzeugf hrer kann genau einen F hrerschein besitzen und ein F hrerschein ist genau einem Fahrzeugf hrer zugeordnet In einem solchen Fall wird die Personalnummer mit in den Datensatz des F hrerscheins gespeichert Wird ein Prim rschl ssel eines Datensatzes in einer anderen Tabelle gespeichert wird dies als Fremdschl ssel bezeichnet Kap 2 2 In der Praxis f hrt man 1 1 Beziehungen meist zu einer einzigen Tabelle zusammen m 1 n Beziehung Einem Kunden k nnen beliebig viele Rechnungen zugeordnet werden eine Rechnung geh rt aber genau zu einem Kunden Auch hier wird die Kunden nummer mit in den Date
13. A localhost xE 41x 2 gle 2l Datei Bearbeiten Ansicht Favoriten Extras 57 Favoriten 3 LOCAL AKTIEN x 3 2 33 http flocalhost formjfachlo 4 localhost localhost bo X A A Mr Setev Sicherheit Extras r I phpMyAdmin 3 Server localhost Datenbank boerse ii Struktur SAL Suche fBiAbfrageeditor Exportieren FBlmportieren 4E Designer Operationen Rechte L schen x1 Datenbank Tabelle Aktion Eintr ge Typ Kollation boerse 2 ag ie O z MM x 30 MyISAM latini_swedish ci era 7 kurse ie o x Mm x 330 MyISAM latin1_swedish_ci Ba 2 Tabellen Gesamt 960 MyISAM latini_swedish_ci B kurse t_ Alle ausw hlen Auswahl entfernen markierte KM e em f2 J Lokales Intranet ar Rio Abbildung 2 12 Struktur der B rsendatenbank Ein Grundsatz der Datenbankmodellierung besagt dass innerhalb einer Tabelle keine Datens tze doppelt auftreten sollen Um jeden Datensatz eindeutig zugreifbar zu machen verwendet man eindeutige Identifier f r jeden Datensatz Diese Identifier nennt man Pri m rschl ssel Aus diesem Grund beinhaltet die Tabelle ag zwei Felder n mlich die eindeu tige ID und den Namen der Aktiengesellschaft Zus tzlich wird angegeben dass sowohl das Feld ID als auch das Feld name in der Datenbank nicht NULL sein darf Beide Felder m ssen also stets gef llt sein Die Struktur d
14. Copyright by Dr Frank Dopatka lt center gt lt body gt lt html gt Listing 5 13 footer inc php Die Willkommensseite ist die erste und einfachste Inhaltsseite Sie inkludiert den Header und den Footer die nun die Session verwalten das Men und den HTML Rumpf lt php require_once header inc php gt lt center gt lt h1 gt Herzlich Willkommen lt h1 gt lt center gt lt php require_once footer inc php gt Listing 5 14 start php View Wenn Sie nun die start php ausf hren sehen Sie die in Abbildung 5 19 dargestellte Start seite http localhost Aktienverwaltung 004 start php Windows Internet Explorer Jog O ie localhost x 4x t3 Pl Datei Bearbeiten Ansicht Favoriten Extras vr Favoriten http localhost Aktienverwaltung 004 start php Depotverwaltungsprogramm Gew hlter Bestand Herzlich Willkommen Copyright by Dr Frank Dopatka lt gt Fertig Lokales Intranet fa R 00 Abbildung 5 19 Startmaske der Depotverwaltung PHP Endlich objektorientiert 369 5 Projektpraxis Der n chste Schritt im Szenario besteht darin einen neuen Aktienbestand anzulegen Dazu klicken Sie auf die Schaltfl che neu die zu der Datei neu php verweist Diese Datei ist in Listing 5 15 dargestellt lt php require_once header inc php gt lt form action neu2 php method post gt lt table border width 100 gt lt tr gt lt t
15. DEPRECATED jedoch ber den Befehl Zrigger_error selbst erzeugt damit k nnen Sie auf veralteten Quellcode im Kontext Ihrer eigenen Anwendung hinweisen E_ALL 30719 alle Fehler und Warnungen mit Ausnahme von STRICT Tabelle 4 3 bersicht ber die Fehler und Warnmeldungen von PHP Forts Welche Meldungen dargestellt werden k nnen Sie in der Konfigurationsdatei php ini in dem Parameter error_reporting einstellen Die Konfigurationsdatei befindet sich bei XAMPP im Unterverzeichnis php Der betreffende gut dokumentierte Eintrag sieht stan dardm ig in der PHP Version 5 30 folgenderma en aus Common Values E_ALL amp E_NOTICE Show all errors except for notices and coding standards warnings E_ALL amp E_NOTICE E_STRICT Show all errors except for notices E_COMPILE_ERROR E_RECOVERABLE_ERROR E_ERROR E_CORE_ERROR Show only errors E_ALL E_STRICT Show all errors warnings and notices including coding standards Default Value E_ALL amp E_NOTICE Development Value E_ALL E_STRICT Production Value ELALL amp E_DEPRECATED http php net error reporting error_reporting E_ALL amp E_NOTICE amp E_DEPRECATED Da die Werte der Konstanten Zweierpotenzen darstellen k nnen mehrere Konstanten mit bin ren Operatoren hinzu oder abgeschaltet werden Abbildung 4 14 erkl rt einige der bin ren Verkn pfungen und deren Ergebnis grafisch PHP Endlich objektorientiert
16. Das Fallbeispiel der Depotverwaltung bilanz new Bilanz this this gt verkaufGeb hren return bilanz gt getDaten Bilanz ist ggf schon vorhanden aus dem Verkauf und konstant weil der Bestand ja bereits verkauft wurde return this gt bilanz gt getDaten Listing 5 10 Erweiterte Klasse des Aktienbestands Forts Das Problem verlagert sich also vom Aktienbestand in die Erstellung der Bilanz in der das Auslesen der aktuellen Kurse von der Homepage sowie alle mathematischen Berech nungen vorgenommen werden Listing 5 11 beschreibt die Bilanzklasse die neben dem Konstruktor aus den Methoden ermittelnAktuelleDaten zum Auslesen der Homepage daten und getDaten die ein Datenfeld mit den Ergebnissen der Bilanzberechnung zur ckgibt Der Inhalt der beiden Methoden wird im Anschluss an den Quellcode genauer beschrie ben Der Konstruktor der Klasse erh lt eine Referenz auf den Aktienbestand sowie die Ver kaufsorder bzw als Alternative dazu die theoretischen Verkaufsgeb hren als Eingabepa rameter bergeben falls der Bestand noch nicht verkauft wurde Beide Eingabeparame ter werden als Eigenschaften des Objekts gespeichert lt php class Bilanz private bestand NULL private verkauf NULL public function __construct bestand verkauf this gt bestand bestand this gt verkauf verkauf private function ermittelnAktuelleDaten ret array Homepage auslesen url this gt be
17. Datentyp Speicherplatz Beschreibung TINYINT 1 Byte Ganzzahlen von 0 bis 255 oder von 128 bis 127 SMALLINT 2 Byte Ganzzahlen von 0 bis 65 535 oder von 32 768 bis 32 767 MEDIUMINT 3 Byte Ganzzahlen von 0 bis 16 777 215 oder von 8 388 608 bis 8 388 607 INT 4 Byte Ganzzahlen von 0 bis 4 3 Millionen oder von 2 147 483 648 bis 2 147 483 647 BIGINT 8 Byte Ganzzahlen von 0 bis 18 446 744 073 709 551 615 oder von 9 223 372 036 854 775 808 bis 9 223 372 036 854 775 807 FLOAT 4 Byte vorzeichenbehaftete Flie kommazahl zur Darstellung ann hernder numerischer Datenwerte Wertebereich von 3 402823466 38 bis 1 175494351 38 0 und 1 175494351 38 bis 3 402823466 38 DOUBLE 8 Byte vorzeichenbehaftete Flie kommazahl zur Darstellung ann hernder numerischer Datenwerte Wertebereich von ca 1 798 308 bis ca 2 225 308 O und ca 2 225 308 bis ca 1 798 308 DECIMAL abh von der maximalen vorzeichenbehaftete Flie kommazahl zur Speicherung Anzahl der eingegebenen exakter numerischer Datenwerte Stellen DATE 3 Byte Datumsangabe im Format YYYY MM DD Wertebereich von 01 01 1000 bis 31 12 9999 DATETIME 8 Byte Datumsangabe im Format YYYY MM DD hh mm ss der Wertebereich entspricht DATE TIMESTAMP 4 Byte Zeitstempel Wertebereich von 01 01 1970 bis 2037 TIME 3 Byte Zeit zwischen 838 59 59 und 839 59 59 Ausgabe im Format hh mm ss YEAR 1 Byte Jahr zwischen 1901 bis 2155 bei zweistelliger und zwischen 1970 bis 2069 bei vierstelliger
18. Die featuregetriebene Entwicklung FDD Feature driven Development besitzt diese R ckkopplung nicht Eine featuregetriebene Entwicklung ist weniger b rokratisch als Scrum l sstjedoch auch weniger Feedback durch den Kunden zu Diese Methode f r ein agiles Projektmanagement wurde 1997 definiert als ein zeitkritisches Projekt in 15 Objektorientierte Programmierung Monaten von einem relativ gro en Entwicklerstamm von 50 Entwicklern umgesetzt wer den sollte Die Idee besteht darin dass Funktionalit t das wichtigste Ergebnis ist das der Kunde w nscht Daher definieren die Fachexperten des Kunden und die Entwickler zun chst unter der Leitung eines Chefarchitekten den Inhalt und Umfang der zu entwickelnden Anwendung Der Chefarchitekt spielt eine zentrale Rolle in diesem Modell sowohl im Projektmanagement als auch in der Vermittlung zwischen Vertretern des Kunden und der Entwickler In kleinen Gruppen werden im Folgenden fachliche Modelle f r die ein zelnen Bereiche der Anwendung erstellt Das Ziel ist eine fachliche Einigung der Betei ligten In der zweiten Phase teilen erfahrene Entwickler die in der ersten Phase festgelegten fachlichen Teilmodelle in Features auf Features in der Seminarverwaltung w ren bei spielsweise das Anlegen eines neuen Seminars oder das Buchen einer Anmeldung auf einen vorhandenen Seminartermin Die entstehende Featureliste entspricht stets folgen dem Schema m Aktion Buchung m Ergebnis eine Anmeld
19. Endlich objektorientiert 209 3 Vorgehensweise bei der Softwareentwicklung Herr M ller erh lt abschlie end eine Best tigung dass die Buchung erfolgreich vorge nommen wurde Meinung Die eher am technischen Design orientierten Sequenzdiagramme k nnen sehr gut mit den eher an der fachlichen Analyse ausgerichteten Aktivit tsdiagrammen abge glichen werden Dies gibt einen guten Anhaltspunkt ob die fachlichen Vorgaben sinnvoll technisch umgesetzt wurden oder nicht Was haben Sie gelernt und wie geht es weiter In diesem Kapitel wurden zu Beginn verschiedene Vorgehensweisen dargestellt wie Sie bei der Abwicklung eines Projekts vorgehen k nnen Es existiert keine ultimativ sinn volle Vorgehensweise Vielmehr ist die gew hlte Vorgehensweise von der Gr e der Pro jekte abh ngig Die Objektorientierung eignet sich insbesondere f r gr ere Projekte da sonst ein Over Design droht Dazu existieren der Rational Unified Process als schwergewichti ges Modell sowie die agilen Methoden als dynamische kommunikationsintensive Vari ante Im Anschluss daran wurden die Idee und die Grundbegriffe der Objektorientierung vor gestellt die eine neue Denkweise bei der technischen L sung von fachlichen Problemen implizieren Im letzten Teil dieses Kapitels wurden die wichtigsten Diagramme der UML vorgestellt mit deren Hilfe Sie die Aspekte der objektorientierten Softwareentwicklung beschreiben k nnen Die UML Diagramme biet
20. HTML Datei in diese Datei vollst ndig integriert und das Ergebnis dann zum Internet browser zur ck sendet Eine solche Funktionalit t ist jedoch sehr n tzlich da eine Homepage ein einheitliches Layout und eine einheitliche Men f hrung besitzen sollte Andererseits m chte man bei einer nderung im Men der Homepage nicht jede HTML Seite ndern Au erdem ist es sinnvoll alle notwendigen JavaScript Funktionen und Meta Jags einmalig zentral zu verwalten da bei einer Code nderung im Alltag oft einige Stellen bersehen werden In der Vergangenheit wurden einmalige Titel und Men leisten meist ber Frames ange ordnet um das Problem zu l sen Der Einsatz von Frames in Homepages gilt jedoch als veraltet da er andere Probleme mit sich bringt So k nnen Unterseiten schlecht als Book marks im Browser festgehalten werden Suchmaschinenroboter haben Probleme den Inhalt einer Seite zu ermitteln und die Barrierefreiheit wird erschwert So lesen Screen reader Frames stets nacheinander vor und Textbrowser von Personen mit Sehst rungen k nnen Frames meist gar nicht darstellen Wenn Sie also mehrere Seiten einheitlich verwalten m chten ben tigen Sie aus heutiger Sicht eine andere L sung wie ein Content Management System CMS mit dem Sie den Inhalt und die Men f hrung verwalten k nnen Bekannte Content Management Sys teme wie Typo3 oder Drupal l sen diese Probleme sind jedoch selbst in PHP geschrie ben PHP besitzt also eine M gli
21. Klasse unspezifiziert Klasse 0 oder genau 1 Klasse genau 1 Klasse O bis 2 3 ii Klasse genau 2 Klasse 3 bis unendlich viele MI 24 Klasse 2 oder 4 Klasse 0 bis unendlich viele i ii Abbildung 3 53 Angabe von Multiplizit ten PHP Endlich objektorientiert 185 3 Vorgehensweise bei der Softwareentwicklung gestellt Zus tzlich k nnen noch die x und y Koordinaten als Eigenschaften der Punkte angegeben werden Dreieck Abbildung 3 54 Fertiges Klassendiagramm der Analyse f r Punkte und Dreiecke Eine Komposition unterscheidet sich in der UML nur durch die Tatsache dass in diesem Fall eine ausgef llte Raute verwendet wird Au erdem sollte man keine Multiplizit t an einer Komposition angeben da diese stets 1 betr gt Genau so ist ja die Komposition definiert Als Beispiel f r eine Komposition kann man eine Datei sehen die sich stets in einem Ver zeichnis befinden muss Eine Datei ist ohne eine Verzeichnisstruktur nicht existenzf hig Wird eine Datei gerade ber ein Netzwerk bertragen so verliert sie f r eine gewisse Zeit ihre Existenz als Datei Man k nnte sie dann als Datenstrom oder als Datenpakete bezeichnen Ein Verzeichnis kann jedoch auch leer sein also keine Dateien enthalten Abbildung 3 55 Beispiel einer Komposition Ebenso werden fachliche Vererbungsbeziehungen in der objektorientierten Analyse fest gehalten Im folgenden Beispiel einer Universit t wurden die Klasse
22. Konsequentes Refactoring ist eine Ma nahme gegen den Lavafluss Programmierung mit dem Switch Statement Der Zustand eines Objekts wird durch die aktuellen Auspr gungen seiner Eigenschaften gesteuert Viele Entwickler benutzen eine zus tzliche Statuseigenschaft die den aktuel len Zustand des Objekts repr sentiert und die ber eine Get Methode abgefragt werden kann In den Set Methoden wird dann gepr ft ob das Setzen einer Eigenschaft gem dem aktuellen Zustand erlaubt ist Dies geschieht zumeist ber die Verwendung des switch Statements oder einer mehrfachen Verzweigung PHP Endlich objektorientiert 409 5 Projektpraxis Den Zustand sollte man jedoch nicht mit hart kodiertem Quellcode verwalten Stattdes sen sollte der Zustand eines Objekts ber das Status Design Pattern mithilfe von eigenen Statusobjekten verwaltet werden Das quadratische Rad neu erfinden Objektorientierte Programmiersprachen bieten bereits eine gro e Anzahl an vorgefertig ten Klassenbibliotheken Weitere Funktionalit t kann immer st rker ber frei erh ltliche Open Source L sungen bezogen werden bei denen eine Gemeinschaft ber die Ent wicklung und die Beseitigung von Fehlern wacht Dies geht hin bis zu komplexen Frameworks die ganze L sungen bereitstellen Viele Programmierer insbesondere aus der prozeduralen Welt glauben jedoch dass Sie diese Funktionalit t mal eben schnell selbst implementieren k nnen Schwierigkeiten s
23. den lt lt interface gt gt Flugreservierung reservieren stornieren buchen Flugreservierung protocol reservieren Flug buchen A erfolgreich Flug reserviert gebucht stornieren Reservierung storniert Abbildung 3 70 Protokoll einer Flugreservierung Nach der Erzeugung eines Reservierungsobjekts das diesem Interface gehorcht k nnen Sie nur die Methode reservieren aufrufen Im Anschluss daran ist der Flug reserviert Eine Reservierung kann entweder verbindlich gebucht oder storniert werden Es kann sein dass die Buchung nicht erfolgreich ist weil der Flug ggf bereits schon ausgebucht ist und eine Reservierung nicht den Anspruch auf eine Buchung erf llt Auffallend ist auch bei diesem Reservierungsprotokoll dass ein einmal gebuchter Flug nicht mehr storniert werden kann Bei diesem Anbieter sind Sie also an eine einmal get tigte Buchung gebunden Profitipp Der grofe Vorteil eines Zustands Diagramms besteht darin dass Sie eine Klasse gegen diesen Automaten leicht testen k nnen indem Sie alle m glichen Zustands berg nge automatisiert durchtesten und mit einer zus tzlichen Methode getZustand den aktu ellen Ist Zustand mit dem Soll Zustand aus dem Diagramm vergleichen Im n chs ten Schritt k nnen Sie bewusst zufallsbasiert irregul re Methodenaufrufe in jedem Zustand ausl sen um die Reaktion des Objekts zu testen Objektorientierte Programmierung Das Beispiel der Abbildung 3 71 z
24. echo Die Datei beispiel xml ist g ltig else echo Die Datei beispiel xml NICHT ist g ltig gt lt body gt lt htm1 gt Listing 4 74 Validieren der XML Datei gegen das Schema Sie erkennen auch hier dass die eigentliche Pr fung leicht zu programmieren ist die bereits von PHP 5 vorgegebenen Klassen und Objekte mit ihren Methoden nehmen Ihnen die Arbeit des Parsens und der Pr fung ab Die Pr fung im Schema zu definieren ist allerdings bereits komplex genug Andererseits wird das XML Schema die DTD Spra che mittelfristig abl sen da das Schema selbst von einem XML Parser interpretiert wer den kann PHP und XML Profitipp Wenn Sie die DTD oder das Schema komplett von Hand erstellen ist dies zwar eine gute bung jedoch ist der Aufwand bis zu einem erfolgreichen Ergebnis gerade bei gr eren Dokumenten sehr hoch Alternativ dazu existieren bereits Tools mit denen Sie eine DTD oder ein XML Schema aus einer bestehenden XML Datei generieren k nnen Dies ist auf den ersten Blick unlogisch jedoch k nnen die DTD oder das Schema als Vorlage f r eine berarbeitung des Regelwerks dienen Eine solche Generierung k nnen Sie unter anderem auf der Homepage http www hitsw com xmil_utilites vornehmen Transformation von XML zu anderen Ausgaben XLST Es wurde bereits erw hnt dass das XML Format insbesondere dem flexiblen Datenaus tausch zwischen gr eren Applikationen beispielsweise aus dem B2B Bereich dien
25. mysql_query ROLLBACK else erst jetzt werden die Daten wirklich geschrieben mysql_query COMMIT Listing 2 69 Ausschnitt aus einem PHP Quellcode mit Transaktionen Zus tzlich zu den SQL Befehlen die als Zeichenketten auf den Datenbankserver abge setzt werden sollten Sie die g ngigen PHP Befehle zum Umgang mit MySQL Daten bankverbindungen kennen Diese werden in Tabelle 2 28 kurz vorgestellt Befehl Beschreibung erg mysgl_connect verbindet sich mit einem MySQL Server unter Angabe von Benutzername host user pass und Kennwort der Erfolg wird als Wahrheitswert zur ckgegeben mysql_close db schlie t eine ge ffnete Verbindung zu einem MySQL Server erg mysgl_error liefert den Fehlertext des zuvor ausgef hrten MySQL Befehls erg mysgl_errno liefert die Fehlernummer des zuvor ausgef hrten MySQL Befehls res mysql_list_dbs gibt die Datenbanken des MySQL Servers als Resultset zur ck das Result set kann u a ber Sdafa mysgl fetch_array res zeilenweise zur ckge geben und mit echo Sdata Database ausgegeben werden Tabelle 2 28 PHP Befehle f r den Zugriff auf eine MySQL Datenbank 94 entwickler press Erweiterte Funktionen Befehl Beschreibung res mysql_list_tables db dibt die Namen der Tabellen aus der Datenbank abals Resultset zur ck cbwird als Zeichenkette bergeben mysql_select_db db w hlt eine Datenbank deren Name als Zeichenkette in db bergeben w
26. ten Aufruf eine Session ID vergeben und eine entsprechende Datei auf dem Server ange legt Der Zugriff auf die Daten der Session erfolgt hnlich wie bei den Daten eines aus gef llten Formulars ber ein eigenes Datenfeld Dieses Feld hei t _SESSION In Listing 2 62 wird eine neue Session gestartet und drei neue leere Variablen User Pass und Auth in der Session angelegt Im Anschluss daran wird ein HTML Formular mit zwei Textfeldern erstellt und an den Client versendet Zus tzlich wird die ID der erstellten Session ausgegeben Die Namen der Variablen im assoziativen Session Array k nnen m ssen aber nicht in Hochkom mata gesetzt werden lt php session_start _SESSIONLUser _SESSIONLPass _SESSION Auth 0 D lt html gt lt body gt lt form action login_server php method post gt lt pre gt Benutzer lt input name frmUser type text gt lt br gt Kennwort lt input name frmPass type text gt lt br gt lt input name Login type submit gt lt br gt lt pre gt lt form gt Listing 2 62 Das Login Formular login php mit dem ersten Start der Session PHP Endlich objektorientiert 73 2 Die Sprache PHP Prozedural lt center gt Sie haben die Session ID lt php echo session_id gt vom Server erhalten lt center gt lt body lt html gt Listing 2 62 Das Login Formular login php mit dem ersten Start der Session Forts Der Anwender f llt das Formular aus und sendet es a
27. www boerse ISIN DEO007257503 kauforder new Kauforder metro 200 01 01 2010 1 00 9 90 Listing 5 7 Test des Aktienbestands sowie Hinzuf gen einer Dividende und zweiten Kauforder PHP Endlich objektorientiert 351 5 Projektpraxis erster Teil des Tests metroBestand new Aktienbestand metro kauforder 9 9 metroBestand gt addDividende 135 00 echo Name metroBestand gt getAktie gt getName lt br gt echo Datuml metroBestand gt getEkDatum lt br gt echo Mengel metroBestand gt getAnzahl lt br gt 2 echo Kurs1 metroBestand gt getEkEinzelpreis lt br2 zweiter Teil des Tests kauforder2 new Kauforder metro 100 01 03 2010 2 00 9 90 metroBestand gt addKauforder kauforder2 echo Name metroBestand gt getAktie gt getName lt br gt echo DatumX metroBestand gt getEkDatum lt br gt echo MengeX metroBestand gt getAnzahl lt br gt 2 echo KursX metroBestand getEkEinzelpreis lt br2 gt lt body gt lt htm1 gt Listing 5 7 Test des Aktienbestands sowie Hinzuf gen einer Dividende und zweiten Kauforder Forts Die erwartete Ausgabe lautet hier Name METRO AG Stammaktien o N Datum1 01 01 2010 Menge1 200 Kurs1 1 Name METRO AG Stammaktien o N DatumX 21 01 2010 MengeX 300 KursX 1 33 In Listing 5 8 wird die gew nschte Funktionalit t realisiert Ein Aktienbestand kennt seine Aktie die Anzahl der
28. 0 0002 33312 gt main lib core admin parser php O 0 0004 33344 gt error_reporting lib core admin parser php 0 0005 33376 gt ob_start lib core admin parser php 27 0 0007 75256 gt include_once lib core functions init inc 0 0008 75256 gt dirname lib core functions init inc 30 0 0009 75720 gt require_once lib conf defines inc lib c 0 0009 73732 gt define lib conf defines inc 32 Kl 0 0485 133456 gt ob_get_clean lib core admin parser php 41 0 0493 97375 gt Core_lnit gt __destruct lib core classes clas 0 0494 TASG gt trace_dump_xdebug lib core classes class 0 0494 97376 gt function_exists lib core functions debu 0 0494 97400 gt xdebug_get_tracefile_name lib core func 0 0495 97432 gt is_file lib core functions debug inc 11 0 0495 97464 gt xdebug_stop_trace lib core functions de 0 0495 97464 TRACE END 2007 01 22 08 06 31 XEmacs trace 2043925204 2 xt Inferior GDB Frame no proces Abbildung 5 50 Konsolenausgabe von XDebug Der Editor PHPedit Bei PHPedit in der aktuellen Version 3 4 4 handelt es sich um einen Editor f r PHP Code der neben Syntax Highlighting auch eine Projektverwaltung eine automatische Vervoll st ndigung von Befehlen und Debug Tools beinhaltet Neben der Dokumentation mit PHPDocumentator k nnen auch SVN und PHPUnit in den Editor integriert werden PHPedit verf gt au erdem ber ein FTP Iool mit dem Sie die erstellten Skrip
29. Alle Basisdaten die zur Erstellung der Bilanz notwendig sind werden dann in einem SOL INSERT State ment verpackt und ber ein weiteres Parameterobjekt an die Datenbank gesendet War der Schreibvorgang erfolgreich wird ein Z hler f r die erfolgreich archivierten Best nde hochgesetzt ansonsten ein Z hler f r die nicht erfolgreich archivierten Best nde Abschlie end werden beide Z hler im Kontext einer HIML Ausgabe ausge geben sofern sie Werte gr er als 0 enthalten Das Fallbeispiel der Depotverwaltung Die OK Schaltfl che f hrt dann wieder auf die bersicht der Best nde die in der ueber sicht php aufbereitet werden lt php require_once header inc php gt lt center gt lt h3 gt lt php if _SESSION BestandAnzahl lt 1 echo Es sind KEINE Daten zum Speichern vorhanden else db new mysqlDZ p_ ffnen new Parameterliste p_ ffnen gt add host Tocalhost p_ ffnen gt add user root p_ ffnen gt add pass p_ ffnen add db boerse if db ffnen p_ ffnen FALSE f echo FEHLER beim ffnen der Datenbank else p_schreiben new Parameterliste p_schreiben gt add sql TRUNCATE aktien db gt schreiben p_schreiben erfolg fehler for i 0 i lt _SESSION BestandAnzahl itt bestand unserialize _SESSION Bestand i data bestand gt getBilanz p_schreiben new ParameterListe sql INSERT INTO aktien VALUES sql
30. Applications Zend bin examples debugdemo Debi E Debug session ended eg yF Messages amp 3 Debug Window 4 wow YErIOoNILImReRer c Zend Development Environment Abbildung 5 54 Screenshot der Entwicklungsumgebung Zend Studio Hinweis In diesem Kapitel wurden lediglich einige wichtige Werkzeuge im PHP Umfeld skiz ziert damit Sie sich einen ersten berblick verschaffen k nnen F r einen tieferen Einblick werden Sie sich detaillierter mit den f r Sie interessanten Werkzeugen besch ftigen m ssen So werden beispielsweise PHPUnit Subversion SVN XDebug und PHPDocumentator in dem Buch mit dem Titel Enterprise PHP Tools von Ste fan Priebsch ISBN 3 9350 4293 0 des Verlags entwickler press genauer beschrieben PHP Endlich objektorientiert 425 Stichwortverzeichnis Symbole __autoload 219 _ call 222 __clone 230 _ construct 212 _ destruct 212 get 220 _ set 220 toString 226 Operator 227 Operator 42 html Datei 13 Operator 76 _GET 71 _POST 72 372 _SESSION 73 this 213 Numerisch 1 1 Beziehung 114 1 n Beziehung 114 3 Schichten Architektur 83 113 A abstract 239 abstrakte Klasse 143 Adapter 404 Aggregation 143 262 agile Methoden 146 Akteur 164 Aktivit tsdiagramm 171 250 334 anonymes Objekt 183 Anti Pattern 408 Anweisung 21 Anwendungsfalldiagramm 163 330 Array 19 Assoziation 141 246 Assoziationsklasse 188 assoziatives Feld 29 PHP Endlich objektor
31. Copyright by Dr Frank Dopatka 2009 lt center gt lt body gt lt html gt Listing 2 52 Die footer inc php Die drei Dateien werden serverseitig zusammengesetzt und zum Client bertragen Die ser erh lt als Ergebnis eine korrekte HTML Datei zur Ausgabe 60 entwickler press Grundlegende Syntax Profitipp Es macht keinen Sinn die PHP Dateien des Headers und Footers direkt im Internet browser aufzurufen Diese Dateien sind ausschlie lich dazu bestimmt von anderen PHP Skripten eingebunden zu werden Es hat sich eingeb rgert solche Dateien mit der Endung inc php zu versehen damit sie leichter von anderen Entwicklern erkannt werden k nnen Funktionen zur Bearbeitung von Zeichenketten PHP hat den Ruf umfangreiche und leicht anwendbare Funktionen zur Bearbeitung von Zeichenketten zu besitzen insbesondere in Bezug auf Internetanwendungen In diesem Kapitel werden nur die wichtigsten Funktionen vorgestellt die im Alltag Anwendung finden Weitere Funktionen k nnen Sie mithilfe von Internetsuchmaschinen und PHP Portalen wie http www phpbox de php_befehle zeichenketten php ermitteln F r die selbst erstellten Anwendungen haben sich die im Folgenden aufgef hrten Befehle bereits als absolut ausreichend erwiesen Tabelle 2 12 zeigt die wichtigsten Funktionen zur Ermittlung der Anzahl von Zeichen in einer Zeichenkette sowie zum Suchen und Vergleichen von Zeichenketten Funktion Bedeutung wert strlen str gi
32. Damit kann ein positiver Wert gr n und ein negativer Wert rot dargestellt wer den Ist der Wert 0 so wird er schwarz hinterlegt Um die Farbe zu setzen definiert PHP einen CSS Stil Cascading Stylesheets der dem Wert dann zugewiesen wird Ein solcher CSS Stil definiert die grafische Darstellung von HTML Code und besitzt eine Vielzahl von Gestaltungsm glichkeiten Die Farbe wird in RGB Anteilen Rot Gr n Blau im hexadezimalen Format angegeben Die Farbe Rot entspricht dabei FF0000 wobei FF im Hex Format der Zahl 255 im dezi malen Format entspricht Da die ersten beiden Stellen der Farbangabe die Rot Angabe darstellt wird bei FF0000 der maximale Rot Anteil gesetzt Die Farbe besitzt weder Gr n noch Blau Anteile Somit ergibt sich ein strahlendes Rot als Ausgabe bei einem negativen Wert lt php wert 5 3 if wert lt 0 farbe FF0000 else if wert gt 0 farbe 00FF00 else farbe 000000 lt html gt lt body gt lt font face Arial Helvetica color lt php echo farbe gt gt lt php echo wert gt lt font gt lt body gt lt html gt Listing 2 26 Definition einer Farbe f r eine HTML Ausgabe PHP Endlich objektorientiert 39 2 Die Sprache PHP Prozedural Achten Sie darauf dass bei der HTML Ausgabe das color Attribut des font Befehls in Anf hrungszeichen gesetzt werden sollte Dort hinein gibt PHP den aktuellen Farbwert aus bevor die Ausgabe zum Internet
33. Konvertierungsfunktionen Forts Weitere PHP Funktionen bieten grundlegende mathematische Berechnungen von Loga rithmen Potenzierung Absolutwerten und Quadratwurzeln Mit all diesen Funktionen lassen sich erweiterte Berechnungen zusammensetzen Au erdem verf gt PHP ber vorgefertigte Funktionen Minimal und Maximalwerte aus Listen von Werten zu ermitteln und eine formatierte Ausgabe von Zahlen vorzuneh men Funktion Bedeutung erg abs var Aubsolutwert von var erg exp var Potenz varzur Basis e der Eulerschen Zahl erg log var nat rlicher Algorithmus von var erg log10 var nat rlicher Algorithmus zur Basis 10 erg max a b c erg min a b c erg number_format var nks komma tausender gr ter Wert der Argumente kleinster Wert der Argumente Formatierung von varin eine Zahl mit Tausender Trennzeichen dass in Sfausender vorgegeben wird ebenso kann die Anzahl an Nachkommastellen rAs vorgegeben werden wie das Trennzeichen selbst in Skomma erg pow base exp potenziert exp zur Basis base erg sgrt var Quadratwurzel von Svar Tabelle 2 21 Weitere mathematische Funktionen Abschlie end werden in Tabelle 2 22 Funktionen zur Erzeugung von Zufallszahlen vor gestellt Mit getrandmax k nnen Sie sich die maximale Zufallszahl ermitteln die sie erzeugen k nnen So liefert echo getrandmax die Ausgabe 32767 Funktion Bedeutung erg getrandmax erm
34. NULL und data 1 4 aus Der NULL Wert wird zur Ganzzahl 0 umgewandelt sodass sich ein Produkt von 0 ergibt Die Berechnung ist also v llig fehlerhaft Erfolgt die Zuweisung des Datenfelds an einer anderen Stelle oder sogar in einer anderen Datei so ist dieser Fehler zun chst sehr schwierig zu finden lt php data Array data 1 4 data 4 546 gt lt html gt lt body gt lt php echo Anzahl Elemente count data lt br gt 2 produkt 1 for i 0 i lt count data i Listing 2 36 Falsche Berechnung des Produkts 48 entwickler press Grundlegende Syntax echo var_dump data l i lt br gt 2 produkt datal i echo Das Produkt ist produkt gt lt body gt lt html gt Listing 2 36 Falsche Berechnung des Produkts Forts Profitipp Obwohl die for Z hlschleife in anderen Sprachen oft zu Operationen auf Datenfelder angewendet wird ist bei PHP davon abzuraten Der Grund liegt in der dynamischen Zuweisung von Feldern bei denen Elemente innerhalb des Felds unter Umst nden nicht mit Werten belegt wurden Das ist eine ernstzunehmende Fehlerquelle in PHP Skripten Ebenso eignet sich die Z hlschleife nicht f r assoziative Arrays In Verbin dung mit Datenfeldern sollte daher ausschlie lich die foreach Schleife aus dem n chs ten Kapitel verwendet werden foreach Schleife Die kopfgesteuerte foreach Schleife l st auf einfachem Wege den Zugriff auf teil initiali sierte oder assoz
35. PDT und Zend Studio 7 0 mit einer Auflistung der Mehrwerte die Zend Studio 7 0 gegen ber PDT zu bieten hat r 3 ee Zend Development Environment Applications Zend bin examples debugdemo DebugDemo php W PA A Ch spyBr IKR I HH I ri BE AM HE 7 Pro z ma Debug Output Eee gt Pro I a lal Mva 4 1127 Sbgeolor2 yellow F Rre TTN D E Applications J 28 A 4 2 gt Applications 7 i i fg automount 23 el lt td gt 12 Bd 9 Te gt DJ bin 2 Erea 433 B Br gt DJ cores 3 f ad g Desktop Folder 4 gt gt DJ dev ni 3 gt lt td gt 44 332 ke kst Alfie mW x nr lt tr bgeolor yellow All Files E desc Displa table of the worker n i Ed A lt tdShirly lt td gt ahi ame m l i lt td gt 72 Independence 3 Inspect E g nction display_workers I lt kd gt 4972 156 7777 lt 1 CA E24 Applications Zend bin 4 NUT lt tr gt x An di d en lt tr bgeolor white gt N Ka display_workers vo 44 lt tdBill lt td gt H row_colortint i stri f An DB EEE DB lt td gt 127 Yaine Sa 4 worker data dbl i lt td gt 415 55 name wor RER v v j gt gt ug re GE DebugDemo php DebugDemo php A wate C Stack Break E Outp gt Debug session started GLOBALS w Notice
36. Werkzeug oder ein lizenzpflichtiges Tool einsetzen wollen Die erste Version ist nat rlich kosteng nstiger und bei einigen Tools erfolgt eine Unterst tzung des Werkzeugs durch eine entsprechend gro e Community Die Lebensf higkeit des Tools ist andererseits genauso von der Community abh ngig Bei einem lizenzpflichtigen Tool bezahlen Sie hingegen zun chst einmal Geld kaufen jedoch meist einen Support des Herstellers mit ein Lizenzpflichtige Tools k nnen Sie meist zun chst in einer kostenfreien Testversion mit beschr nkter Laufzeit aber nahezu vollem Funktionsumfang erwerben Generell sollten Sie sich zun chst mit eini PHP Endlich objektorientiert 413 5 Projektpraxis gen Werkzeugen vertraut machen um sich mit dem Umgang anzufreunden Letztlich sollten Sie m gliche Lizenzkosten gegen einen eventuellen Mehraufwand in Mannstun den bei der Verwendung eines anderen Tools abw gen Gerade bei gro en Projekten sollte der effiziente Umgang mit den Werkzeugen absolut im Vordergrund stehen Eine aktuelle Liste von UML Werkzeugen finden Sie zusammen mit den Links zu den Herstellern bzw zu den Downloads auf der englischsprachigen Wikipedia Seite http en wikipedia org wiki List_of_UML_tools Hervorzuheben sind aus dieser Liste insbeson dere ArgoUML f r Java unterst tzende Betriebssysteme http argouml tigris org Visual Paradigm for UML f r Java unterst tzende Betriebssysteme http www visual paradigm com pro
37. arsort arr sortiert ein eindimensionales Datenfeld r ckw rts und beh lt die Beziehungen in einem assoziativen Feld bei Tabelle 2 8 Sortierung eines Felds Listing 2 20 zeigt einen Anwendungsfall einer Sortierung Die Ausgabe lautet Frank Max und dann Uli Auf diese Weise k nnen Sie mit eigenen einfachen Beispielen jede Funktion austesten lt html gt lt body gt lt php kunden array Frank Uli Max sort kunden echo var_dump kunden lt body gt lt html gt Listing 2 20 Sortieren eines Datenfelds Zus tzlich k nnen Sie auch eine Sortierung nach einer eigenen Funktion durchf hren Wie Sie eine Funktion deklarieren und damit ein Datenfeld sortieren wird in Kapitel 2 1 5 vorgestellt Funktion Bedeutung usort arr func sortiert ein eindimensionales Datenfeld nach einer eigenen Funktion uasort arr func sortiert ein assoziatives Datenfeld nach einer eigenen Funktion Tabelle 2 9 Funktionen zur Feldsortierung mit eigener Funktion hnlich wie beim Auslesen einer Ergebnismenge aus einer Datenbank Kapitel 2 2 Zugriff auf eine MySQL Datenbank kann man auch einen Zeiger ber ein Datenfeld laufen lassen Das wird oft bei der Suche nach einzelnen Elementen oder f r eine Weiter PHP Endlich objektorientiert 33 2 Die Sprache PHP Prozedural verarbeitung verwendet Zus tzlich k nnen Sie ein Datenfeld nach der Anzahl der ent haltenen Elemente
38. b lt br gt lt body gt lt html gt Listing 2 47 Kein Tausch durch den Swap Befehl Forts Die Ursache f r den Fehler liegt in der Wert bergabe beim Aufruf der Swap Funktion Im Speicher werden n mlich die Werte der Variablen a und b kopiert und ab diesem Zeitpunkt innerhalb der Funktion unter dem Namen x und y weiter verarbeitet Stattdessen m ssten die Parameter jedoch als Referenz bergeben werden Dadurch w rde x auf dieselbe Speicherstelle zeigen wie a und y auf dieselbe Speicherzelle wie b Die Unterschiede zwischen Werten und Referenzen wurden bereits in Kapitel 2 1 1 Verwaltung von Variablen und Referenzen Zeigern vorgestellt Um statt einer Kopie der Werte die Referenzen zu bergeben m ssen Sie in der Deklara tion der Funktion lediglich den Referenzoperator amp vor jeden Parameter setzen bei dem lediglich eine Referenz bergeben werden soll Die Funktionsdeklaration lautet dann function Swap amp x amp y Danach funktioniert die Funktion wie erwartet Funktionen als bergabeparameter Bereits in Kapitel 2 1 2 PHP Funktionen zur Bearbeitung von Datenfeldern wurden PHP eigene Befehle vorgestellt mit denen man eine eigene Funktion auf ein Array anwenden kann Diese Befehle konnten jedoch noch nicht getestet werden da Sie noch keine eigene Funktion definieren konnten Das ist jetzt anders Listing 2 48 zeigt am Beispiel des Befehls array_walk wie Sie eine eigene Funktion auf jed
39. der Vorgang zur Auszahlung von Geld m eine Angebotserstellung Ein Szenario beschreibt also genau einen Workflow in einem Aktivit tsdiagramm Bei der Analyse sollten Sie mit der Zeit also ber mehrere Iterationen alle wichtigen Szena rien in Aktivit tsdiagrammen festhalten da Sie ansonsten ganze Abl ufe in der zur erstellenden Anwendung bersehen Dadurch w rden Sie auch ganze Klassen oder eine Vielzahl von Methoden nicht implementieren Abbildung 3 43 zeigt ein erstes Beispiel dazu unter Verwendung von Schwimmbahnen Zun chst f llt auf dass weder der Anfangspunkt noch der Endpunkt des Aktivit tsdia gramms dargestellt ist Au erdem existiert zwar ein Synchronisationspunkt doch wo die Aufteilung der Prozesse beginnt ist auf dem ersten Blick nicht ersichtlich Oft werden Aktivit tsdiagramme im ersten Schritt lediglich skizziert um Gedanken fest zuhalten und zu dokumentieren Dabei werden Sachverhalte als selbstverst ndlich hin genommen Wenn sich alle Beteiligten dar ber einig sind ist dies auch in Ordnung Meist ist dies jedoch ber den gesamten Prozess der Entwicklung nicht der Fall und f hrt sp ter zu Missverst ndnissen Sie sollten also jede Skizze auf jeden Fall pr zisieren In der Realit t steckt der Kunde seine Bankkarte in den Automaten und gibt die PIN ein Noch w hrend die G ltigkeit der Karte und der PIN vom Geldautomaten ber eine Netzwerkverbindung zum Bankserver gepr ft werden kann der Kunde bereits d
40. die alten Revisionen bleiben stets archiviert sodass das System gleichzeitig als Sicherungs system gilt Sie k nnen also stets eine ltere Revision einer Datei einsehen und auch ver ndern Wenn Sie einen neuen Prototyp anlegen bedeutet dies dass Sie von jeder PHP Datei eine bestimmte Revision verwenden wollen Die Revisionen bilden in ihrer Gesamtheit dann den Prototyp bzw das Release das dem Kunden vorgef hrt und auch ausgeliefert wer den kann Ein Problem entsteht wenn zwei Entwickler nderungen an derselben Datei vorneh men Checkt der erste Entwickler wieder ein so geschieht dies problemlos Der zweite Entwickler bekommt jedoch eine Meldung dass sich eine andere Version der Datei auf dem Server befindet als die die man ausgecheckt hat Nun ist zu entscheiden welche der beiden Versionen verwendet wird oder ob sogar eine neue Version erstellt wird die alle nderungen umfasst Dieses Prinzip nennt man Zusammenf hrung bzw Merging Als Hilfsmittel dazu z hlt das in SVN integrierte Hilfswerkzeug diff mit dem man Differen zen zwischen zwei Quellcodedateien farblich hervorheben kann Dies dient als Entschei dungshilfe f r das weitere Vorgehen Die Herstellerhomepage zu SVN finden Sie unter http subversion tigris org Dort k n nen Sie auch die aktuelle Version von Subversion herunterladen Ein deutschsprachiges Onlinebuch zum Einstieg in die Versionsverwaltung finden Sie unter http sunbook red bean comfnightly de inde
41. echo lt br gt a 9 9 echo var_dump a echo lt br gt a FALSE echo var_dump a echo lt br gt o lt body gt lt html gt Listing 2 6 Eine Variable mit ver nderlichem Datentyp Die erste berraschung besteht darin dass dieser Quellcode berhaupt funktioniert und dann noch g ltige Ausgaben erzeugt n mlich int 4 float 9 9 und in der letzten Zeile bool FALSE Eine Variable passt in PHP also bei jeder Wertzuweisung ihren Datentyp dynamisch an Das hat auch zur Folge dass man zu einem Zeitpunkt nicht genau sagen kann welchen Datentyp eine Variable gerade besitzt wenn ein anderer Entwickler schreibenden Zugriff auf diese Variable hat Abfrage von Variablen und Datentypen W hrend var_dump nur f r die Ausgabe bestimmt ist hat man mit weiteren Befehlen die M glichkeit den Datentyp einer Variablen innerhalb des PHP Skripts abzufragen Diese Befehle geben stets einen Wahrheitswert zur ck der dann ber eine Verzweigung Kapi tel 2 1 3 Einfluss auf den weiteren Ablauf des PHP Skripts nehmen kann PHP Endlich objektorientiert 21 2 Die Sprache PHP Prozedural Befehl Bedeutung is_int var oder is_integer var oder is_long var is_float var oder is_double var oder is_real var is_numeric var is_bool var is_string var is_array var is_object var Gibt TRUE zur ck wenn Svareine Ganzzahl ist Gibt TRUE Zur ck wenn Svareine Flie kommazahl ist Gib
42. echo wert2 echo lt br gt 2 gt lt body gt lt html gt Listing 2 11 Zwei Variablen zeigen auf die selbe Speicherstelle 24 entwickler press Grundlegende Syntax Im Gegensatz zu der Referenz bergabe wert2 amp wert kopiert PHP bei der Wertzuwei sung wert2 wert ohne das kaufm nnische Und den Inhalt von wert auf eine neue Speicherstelle auf die dann wert2 zeigt Wenn Sie dann wert2 ndern hat das keinen Einfluss auf die Speicherstelle auf die wert zeigt Abbildung 2 4 verdeutlicht diesen Sachverhalt Speicher wert wert2 wert amp wert2 a b Abbildung 2 4 Situation im Speicher bei einer Wert a und einer Referenz bergabe b Operatoren In den bisherigen Beispielen wurden bereits Zuweisungen von Werten zu Variablenna men vorgenommen Im letzten Kapitel wurde zwischen der Zuweisung von Werten und Speicherreferenzen unterschieden Tabelle 2 2 fasst die m glichen Operatoren von PHP zusammen mit denen man Zuweisungen erstellen kann Zus tzlich dazu existieren einige Operatoren f r mathematische Grundrechenarten Komplexere mathematische Funktionen wie Sinus oder Logarithmusfunktionen wer den in Kapitel 2 1 5 beschrieben Operation Bedeutung x y Inhalt der Variablen ywird nach x kopiert x amp y Speicheradresse der Variablen ywird auf die Speicheradresse der Variablen x gesetzt x y Addition von yzur Variablen x x y Substraktion vo
43. erg ftp_get fh ziel quelle art l dt die in gue e angegebene Datei vom FTP Server lokal in Szie herunter die Art des Transfers erfolgt als Text 7P ASCI oder bin r 7P_BINARY der Erfolg des Transfers wird als Wahrheitswert zur ckgegeben Tabelle 2 25 PHP Befehle zum FTP Protokoll 82 entwickler press Erweiterte Funktionen Funktion Bedeutung erg ftp_cdup fh wechselt auf dem Server in das Hauptverzeichnis der Erfolg wird als Wahrheitswert zur ckgegeben erg ftp_chdir fh dir wechselt auf dem Server in das angegebene Verzeichnis dir der Erfolg wird als Wahrheitswert zur ckgegeben erg ftp_mkdir fh dir erzeugt auf dem Server das Verzeichnis air der Erfolg wird als Wahrheitswert zur ckgegeben arr ftp_nlist fh dir gibt die Dateien und Unterverzeichnisse von Soirals Datenfeld von Zeichenketten zur ck erg ftp_rename fh neu alt benennt eine Datei auf dem FTP Server von a fin neuum der Erfolg wird als Wahrheitswert zur ckgegeben erg ftp_mdtm fh datei gibt den UNIX Zeitstempel der letzten nderung von Sdafeizur ck erg ftp_delete fh datei l scht aafeivom FTP Server der Erfolg wird als Wahrheitswert zur ckgegeben erg ftp_close fh schlie t eine ge ffnete FTP Verbindung der Erfolg wird als Wahr heitswert zur ckgegeben Tabelle 2 25 PHP Befehle zum FTP Protokoll Forts Zugriff auf eine MySQL Datenbank Einer der wichtigsten Anwendungsf lle vo
44. ffentlichung von Winston Royce im Jahre 1970 heraus gestellt dass viele Kunden zu Beginn des Projekts ihre eigenen Anforderungen gar nicht genau kennen und deshalb auch nicht f r einen Programmierer spezifizieren k nnen Erst wenn sie eine Anwendung einen Prototyp sehen machen sich die Entscheider Gedanken dar ber Und daraus entwickeln sich wieder neue Ideen f r Funktionen Das Wasserfallmodell ist durch das Lasten und Pflichtenheft sehr b rokratisch und for mal Dies hat f r den Kunden den Vorteil dass er sehr fr h einen Preis genannt bekommt So kann er besser mit seinem Budget umgehen und Ausschreibungen verglei chen F r Sie als freiberuflicher Entwickler ist dies jedoch risikoreich Man sagt dass bei einer Wasserfall Vorgehensweise die Phasen Implementierung bis incl Betrieb 80 des Gesamtaufwands ausmachen die Analyse bis zum Design die restlichen 20 Im Allgemeinen ist das Wasserfallmodell nur bei sehr kleinen Projekten durchf hrbar und auch nur dann wenn Sie den Kunden und dessen W nsche bereits im Vorfeld gut absch tzen k nnen Als Programmiertechnik ist die prozedurale Vorgehensweise ausrei chend die im zweiten Kapitel vorgestellt worden ist Das Spiralmodell Dass man die Anforderungen nicht vollst ndig im Voraus kennt und der Kunde bei der Entwicklung der PHP Anwendung fter eingebunden werden muss indem Sie ihm Prototypen der Software pr sentieren wurde im Spiralmodell ber cksichtigt Dieses Mod
45. gt Listing 5 22 verkaufen php View Abbildung 5 29 zeigt die Eingabemaske f r den Verkauf die sich nahtlos in den Stil der anderen Masken integriert Sie erkennen bereits dass zwei typische Arten von HTML Formularen existieren n mlich die Eingabemasken sowie die Ausgaben des Controllers Beide Typen besitzen eine sehr hnliche HTML Struktur die bei nderungen nur schwer wartbar ist Daher empfiehlt es sich bei einer gr eren Anzahl an Masken eine eigene View sowie eine Controller Klasse zu implementieren die ein Framework f r Eingabe masken bzw f r Auswertungen der Eingabe bilden nderungen am Design m ssen dann nur in den Frameworkklassen vorgenommen werden und wirken sich auf alle kon kreten Masken aus die aus den Frameworkklassen als GUI Objekte instanziiert werden PHP Endlich objektorientiert 385 5 Projektpraxis http localhost Aktienverwaltung 004 verkaufen php Windows Internet Explorer BAX 6 DP E localhost xlix a Pr Datei Bearbeiten Ansicht Favoriten Extras p Favoriten http localhost Aktienverwaltung 004 verkaufen php Depotverwaltungsprogramm Gew hlter Bestand E ON laden l speichern bersicht w hlen l neu l hinzukaufen neue Dividende verkaufen Kurs beim Verkauf 32 Verkauf Datum 28 102009 Verkauf Geb hren 9 9 Verkaufen Abbrechen Copyright by Dr Frank Dopatka Lokales Intranet fa R 100 Abbildu
46. gt wert if wert stud return TRUE bereits angemeldet if this gt anzStuds Praktikum MAX_STUDS return FALSE anmelden this studs this gt anzStuds stud this anzStudst dem Studenten Bescheid sagen Listing 4 37 Die Klasse Praktikum PHP Endlich objektorientiert 253 4 PHP objektorientiert if stud gt anmelden this FALSE this anzStuds this studs this gt anzStuds NULL return FALSE return TRUE Listing 4 37 Die Klasse Praktikum Forts Bei einer Vererbung wie sie beispielsweise zwischen Person und Student existiert ist die Abh ngigkeit des Studenten von der Personenklasse gr er als bei der Beziehung der Studenten und Praktika da die Unterklasse nicht ohne ihre Oberklasse ausgef hrt wer den kann Die Personenklasse ben tigt die Studentenklasse jedoch nicht Der Quellcode des Listings 4 38 testet die beiden Klassen Dabei werden zwei Studenten und drei Praktika angelegt Es wird sowohl die Anmeldemethode der Studentenklasse als auch die Anmeldemethode des Praktikums getestet So wird die korrekte Funktion in beiden F llen sichergestellt lt php require_once classloader inc php gt lt html gt lt body gt lt php s1 new Student 3423433 Dopatka Frank Hauptstrasse 4 51580 Reichshof 01 10 2002 s2 new Student 8977678 Grube Clair Kanzlergasse 1 16334 Berlin 01 04 2001 pl new Praktikum
47. hrt dass auch ein Element des Datenfelds _ GET Param2 in der aufgerufenen PHP Datei existiert Dieses Element wird im Bei spiel ausgelesen und in der Variablen P2 gespeichert Im Fall der Checkbox ist P2 NULL wenn die Checkbox nicht angeklickt wurde Im anderen Fall gilt P2 Wert da dieses value Attribut in der HIML Datei der Checkbox zugeordnet wurde Der Inhalt des Textfelds wird aus _GET Param1 ausgelesen w hrend der Inhalt der DropDown Box in _GET Param3 zu finden ist Der Inhalt von _GET Param3 kann Wert1 Wert2 oder Wert3 sein je nachdem welche Option im HTML Formular gew hlt wurde Ebenso kann ausgewertet werden welche submit Schaltfl che zu der fachlogik_get php gef hrt hat Die Werte der Schaltfl chen werden in D1 bis D3 abgelegt Die Variablen D2 und D3 erhalten jeweils den Wert NULL da die beiden entsprechenden Schalt fl chen Dienst2 und Dienst3 nicht bet tigt worden sind Die gedr ckte Schaltfl che kann mit D1 Dienst 1 ermittelt werden lt html lt body gt lt php p1 _GET Paraml P2 _GET Param2 P3 _GET Param3 D1 _GET Dienst1 D2 _GET Dienst2 D3 _GET L Dienst3 echo var_dump P1 lt br gt echo var_dump P2 lt br gt echo var_dump P3 lt br gt 2 echo var_dump D1 lt br gt echo var_dump D2 lt br gt Listing 2 60 Quellcode der Auswertung des GET Formulars fachlogik_get php PHP Endlich ob
48. jedoch auf Grund der zweiten Pr fung im Aktivit tsdiagramm TRUE zur ck noch bevor die Rekursion beim Praktikum anmelden noch einmal aufgerufen wird Diese textuelle Beschreibung die wiederum aus dem Aktivit tsdiagramm resultiert wird nun in Listing 4 36 in Quellcode gegossen lt php class Student extends Person private matrNr private immatrikuliertSeit private praks Array private anzPraks 9 const MAX_PRAKS 5 public function __construct matrNr name vorname strasse plz ort immatrikuliertSeit parent __construct name vorname strasse plz ort this gt matrNr matrNr this gt immatrikuliertSeit immatrikuliertSeit public function GetMatrNr return this gt matrNr public function getImmatrikuliertSeit return this gt immatrikuliertSeit public function getPraktika return this gt praks public function anmelden prak f Listing 4 36 Die Klasse Student PHP Endlich objektorientiert 251 4 PHP objektorientiert if prak instanceof Praktikum FALSE return FALSE foreach this gt praks as elem gt wert if wert prak return TRUE bereits angemeldet if this gt anzPraks Student MAX_PRAKS return FALSE anmelden this gt praks this gt anzPraks prak this gt anzPrakst beim Praktikum anmelden if prak gt anmelden this FALSE this anzPraks this gt praks this gt anzPraks NULL return FALSE ret
49. l scht den Inhalt aller Variablen die in der aktuellen Session deklariert wurden die Session selbst bleibt jedoch bestehen session_destroy beendet eine Session und l scht alle Daten die in der Session verwendet wurden die Session ID wird wieder freigegeben Tabelle 2 23 Session Befehle von PHP Das zur Fehlerunterdr ckung In den folgenden Kapiteln wird der Zugriff auf das Dateisystem des Servers der Upload von Dateien auf einem FTP Server und der Zugriff auf eine Datenbank beschrieben Man kann sich leicht vorstellen dass bei diesen Funktionen eine Vielzahl von Fehlern m glich ist Es fehlen Schreibrechte auf eine Datei das FTP Kennwort ist falsch oder der Daten bankserver ist offline Die Befehle die diese Funktionen realisieren geben im Fehlerfall meist direkt eine PHP Fehlermeldung zum Internetbrowser des Clients zur ck So liefert der Befehl datei fopen counter txt w beispielsweise die folgende Fehlermeldung wenn das PHP Skript keinen Schreibzugriff auf die zu schreibende Datei besitzt eine genauere Betrachtung der Funktionen zum Schreiben von Dateien erfolgt im n chsten Kapitel Warning fopen counter txt Ifunction fopen failed to open stream Permission denied in C EigeneDateien HTTP counter php on line 7 Ein Kunde der auf die Seite zugreift soll jedoch nicht von dieser Meldung abgeschreckt werden Unmittelbar vor jede Meldung die einen Fehler oder eine Warnmeldung ausge ben k
50. lt html gt Listing 2 2 Das erste PHP Skript hallo php Die PHP Datei definiert zun chst eine Variable wert und belegt sie mit der Zeichenkette Hallo Die Variable ist in der ganzen PHP Datei g ltig und wird an zwei Stellen im HTML Code ausgegeben Die Ausgabe im Internetbrowser unterscheidet sich in keiner Weise von der Ausgabe der HTML Datei Wenn Sie sich im Browser den Quellcode der Datei ansehen werden Sie ebenfalls keinen Unterschied feststellen Was geschieht also bei der Verarbeitung der PHP Datei Wird eine HTTP Anfrage auf eine PHP Datei gestellt so ffnet der Webserver diese Datei und gibt sie an den PHP Interpreter weiter Jeder Bereich zwischen den Marken PHP Endlich objektorientiert 15 2 Die Sprache PHP Prozedural lt php gt wird daraufhin vom Interpreter als PHP Code analysiert Dieser Code kann wiederum eine HTML Ausgabe erzeugen die dann an den Webserver weitergegeben wird Der PHP Code selbst gelangt dabei nicht zum Client lediglich dessen Ausgabe Dadurch bleibt der PHP Quellcode f r den Client unsichtbar Ebenso wird jeder Text au erhalb der Marken lt php gt unmittelbar an den Webserver weitergeleitet Das Prin zip der Verarbeitung einer PHP Datei ist in Abbildung 2 3 skizziert 1 GET hallo php 4 READ gt Internet 6 Ausgabe der hallo php A lt 5 Ausgabe Client Web Server Apache A 2 OPEN 3 READ Y l N N hallo php Abbildung 2 3 Aufruf
51. lt kundenliste gt Listing 4 62 XML Datei die eine Objektinfrastruktur realisiert Forts Im Gegensatz zu HTML Hypertext Markup Language k nnen Sie bei XML die Tags in den spitzen Klammern frei definieren HTML ist also eine Untermenge von XML bei der einzelnen Elementen eine bestimmte Bedeutung zugewiesen wurde So bildet lt h1 gt eine berschrift und lt ul gt kennzeichnet den Beginn einer Aufz hlung Sie k nnen bei XML zus tzlich zu den Tags Attribute vergeben wie es im Beispiel von Listing 4 62 mit den IDs der Kunden Rechnungen Positionen und Artikel geschehen ist Zus tzlich k nnen XML Elemente Unterelemente enthalten so beinhaltet eine Rech nung eine Menge von Rechnungspositionen Als Alternative dazu kann zwischen einem Tags Beginn und einem Tags Ende ein Text stehen wie im Beispiel lt name gt Dopatka lt name gt Dies ist ebenso in HTML m glich beispielsweise lt h1 gt Einlei tung lt hl gt wohlgeformt und g ltig Die Regeln f r eine gute XML Datei sind etwas strikter als beim gewohnten HTML Format So ist eine XML Datei wohlgeformt wenn sie s mtliche XML Regeln einh lt Dies bedeutet dass die Datei genau ein Wurzelelement besitzt Das Wurzelelement ist das jeweils u erste Element der Datei im Beispiel des Listings 4 64 ist dies das Tag lt kundenliste gt m alle Elemente mit Inhalt eine Beginn und eine Endkennung besitzen So muss pas send zum Tag lt name gt ein lt name gt exi
52. lt php Mailnachricht Dies ist eine Test Mail Empfaenger FrankDopatka localhost Mailbetreff Test Mail if mail Empfaenger Mailbetreff Mailnachricht from FrankDopatka localhost gt Beim Versand der e Mail ist ein Fehler aufgetreten lt br gt lt php else gt E Mail erfolgreich versendet lt php gt lt body gt lt htm1 gt Listing 2 73 PHP Skript zum Mail Versand Nach ein bis zwei Minuten k nnen Sie danach den Mail Client starten und das Mail Konto auf neue E Mails berpr fen Eine neue E Mail sollte jetzt in Ihrem Posteingang liegen 3 Vorgehensweise bei der Softwareentwicklung Im zweiten Kapitel dieses Buches wurden die grundlegende Syntax der Sprache PHP und eine Sammlung von Funktionen vorgestellt die man im Alltag ben tigt Mit diesem Wortschatz k nnen Sie bereits prozedural und modular programmieren durch die Definition von eigenen Funktionen und deren Auslagerung in separaten Dateien die ber require oder include in das Skript eingebunden werden Dieses Kapitel hat keinen direkten Bezug zu der Sprache PHP Es stellt stattdessen Methoden und Verfahren vor wie man an die Softwareentwicklung herangeht Dabei werden im ersten Teil strukturierte Vorgehensweisen zur Erstellung einer prozeduralen PHP Anwendung vorgestellt Es kommt h ufig vor dass ein meist junger Programmie rer die Sprache PHP gerade erlernt hat und Probleme bei der Abwicklung seiner ersten Auftr ge ents
53. lt php data Array i 0 Listing 2 40 F llen eines Datenfelds und dessen Auslesen mit zwei while Schleifen PHP Endlich objektorientiert 51 2 Die Sprache PHP Prozedural while i lt 100 datal il 7 i i i i i 0 while datal i lt 200 echo Wert datal i lt br gt 2 i gt lt body gt lt htm1 gt Listing 2 40 F llen eines Datenfelds und dessen Auslesen mit zwei while Schleifen Forts Im weiteren Verlauf dieses Buchs werden while Schleifen insbesondere beim Einlesen von Datenquellen wie Dateien oder Datenbankeintr gen verwendet Die Dateien wer den zeilenweise eingelesen und zwar solange bis das Dateiende erreicht ist Das bildet die Bedingung f r die while Schleife Bei einer Datenbank wird eine SQL Abfrage abgesetzt die eine beliebig gro e Ergebnis menge in einer zweidimensionalen Tabelle zur ck gibt Diese Ergebnismenge wird dann zeilenweise bis zum Ende durchlaufen und die Daten interpretiert Auch daf r eignet sich eine while Schleife besonders gut do while Die do while Schleife ist die einzige fu gesteuerte Schleife in PHP die mindestens einmal durchlaufen wird Am Ende des Schleifenrumpfes wird dann die Bedingung gepr ft Liefert die Bedingung TRUE zur ck so wird die Schleife nochmals durchlaufen Das Beispiel in Listing 2 41 zeigt den Aufbau der Fibonacci Folge in einem Datenfeld und dessen Ausgabe mit einer zweiten do while Schleife lt html gt lt bo
54. m ssen nur noch die erhalteten Dividenden hinzugef gt werden gewinnProz ist dieser Gewinn umgerechnet in Prozent m gewinnProzProJahr rechnet den ermittelten Gewinn auf ein Jahr hoch Dazu wird der erhaltene Gewinn durch die Anzahl der Tage geteilt die sich der Aktienbestand im Besitz des Anlegers befindet Dann haben Sie den durchschnittlichen Gewinn pro Tag ermittelt Dieser durchschnittliche Gewinn pro Tag wird mit den Tagen eines Jahres also mit 365 25 wegen des Schaltjahres alle 4 Jahre multipliziert Dieser Jahresge winn wird dann noch in Prozent umgerechnet Dieser Wert dient zum Vergleich mit einer Festgeldanlage Wenn Sie mit dem Aktienbestand Verlust gemacht haben w re gewinnProzProJahr nega tiv Da Sie jedoch selbst im Falle der Insolvenz der Aktiengesellschaft kein Geld drauf zahlen m ssen wird der prozentuale Gewinn pro Jahr bei einem negativen Wert zum Abschluss der Methode getDaten auf 0 gesetzt Die Erweiterung der Klasse Aktienbestand sowie die Klasse Bilanz sorgen daf r dass die erwartete Ausgabe des Tests erf llt wird Die einzelnen direkten Tests mit kleinen PHP Skripten sind damit abgeschlossen Im n chsten Schritt wird nun die erste Benutzerober fl che f r unseren Auftraggeber erstellt Das Fallbeispiel der Depotverwaltung Die zweite Phase Die Schnittstelle zum Benutzer F r den Prototyp der Benutzeroberfl che GUI wird eine Men f hrung ben tigt durch die unser Auftraggeber die von
55. ndigen Neubildens und Testens der zu erstellenden Anwendung Dies geht heutzutage meist einher mit einer Versionsverwaltung der Softwaremodule sowie der Bildung von Revisionen von lauff higen Prototypen der Anwendung Abschlie end ist beim RUP Modell zu betonen dass jede Phase in mehrere Iterationen unterteilt werden kann zu denen jeweils Prototypen der Anwendung bzw der Spezi fikationen OOA D erstellt werden Damit unterst tzt RUP die Idee der iterativ inkre mentellen Softwareentwicklung die heutzutage insbesondere f r gro e Projekte aner kannt ist Dies bedeutet dass die Entwicklung einen Prozess der kontinuierlichen Verbesserung durchl uft der in kleinen Schritten und mit mehreren Wiederholungen vollzogen wird Somit werden die Analyse das Design und der Entwurf mehrfach berarbeitet und k nnen vom Kunden in seine gew nschte Richtung gelenkt werden Diese an das Spiral modell angelehnte Vorgehensweise hat sich in der Praxis als blich herausgestellt erschwert jedoch eine exakte Zeit und Kostenplanung im Vorfeld Man ist in der Soft wareentwicklung zu dem Schluss gekommen dass gerade gro e Projekte nicht vollst n dig im Vorfeld am Rei brett geplant werden k nnen Lediglich einzelne Meilensteine zur Orientierung k nnen in den fr hen Projektphasen definiert werden 3 2 2 Begriffe der Objektorientierung Vom Beginn dieses Kapitels bis zu diesem Punkt wurde die historische Vorgehensweise aus Sicht der Software
56. operation lt portType gt lt binding name TestServerBinding type tns TestServerPortType gt lt soap binding style rpc transport http schemas xmlsoap org soap http lt operation name addiere gt lt soap operation soapAction urn xmethodsTestServerjaddiere gt lt input lt soap body use encoded namespace urn xmethodsTestServer encodingStyle http schemas xmlsoap org soap encoding gt lt input gt lt output gt lt soap body use encoded namespace urn xmethodsTestServer encodingStyle http schemas xmlsoap org soap encoding gt lt output gt lt operation lt binding gt lt service name TestServerService gt lt port name TestServerPort binding TestServerBinding gt lt soap address location http localhost webservice server php gt lt port gt lt service gt lt definitions gt Listing 4 79 Die WSDL Datei f r die Funktion der Addition Forts Nun stellt sich die Frage wie viel Aufwand man noch betreiben will um eine einfache Addition durchzuf hren Tats chlich ist die XML Beschreibung der WSDL Datei extrem komplex was jedoch auf ihre Plattformunabh ngigkeit zur ckzuf hren ist Andererseits existieren bereits Hilfsmittel f r den Umgang mit WSDL Dateien wie der WSDL Editor von Altova http www altova com de xmispy wsdl editor htm Der Vorteil der WSDL Datei liegt darin dass der Client diese Datei direkt auslesen und interpretieren kann wie es in Listing 4
57. ssen Sie sich die Zust nde berlegen die Sie im Erfolgsfall und im Fehlerfall erwarten Gegebenenfalls m ssen Sie daraus mehrere Unit Tests erzeugen Test Anmeldung auf ein ausgebuchtes Seminar Test Seminar anlegen Test Vorbedingung Seminar buchen Seminar ist ausgebucht i a pr fbare Nachbedingung Erfolg Vorbedingung Kann nicht erfolgreich sein Fehler erwartet Nachbedingung erwarteter Fehlschlag Meldung Seminar bereits ausgebucht auf n chsten freien Termin verweisen Vorbedingung pr fbare Nachbedingung Erfolg Seminar existriert bereits und ist Seminar wurde mit seinen Daten in der zum gew hlten Termin nicht Seminarverwaltung aufgenommen und ausgebucht eine neue Seminar ID wurde vergeben pr fbare Nachbedingung Erfolg Nachbedingung erwarteter Fehlschlag Kunde wurde als TN in die Liste der TN Seminar mit diesem Titel existiert zum gew hlten Termin aufgenommen bereits Nachbedingung erwarteter Fehlschlag Meldung Nicht m glich Kunde hat noch gt 3 offene Rechnungen Abbildung 3 26 Vorbereitung zur Erstellung von Testf llen Featuregetriebene Entwicklung Mit Scrum wurde bereits eine agile Methode zur Softwareentwicklung vorgestellt Das Produkt Backlog definiert dort die gew nschte Funktionalit t der zu erstellenden Soft ware Mitjeder Iteration wird das Produkt Backlog aktualisiert und die n chsten Schritte der Entwickler im folgenden Sprint geplant
58. string Server string Benutzername string Benutzerkennwort bool neue_Verbindung int client_flags v Abbildung 5 51 Der Quellcodeeditor PHPEdit Der Editor UltraEdit Der f r Windows und neuerdings f r Linux erh ltliche Editor UltraEdit existiert bereits in der 15 Version Im Gegensatz zu PHPedit ist UltraEdit nicht auf die Sprache PHP beschr nkt und unterst tzt zus tzlich eine Syntaxhervorhebung f r C C VisualBa sic HTML Java und Perl mit Optionen f r Fortran und LaTex Andererseits ist die Abstimmung auf PHP nat rlich nicht so weit fortgeschritten wie bei PHPedit So fehlt eine feste Integration von Werkzeugen wie PHPUnit SVN oder PHPDocumentator Stattdessen verf gt UltraEdit ber eine Werkzeugkonfiguration mit der Anwendungen auf der Kommandozeile durch einen Mausklick oder ber eine Tastenkombination ange sto en werden k nnen deren Ausgabe in den Editor umgeleitet werden kann Auf diese Weise k nnen andere Werkzeuge integriert werden UltraEdit bietet Unicode Zeichensatzunterst tzung eine Rechtschreibpr fung f r meh rere Sprachen einen integrierten FTP Client eine konfigurierbare Tastenbelegung einen Hex Editor sowie eine HTML Werkzeugleiste Unter http www ultraedit germany de finden Sie weitere Informationen zu dem Editor dessen Einzellizenz ca 50 kostet Erstellung von gutem Quellcode Q UltraEdit 32 D Daten PHP WS HTTP Aktienverwaltung 004 uebersicht php Log Eal Dat
59. ten fest welche Funktionalit t er gerne in Ihrer PHP Anwendung sehen w rde und in welchen Schritten er Ihre Anwendung nacheinander bedient Bei einem Onlineshop w re beispielsweise folgende Reihenfolge denkbar 1 Der Kunde sucht in den Artikeln nach verschiedenen Kriterien Der Kunde m chte gern den ersten Artikel kaufen Der Kunde registriert sich mit Namen Vornamen Anschrift usw oder loggt sich ein Der Kunde legt eine Anzahl des gew nschten Artikels in seinen Warenkorb Wiederholung der Schritte 1 2 und 5 der Kunde bleibt eingeloggt Der Kunde wechselt zum Warenkorb Der Kunde best tigt die Bestellung onsnu pr mwN Der Kunde loggt sich aus Die Anforderungsanalyse beschreibt also die gesch ftlichen Abl ufe die mithilfe der Software realisiert werden sollen Sie endet mit dem Lastenheft Das Dokument wird von Ihrem Kunden unterschrieben Es beschreibt die vollst ndigen Forderungen Ihres Auf traggebers an Ihre Lieferungen und Leistungen Das Lastenheft geh rt Ihrem Kunden In der Regel erhalten Sie eine Kopie mit der Anfrage wie teuer denn die Realisierung w re Dies m ssen Sie so sch tzen dass Sie mit Sicherheit keinen Verlust machen und dennoch den Auftrag erhalten was u erst schwierig ist und viel Projekterfahrung erfordert Ihr Kunde kann n mlich das Lastenheft auch in einer Ausschreibung verwenden und an andere m gliche Programmierer versenden In der Entwurfsphase berlegen Sie wie Sie gedenken die Anforderun
60. tzliche Datenfeldfunktionen 2 1 3 Verzweigungen In diesem Kapitel wird ein wichtiges Konzept jeder prozeduralen Programmiersprache vorgestellt Mithilfe einer Verzweigung sind Sie in der Lage eine alternative Ausf hrung Ihrer Anwendung zu programmieren Sie k nnen damit auf eine eintretende Bedingung entsprechend reagieren Ein Beispiel ist das Anmelden an ein Internetportal Wenn Sie eine richtige Kombination von Benutzername und Kennwort eingeben so sollen Sie in das Portal gelangen Ansonsten soll eine Fehlermeldung angezeigt werden Die richtigen Angaben soll PHP sp ter aus einer Datenbank entnehmen Dabei muss eine Verbindung zur Datenbank aufgebaut werden Nun kann es vorkommen dass der Datenbankserver nicht online ist In diesem Fall kann man nicht pr fen ob die richtigen Daten eingegeben wurden Wenn die Verbindung also hergestellt wurde kann erst die Pr fung erfolgen Ansonsten muss der Anwender eine Fehlermeldung erhalten dass technische Probleme bei der Pr fung aufgetreten sind wof r sich der Anbieter entschuldigt Immer wenn Sie im Sprachgebrauch eine Wenn Dann oder Wenn Dann Ansons ten Formulierung verwenden werden Sie in Ihrer Anwendung eine Verzweigung ein setzen Eine Verzweigung ist auch immer an eine Bedingung gekn pft die entweder erf llt oder nicht erf llt sein kann Bei der Bedingung handelt es sich demnach um einen PHP Endlich objektorientiert 35 2 Die Sprache PHP Prozedural
61. tzung f r das PHP Projekt und hat angek ndigt PHP zuk nftig auf allen Windows Serverplattformen zu unterst tzen Seit PHP 5 3 wurde die Unterst tzung von einigen PHP Funktionen die zuvor nur auf Linux Servern zuverl ssig funktionierten im Microsoft Umfeld verbessert Dazu geh ren unter anderem checkdnsrr und checkmxrr zur berpr fung von Domain und URL Angaben sowie link zur Erzeugung eines absoluten Links im Dateisystem des Servers 4 6 4 nderung im Late Static Binding Bei den PHP Versionen vor 5 3 sorgte die Verwendung von Klasseneigenschaften fters f r Verwirrung bei den Programmierern Betrachten Sie den folgenden Quellcode der eine Klasseneigenschaft definiert und diese in einer Unterklasse berschreibt Laut den Regeln der Objektorientierung m sste die Get Methode den neuen berschriebenen Wert 22 ausgeben lt php class Test static protected x 7 public static function getX return self x class SpeziellerTest extends Test static protected x 22 gt lt html gt lt body gt lt php var_dump SpeziellerTest getX gt lt body gt lt html gt Listing 4 88 Statische Klassenattribute und deren Vererbung Dies geschieht jedoch nicht stattdessen erfolgt die Ausgabe des Wertes 7 Die Ursache daf r liegt darin dass das Schl sselwort selfin der Get Methode bereits beim bersetzen des Programms durch den Namen der Klasse in diesem Fall also durch den Namen der Obe
62. und XSL Datei f hrt dies zu der folgenden Ausgabe Name des Seminars PHP5 objektorientiert ID des Seminars S1120 Dozent des Seminars Dr Frank Dopatka Teilnehmer gt UlIfSchmidt Clair Grube PHP Endlich objektorientiert 313 4 PHP objektorientiert Ulla Hansen Franz Streber Hans Wurst Auf diese Art und Weise k nnen Sie verschiedene Transformationen beispielsweise zur Ausgabe auf mobile Endger te oder in andere XML Formate zum Import der Daten in andere Systeme definieren und halten den Datenstamm in Form der XML Datei nur ein malig vor Hinweis Selbstverst ndlich kann im Rahmen dieses Buches keine vollst ndige Beschreibung der Sprachen DTD Schema und XSL T erfolgen Zu diesem Zweck existieren bereits eine Vielzahl von Literatur sowie Internetquellen In diesem Buch sollen Sie nur die prinzipiellen Technologien mit grundlegenden Beispielen zum Einstieg sowie den Einsatzzweck dieser Technologien kennen lernen 4 5 Ein Web Service in PHP Eine besondere verteile Art der objektorientierten Programmierung stellen Web Services dar Ein Web Service ist ein Dienst also eine Methode bzw eine Funktionalit t die zumeist in einem Intranet bereitgestellt wird Web Services orientieren sich an der serviceorientierten Architektur SOA und vereinen verteilte und objektorientierte Programmierstandards wobei sie insbesondere betriebs wirtschaftliche L sungen fokussieren Eine Anwendung kann einen Web
63. vom bereits vorhandenen Konto des Benutzers abgebucht Im n chsten Schritt wird die Aktienorder get tigt bei der eine bestimmte Anzahl einer Aktienart erworben werden soll Diese Orderanfrage wird an das neue Depotobjekt bergeben In dem Diagramm der Abbildung 3 79 ist nicht das komplexe System dargestellt das sich hinter dem Depot verbirgt Das Depot wird seinerseits eine Art von Orderobjekt anlegen und verwalten Dieses Orderobjekt muss in Verbindung mit dem Handelsplatz einer B rse gebracht werden wo die Order dann zur Ausf hrung kommt oder auch nicht Letzteres ist beispielsweise der Fall wenn der Benutzer einen zu geringen maxi malen Kaufpreis angegeben hat Dieses Sequenzdiagramm beschreibt also lediglich die Aktionen die f r den Benutzer sichtbar sind und befindet sich daher auf der Wasserspiegelebene Benutzer Depot anlegen abbuchen betrag TRASSA 7 aufen art anzahl Abbildung 3 79 Anlegen eines Aktiendepots und ordern Im n chsten Beispiel wird die Interaktion eines Apothekers mit dem technischen System einer Onlinerezeptverwaltung beschrieben Dabei werden weitere Elemente der Syntax von Sequenzdiagrammen vorgestellt Der Apotheker interagiert mit einem Rezeptfenster wobei der erste Teil der Interaktion beispielsweise das Abzeichnen des Rezepts nicht in diesem Diagramm dargestellt wird Dies ist durch das Einf gen einer Interaktionsreferenz m glich die einen Namen hier A erhalten
64. von inklusive 20 Jahren bis 40 Jahren Das ist mit einem switch Befehl nicht m glich Die switch Verzweigung ist also in ihrer M chtigkeit beschr nkter als eine elseif Kon struktion Sie k nnen jedoch mehrere diskrete F lle in einem Block abhandeln wie das Beispiel in Listing 2 32 zeigt Hier werden die Schulnoten 1 bis 4 sowie 5 und 6 durch Auslassen der break Anweisungen zusammengefasst lt php note 2 switch note case 1 case 2 case 3 case 4 bestandenText Sie haben bestanden break case 5 case 6 bestandenText Sie sind durchgefallen break default bestandenText ERROR break Listing 2 32 Eine switch Verzweigung mit zusammengefassten F llen 44 entwickler press Grundlegende Syntax lt html gt lt body gt lt php echo bestandenText gt lt body gt lt html gt Listing 2 32 Eine switch Verzweigung mit zusammengefassten F llen Forts 21 4 Schleifen Im letzten Kapitel wurden verschiedene PHP Befehle vorgestellt um die Ausf hrung von Quellcode zu verzweigen Dadurch kann entweder ein Teil A oder ein Teil B eines Programms ausgef hrt werden Mit elseif oder switch k nnen mehrfache Verzweigungen durchgef hrt werden In diesem Kapitel wird nun eine weitere f r prozedurale und objektorientierte Sprachen typische Kontrollstruktur vorgestellt Mit einer Schleife k nnen Sie Quellodeteile so oft wiederholen wie eine Bedingung erf llt ist Generell unterscheide
65. xs simpleType gt lt xs element name teilnehmerliste gt lt xs complexType gt lt xs sequence lt xs element ref teilnehmer max0ccurs unbounded gt lt xs sequence gt lt xs complexType gt Listing 4 73 Schemadatei zur Pr fung des XML Dokuments Forts PHP Endlich objektorientiert 309 4 PHP objektorientiert lt xs element gt lt xs element name vorkenntnisse gt lt xs complexType gt lt xs sequence lt xs element ref vorkenntnis maxOccurs unbounded gt lt xs sequence gt lt xs complexType gt lt xs element gt lt xs schema gt Listing 4 73 Schemadatei zur Pr fung des XML Dokuments Forts Genau wie bei der Pr fung der XML Beispieldatei anhand der DTD muss auch das Schema auf eine XML Datei angewendet werden In diesem Beispiel wird wieder die XML Datei aus Listing 4 63 verwendet Ein Hinweis auf das zugeh rige Schema inner halb der XML Datei ist nicht notwendig In Listing 4 74 erfolgt nun die Pr fung auf G ltigkeit der beispiel xml gegen das Schema seminare xsd Nach dem Laden der XML Datei in das Document Objekt Model erfolgt ber die bereits im DOM definierte Methode schemaValidate die Pr fung unter Angabe des Schemas Diese Pr fung liefert genau wie die DTD Pr fung im Erfolgsfall ein TRUE und andernfalls ein FALSE zur ck lt php doc DOMDocument load beispiel xml gt lt html gt lt body gt lt php if doc gt schemaValidate seminare xsd
66. 0 Abbildung 5 26 HTML Formular zur Eingabe einer Dividende Meinung Versuchen Sie Ihre Benutzerinteraktionen und HTML Formulare einfach verst nd lich und konsistent ber die gesamte Anwendung zu gestalten Dies sorgt f r eine gr ere Akzeptanz bei den Benutzern und eine angenehme logische Bedienbarkeit f r die keine zus tzliche Anleitung notwendig ist Auch komplexe Probleme k nnen stets durch eine strukturierte teilweise vereinfachte Pr sentation f r einen Anwen der verst ndlich dargeboten werden Der Quellcode des Controllers ist bis zum Auslesen des gew hlten Aktienbestands mit dem Quellcode des Hinzuf gens eines weiteren Kaufvorgangs aus Listing 5 19 identisch Im Anschluss daran wird die eingegebene Dividende aus dem _POST Datenfeld wie der ohne Sicherheitspr fung entnommen und dem Bestand hinzugef gt Dabei wird die Summe der erhaltenen Dividenden vor und nach dem Hinzuf gen abgefragt um den Erfolg der Aktion zu berpr fen lt php if Ctrim _POSTLeingabe Abbrechen header Location start php require_once header inc php bestand unserialize _SESSION Bestand _SESSION BestandGew hlt Listing 5 21 dividende2 php Controller Das Fallbeispiel der Depotverwaltung gt lt center gt lt h3 gt lt php divalt bestand gt getDividenden bestand gt addDividende _POST dividende divneu bestand gt getDividenden if divneu divalt _POST dividend
67. 1 0 param bar Ein beliebiger Wert return Der mit sich selbst multiplizierte Eingabewert function foo bar return bar Listing 5 29 Eine eigene PHP Funktion mit Kommentierung f r PHPDocumentators Die Metabefehle werden also stets durch ein vorangestelltes Zeichen eingeleitet Der Kommentar wird als Block Kommentar eingef gt wobei ein Stern mehr verwendet wird als f r den eigentlichen PHP Kommentar notwendig ist Die so erstellten spe ziellen Kommentare werden als DocBlocks bezeichnet Die wichtigsten Meta Befehle der DocBlocks sind in Tabelle 5 1 zusammengefasst Meta Befehl Bedeutung author der Autor des folgenden Codeabschnitts version die Version des folgenden Codeabschnitts since eine Versionsnummer oder ein Datum copyright beispielsweise Name und Datum oder Firmenname todo beschreibt eine noch zu erledigende Aufgabe link ein weiterf hrender Homepage Link param die Parameter Wert und Typ der Methode in der Reihenfolge der Angabe bzw der bergabe var beschreibt eine Eigenschaft bzw Variable return der Typ des R ckgabewerts der Methode Tabelle 5 1 Einige Schl sselworte f r die Kommentierung mit PHPDocumentators Das Werkzeug PHPDocumentator interpretiert nun die Kommentare und erstellt neue Dokumente die den Quellcode dokumentieren Die Dokumentation kann erstellt wer den in verschiedenen HTML Versionen im PDF Format PHP Endlich objektorie
68. 1 5 echo k getInhalt lt br gt echo Kreis wertPI lt br gt 2 lt body gt lt html gt Listing 4 18 Berechnung des Fl cheninhalts und Zugriff auf die klasseninterne Konstante Eine als Konstante definierte Eigenschaft k nnen Sie einmalig setzen und danach nicht ver ndern Auch der Inhalt ganzer Methoden kann neu definiert werden indem man eine neue Klasse von einer existierenden Klasse ableitet und eine Methode berschreibt PHP Endlich objektorientiert 229 4 PHP objektorientiert Kap 3 2 2 Die Umsetzung des berschreibens von Methoden in PHP wird in Kapitel 4 2 1 beschrieben Dieses berschreiben k nnen Sie jedoch verhindern indem Sie eine Methode als final deklarieren Eine g ltige Deklaration w re beispielsweise final public function berechnen Eine Unterkasse k nnte diesen Methodeninhalt dann nicht neu deklarieren Wie in den meisten anderen objektorientierten Sprachen ist es in PHP 5 auch m glich ganze Klassen vor Vererbung und damit vor der Redefinition von Methoden der vor Erweiterungen zu sch tzen Mit einer finalen Klassendefinition beispielsweise durch final class Bruch verhindern Sie dass jemand von Ihrer Klasse eine Unterklasse ableitet Sie verbieten also in diesem Fall die Vererbung g nzlich 4 1 7 Referenz bergabe von Objekten und Kopien In den neuen PHP Versionen werden Objekte bei einem Funktionsaufruf und auch bei einer Zuweisung grunds tzlich als Referenz bergeb
69. 1i gt lt xsl for each lt ul gt lt p gt lt body lt html gt lt xsl template gt lt xsl stylesheet gt Listing 4 75 Transformationsdatei f r die XML Datei nach HTML beispiel xIs Die Aufbereitung in ein HTML Dokument wurde mit Listing 4 75 beschrieben Nun fehlt noch die Anwendung der Transformation Da es sich sowohl bei der beispiel xml als auch bei der beispiel xls um XML Dateien handelt werden beide zun chst als DOM Objekt geladen Dies geschieht in der Testdatei aus Listing 7 48 Die Transformation erfolgt ber einen Transformationsprozessor der wie blich in der Objektorientierung zun chst ber den new Operator erzeugt werden muss Sie erhal ten dann ein Prozessorobjekt proc mit einem Satz von eigenen Methoden Diensten die dieser Prozessor bereitstellt Eine dieser Methoden importStylesheet besteht darin eine Transformationsbeschreibung in den Prozessor zu laden Ein Beschreibungsobjekt steht in der Objektreferenz xsl bereits zur Verf gung Die Methode transformToXML transfor miert die im Eingabeparameter angegebene Datei nun in ein anderes Format In unserem Fall wird dabei eine HTML Datei erzeugt die dann direkt ausgegeben wird lt php xs1 DomDocument load beispiel xs1 xml DomDdocument load beispiel xml proc new XsltProcessor proc gt importStylesheet xs1 print proc transformToXML xml Listing 4 76 HTML Ausgabe In der beschriebenen Kombination von XML
70. 289 4 PHP objektorientiert E_ERROR E_PARSE UND 8 More NonzE EalEE EHEM EUR EHEN EEE TE E_ALL E_STRICT 1 0 0 0 0 0 0 0 0 0 0 0 ODER 1 1 1 1 1 1 1 1 1 1 1 1 Abbildung 4 14 Bin re Verkn pfung von Fehlerkonstanten Listing 4 59 zeigt einen Quellcode bei dem das Ende der Zeichenkette in der echo Anwei sung nicht markiert ist Dies f hrt bei der Standardeinstellung der php ini zu dem Parser Fehler Parse error syntax error unexpected TENCAPSED_AND_WHITESPACE in on line 3 lt html gt lt body gt lt php echo Hallo lt br gt gt lt body gt lt htm1 gt Listing 4 59 Eine fehlerhafte Anweisung Sie k nnen zwar versuchen die Fehlerausgabe zu Beginn des Skripts mit der Anweisung lt php ini_set error_reporting 0 gt zu unterdr cken da es sich jedoch um einen Parser Fehler handelt wird die Meldung trotzdem angezeigt da das Skript ja gar nicht zur Aus f hrung kommt Die Anweisung ini_set war urspr nglich dazu gedacht f r einzelne Skripte das Error Handling zu ver ndern falls man selbst keinen Zugriff auf die php ini besitzt weil sie von einem Internetprovider verwaltet wird Da die Anweisung jedoch selbst Teil des PHP Skripts ist ist der Effekt sehr begrenzt In einer professionellen Anwendung sollten Sie also den Inhalt der php ini selbst bestimmen k nnen Die erste Idee das Melden von Fehlern in der php ini mit error_rep
71. 45 Das Datenzugriffsinterface iDZ Listing 4 46 zeigt eine Hilfskasse ParameterListe die dynamische Parameterobjekte in einem assoziativen Datenfeld erzeugt Die Idee besteht darin dass der Anwender des Interfaces ein Parameterobjekt erzeugt und es mit Parametern ber die add Methode f llt Realisierung von Klassengeflechten Die Dokumentation einer konkreten Implementierung des Datenzugriffsinterfaces iDZ muss die Namen und die m glichen Werte der bergebenen Parameter f r jede Methode enthalten Neben der add Methode k nnen mit der Hilfskasse noch bestehende Parameter anhand ihres Namens ausgelesen und die Existenz eines Parameternamens abgefragt werden Die kill Methode setzt das gesamte Parameterobjekt zur ck sodass Sie es f r eine wei tere bergabe verwenden k nnen lt php class ParameterListef private paramliste Array public function add name wert this gt paramListe name wert r public function get name return this gt paramListel name public function isParam name return isset this gt paramListel name public function kill unset this gt paramliste gt Listing 4 46 Die Hilfsklasse f r die Parameter bergabe Im n chsten Schritt wird das Interface iDZ exemplarisch realisiert f r den Zugriff auf eine MySQL Datenbank Tabelle 2 28 im zweiten Kapitel zeigte bereits die notwendigen Funktionen um auf eine MySQL Datenbank zuzugreifen Die erste impleme
72. 5 1 Hinweis Vor dem Anlegen der Aktie m sste eigentlich eine gr ndliche Pr fung der Inhalte des _POST Felds vorgenommen werden selbst wenn dies bereits auf der Seite des Clients geschehen ist Viele Angreifer versuchen n mlich direkt manipulierte HTTP POSTI Kommandos auf die Controller Dateien abzusetzen um unberechtigten Zugriff auf den Datenbankserver zu erhalten Mit der angelegten Aktie und der zuvor in dem GUI eingegebenen Anzahl dem Datum Kurs und der Geb hr des Kaufs wird anschlie end eine Kauforder erstellt die wiede rum zu einem Aktienbestand f hrt Das neu angelegte Bestandsobjekt wird dann in der Session serialisiert und die Anzahl der Best nde wird in der Session erh ht F r die Ausgabe der Datei wird abschlie end gepr ft ob das Anlegen des Bestands erfolgreich war oder nicht Dabei wird gepr ft ob der Bestand erfolgreich in der Session gespeichert wurde Im Erfolgsfall wird der neu angelegte Bestand in der Session ausge w hlt und eine Erfolgsmeldung ausgegeben im Fehlerfall eine Fehlermeldung In bei Das Fallbeispiel der Depotverwaltung den F llen muss die Meldung ber die OK Schaltfl che best tigt werden die zu der noch zu erstellenden Datei uebersicht php f hrt lt php if _POSTLeingabe Abbrechen header Location start php require_once header inc php aktie new Aktie _POST name _POSTLisin _POSTLur1 kauf new Kauforder aktie _POST Lanz _POST kaufdatum _POS
73. 9 zeigt die Anwendung des Klassenladers auf das bereits beschriebene Listing 4 6 bei dem ein Stiftobjekt angelegt wird Wenn Sie statt eines Objekts 50 Objekte unterschiedlicher Klassen anlegen wollen wer den Sie das automatische Laden der Klassen zu sch tzen wissen und 49 Zeilen PHP Code einsparen PHP Endlich objektorientiert 219 4 PHP objektorientiert lt php require_once classloader inc php frmFarbe _POST LfrmFarbe einStift new Stift frmFarbe ser serialize einStift datei fopen objekt txt w fwrite datei ser fclose datei lt html gt lt body gt Ein Stift der Farbe lt php echo einStift gt getFarbe gt wurde erzeugt lt br gt lt a href weiter php gt Weiter gehts lt ar lt br gt lt body gt lt html gt Listing 4 9 Anwendung des Klassenladers Zentrale Verwaltung von Get und Set Methoden In der Definition der Stiftklasse haben Sie bereits gesehen dass die einzige Eigenschaft farbe eine Get und eine Set Methode zur Verwaltung des Zugriffs auf diese Eigenschaft besitzt Eine hnliche Eigenschaft besitzt die Klassendefinition Laender bei der intern ein Daten feld laender mit Namen und K rzel von zwei L ndern verwaltet wird Die Notation gt legt dabei ein assoziatives Feld an Listing 2 13 PHP bietet Ihnen im Gegensatz zu Java die M glichkeit an die Get und Set Methoden zentral zu verwalten So erlaubt die __get Methode in Listing 4 10 den Aufruf
74. Aktien im Bestand sowie den Kurs und das Datum des Kauf vorgangs bzw die errechneten Mittelwerte f r den Kaufkurs bzw das Kaufdatum Zus tzlich werden die Geb hren des Kaufs festgehalten Bei mehreren K ufen kumulieren sich die Kaufgeb hren Dies gilt auf der Einnahmeseite auch f r die Dividenden die ebenfalls als Eigenschaft im Aktienbestand gespeichert werden Auch wenn der Verkauf des Bestands im jetzigen Test noch nicht implementiert ist wird eine Eigenschaft f r die angefallenen Verlaufsgeb hren ebenso vorgesehen wie ein Flag zur Abfrage ob der Bestand verkauft ist oder nicht Der Konstruktor erh lt die Aktie von dem der Bestand angelegt werden soll die erste Kauforder sowie die Verkaufgeb hren die bei einem Verkauf anfallen w rden Hier erkennen Sie bereits einen ersten Ansatz f r eine Fehlerbehandlung die pr ft ob wirk Das Fallbeispiel der Depotverwaltung lich ein Aktienobjekt bergeben wird Ist dies nicht der Fall so wird eine Exception geworfen und der Bestand nicht angelegt Jede einzelne Klasse muss auf diese Weise mit einer robusten Fehlerbehandlung ausger stet werden indem die Eingangsparameter jeder Methode auf G ltigkeit gepr ft werden Im Anschluss daran folgen die typischen Get und Set Methoden die nicht vollst ndig implementiert wurden Beachten Sie in der Methode addDividende dass die Dividen denzahlungen aufaddiert und nicht berschrieben werden Auch hier wird eine rudi ment re Feh
75. Arrays k nnen Sie auch frei w hlen indem Sie ihn bei der Erzeugung des Arrays angeben beispielsweise kollegen array 10 gt Uli Hanz Kurt Die Indizes lauten dann 10 11 und 12 Ebenso sind im Gegensatz zu anderen Programmiersprachen auch negative Indizes m glich Dann muss der Index jedoch bei jedem Element angegeben werden da ansons ten eine neue Indizierung bei 0 beginnt also kollegen array 3 gt Uli 4 gt Hans 5 gt Kurt Bei kollegen array 3 gt Uli Hans Kurt ergibt echo var_dump kollegen die Ausgabe array 3 3 gt string 5 Frank 0 gt string 4 Kurt 1 gt string 4 Hans Hier erkennen Sie bereits dass die Indizierung nicht fortlaufend sein muss Sie k nnen f r den Index beliebige Werte w hlen Bezeichner statt Indizes Assoziative Felder Die Indizierung muss nicht einmal aus numerischen Werten bestehen sondern lediglich aus eindeutigen Bezeichnern Das ist in Listing 2 14 dargestellt Man spricht hier von einem assoziativen Feld oder einem Hash Feld Statt var_dump wird in diesem Beispiel die Konkatenation der Zeichenketten mit dem Punktoperator durchgef hrt Au erdem werden die etwas performanteren einzelnen Anf hrungszeichen bei allen Zeichenket ten verwendet PHP Endlich objektorientiert 29 2 Die Sprache PHP Prozedural lt html gt lt body gt lt php personen array Eiche Eranker Vater gt Ku
76. Betriebssysteme 08 00 10 00 p2 new Praktikum PHP f r Anf nger 10 00 12 00 p3 new Praktikum Netzwerke 14 00 15 00 echo anmelden Dopatka gt Betriebssysteme lt br gt 2 echo var_dump s1l gt anmelden pl lt br gt 2 echo anmelden PHP Dopatka lt br gt 2 echo var_dump p2 gt anmelden s1 lt br gt 2 echo anmelden Grube gt PHP lt br gt echo var_dump pl gt anmelden s2 lt br2 echo anmelden Netzwerke gt Grube lt br gt echo var_dump s2 gt anmelden p3 lt br gt 2 echo lt br gt lt b gt Dopatka lt b gt lt br gt 2 datal s1 gt getPraktika foreach datal as index gt wert Listing 4 38 Test der Klassen Student und Praktikum Realisierung von Klassengeflechten echo amp nbsp amp nbsp amp nbsp wert gt getName echo lt br gt lt b gt Grube lt b gt lt br gt data2 s2 getPraktika foreach data2 as index gt wert echo amp nbsp amp nbsp amp nbsp wert gt getName echo lt br lt br lt b Betriebssysteme lt b gt lt br gt 2 data3 p1 gt getStudenten foreach data3 as index gt wert echo amp nbsp amp nbsp amp nbsp wert gt getName echo lt br gt lt b PHP lt b gt lt br gt 2 data4 p2 getStudenten foreach data4 as index gt wert echo amp nbsp amp nbsp amp nbsp wert gt getName echo lt br gt lt b gt Netzwerke lt b lt br gt
77. DE stattfinden Die Klasse beh lt also die Hoheit dar ber wie ihre internen Eigenschaften gesetzt werden Dies entspricht der objektorientierten Denk weise Ein Anwender der Klasse merkt nicht einmal dass die L nderk rzel innerhalb der Klasse in einem assoziativen Feld verwaltet werden lt php require_once classloader inc php x new Laender x Deutschland DE landi x Deutschland x gt Frankreich FR land2 x Frankreich lt html lt body gt lt php echo landl gt lt br gt lt php echo land2 gt lt br gt lt body gt lt html gt Listing 4 11 Anwendung der L nderklasse In der gleichen Weise wird durch den Befehl land1 x gt Deutschland in Wirklichkeit die __get Methode aufgerufen die auf das assoziative Feld zugreift und den neuen im Objekt hinterlegten L ndercode f r Deutschland ausliest Interessant ist auch der Aufruf x gt Frankreich FR denn die Eigenschaft Frankreich existiert noch nicht einmal im internen Datenfeld laender der Klasse Mit der __set Methode sind Sie also in der Lage eine Klasse zur Laufzeit nach au en hin dynamisch um neue Eigenschaften zu erweitern In Wirklichkeit wird dem assoziativen Feld ledig lich ein neuer Eintrag hinzugef gt Bei einer Serialisierung des Objekts wird das Feld mit serialisiert und die neue Eigenschaft gespeichert Das Feld kann nat rlich auch bei einer Speicherung in einer Datenbank mit seinem gesamten Inhalt persistent a
78. Dabei wurden Ans tze des MVC Paradigmas ver wendet Das im dritten Kapitel vorgestellte Paradigma wurde in den ersten Prototypen noch nicht vollst ndig und konsequent umgesetzt da die schnelle Erzeugung eines Pro totypen im Vordergrund stand Die eingegebenen Daten k nnen bislang in der PHP Session vorgehalten werden deren G ltigkeit nat rlich zeitlich begrenzt ist Daher soll im n chsten Schritt eine Datenbank Anbindung realisiert werden um die Dreischichtenarchitektur Kap 3 1 3 zu vervoll st ndigen Ziel ist es also die aktuellen Zust nde der Aktienbest nde in der Datenbank festzuhal ten und von dort wieder auslesen zu k nnen Dabei m ssen alle Daten ber cksichtigt werden die zur Erstellung der Bilanz notwendig sind Aus diesen Daten wurde eine MySQL Datenbank mit Namen boerse angelegt die eine Tabelle aktien enth lt Abbildung 5 32 zeigt die Struktur der Tabelle Das Fallbeispiel der Depotverwaltung localhost localhost boerse aktien phpMyAdmin 3 2 0 1 Windows Internet Explorer JE OO la localhost x 3 pr Datei Bearbeiten Ansicht Favoriten Extras vr Favoriten 4 localhost localhost boerse aktien phpMyAdmin 3 phpMyAdmin g Server localhost gt Datenbank boerse gt Tabelle aktien Anzeigen amp Struktur SAL Suche Einf
79. Das Ver waltungssystem verwaltet Seminare mit deren Terminen Die Abbildung zeigt zwei kon krete Termine wobei es bei einem Termin bereits zwei Anmeldungen von Kunden gibt Das Anmeldungsobjekt verbindet also die Kunden mit einem Seminartermin Zus tzlich werden jedem Termin ein Raum und ein Dozent zugeordnet SemVerw Seminarverwaltung PHP Seminar UML Seminar TerminimJuli Termin Start 20 07 2009 Grube Kunde Ende 24 07 2009 Name Grube Tni Vorname Clair UNERA Firma Raub Bank AnzahlPl tze 12 EN Ausstattung PCs mit MS Windows XP TerminImApril Termin Start 20 04 2009 Ende 24 04 2009 Anmeldung14 Anmeldung Datum 13 02 2009 Eingegangen bei Nicole Medium e Mail Streber Kunde Dopatka Dozent Anmeldung93 Anmeldung Name Streber Name Dopatka Datum 17 02 2009 Vorname Ulf Vorname Frank Eingegangen bei Ulla Firma IO Consult Tagessatz Medium Fax Ort M nchen Abbildung 3 62 Objektdiagramm der Seminarverwaltung Im n chsten Schritt wird nun aus diesem Objektdiagramm das Klassendiagramm der Analysephase abgeleitet Die Namen der Klassen kann man bereits aus dem Objektdia gramm entnehmen Sie lauten m Seminarverwaltung Em Seminar Termin E Raum 190 entwickler press Objektorientierte Programmierung m Dozent Anmeldung m Kunde Die erste Version des Diagramms ist in Abbildung 3 63 dargestellt und benennt erst
80. Daten der Order ansehen Dies sind alles Methoden der Klasse Order Um festzustellen welche Methoden alle existieren und wie sie intern ablaufen ben ti gen Sie die entsprechende Kenntnis aus der Fachdom ne Die ben tigte Funktionalit t erfahren Sie am besten von den zuk nftigen Anwendern des Systems Wenn Sie in der Rolle des Systemanalytikers sind m ssen Sie sich also eine gewisse Kenntnis ber die Fachdom ne aneignen ffentlich privat und etwas dazwischen Sichtbarkeiten Eine Neuerung in der Objektorientierung gegen ber der prozeduralen Programmierung liegt in der strengen Datenkapselung So soll auch ein anderer Entwickler nie direkt von au en auf eine Eigenschaft eines Objekts zugreifen k nnen Der Zugriff soll ausschlie lich ber einen Methodenaufruf erfolgen Derjenige der ein Objekt verwaltet muss also eine Botschaft bzw eine Nachricht an das Objekt schicken mit der Bitte eine Eigenschaft neu zu belegen Ob und wie das Objekt dieser Bitte nachkommt ist einzig und allein Angelegenheit des Objekts selbst Die Hoheit zur nderung des inneren Zustands liegt also beim Objekt Objektorientierte Programmierung Attribut2 Wert2 Attribut3 Wert3 Abbildung 3 16 Zugriff auf eine Eigenschaft Attribut ber Methodenaufrufe Um eine Eigenschaft zu schreiben muss man eine so genannte Set Methode aufrufen Der Quelltext der Set Methode entscheidet dann ob und wie die Eigenschaft ge ndert wird Um eine Eigenscha
81. Dazu sind mehrere Formulare z B ber HTTP POST Schaltfl chen miteinander verkn pft Die Daten selbst werden jedoch noch nicht von einer Fachlogik analysiert aufbereitet und abgelegt Ziel eines solchen Prototyps der in Abbildung 3 8 skizziert wird ist die Pr sentation f r die Auftraggeber und die zuk nftigen Anwender Der Prototyp wird als Diskussionsgrund lage f r das Design und den Ablauf der Gesch ftsprozessmodellierung im System gese hen Ein fr hes Bekanntmachen der neuen Anwendung erh ht ebenso die Akzeptanz bei den Benutzern Dies gilt insbesondere dann wenn die Benutzer durch eigene Vorschl ge aktiv an dem Gestaltungsprozess teilhaben k nnen Dieses Prototyping wurde erstmals im Spiralmodell der Softwareentwicklung spezifiziert Prozedurale und modulare Programmierung HTM HTML3 4 S u gt HTML2 Kunde Dienst X _nesen suchen getKunde Zugriff X Datenzugriff getBest K U EEE Datenhaltung Best Abbildung 3 8 Ein horizontaler Prototyp Eine ganz andere Zielsetzung hat ein horizontaler Prototyp Sie wollen unter anderem ein Eingabeformular erstellen bei dem Sie einen Neukunden erfassen Dies ist nur einer von vielen Diensten die Sie im Rahmen Ihres Projekts realisieren sollen Sie haben aber bislang noch nie mit PHP gearbeitet Au erdem kennen Sie prinzipiell den Zugriff auf eine MySQOL Datenbank haben einen solchen Zugriff aber noch nie realisiert Die Idee einen einzelnen Dienst
82. Der vorgestellte Kombi und der Bus sind beide PKWs Ein PKW ist ein Fahrzeug Da in einem Autohaus Fahrzeuge verkauft werden werden die beiden PKWs als Artikel gehand habt die man kaufen kann Bei dem Bus i2000 wurde erw hnt dass der Antrieb und die Ausstattung von Bedeutung beim Verkaufsvorgang sind Da es verschiedene Antriebe und Ausstattungsmerkmale gibt k nnen auch diese zu Klassen zusammengefasst werden Das B ro von Herrn Meier ist ein Raum Zus tzlich existieren u a noch der Verkaufs raum und das B ro vom Chef Dass die Anwendung sp ter auch R ume verwalten soll ist eher unwahrscheinlich Auch das Vertragsobjekt kann ebenso wie das durchgef hrte Verkaufsgespr ch jeweils als Klasse hinterlegt und damit von der Anwendung verwaltet werden Das Verkaufsge spr ch kann man als spezielles Gespr chsprotokoll sehen Ein anderes Gespr chsproto koll w re beispielsweise das Protokoll bei einem Meeting zwischen dem Chef und seinen Angestellten Es kann sogar Sinn machen das Kaufinteresse aller Kunden zu klassifizie ren um damit Prognosen f r Trends und Statistiken im System durchzuf hren Ein zweites Beispiel diesmal aus der Architektur soll den Unterschied zwischen einer Klasse und konkreten Objekten verdeutlichen Bevor Sie bauen also konkrete Objekte erstellen m ssen Sie zun chst einen Bauplan bei einem Architekten erstellen Dieser Bauplan f r ein Haus entspricht einer Klasse in der Softwareentwicklung Anhand di
83. Dividenden erh hen getBilanz aktuelle Bilanz ausgeben Abbildung 5 12 Zustandsdiagramm des Aktienbestands 5 1 3 Das objektorientierte Design In der Designphase spielen fertig ausgearbeitete Klassendiagramme eine zentrale Rolle Da PHP jedoch eine untypisierte Sprache ist bei der die Datentypen von Eigenschaften nicht im Vorfeld definiert werden m ssen und der Datentyp einer Eigenschaft sich sogar ndern kann werden die Datentypen nicht zwingend angegeben Ausgangsbasis f r die Weiterentwicklung des Klassendiagramms ist das Klassendia gramm der Analysephase aus Abbildung 5 11 Dort ist bereits schriftlich angegeben dass ein Aktienbestand aus Aktien besteht Dies entspricht einer Aggregation der UML Da eine Aktie unter Umst nden zu mehreren Best nden geh ren kann und auch existiert ohne einem Aktienbestand zugeordnet zu sein wird von einer Komposition abgesehen Au erdem wurde in der Analyse bereits definiert dass ein Bestand stets aus genau einem Aktientyp besteht Zu einem Aktienbestand kann man auf Wunsch eine Bilanz erstellen lassen Jede Bilanz kennt genau einen Aktienbestand Das Fallbeispiel der Depotverwaltung Eine Aktie kann ber eine Order gekauft oder verkauft werden Die Order bezieht sich ebenso auf genau einen Aktientyp Jede Order hat eine Anzahl ein Datum einen Einzel preis sowie eine Geb hr Entweder ist eine Order eine Kauforder oder eine Verkauforder Die Ist ein Beziehung wird
84. Dokumen PHP und XML tation zur Verf gung gestellt um anderen Anwendungen die nat rlich auch in einer anderen Programmiersprache verfasst sein k nnen eine Anleitung f r einen erfolgrei chen Import Vorgang zu liefern Grundlagen des Parsens Str me vs B ume Grunds tzlich existieren zwei verschiedene Verfahren um XML Dateien zu verarbeiten also zu parsen Die erste Art besteht darin eine XML Datei als Datenstrom aufzufassen Diese Idee wird von SAX Parsern Simple API for XML verfolgt BeiSAX handelt es sich um einen De facto Standard der sich an den Elementen der XML Datei orientiert Die Datei wird dabei automatisch eingelesen Trifft der SAX Parser auf ein Beginn oder ein Ende Element so wird jeweils eine bestimmte Methode aufgerufen die Sie imple mentieren m ssen Dies gilt ebenso wenn Daten zwischen einem Element erkannt wur den wie in lt name gt Dopatka lt name gt In Abh ngigkeit von dem Zustand des Einlesens den Sie selbst definieren und verwalten m ssen sind die Daten der Elemente dann aus zuwerten Abbildung 4 15 skizziert wie der Beginn des Eintrags lt vorkenntnisse gt vom SAX Parser erkannt wird und eine Weiterleitung an die selbst zu implementierende PHP Methode start erfolgt SAX lt dozent gt Dr Frank Dopatka lt dozent gt Parser lt teilnehmerliste gt lt teilnehmer id 23 geschlecht m gt lt name gt UIf Schmidt lt name gt lt vorkenntnisse gt Datenstrom Abb
85. Eine Rechnung hat eine Beziehung zu genau einem Kunden Ein Kunde soll seinerseits alle seine Rechnungen kennen Eine Rechnung besteht aus Rechnungspositionen mindestens aus einer Position Eine Rechnungsposition ohne eine Rechnung macht keinen Sinn Au erdem geh rt eine Rechnungspositionen zu genau einer Rechnung Hier ist also eine Komposition zu reali sieren Kap 3 2 2 Eine Rechnungsposition braucht jedoch nicht die Rechnung zu ken nen zu der sie geh rt Die Positionen werden von der zugeh rigen Rechnung zentral verwaltet Daher kann die Klasse Rechnungspositionen aus Listing 4 33 unver ndert ber nommen werden Die Kundenklasse ist um eine Liste der Rechnungen zu erweitern und zus tzlich ist die Rechnungsklasse zu erstellen Abbildung 4 10 zeigt das zugeh rige Klassendiagramm Im ersten Schritt wird die Kundenklasse dahingehend erweitert dass jeder Kunde eine Liste seiner Rechnungen verwalten kann Wie schon bei den Studenten und Praktika kommt hier ein Datenfeld zum Einsatz das hier rechnungen genannt wird Zus tzlich existiert eine Z hlvariable der Rechnungen als interne Eigenschaft der Klasse die anzRechnungen genannt wird Realisierung von Klassengeflechten Rechnungsposition ID Datum Gesamtsumme Rabatt bezahlt Person Abbildung 4 10 Klassendiagramm mit zu realisierender Komposition Eine zus tzliche Get Methode gibt das Datenfeld der Rechnungen des betreffenden Kun den zur
86. Fenster t Fenster Rezept Zeile t Zeile LagerArznei A Apotheker ref A 5 bearbeiten bearbeiten nachbestellen iberpr fen wahr ntfernen nachbestellen wahr new c NachbestellArznei E WERT N roA H so ss pas Abbildung 3 80 Abarbeitung eines Onlinerezepts Bei dem Durchgehen der einzelnen Rezeptzeilen handelt es sich offensichtlich um eine Schleife Deren Beginn wird in einem Sequenzdiagramm durch einen Stern dargestellt Der Schleifenrumpf wird durch das gestrichelte Viereck dargestellt Sie k nnen sich vorstellen dass auch die Darstellung von verschachtelten Schleifen in Sequenzdiagrammen nicht sehr bersichtlich ist F r Verzweigungen und Schleifen sind Aktivit tsdiagramme auf Fisch und Muschelebene besser geeignet als Sequenzdia gramme Diese wiederum haben ihre St rke in der Darstellung der Objektinteraktion Eine weitere neue Notation der Abbildung 3 80 finden Sie in dem Objekt der Lagerarznei unter anderem bei dem Methodenaufruf nachbestellen Objektorientierte Programmierung Ein Objekt kann durchaus eine eigene Methode selbst aufrufen Dieser Selbstaufruf wird innerhalb des Aktivierungsbalkens gezeichnet und bergibt den Kontrollfluss an die aufgerufene Methode Diese Methode kann ihrerseits wiederum Methoden auf das eigene oder auf andere Objekte aufrufen Das letzte Beispiel der Sequenzdiagramme besch
87. Formel g Anz2 Anz1 Anz2 Zwischen D1 und D2 sind 59 Tage vergangen Diese Anzahl der vergangenen Tage zwi schen zwei Datumswerten k nnen Sie brigens mit der PHP Funktion strtotime ermit teln die als Parameter ein Datum als Zeichenkette erh lt und einen UNIX Zeitstempel zur ckliefert ber die Formel anzTage strtotime D2 strtotime D1 86400 k nnen Sie dann die Anzahl der vergangenen Tage ermitteln Um eine Anzahl an Tagen zum Datum D1 zu addieren k nnen Sie bei der Implementierung die PHP Funktion date_add verwenden Diese ben tigt ein Datumsobjekt als Eingabe sodass Sie D1 zun chst in ein Datumsobjekt umwandeln m ssen Als zweiten Parameter erwartet die Funktion eine speziell formatierte Zeichenkette die die Anzahl der zu addierenden Tage enth lt Die Berechnung zur Ermittlung des neuen Datums Dx lautet also Dx date_add new Date Time D1 new Datelnterval P round g anzTage 0 D Die entsprechende Berechnung f r die Kurse gestaltet sich etwas einfacher da Sie dortja direkt mit Zahlenwerten arbeiten Der gewichtete Mittelwert f r den Kurs einer einzel nen Aktie Kx lautet Kx K1 K1 g Selbstverst ndlich geh rt noch kein PHP Code in die fr he Phase der objektorientierten Analyse Sie k nnen stattdessen auch eine mathematische Schreibweise zur Definition der Formeln verwenden PHP Endlich objektorientiert 339 5 Projektpraxis Sinnvoll sind in dieser Phase allerdings das
88. Formular aus Listing 5 22 eingegeben werden Die Daten werden wie blich in Textfeldern erfasst die zusammen mit ihrer Beschreibung in einer HTML Tabelle angeordnet werden Dabei handelt es sich um m den Kurswert der Aktie beim Verkauf das Verkaufsdatum m die angefallenen Geb hren beim Verkauf lt php require_once header inc php gt lt form action verkaufen2 php method post gt lt table border 0 width 100 gt lt tr gt lt td align right width 50 gt Kurs beim Verkauf Listing 5 22 verkaufen php View Das Fallbeispiel der Depotverwaltung lt td gt lt td align left width 50 gt lt input type text name verkaufkurs size 10 value 23 50 gt lt td gt lt tr gt lt tr gt lt td align right width 50 gt Verkauf Datum lt td gt lt td align left width 50 gt lt input type text name verkaufdatum size 10 value 28 08 2009 gt lt td gt lt tr gt lt tr gt lt td align right width 50 gt Verkauf Geb hren lt td gt lt td align left width 50 gt lt input type text name verkaufgeb hr size 10 value 9 9 gt lt td gt lt tr gt lt tr gt lt td align right width 50 gt lt input type submit name eingabe value Verkaufen gt lt td gt lt td align left width 50 gt lt input type submit name eingabe value Abbrechen gt lt td gt lt tr gt lt table gt lt form gt lt php require_once footer inc php
89. Hinweis Eine gute bung besteht darin diesem PHP Skript ein HTML Formular vorzuschal ten damit alle Parameter vom Anwender eingegeben werden k nnen Beachten Sie bitte dass die maximale Ausf hrungszeit eines Skripts oft ber den Web server eingeschr nkt wird In der Konfigurationsdatei php ini ist in der aktuellen XAMPP Version ber den Parameter max_execution_time 60 die Ausf hrungszeit eines PHP Skripts auf 60 Sekunden beschr nkt Wenn Sie gro e Dateien hochladen und die Uploadgeschwindigkeit nicht sonderlich hoch ist wie es bei DSL blich ist kann das Skript durchaus l nger als 60 Sekunden ausgef hrt werden Ist das der Fall wird die Ausf hrung durch den PHP Interpreter unmittelbar beendet Die Verbindung wird dann auch nicht wieder korrekt geschlossen In Tabelle 2 25 werden die wichtigsten PHP Befehle des FTP Protokolls aufgelistet und kurz beschrieben Funktion Bedeutung fh ftp_connect server verbindet sich mit dem angegebenen Server und gibt eine Referenz auf die Verbindung zur ck erg ftp_login fh user pass loggt einen Benutzer mit seinem Kennwort auf einer existierenden Verbindung ein das Ergebnis ist ein Wahrheitswert ber den Erfolg der Anmeldung erg ftp_put fh ziel quelle art l dt die in Sqwe eangegebene Datei zum FTP Server in zie hoch die Art des Transfers erfolgt als Text 7P_ASC N oder bin r F72 BINARY der Erfolg des Transfers wird als Wahrheitswert zur ckge geben
90. ID wird als Einschr nkung in der WHERE Klauses beim Zugriff auf eine andere Datenbanktabelle verwendet da Sie ja nur den Mittelwert einer Aktiengesellschaft mit dieser angegebenen ID berechnet haben wollen Grundlegende Funktionen wie eine Addition oder eine Mittelwertberechnung kann der Datenbankser ver selbst durchf hren MySQL bietet hier die Funktion avg value an die den Mittelwert direkt als Ergebnis ausgibt In allen F llen befindet sich das Ergebnis der SOL Abfrage in einer lokalen Variablen namens data Das Ergebnis einer SQL Abfrage wird als Resultset bezeichnet Nun m s sen Sie dieses Ergebnis auswerten Dazu bietet PHP einige Befehle an Mit mysgl_fetch_array wird eine Zeile nach der anderen als Datenfeld zur ckgegeben Mit der Angabe von MYSQL_ASSOC wird ein assoziatives Feld erzeugt Aus der Daten banktabelle ag mit ID 5 und name BMW ergeben sich die Feldelemente datensatz ID 5 und datensatzIname BMW Dieses Datenfeld kann dann von der Fachlogik weiter verarbeitet werden Auch mit dem Befehl mysql_fetch_row holen Sie eine Zeile aus der Ergebnistabelle Bei der Mittelwertberechnung ist lediglich ein einziger Wert in der Ergebnistabelle Die Zeile wird ber mysql_fetch_row ermittelt und liefert ein numerisches Datenfeld mit einem ein PHP Endlich objektorientiert 91 2 Die Sprache PHP Prozedural zigen Element Dieses Element wird abschlie end ber return datensatz 0 zur ckgege ben Ein weiterer
91. In diesem Fall k nnen Sie stattdessen auch die noch kompaktere Darstellung der switch Anweisung verwenden die im n chsten Unterkapitel vorgestellt wird ber logische Operatoren lassen sich mehrere Variablen zu komplexen Ausdr cken ver binden und als Bedingung f r die elseif Bl cke verwenden Im Beispiel des Listings 2 29 40 entwickler press Grundlegende Syntax wird eine ungew hnliche Urlaubsregelung implementiert Dabei bekommen Frauen stets etwas mehr Urlaub als M nner Zus tzlich gibt es eine Staffelung in drei Altersklassen lt php alter 23 istWeiblich TRUE ifl alter lt 20 amp amp istWeiblich urlaubstage 26 j nger als 20 und Frau 4 gt Iseif alter lt 20 amp amp istWeiblich urlaubstage 25 j nger als 20 und Mann 4 gt lseif alter gt 20 8 amp alter lt 40 amp amp l istWeiblich urlaubstage 28 20 incl bis 40 excl und Frau oD lseif alter gt 20 amp amp alter lt 49 amp amp l istWeiblich urlaubstage 26 20 incl bis 40 excl und Mann oD lseif alter gt 40 amp amp istWeiblich f urlaubstage 32 40 oder lter und Frau lse urlaubstage 29 40 oder lter und Mann lt html gt lt body gt lt php echo urlaubstage gt lt body gt lt html gt Listing 2 29 Eine Urlaubsregelung mit elseif oD Profitipp Denken Sie bei Bedingungen immer an alle m glichen F lle Wenn Sie in einer if Bedin
92. Katzen Nun erzeugen Sie ein Datenfeld mit 3 Elementen vom Datentyp Tier Das Feld ist in der Abbildung 3 18 als drei K fige dargestellt in die beliebig gro e Tiere hineinpassen Im Anschluss daran erzeugen Sie zwei Hundobjekte sowie ein Katzenobjekt und weisen diese dem Datenfeld zu Dies ist m glich da sowohl Hunde als auch Katzen Tiere sind und diese ja in das Datenfeld passen Wenn Sie jetzt an jedem K fig r tteln welchen Laut w rden Sie h ren Aus technischer Sicht k nnten Sie sagen In jedem Element des Feldes ist ein Tier also h rt man das gibLaut der Klasse Tier Dies ist jedoch wie auch in der Wirklichkeit falsch Das Daten feld ist lediglich ein Speicherbereich in dem man ein beliebiges Tier unterbringen kann also eine Reihe von K figen In jedem K fig befindet sich ein spezielles Tier entweder eine Katze oder ein Hund Sobald Sie an dem K fig r tteln h ren Sie den Laut des Tieres das sich gerade in dem K fig befindet Genauso ist es auch in der Wirklichkeit Ein zweites Beispiel Sei Form eine Basisklasse und habe die Methode zeichnen Wenn Kreis und Linie beide von Form abgeleitet sind m ssen sie sinnvollerweise die zeichnen Methode von Form berschreiben Denn jedes Objekt wei selbst wie es gezeichnet wer den kann Eine andere Klasse kann nun mit einem Datenfeld von Formen arbeiten und auf jedem Formobjekt die zeichnen Methode aufrufen Der in PHP integrierte Poly morphiemechanismus bewirkt dass imme
93. Kern dieses Buches darstellen 3 1 1 Typische Projektstruktur Die in Kapitel 3 1 2 vorgestellten Modelle eignen sich insbesondere f r kleine Projekte bei denen Sie nahezu der alleinige Entwickler sind In der Softwaretechnik werden Pro jekte als klein eingestuft wenn sie in ca 2 Personenjahren erledigt werden k nnen W hrend das Wasserfallmodell ausschlie lich f r diese Art von Projekten einzusetzen ist eignen sich die im Folgenden vorgestellten Vorgehensweisen nach dem Spiral und dem V Modell auch bereits f r mittelgro e Projekte Typische kleine PHP Projekte erzeugen bis zu 10 000 Zeilen Quellcode und bestehen nor malerweise aus folgenden Aufgaben m Erstellung einer Pr sentation f r ein kleines oder mittelst ndisches Unternehmen bei dem der Inhalt von einzelnen Seiten aus einer Datenbank gespeist wird m Erstellung eines kleinen B2B B2C oder B2E Portals Business to Business Business to Consumer oder Business to Employee mit Login Eine typische B2B Anwendung ist beispielsweise ein Datentransfer von einer Artikel Datenbank in eine andere Artikeldatenbank mittels PHP wobei beide Datenbanken eine verschiedene Struktur aufweisen Eine typische B2C Anwendung ist es wenn ein kleiner Laden seine Artikel auch im Internet anbieten m chte Bestellungen sollen informell m glich sein indem ein Kunde sich registriert und seine E Mail Adresse angibt Zur weiteren Bearbeitung der Bestel lung wird dann eine E Mail
94. Klasse Datenquelle einen exklusiven Zugriff auf einen Datenbestand Alle Objekte die sich f r die Daten interessieren m ssen sich bei dem Datenquellenobjekt anmelden Diese werden Beobachter genannt Somit besitzt das Datenquellenobjekt eine Liste aller Beobachter die sich f r den Datenbestand inter essieren Das Datenquellenobjekt benachrichtigt dann bei einer nderung alle Beobach ter die daraufhin ihren Zustand aktualisieren Die notwendigen Methodenaufrufe bei einer solchen Aktualisierung sind in dem Sequenz Diagramm der Abbildung 5 46 dargestellt ber die Methode update informiert das Datenquellenobjekt nacheinander alle Beobachter Die Beobachter fordern dann mit der Methode getState nur die Daten von dem Datenquellenobjekt an die sie interessieren PHP Endlich objektorientiert 407 5 Projektpraxis Datenquelle Beobachter Beobachter2 Abbildung 5 46 Das Design Pattern Kompositum als Sequenzdiagramm 5 2 3 Wie man es nicht machen sollte Anti Pattern Als Gegenbewegung zu den Design Patterns wurden in den letzten Jahren auch typische schlechte L sungsans tze festgehalten die mit der Entwicklung und Einf hrung einer gro en objektorientierten Anwendung h ufig vorzufinden sind Diese schlechten L sungsans tze bezeichnet man als Anti Pattern Die Kenntnis von typischen Anti Pattern tr gt dazu bei wiederkehrende Fehler bei der Softwareentwicklung zu identifizieren zu dokumentieren und Ma nah
95. Klassen f r die Autohausverwaltung Wie Sie sehen muss nicht jede Eigenschaft ein elementarer Wert wie eine Zahl oder eine Zeichenkette sein Sie kann auch ein Verweis auf ein anderes Objekt darstellen Der Inha ber eines Autohauses ist beispielsweise eine Person Sie k nnen die Erstellung der Klassen mit ihren Eigenschaften gut vergleichen mit der ER Modellierung einer Datenbank Dort existiert eine Tabelle Kunde mit den Feldern Name Vorname Strasse PLZ Ort usw Die Spezifikation der Tabelle in der Datenbank mit dem SQL Befehl CREATE TABLE Kunde ist vergleichbar mit der Beschreibung der Klasse mit ihren Eigenschaften Name Vorname Strasse PLZ Ort usw Ein konkreter Kunde mit dem Namen M ller dem Vornamen Uli usw stellt genau einen Datensatz in der Datenbankta belle dar Diese Daten sind konkrete Wertauspr gungen der Eigenschaften W hrend die Eigenschaften nur die Daten eines Objekts beschreiben legen die Metho den dessen F higkeiten fest Eine Methode kann in der Objektorientierung auch als Ope ration bezeichnet werden In der prozeduralen Programmierung wurde eine Methode als Funktion Prozedur oder Unterprogrammaufruf bezeichnet Um eine Methode mit Funktionalit t zu f llen verwenden Sie bereits bekannte Programmier Techniken wie Objektorientierte Programmierung sequentielle Anweisungen Verzweigungen und oder Schleifen Au erdem k nnen in Methoden andere Objekte erstellt angesprochen und verwaltet werden
96. Klassen mit deren Eigenschaf ten und Methoden nach Gef hl des Analytikers ermittelt In der Praxis ist dies tats ch lich die g ngige Vorgehensweise Es gibt jedoch einige Heuristiken die Ihnen bei der Modellierung behilflich sein k nnen Die Verb Substantiv Methode Die Verb Substantiv Methode dient zur Bestimmung von Klassen Eigenschaften und Methoden aus einer textuellen Problembeschreibung beispielsweise aus Anforderungs beschreibungen Die Methode kann aber wenn Sie als Analytiker darauf trainiert sind auch in Kundengespr chen zum Einsatz kommen Aus dem folgenden bereits zusam mengefassten Beispiel sollen die notwendigen Hauptklassen Eigenschaften und Metho den extrahiert werden Beispiel Es soll eine PHP Anwendung zur Verwaltung von Studenten und bungen erstellt werden Eine bung besteht aus maximal 10 bungsgruppen zu denen der Raum und die Uhrzeit gespeichert ist Jeder Raum hat eine Raumnummer und eine bestimmte Anzahl von Pl tzen F r jeden Studenten wird Name Matrikelnummer und E Mail Adresse erfasst Ein Student kann f r eine der Gruppen angemeldet sein In einer Gruppe ist die Zahl der angemeldeten Studenten nur durch die Zahl der Pl tze limitiert PHP Endlich objektorientiert 151 3 Vorgehensweise bei der Softwareentwicklung Jedes Substantiv ist prinzipiell ein Klassenkandidat oder ein Attributkandidat Ein Sub stantiv mit einem einfachen Wert wie eine einzelne Zahl oder Zeichenk
97. Mannjahren erfolgreich war ist eine Vorgehensweise nach dem Spiral oder V Modell bereits bei gr eren Projekten erfolgversprechend Die Vorteile eines objektorientieren Ansatzes kommen insbesondere bei sehr gro en Pro jekten ab 200 Personenjahren zur Geltung die nicht mehr von einer einzelnen Person verwaltet geschweige denn realisiert werden k nnen Bei solchen Projekten werden oft einige Millionen Zeilen an Quellcode produziert Bei dieser Projektgr e kommt auch nicht mehr ein einzelner Entwickler zum Einsatz sondern ein ganzes Team von Entwick lern Ihr Arbeitgeber kann sich den Ausfall des Stammentwicklers durch Krankheit oder Verlassen des Unternehmens nicht leisten Au erdem w rde die Implementierung viel zu viel Zeit ben tigen sodass sich die Anforderungen unter Umst nden schneller ndern als sie implementiert werden k nnen Das Entwicklerteam ben tigt wiederum ein eigenes Management zur Planung der Kapazit ten und Aufgaben wobei das Management nicht zwangsl ufig denselben Hintergrund wie die Entwickler besitzt da es meist aus einer anderen fachlichen Dom ne stammt Bei einem Projekt dieser Gr enordnung muss eine projektbezogene Kommunikation der in Abbildung 3 10 dargestellten Stakeholder erfolgreich m glich sein Neben techni schen Problemen werden die verschiedenen Fachbereiche der Beteiligten zu einem gr feren Problem dem man mit sozialkommunikativen F higkeiten so genannten Soft Skills und einer
98. Modell Sequenzdiagramme Bereits bei den Aktivit tsdiagrammen k nnen fachliche und technische Abl ufe von der Wolken bis zur Muschelebene dargestellt werden wobei Workflows in den Szenarien oder auch Quellcodefl sse abgebildet werden k nnen Objekte agieren durch Methodenaufrufe miteinander In der objektorientierten Analyse in der Aktivit tsdiagramme typischerweise zum Einsatz kommen sind diese Objekte noch nicht bekannt Die Analyse dient schlie lich dazu Objekte und Klassen zu ermit teln Sequenzdiagramme stellen eine zus tzliche Sichtweise dar um den zeitlichen Verlauf von Interaktionen der Objekte festzuhalten Zus tzlich kann dargestellt werden wann Objekte erzeugt bzw zerst rt werden und wann sie aktiv sind also Methoden abarbeiten und Methoden von anderen Objekten aufrufen Der Ausl ser eines Methodenaufrufs ist dabei ein Akteur der in einem Anwendungsfalldiagramm identifiziert wurde An dieser Stelle ist die Vernetzung und berdeckung der einzelnen Diagrammarten gut zu erken nen Ein Sequenzdiagramm dient demnach zur Darstellung genau eines Szenarios das in der Analyse spezifiziert wurde Objektorientierte Programmierung Hinweis Es ist nochmals darauf hinzuweisen dass die Phasen der fachlichen Analyse des technischen Designs und der Implementierung nicht als einmalig aufeinanderfol gende Schritte sondern als iterativ inkrementeller Prozess zu sehen sind Da Klassen lediglich Baupl ne f r Objekte
99. Operator wird genau dann ausgef hrt wenn die Bedingung erf llt ist der Wahrheitswert also TRUE ist Ist das Alter also kleiner als 50 Jahre so wird die Zuwei sung ausgabe jung ausgef hrt Wenn die Bedingung nicht erf llt ist so wird die Anweisung ausgef hrt die hinter dem Doppelpunkt steht also ausgabe alt Der Dop pelpunkt geh rt also zu dem Fragezeichenoperator und trennt das then von dem else Meinung Programmieranf nger halten den Fragezeichenoperator f r kryptisch und den erzeugten Quellcode f r schlecht lesbar Profis verwenden gerade diesen Operator jedoch gern um kompakten Quellcode zu verfassen berlegen Sie am besten wer in Zukunft Einblick in Ihren Quellcode bekommt Gehen Sie von einem erfahrenen Umfeld von PHP Entwicklern aus k nnen Sie den Operator gern verwenden Die switch Verzweigung Die switch Verzweigung ist nicht so flexibel wie eine elseif Konstruktion bietet aber eine sehr bersichtliche Struktur f r eine Fallunterscheidung einer einzelnen Variable an Mit dem Namen der Variablen beginnt der switch Block in dessen Rahmen die verschiede nen F lle Cases abgearbeitet werden Die Verarbeitung beginnt bei dem ersten zutref fenden case Block und wird bis zum n chsten break Kommando abgearbeitet Die Verar beitung kann dadurch ber mehrere case Bl cke verlaufen Abbildung 2 7 zeigt die Arbeitsweise der switch Verzweigung anhand eines Programmablaufplans 42 entwickler press Grundlege
100. Service ber ihren Uniform Resource Identifier URI eindeutig identifizieren und ihren Dienst aus f hren der mit seinem Ergebnis antwortet Ein besonderes Augenmerk liegt dabei auf der Kommunikation zwischen dem Nutzer des Dienstes und dessen Anbieter Diese Kommunikation erfolgt ber SOAP Simple Object Access Protocol Dabei handelt es sich um ein Netzwerkprotokoll mit dem Daten zwischen unterschiedlichen Systemen ausgetauscht und entfernte Prozeduraufrufe so genannte Remote Procedure Calls RPC durchgef hrt werden k nnen Dabei m ssen die verschiedenen Systeme nicht in derselben Programmiersprache implementiert sein So kann ein in PHP geschriebener Web Service prinzipiell von einer Java Anwendung genutzt werden und umgekehrt Listing 4 77 zeigt einen ersten in PHP implementierten Web Service Dabei soll die einfa che Funktion addiere im Intranet bereitgestellt werden die zwei Eingabeparameter erh lt und einen Wert als Ergebnis zur ckgibt Dazu wird zun chst ein neuer SOAP Server instantiiert der als Parameter die URI erh lt unter der der Server zu finden ist Im zweiten Schritt wird die zu ver ffentliche Funktion dem Server hinzugef gt Abschlie end wird eine eingehende Dienstanfrage ber die Methode server gt handle des Serverobjekts verarbeitet und die Antwort auto matisch an den Aufrufer des Dienstes zur ckgesendet Ein Web Service in PHP lt php function addiere s1 s2 return s1 s2 serve
101. UML sind die Diskriminato ren mit denen Sie spezifizieren wie Sie eine Vererbung durchf hren Abbildung 3 58 zeigt dass Sie Angestellte spezialisieren k nnen nach Vollzeit und Teilzeitkr ften Andererseits k nnen Sie in Ihrer Anwendung auch eine Unterscheidung anhand der T tigkeiten der Angestellten vornehmen Beide Ideen sind sicherlich korrekt Welche Art der Vererbung Sie letztlich w hlen h ngt von der Art der Anwendung ab die Sie erstel len wollen Wenn Sie in Ihrer Anwendung eher Arbeitszeiten verwalten so ist die erste Idee sinnvoller bei einer Verwaltung von Berufsgruppen die zweite Es ist in der Analyse durchaus blich mehrere richtige L sungen zu erstellen die jedoch v llig verschiedene Ans tze verfolgen Letztlich sollten Sie mit der Zeit erkennen wel cher L sungsansatz der bessere ist Angestellter Angestellter I Arbeitszeit T tigkeit Vollzeitkraft Teilzeitkraft Manager Programmierer Analytiker Abbildung 3 58 Vererbung mit Diskriminatoren Wenn eine Assoziation zwischen zwei Klassen komplexer dargestellt werden muss als mit einer stichwortartigen textuellen Beschreibung dann kann man dazu in der Analyse phase eine eigene Klasse verwenden die die Assoziation genauer beschreibt Nehmen wir als Beispiel an Sie wollen die Beziehung zwischen einem Leser und einem Buch genauer beschreiben Da es sich um eine Bibliothekssoftware handeln soll sind Leser und B cher b
102. Wahrheitswert der TRUE oder FALSE sein kann Eine Bedingung kann dabei aus Teilbe dingungen bestehen die ber logische Operatoren verkn pft werden Tabelle 2 5 Die If then else Verzweigung PHP bietet wie nahezu alle anderen Programmiersprachen auch die if then Verzweigung mit der in Listing 2 22 skizzierten Syntax lt php echo Anweisungl lt br gt 2 echo Anweisung2 lt br gt if bedingung TRUE echo Anweisung 3 Bedingung erf llt lt br gt echo Anweisung4 lt br gt 2 echo Anweisung5 lt br gt echo Anweisung6 lt br gt Listing 2 22 Skizze einer Wenn Dann Verzweigung Zun chst werden die Texte Anweisungl und Anweisung2 ausgegeben Im weiteren Ver lauf werden statt der einfachen Textausgaben PHP Befehle und oder eigene Funktionen ausgef hrt In diesem Schritt wird sich jedoch auf die Verzweigung konzentriert Der Text Anweisung3 Bedingung erf llt lt br gt wird nur dann ausgegeben wenn die Variable bedingung den Wert TRUE hat Wie es bei PHP typisch ist wird die Ausgabe zum Inter netbrowser des Clients weitergegeben der dann den Zeilenumbruch interpretiert Im Anschluss daran werden die Ausgaben Anweisung4 Anweisung5 und Anweisung6 get tigt War der Wert der Bedingung FALSE so wird also die Ausgabe Anweisung3 unter bunden Innerhalb der if Konstruktion also innerhalb der geschweiften Klammern k nnen beliebig viele Befehle platziert werden die wie gewohnt durch ein Semikolon vonei
103. aktie _POST anz _POST kaufdatum _POST kaufkurs _POST kaufgeb hr anzalt bestand gt getAnzahl bestand gt addKauforder kauf anzneu bestand gt getAnzahl if anzneu anzalt _P0ST anz _SESSITON Bestand _SESSION BestandGew hlt serialize bestand echo Der Kauf wurde dem Bestand erfolgreich hinzugef gt elsef echo FEHLER beim Hinzuf gen der Kaufs zum Bestand lt h3 gt lt form action uebersicht php method post gt lt input type submit value 0K ea lt form gt lt center gt lt php require_once footer inc php gt Listing 5 19 hinzukaufen2 php Controller PHP Endlich objektorientiert 379 5 Projektpraxis Der neue Kauf wurde im Beispiel erfolgreich durchgef hrt sodass es zu der in Abbil dung 5 24 dargestellten Meldung f r den Benutzer kommt http localhost Aktienverwaltung 004 hinzukaufen2 php Windows Internet Explorer BAX O 7 LE ho ilocahost x4 x ea pl Datei Bearbeiten Ansicht Favoriten Extras yg Favoriten http localhost ktienverwaltung 004 hinzukaufen2 Depotverwaltungsprogramm Gew hlter Bestand E ON laden l speichern bersicht w hlen neu l hinzukaufen neue Dividende verkaufen Der Kauf wurde dem Bestand erfolgreich hinzugef gt Copyright by Dr Frank Dopatka Lokales Intranet fa R 00 Abbildung 5 24 Best tigung des erfolgreichen Hinzukaufens
104. als Use Case Diagramme bezeichnet werden F r die Dar stellung betrieblicher Abl ufe eignen sich Aktivit tsdiagramme besonders gut Auch diese k nnen Sie bei Projektbeginn sowohl in Kooperation mit dem Management des Kunden f r die Ermittlung von Zust ndigkeiten und globalen betrieblichen Prozessen als auch auf Anwenderebene f r eine Detailbeschreibung einzelner Gesch ftsprozesse verwenden Objektorientierte Programmierung Wolke Manager View 2 7 Drachen Meeres Spiegel User View Fisch Muschel Entwickler View D Abbildung 3 29 Verschiedene Perspektiven eines UML Diagramms Profitipp Wechseln Sie innerhalb eines UML Diagramms nicht die die Perspektive Die gew hlte Perspektive k nnen Sie durch die Verwendung der Symbole in Abbildung 3 29 an dem jeweiligen Diagramm kennzeichnen Die ben tigte Funktionalit t Anwendungsf lle Nach den Erkenntnissen heutiger Softwareentwicklung wird in den ersten Schritten eines objektorientierten Projekts die ben tigte Funktionalit t von den Vertretern der Kundenseite ermittelt Die UML bietet dazu die Anwendungsfalldiagramme an Abbildung 3 30 zeigt ein sehr globales Anwendungsfalldiagramm f r die zu erstellende Seminarverwaltung aus der Wolkenperspektive Nach Gespr chen mit dem Kunden hat sich herausgestellt dass die zu erstellende Anwendung wesentlich mehr als nur Semi nare verwalten soll n mlich auch Dozenten Kunden Rechnungen usw PHP Endlich obje
105. amp lib 5 amp templates P dashboa P indexSuc D 0747 o B schema ymi EE EE BE KOA B settings yml P dashboardSuccess php 7 DB routing ymi B securityymi f actions class php amp 3 ss statsActions extends sfActions public function executeIndex this gt forward stats dashboard public function executeDashboard amp validate r 0 g PHP PHP O symtony project 2 gt symfony proje ERW I O statsAdions o httpi localhost web frontend_dev php executeDashboard RE Log and debug messages lan none A T F stacton sfContext sfController sfFiter sfPhpConfigHandier sfRequest sfRouting sfView E Context initialization ME initialization ET Routing EF Request EF controier EF Fiter ET Fiter EF Fiter ET Fiter E Fiter A anian match route homepage 7 request parameters array module gt stats action gt index dispatch request executing fiter sfRenderingritter executing fiter sfVebDebugrilter executing fiter stCommonFiter executing fiter sfFlashFiter executing fiter sfExecutionFiter call statsActions gt executeindex m Writable Smart Insert 21 2 Abbildung 5 53 Screenshot der Eclipse Entwicklungsumgebung f r PHP Die Entwicklungsumgebung Zend Studio Das Unternehmen Zend Technologies ist seit Jahren ein f hrender Anbieter von PHP P
106. an den Ladenbesitzer versendet Prozedurale und modulare Programmierung Als B2E Anwendung ist unter anderem eine Arbeitszeiterfassung per Internet denk bar Eine Firma die Mitarbeiter verleiht m chte die Arbeitszeiterfassung online erm g lichen indem nach einem Login des Mitarbeiters in vorgefertigten dynamischen Formu laren die Arbeitszeiten eingegeben werden der Mitarbeiter kann seine Zeiten des letzten Jahres einsehen Hinweis Eine gute bung zum Einstieg in PHP besteht darin dass Sie sich eine der oben genannten Aufgaben aussuchen und versuchen die geforderte Funktionalit t zu rea lisieren Die PHP Kenntnisse aus Kapitel 2 sollten dazu ausreichen Sch tzen Sie vor her ab wie lange Sie f r die Realisierung einer Funktion Beispiel Einen neuen Artikel in der MySOL Datenbank anlegen ben tigen und messen Sie wie lange Sie tats chlich daf r gebraucht haben Dies gibt ein erstes Gef hl f r die notwendige Aufwandsch tzung Als Referenzprojekte dieser Gr enordnung kann ich meine eigene Diplomarbeit und Master Thesis empfehlen Im Rahmen der Diplomarbeit mit dem Thema Konzeption und Realisierung eines Online Praktikums sowie der Basis eines Internet Portals f r das TDI Labor http www frankdopatka de studium gm 2002_diplom pdf 15MB wurde bereits im Jahre 2002 die Basis f r ein Internetportal f r Studenten geschaffen die ein Onlinepraktikum an einer Fachhochschule absolvieren sollen Neben de
107. auf Configuration dann auf Manage local users und abschlie end auf add Es wird der Benutzer FrankDopatka mit dem Passwort test angelegt Die Administrationsrechte sind nicht zwingend notwendig Mit OK beenden Sie den Dialog und mit Close schlie en Sie die Benutzerverwaltung User details Settings for this user Username FrankDopatka 5 Personal name Frank Dopatka Mail password I APOP secret M Administrator privileges for Pegasus Mail M Copy default mail messages Abbildung 2 20 Einrichtung eines neuen Benutzers auf dem SMTP Server PHP Endlich objektorientiert 99 2 Die Sprache PHP Prozedural Der Mail Server ist nun betriebsbereit Um E Mails von dem Server abzuholen m ssen Sie nun noch ein Mail Client Programm konfigurieren Ein erfolgreicher Test wurde mit MS Outlook Express 6 durchgef hrt Aber auch andere Mail Clients sollten problemlos konfiguriert werden k nnen Um Verbindung mit dem Mail Server aufnehmen zu k n nen ben tigen Sie folgende Angaben E Mail Adresse FrankDopatka localhost Posteingangsserver POP3 127 0 0 1 Postausgangsserver SMTP 127 0 0 1 Benutzername FrankDopatka Kennwort test Mit diesen Einstellungen k nnen Sie nun das in Listing 2 73 dargestellte Mail Skript aus f hren Der PHP Interpreter erzeugt damit eine neue E Mail und gibt sie an den Mail Server weiter lt html gt lt body gt lt h1 Sende Test Mail lt h1 gt lt br gt lt br gt
108. aus Beide haben dann densel ben Counter Wert beispielsweise 23 und erh hen ihn um 1 Beide Benutzer schreiben danach die Zahl 24 in die Datei obwohl der Z hler eigentlich um zwei Werte erh ht wer den sollte Profitipp Seien Sie immer vorsichtig wenn mehrere Benutzer per PHP auf eine einzelne Res source zugreifen k nnen Dadurch k nnen so genannte Concurrency Probleme entstehen F r den Dateizugriff bietet PHP die Funktion flock an um den Zugriff auf eine Datei exklusiv zu sperren Durch einen Lock der Datei vor Schritt 1 und ein Unlock nach Schritt 3 wird sichergestellt dass die Schritte 1 bis 3 ohne Unterbre chung ausgef hrt werden und kein zweiter Benutzer den Ablauf unterbrechen kann Ein zweiter Benutzer dieses Skripts w rde dann seinerseits bei dem Lock Versuch etwas warten bis der erste Benutzer die Ressource wieder freigibt Zum Abschluss dieses Kapitels werden in Tabelle 2 24 die wichtigsten PHP Funktionen f r den Zugriff auf das Dateisystem des Servers vorgestellt und kurz erl utert PHP ver f gt ber eine gro e Vielzahl von Befehlen zum Zugriff auf das Dateisystem und die Ver zeichnisstruktur des Servers die Sie in aktuellen Onlinequellen wie http www selfphp de funktionsreferenz dateisystem_funktionen nachlesen k nnen 78 entwickler press Erweiterte Funktionen Funktion Bedeutung fh fopen var op erg fclose fh erg fgets fh var erg fgetcsv fh var trenner fw
109. beim DB Zugriff echo Anzahl Datens tze count ausgabe lt br gt echo Anzahl Spalten count ausgabe lt br2 Listing 4 53 Ausschnitt aus Listing 4 48 Fehler in einer Klasse werfen und fangen Das Beispiel in Listing 4 53 zeigt ein Datenbankobjekt das Fehler produzieren kann Bei der Flugreservierung in Abbildung 4 13 sind nicht alle Methodenaufrufe in jedem Zustand erlaubt Die jeweilige Methode des Reservierungsobjekts gibt bei einem ung l tigen Aufruf ebenso FALSE zur ck wie die Methode des Datenbankobjekts Mit der f nften Version hat PHP nun ein Konzept zur Fehlerbehandlung eingef hrt das bei anderen objektorientierten Sprachen wie Java VB NET oder C bereits sehr erfolg reich ist Dabei wird der Quellcode der Fehler produzieren kann an einem St ck in einem so genannten try Block ausgef hrt Die Idee ist dass man zun chst versucht den Quellcode an einem St ck auszuf hren Ist dies erfolgreich wird der aufrufende Code linear abgearbeitet Ansonsten ist ein Fehler aufgetreten der von einer aufgerufenen PHP Endlich objektorientiert 279 4 PHP objektorientiert Methode eines Objekts geworfen wurde Dieser Fehler wird dann in einem separaten Quellcodebereich gefangen und behandelt Damit dieses Konzept funktioniert m ssen sich zun chst die R ckgabewerte der Methoden auf ihre eigentliche Funktion besinnen n mlich Werte Objektreferenzen oder Datenfelder zur ckzugeben R ckgabewerte
110. bersichtliche Anzahl von Datentypen Auffallend istjedoch dass man den Datentyp nicht bei der Erzeugung einer Variablen angibt sondern direkt eine Wertzuweisung vornimmt Man spricht bei PHP ber eine untypisierte Sprache die die folgenden Datentypen aus dem Kontext der Wert zuweisung erkennen kann m Integer Der Wertebereich der Ganzzahlen liegt von 2 147 482 648 bis 2 147 482 647 also von 231 1 bis 231 Das entspricht einer Gr e von 4 Byte gt Bei einem berlauf wandelt PHP den Typ automatisch nach Double um 1 Das einfache Anf hrungszeichen liegt bei deutschem Tastaturlayout auf der Taste und wird mit STRG aktiviert 18 entwickler press Grundlegende Syntax Typische Deklarationen sind a 1234 b 123 c 0123 Oktalzahl die dem Wert 83 dezimal entspricht d 0x1A Hexadezimalzahl die dem Wert 26 dezimal entspricht Double auch Float genannt Der Wertebereich der Flie kommazahlen liegt bei ca 1 7E 308 bis ca 1 7E 308 also von 21024 1 bis 21024 Das entspricht einer Gr e von 8 Byte gt Die Genauigkeit betr gt 14 Nachkomma Stellen Typische Deklarationen sind a 1 234 b 1 2e3 c 7E 10 String Eine Zeichenkette deren Gr e nur durch den bereit gestellten Speicher f r PHP beschr nkt wird gt PHP unterst tzt bis inklusive Version 5 den internationalen Unicode Zeichensatz nicht Ein Zeichen besteht also nur aus einem Byte gt Folgende Sonderzeichen k
111. bersichtlichkeit des Beispiels zu wahren Da es sich bei XLST um eine eigene vollst ndige Programmiersprache handelt k nnen Sie auch Schleifen verwenden Im Beispiel wird eine Schleife verwendet um die Namen aller Teilnehmer auszugeben Die Zeile lt xsl for each select seminare seminar teilnehmer liste teilnehmer gt nimmt Bezug auf den Pfad im Baum des XML Dokuments und erinnert gleichzeitig an die foreach Schleife von PHP Die Namen der Teilnehmer werden dann in eine HTML Auflistung innerhalb der HTML Tags lt li gt lt li gt eingebettet lt xml version 1 9 encoding iso 8859 1 gt lt xsl stylesheet version 1 0 xmIns xs1 http www w3 org 1999 XSL Transform gt lt xsl template match gt lt html gt lt head gt lt head gt lt body gt lt p align left style font family Tahoma font size 14px gt Name des Seminars lt xsl value of select seminare seminar name gt lt br gt ID des Seminars lt xsl value of select seminare seminar id gt lt br gt Dozent des Seminars lt xsl value of select seminare seminar dozent gt lt br gt lt p gt lt p align left style font family Tahoma font size 14px gt Teilnehmer Listing 4 75 Transformationsdatei f r die XML Datei nach HTML beispiel xIs PHP und XML lt ul style font family Tahoma font size 14px gt lt xsl for each select seminare seminar teilnehmerliste teilnehmer gt lt li gt lt xsl value of select name gt lt
112. bis hin zu der Fertigstel lung dieses Prototyps gelesen und verstanden haben k nnen Sie Ihre urspr ngliche Ein sch tzung f r den Aufwand dieser Entwicklung mit der tats chlichen Dauer bzw mit den tats chlichen Kosten vergleichen Lagen Sie in Ihrer Einsch tzung richtig Hatten Sie mehr oder weniger Zeit bzw Kosten vorgesehen In der Regel kalkuliert man als Anf nger weniger Zeit bzw Kosten als tats chlich ben tigt werden Wie k nnten nun die n chsten Schritte in dem Szenario dieses Entwicklungsprozesses aussehen Zun chst einmal ist sp testens nun ein Review durch den Auftraggeber anzu setzen mit den folgenden Fragestellungen m Wurden die realisierten Funktionen fachlich korrekt realisiert Wie sind Sie mit der Bedienung zufrieden m Was w nschen Sie sich als N chstes f r Funktionen Auf Basis der Antworten kann eine Kostenabsch tzung und eine Priorisierung f r die n chste Iteration vorgenommen werden Diese bislang realisierten Funktionen k nnen dem Kunden bereits in Rechnung gestellt werden F r den Fall dass Sie den Aufwand falsch eingesch tzt haben ist Ihr Risiko bei dieser Vorgehensweise geringer als bei einer Gesamtabsch tzung Au erdem k nnte ein Refactoring f r die bisherige Anwendung erfolgen Dabei sind drei Punkte zu diskutieren 1 Die Klassen Bestand und Bilanz sind sehr eng miteinander verbunden Es k nnte sinn voller sein diese beiden Klassen zu vereinigen 2 Wenn der Kunde davon ausge
113. che wie JavaScript Microsoft Visual Basic 6 oder C einzuarbeiten Au erdem wird gezeigt wie Sie Ihre Homepage um PHP Funktionalit t anreichern k n nen Interessant ist dieses Kapitel besonders dann wenn Sie noch keinerlei Erfahrungen mit der Sprache besitzen wenn Sie eine bestehende Internetpr sentation um einzelne PHP Elemente erweitern wollen oder lediglich kleine Projekte in PHP realisieren wollen Im Gegensatz zu einer Programmiersprache mit der Sie ausf hrbare Dateien erzeugen die auf Ihrem Computer installiert und gestartet werden handelt es sich bei PHP um eine Internetsprache Im Gegensatz zur clientseitigen Skriptsprache JavaScript wird PHP auf dem Server ausgef hrt PHP kann daher mit ASP und JSP verglichen werden da bei allen drei Sprachen die HTML Dateien die auf dem Webserver liegen mit frem dem Quellcode angereichert werden Das bedeutet dass in einer HTML Datei die ja zus tzlich noch JavaScript f r die clientseitige Ausf hrung und CSS Anweisungen Cas cading Stylesheets f r die Beschreibung des Designs der Homepage enthalten kann mit einer weiteren Sprache versehen wird Zus tzlich dazu muss die html Datei in php umbenannt werden Wenn nun ein Internetbrowser als Client auf die PHP Datei ber den Webserver Apache zugreifen will wird diese zuerst durch den PHP Interpreter eingelesen Die Ausgabe der PHP Datei wird dann an den Webserver weitergegeben und dann an den Browser gesen det Greift PHP dann
114. ck und mit der Methode addRechnung rechnung kann dem Kunden ein neues Rechnungsobjekt bergeben werden Dieses Objekt wird dann an den n chsten freien Platz im Datenfeld angeh ngt und der Z hler der Rechnungen wird inkrementiert lt php class Kunde extends Person private id private rechnungen Array private anzRechnungen public function __construct id name vorname strasse plz ort parent __construct name vorname strasse plz ort this id id public function getID return this gt id public function getRechnungen return this gt rechnungen public function addRechnung rechnung this rechnungen this gt anzRechnungen rechnung this anzRechnungentt Listing 4 39 Die erweiterte Kundenklasse PHP Endlich objektorientiert 257 4 PHP objektorientiert Stellen Sie sich vor dass Sie die alte Kundenklasse aus Listing 4 25 bereits vielf ltig im Einsatz haben Sie k nnen die existierende Kundenklasse durch die neue Klasse aus Lis ting 4 39 in allen existierenden Projekten ohne negative Auswirkungen ersetzen Die neuen Methoden der Rechnungsverwaltung eines Kunden werden in alten Projekten nur nicht aufgerufen bzw verwendet Die strikte Modularit t der objektorientierten Denk weise vereinfacht also die Versionierung und das Aufspielen verbesserter Komponenten In Listing 4 40 wird die neue Rechnungsklasse pr sentiert Die Eigenschaften id datum rabat
115. dem gerade ausgew hlten neu angelegten Aktienbestand auf uebersicht php zugegriffen In dieser Datei sollen die Bilan zen aller Best nde angezeigt werden sodass man einen berblick ber sein Depot erh lt Zus tzlich soll man dort einen Bestand ausw hlen k nnen um mit diesem weitere Akti onen durchzuf hren wie Aktien nachzukaufen eine Dividende hinzuzuf gen oder den Bestand zu verkaufen Ein Gro teil dieses Quellcodes ist in Listing 5 17 dargestellt lt php require_once header inc php gt lt php for i 0 i lt _SESSIONIBestandAnzahl i bestand unserialize _SESSION Bestand i bilanz bestand gt getBilanz echo lt font face Arial Helvetica gt echo lt b bilanzlaktienname lt b gt echo bilanzlaktienISIN lt b gt if bestand gt isVerkauft echo amp nbsp amp 1t amp 1t VERKAUFTAgt Agt lt br gt 2 else echo amp nbsp lt a href uebersicht php w i gt w hlen lt ar lt br gt echo bilanzlanzahl St ck am bilanz ekDatum gekauft if bestand gt isVerkauft echo und number_format bilanzltagelmBesitz 0 Tage gehalten Listing 5 17 uebersicht php View Das Fallbeispiel der Depotverwaltung else echo vor number_format bilanz ltagelmBesitz 0 Tagen echo Stand vom bilanzlaktDatum bilanzLaktZeit Uhr if bilanz ekSumme gt bilanzLaktSumme farbe jFF0000 elsef farbe 00
116. den URL Uniform Resource Locator im GET Aufruf zum Server gesendet da dies ber das method Attribut des form Tags so angegeben wurde In dem action Attribut wird angege ben an welche PHP Datei das ausgef llte Formular gesendet werden soll In diesem Fall handelt es sich um die fachlogik_get php Beachten Sie dass jedes Steuerelement auch die Schaltfl chen mit einem name Attribut versehen ist ber die Namen dieser Attribute greift PHP sp ter auf die Formulardaten zu Nach dem Ausf llen des Formulars mit Testdaten wurde die Schaltfl che Dienst1 bet tigt Das erzeugt den folgenden Aufruf auf die fachlogik_get php http localhost form fachlogik_ get php Param1 Frank amp Param2 Wert amp Param3 Wert1 amp Dienst1 Dienst 1 Die Parameter werden also in den URL Aufruf integriert Dadurch sind Sie in der Lage den Aufruf ber einen Internetbrowser auch zu ver ndern indem Sie beispielsweise einen anderen Text hinter Param1 im Aufruf platzieren Sie k nnen den Aufruf also leicht manipulieren was f r Testf lle sinnvoll sein kann Dadurch ersparen Sie sich das erneute manuelle Ausf llen des Formulars Profitipp Wenn jemand Ihren Server angreifen will wird er versuchen ung ltige Daten ber ausgef llte Formulare zu versenden Wie Sie sehen ist die Ver nderung einer GET bertragung sehr leicht m glich Die POST bertragung die noch vorgestellt wird ist nur unwesentlich schwieriger zu manipulieren Es ist daher unbedingt no
117. der Mitarbeiter als auch der Kunde verf gen ber die Eigenschaft id Wenn alle konkreten Personen ber eine ID verf gen wieso wird diese ID dann nicht in die Ober Realisierung von Klassengeflechten klasse ausgelagert In PHP ist dies durchaus eine Designalternative da der Datentyp einer Eigenschaft nicht im Vorfeld festgelegt werden muss Es k nnen jedoch auch hier Probleme auftreten wenn man in einer Set Methode die G ltigkeit einer ID pr fen muss Denn der Identifikator kann bei einem Kunden v llig anders aufgebaut sein als bei einem Mitarbeiter Ein L sungsansatz w rde f r PHP darin bestehen die Eigenschaft id zentral f r den Kunden protected anstatt private zu definieren Damit k nnten auch Methoden der Unterklasse direkt auf die Eigenschaft zugreifen Im zweiten Schritt k nn ten dann die Set Methoden des Kunden und des Mitarbeiters mit den entsprechenden Pr fungen berschrieben werden Wie man Methoden berschreibt wird im n chsten Beispiel erl utert In Listing 4 27 werden zun chst die drei erzeugten Klassen getestet Es werden ein Kunde und ein Mitarbeiter erzeugt Weil beide auch Personen sind besitzen sie die Methode getAnschrift die in beiden F llen aufgerufen wird Abschlie end wird test weise der PHP Befehl get_parent_class auf der Referenz des Mitarbeiterobjekts angewen det Sie gibt den Namen der Oberklasse des Mitarbeiters also Person zur ck lt php require_once classloader inc php gt
118. der Variablen a die 3 ergibt Beim Cast in eine Ganzzahl wird also nicht gerundet sondern die Nachkommastellen abgeschnitten Die Umwand lung in eine Flie kommazahl mit double funktioniert problemlos Mit dem Wert in der Variablen b kann man nun weiter rechnen Ebenso problemlos ist die R ck Wandlung in eine Zeichenkette Etwas berraschend ist das Ergebnis bei der Umwandlung der Zeichenkette 3 8 in einen Wahrheitswert Hier wird TRUE in der Variablen d gespeichert Die Ursache liegt darin dass PHP die Zeichenkette zun chst in eine Zahl umwandelt die ungleich 0 ist Die Zahl 0 w rde den Wahrheitswert FALSE ergeben Alle anderen Zahlen ergeben TRUE Wenn Sie den Datentyp einer Variable ndern m chten ohne einen anderen Variablen Namen zu verwenden so k nnen Sie den Befehl settype x double verwenden Dieser Befehl hat dieselbe Bedeutung wie x double x ist jedoch lesbarer PHP Endlich objektorientiert 23 2 Die Sprache PHP Prozedural Verwaltung von Variablen und Referenzen Zeigern PHP bietet eine weitere ungew hnliche Funktion zur Verwaltung von Variablen Mit PHP k nnen Sie nicht nur den Wert einer Variablen ver ndern sondern auch ihre Bezeichnung Betrachten Sie dazu das Listing 2 10 lt html gt lt body gt lt php x name x daten echo x echo lt br gt 2 echo name gt lt body gt lt html gt Listing 2 10 Variablen in Variablen Sie definieren zun chst ein
119. desselben Typs zu einem bestehenden Bestand nachkaufen k nnen Die Daten des n ten Kaufs werden dann in den Bestand integriert Ebenso sollen meist j hrlich gezahlte Dividendenzahlungen der Aktiengesellschaften in den Bestand aufgenommen werden k nnen Die Dividenden werden aufaddiert und erh hen den Ertrag der Aktie Wenn eine Dividende gezahlt wurde kann sie dem Anle PHP Endlich objektorientiert 331 5 Projektpraxis ger nicht mehr weggenommen werden w hrend der Kurs der Aktie ja sinken kann Eine Dividende ist demnach ein garantierter Gewinn Jeder Aktienbestand kann auch verkauft werden In den ersten Prototypen gen gt es wenn man nur den gesamten Aktienbestand verkaufen kann Dabei werden das Datum des Verkaufs und der Aktienkurs erfasst zu dem der Bestand verkauft wurde Zus tz lich fallen Verkaufsgeb hren an Dies bringt die Diskussion auf das Geb hrenmodell Unser Auftraggeber betont dass nur bei jedem Kauf und Verkauf bei seiner Bank Geb hren f llig sind Das Depot verur sacht also keine laufenden Kosten die beispielsweise j hrlich abgerechnet werden F r zuk nftige Geb hrenmodelle sollte die Anwendung jedoch in diese Richtung erweiter bar sein Als letzte Funktion nennt der Auftraggeber die bersicht ber den gesamten Aktienbe stand Hier soll der Benutzer seine Best nde sowie die statistischen Informationen sehen k nnen Diese werden zun chst nur textuell pr sentiert Abbildung 5 2 zeigt de
120. die UML als Notationssprache Abbildung 3 11 zeigt das zentrale Schaubild des RUP Objektorientierte Programmierung Phasen Aufgaben der Entwicklung Start Gesch ftsprozessmodellierung T i Bi i Anforderungsanalyse m Objektorientierte Analyse amp Design p T o o Implementierung i il Di Test i nn Auslieferung ii N Unterst tzende Aufgaben H H H Konfigurations amp nderungsmanagement PE E i a N Projektmanagement 0000 a a I Infrastruktur a a 1 2 3 4 5 6 n n 1 m m 1 Iterationen Abbildung 3 11 Der Rational Unified Process Der RUP gilt als letztes schwergewichtiges Vorgehensmodell der Softwareentwicklung Ein schwergewichtiges Modell ist dadurch gekennzeichnet alle Anforderungen an die zu entwickelnde Anwendung in einer Projektphase vollst ndig zu erheben bevor die ersten Entwurfs oder Realisierungsentscheidungen getroffen werden Abbildung 3 11 zeigt dass die Anforderungsanalyse im RUP jedoch bereits deutlich aufgeweicht ist Prinzipiell unterscheidet der RUP den Projektstart die Phase des Entwurfs der Software die Konstruktion die bergabe an den Kunden sowie die Produktion in der die Soft ware im operativen Einsatz des Kunden ist Die zeitlichen Abl ufe sind jedoch nicht klar voneinander abgegrenzt Quasi auf der Y Achse definiert der RUP die zu erf llenden Kernarbeitsschritte die aus der Gesch ftsprozes
121. die Vererbung hier eindeutig festgehal ten werden kann Eine Hilfskraft ist jedoch nicht fest angestellt Ebenso ist ein Angestellter kein Student da diese Klassen jeweils verschiedene Attribute besitzen beispielsweise eine Personalnum mer anstatt einer Matrikelnummer Hier l sst sich also keine direkte Vererbung auf bauen Die L sung besteht darin alle Gemeinsamkeiten der drei Klassen in einer abs trakten Oberklasse als Container f r gemeinsame Eigenschaften und Methoden zusammenzufassen So resultiert die Klassenhierarchie aus Abbildung 3 57 Abstrakte Klassennamen werden kursiv geschrieben oder um den Vermerk abstract erg nzt Wie es bei einer Vererbung typisch ist werden alle Eigenschaften und Methoden der Oberklasse auf die Unterklasse mit vererbt Wie Sie erkennen ist keine mehrfache Dekla ration mehr vorhanden Den Vererbungspfeil k nnen Sie mit der Phrase ist ein benennen So ist ein Angestellter eine Person ebenso wie ein Student Eine Hilfskraft ist ein speziel ler Student name anschrift geburtsdatum druckeAnschrift Student Angestellter personalnr matrikelnr gehalt immatrikulation bankverbindung berweiseGehalt druckeAusweis Hilfskraft besch ftigungen druckeArbeitszeiten Abbildung 3 57 Resultierende Vererbungshierarchie PHP Endlich objektorientiert 187 3 Vorgehensweise bei der Softwareentwicklung Ein sehr hilfreiches jedoch zu selten eingesetztes Mittel der
122. echo FDairline gt getZustand lt br gt gt lt body gt lt htm1 gt Listing 4 52 Test der Umsetzung des Zustandsautomaten Die Ausgabe ist im Folgenden dargestellt wobei in ca 50 der F lle die dritte Ausgabe storniert lautet initialisiert reserviert gebucht 4 3 Objektorientierte Fehlerbehandlung Bereits im zweiten Kapitel wurde der Operator zur Fehlerunterdr ckung vorgestellt So wird mit datei fopen counter txt w die Meldung Warning fopen counter txt function fopen failed to open stream unterdr ckt ber die Pr fung if datei FALSE f k nnte dann eine Behandlung des Fehlers erfolgen wenn die Datei nicht existiert Auch in Listing 4 51 werden Fehlerpr fungen durchgef hrt indem eine if Verzweigung zum Einsatz kommt und bei einem Fehler der R ckgabewert einer Methode in besonderem Ma e erfolgt Die implementierten Methoden reservieren stor nieren und buchen liefern im Fehlerfall FALSE zur ck Auch die Implementierung der Datenbankzugriffsschnittstelle in Listing 4 48 arbeitet auf diese Weise Das Lesen aus der Datenbank liefert ein Datenfeld als R ckgabe oder FALSE wenn das Lesen nicht erfolgreich war Objektorientierte Fehlerbehandlung Doch wird diese besondere Fehlerr ckgabe vom Aufrufer einer Methode ausgewertet Die Antwort lautet Meistens nicht Dies liegt daran dass man oft dazu neigt nur den erfolgrei chen Fall zu betrachten um m glichst schnell eine lauff
123. einem Sprint wird das Ergebnis einem informellen Review unterzogen an dem sowohl das Entwicklerteam als auch Vertreter der Kunden und Benutzerseite teilneh men Bei dem Ergebnis handelt es sich stets um einen funktionst chtigen Prototyp der bislang erstellten Anwendung Dieser Prototyp w chst evolution r Der Kunde und die zuk nftigen Anwender pr fen inwiefern das Sprintergebnis den Anforderungen entspricht nderungsw nsche werden wieder in das Produkt Backlog aufgenommen und die n chste Iteration kann beginnen Abbildung 3 24 fasst den Ablauf eines Scrum Projekts zusammen Objektorientierte Programmierung ee IRA Produkt Backlog Sprint Backlog Sprint a t ck Software Abbildung 3 24 Ablauf eines Scrum Projekts 3 2 4 Von der Analyse zum objektorientierten Design Die im vorigen Kapitel skizzierten Methoden tragen dazu bei aus noch unklaren Anfor derungen des Kunden ein fachliches Modell der geforderten Funktionalit t zu erzeugen Scrum ist eine Methodik die sich durch den gesamten Entwicklungszyklus der Anwen dung zieht In diesem Kapitel werden nun Hilfsmittel vorgestellt wie man aus dem fachlichen Modell eine technische Beschreibung erstellt In der Objektorientierung bedeutet dies im Wesentlichen die beteiligten Klassen mit deren Eigenschaften und Methoden zu ermit teln Erst danach kommt PHP im Rahmen der objektorientierten Programmierung zum Einsatz Bei der Einf hrung in die Objektorientierung wurden die
124. einem XAMPP Server auf einem Windows Betriebssystem nicht funktioniert und FALSE zur ckgibt Das liegt daran dass kein Mail Server existiert an den die zu sendende E Mail berge ben werden kann Linux bietet hier bereits eigene L sungen an Mercury SMTP Server General Segen control Spam control Compliance SSL General Announce myself as localhost TEPAP timeout 30 seconds ESMTP maximum size 0 bytes Listen on TCP IP port 25 Alternate port 0 IP Interface to use see help Sender kill file x Display session progress and debugging information Accept 8BITMIME data connections Accept mail for inyalid local addresses Disable the SMTP YRFY command Logging General logging C Programme XAMPPS Filename Session logging Directory Enable session logging OK Abbrechen Hilfe Abbildung 2 18 Einstellungen des MercuryS SMTP Server In dem XAMPP Paket ist der Mail Server Mercury integriert der f r Windows Plattfor men noch konfiguriert werden muss und der f r lokale Tests ausreichend ist Starten Sie im ersten Schritt den Mail Server in dem XAMPP Control Panel Wenn der Mail Server im Status Running ist klicken Sie im Control Panel auf Admin Daraufhin ffnet sich das Fenster Mercury 32 zur Administration des Mail Servers Klicken Sie nun im Hauptmen auf Configuration und dann auf MercuryS SMTP Server Dort m ssen Sie im Writer Gener
125. einem herk mmlichen Editor So sind Tools zur Projektverwaltung Quellcodeversionierung zur Dokumentation sowie zur Durchf hrung von automatisierten Funktions und Integrationstests notwendig geworden F r einen unerfahrenen Entwickler der sich die durchaus interessante Sprache PHP erst malig ansehen will m gen diese Ausf hrungen zun chst abschreckend sein Das f hrt direkt zur Fragestellung nach der Zielgruppe dieses Buchs sowie zu dessen Aufbau 1 2 Zielgruppe dieses Buchs Nach den komplexen Ausf hrungen ist zun chst beruhigend nochmals zu betonen dass die prozedurale Programmierung auch weiterhin mit PHP 5 m glich ist Eine Anlei tung zur Erstellung dynamischer Webauftritte mit PHP ist in diesem Buch im zweiten PHP Endlich objektorientiert 9 1 Eine Sprache wird erwachsen Kapitel enthalten Dadurch finden auch die Entwickler einen Einstieg die im Vorfeld noch keine PHP Erfahrung besitzen und lediglich keine Vorhaben realisieren wollen Statt einzelne Befehle lediglich zu definieren wird in diesem Buch praxisnah die Erstel lung von PHP Skripten beschrieben Der berblick ber die grundlegenden M glichkeiten von PHP ist jedoch bewusst kurz gehalten Eine Erfahrung in einer anderen Programmiersprache und oder einer anderen Internetskriptsprache ist an dieser Stelle sicherlich vorteilhaft Zus tzlich ist die Erstel lung von kleinen PHP L sungen bereits in Internetforen wie http www php de ausrei chend beschr
126. eines Kunden heraus nach einigen Gespr chen PHP Dateien mit Verzweigungen Schleifen PHP Endlich objektorientiert 105 3 Vorgehensweise bei der Softwareentwicklung HTML Formularen und Datenbankanbindungen zu erstellen sodass die W nsche des Kunden erf llt werden Dies zeichnet einen Entwickler bzw einen Programmierer aus Seit den letzten 30 Jahren wurden die Problemstellungen jedoch zunehmend komplexer Man sehnte sich nach einer ultimativen Vorgehensweise einer Anleitung bzw nach einem Algorithmus wie man jedes Problem eines jeden Kunden l sen kann Die in die sem Kapitel beschriebenen Methoden repr sentieren den Kenntnisstand zwischen 1970 und 2000 Nun denken Sie vielleicht dass diese Methoden doch v llig veraltet sind und daher kei nerlei praktische Bedeutung mehr haben Dies wird in der Wissenschaft auch h ufig so dargestellt Die Kenntnis dieser Methoden unterscheidet jedoch einen Entwickler von einem Hobbyprogrammierer der sich nur aus Interesse mit der Sprache PHP besch ftigt Au erdem bieten diese Vorgehensweisen f r bestimmte Projekte u a kleinere Projekte mit wenigen Beteiligten eine sinnvolle Anleitung die man zumindest im Hinterkopf halten sollte Bereits im Wasserfallmodell von 1970 wurden Phasen erw hnt die eine Softwareentwicklung durchl uft Diese Phasen haben heutzutage noch immer ihre Bedeutung Viele modernere Vorgehensweisen haben die Komplexit t der Anwen dungsentwicklung besser ve
127. f r ihre Kunden erstellen Es sind weder Entwick lerteams noch komplexe Werkzeuge und Editoren notwendig In diesem Umfeld hat sich PHP 4 bereits etabliert und bew hrt Durch die hohe Verbreitung und den guten Ruf von PHP wird die Skriptsprache jedoch in letzter Zeit verst rkt in gr eren Projekten eingesetzt Das bedeutet das sowohl auf der Seite des Kunden als auch auf der Seite der Entwickler eine Vielzahl von Personen am Projekt beteiligt ist Meistens sind sogar die Anforderungen an das Projekt im Vorfeld nur grob oder gar nicht bekannt In diesem Fall werden eine Gesch ftsproze analyse und agile Vorgehensmethoden der Softwareentwicklung eingesetzt Auch die Objektori entierung besteht nicht nur aus der objektorientierten Programmierung OOP Im Anschluss an die Gesch ftsproze analyse erfolgt in gro en Projekten in einem iterativ inkrementellen Prozess eine objektorientierte Analyse und ein Design der L sung das in einer objektorientierten Programmierung mit PHP m ndet Als gemeinsame Sprache f r Kunden Analytiker und Entwickler w hrend der OOA und OOD hatsich in den letzten Jahren die Unified Modeling Language UML durchge setzt Die UML bietet auch eine wohl definierte Vorgehensweise um von einem Kunden wunsch zu einem Softwareartefakt zu gelangen Es ist also eine genaue Planung sowohl der Kosten als auch s mtlicher Ressourcen erforderlich Auch die Werkzeuge die zum Einsatz kommen unterscheiden sich grundlegend von
128. gemeinsamen Sprache entgegenwirken muss Die Objektorientierung bietet mit der UML eine Notation die von allen Beteiligten in ihrem jeweiligen Wir kungskreis leicht verstanden und als Diskussionsgrundlage verwendet werden kann Dass gro e Projekte mit PHP und MySQL realisierbar sind zeigt unter anderem das unter der GPL General Public License stehende Content Management System Typo3 http typo3 org PHP Endlich objektorientiert 125 3 Vorgehensweise bei der Softwareentwicklung Projekte dieser Gr enordnung sind dynamisch nicht vollst ndig im Vorfeld planbar und erfordern dennoch eine wohldefinierte Vorgehensweise W hrend die bislang vor gestellten Methoden und Modelle eher statisch orientiert waren beinhaltet die Objekt orientierung mit agilen Methoden eine gr ere Flexibilit t um sich nderungen der Anforderungen anpassen und neue noch unbekannte Anforderungen in dem laufenden Projekt einbeziehen zu k nnen Es wurde bereits erw hnt dass die Objektorientierung den Anspruch erhebt eher an der Denkweise des Menschen ausgerichtet zu sein Es hat sich gezeigt dass Verwaltungssys teme aller Art relativ leicht objektorientiert modelliert werden k nnen Dies k nnen bei spielsweise sein m eine Kundenverwaltung eine Artikelverwaltung eine Auftragsverwaltung m eine Aktienverwaltung m eine Verwaltung von Musik und Musikmedien Wenn Sie einige Verwaltungssysteme modelliert haben wird Ihnen auffallen d
129. gen Eingabemaske senden Daten pr fen Bestand aktualisieren Erfolgsmeldung Abbildung 5 6 Aktivit tsdiagramm Dividende eingeben Als letztes Szenario wird in Abbildung 5 7 beschrieben wie zu einem ausgew hlten Aktienbestand neue Aktien hinzugekauft werden sollen In der Sprache der Aktion re wird dies brigens als erfolgreiche Kauforder ein Verkauf von Aktien als durchgef hrte Verkauforder bezeichnet Um mehr Aktien desselben Typs in den Bestand aufzunehmen m ssen die Daten des neuen Kaufvorgangs ber eine Eingabemaske erfasst werden Dabei handelt es sich wie bereits beim Anlegen des Bestands um m das Datum des Kaufs die Anzahl der gekauften Aktien m deren Kurs zu dem die Aktien gekauft wurden m Geb hren die bei dem Kauf angefallen sind Nach der Pr fung wird der aktuelle Bestand dann wieder in der Depotverwaltung gespeichert PHP Endlich objektorientiert 337 5 Projektpraxis Benutzer Depotverwaltung Eingabemaske senden Daten pr fen Bestand aktualisieren Erfolgsmeldung Abbildung 5 7 Aktivit tsdiagramm Aktien zu vorhandenem Bestand nachkaufen In diesem Zusammenhang stellt sich die Frage wie das Aktualisieren des Bestands aus sieht Sollen alle einzelnen Kaufvorg nge im Bestand unabh ngig voneinander festge halten werden Dies entspricht in der Implementierung eine Liste von Kaufvorg ngen im Bestand berraschenderweise verneint unser Auftraggeber die A
130. h ufig verwendeter Befehl ist mysql_num_rows der die Anzahl der Daten s tze in der Ergebnistabelle zur ckgibt Diese Zahl kann als Z hler f r Schleifen oder als Indiz f r die Anzahl der ermittelten Datens tze verwendet werden function DB_AGs data mysql_query SELECT ID name FROM ag ORDER BY ID ASC if data FALSE return FALSE data_ausgabe Array while datensatz mysql_fetch_array data MYSQL_ASSOC data_ausgabel datensatz return data_ausgabe function DB_MW AG data mysql_query SELECT avg value FROM kurse WHERE A6_ID SELECT DISTINCT ID FROM ag WHERE name AG if data FALSE return FALSE datensatz mysql_fetch_row data return datensatz function DB_Kurs AG tag AG_ID holen data mysql_query SELECT DISTINCT ID FROM ag WHERE name AG if data FALSE return FALSE if mysql_num_rows data 1 return FALSE datensatz mysql_fetch_row data AG_ID datensatz 0 B rsenwert holen data mysql_query SELECT DISTINCT value FROM kurse WHERE AG_ID AG_ID if data FALSE return FALSE datensatz mysql_fetch_row data return datensatz gt Listing 2 68 Einzubindende Datei DBzugriff inc php zweiter Teil Im n chsten Schritt werden kurz die typischen SQL Befehle vorgestellt die bei einem Datenbankzugriff verwendet werden Wenn Sie den SQL Befehlssatz ausf hrlich lernen wollen empfehlen sich Onlinequellen Im Referenzhandbuch z
131. hat Die erste Interaktion zwischen dem Apotheker und dem Rezept fenster wird also in einem separaten Sequenzdiagramm beschrieben welches hier nicht dargestellt wird Im n chsten Schritt bearbeitet der Apotheker das Rezept Ihnen ist es vielleicht in einer Apotheke schon einmal aufgefallen dass der Apotheker sich die erste Zeile des Rezepts PHP Endlich objektorientiert 207 3 Vorgehensweise bei der Softwareentwicklung ansieht zum Arzneischrank geht dort das Medikament sofern es im Lager vorhanden ist entnimmt und Ihnen auf den Tisch legt So geht der Apotheker Zeile f r Zeile im Rezept vor Wenn der Bestand eines Medikaments im Arzneischrank zu gering wird bestellt der Apotheker das Medikament nach Genau dieses Vorgehen wird im Dia gramm der Abbildung 3 80 beschrieben Profitipp Sie stellen sich vielleicht die Frage warum man berhaupt so viele UML Diagramme erstellt und nicht gleich eine pr zise textuelle Beschreibung verfasst Die Ursache liegt darin dass diese Pr zision erst durch viel Kommunikation mit Ihrem Kunden in dem iterativ inkrementellen Prozess der Softwareentwicklung und des meist evolu tion ren Prototypings erreicht wird Die UML Diagramme eignen sich sehr gut um den gesamten Prozess zu dokumentieren Die Erstellung dieser Diagramme ist jedoch nicht Selbstzweck Vielmehr sind die UML Diagramme Hilfsmittel und Dis kussionsgrundlage f r die Kommunikation der Stakeholder untereinander X Rezept
132. i 1 datalAktienname datalAktienISIN datalAktienURL sql datalanzahl datalekEinzelpreis date_format new DateTime datalekDatum Y m d datalekGeb hr if bestand isVerkauft sql datalaktEinzelpreis date_format new DateTime datalaktDatum Y m d datalaktGeb hr else sql 0 0000 00 00 0 sql dataldividenden p_schreiben gt add sql sql if db gt schreiben p_schreiben FALSE fehler else Listing 5 25 Speichern der Aktienbest nde der PHP Session PHP Endlich objektorientiert 391 5 Projektpraxis erfolg db schliessen if erfolg gt 0 echo Es wurden erfolg Datens tze erfolgreich geschrieben lt br gt if fehler gt 0 echo Das Schreiben von fehler Datens tzen ist FEHLGESCHLAGEN lt br gt gt lt h3 gt lt form action uebersicht php method post gt lt input type submit value OK gt lt form gt lt center gt lt php require_once footer inc php gt Listing 5 25 Speichern der Aktienbest nde der PHP Session Forts In unserem Beispiel erfolgt die Meldung dass ein Datensatz erfolgreich archiviert wurde http localhost Aktienverwaltung 004 speichern php Windows Internet Explorer Jog ER O O gt lE hi iocahost x 4x pi Datei Bearbeiten Ansicht Favoriten Extras vr Favoriten 59 44 localhost
133. ig die Verarbeitung ab um die Last auf dem Server zu verringern PHP Endlich objektorientiert 45 2 Die Sprache PHP Prozedural Bedingung nicht erf llt Bedingung erf llt 0 Bedingung nicht erf llt Bedingung erf llt Kopf gesteuerte Schleife Fu gesteuerte Schleife a b Abbildung 2 8 Ablaufplan einer kopf a und fu gesteuerten b Schleife for Schleife Bei der for Schleife handelt es sich um eine kopfgesteuerte Z hlschleife bei der neben der Bedingung noch die Initialisierung der Z hlvariablen sowie die Anweisung zum Ver n dern der Z hlvariablen angegeben werden Das bedeutet dass die Z hlvariable nicht unbedingt um 1 erh ht werden muss sondern beliebig gem der Anweisung ver ndert werden kann Das Beispiel in Listing 2 33 zeigt bereits die Effizienz einer Schleife Wenn Sie bislang gro e HTML Tabellen manuell erstellt haben ist Ihnen sicherlich der Aufwand der Zei lenbeschreibung aufgefallen Der resultierende Quellcode kann sehr un bersichtlich werden insbesondere wenn in einer Tabelle noch zahlreiche CSS Angaben zur Darstel lung enthalten sind Listing 2 33 erzeugt eine einfache HTML Tabelle mit einer Spalte und 10 Zeilen Die Z hlvariable wird typischerweise mit i benannt und durchl ft die Werte 1 bis 10 wobei sie bei jedem Durchlauf mit i um einen Wert inkrementiert wird Im Rumpf der Schleife wird der PHP Code unterbrochen und HTML ausgegebe
134. ihm definierten Anwendungsf lle Abb 5 2 wieder fin det Dadurch wird eine gesch ftsprozessnahe Umsetzung der Anforderungen unter st tzt Sowohl die Verwendung von JavaScript Men s als auch HTML Frames sind veraltet Sie erlauben kein direktes Bookmarking und sind auch hinderlich f r einen barrierefreien Zugriff Die gesamte Darstellung soll daher in einer einzigen HTML Datei m glichst ohne Verwendung von aktiven Skripten beim Client erfolgen Gleichzeitig sind Erweiterungen und nderungen in der Men f hrung sehr wahr scheinlich Schon ab ca 50 Bildschirmmasken ist eine nderung vom Entwickler oder Designer nur nervenaufreibend konsistent durchzusetzen Die Bildschirmmasken wer den also nicht vollst ndig auf dem Webserver gespeichert sondern modular zusammen gesetzt F r die kleine Beispielanwendung der Depotverwaltung gen gt die in Abbil dung 5 17 beschriebene Aufteilung header inc php Session Daten gew hlter Bestand Liste mit Best nden Bediener Menu Inhalt footer inc ph 2 Copyright Info HTML Ende Abbildung 5 17 Aufteilung der Bedienf hrung In der header inc php beginnt der HTML Code Dort soll auch die PHP Session des Benut zers initialisiert werden Die Men f hrung soll auch einmalig in der Header Datei unter gebracht werden Der zweite Teil der HTML Ausgabe besteht aus dem eigentlichen Inhalt den der Benut zer ausgew hlt hat M chte er beispielsweise einen neue
135. in der Stift Herstellung lt hl gt Listing 4 3 Quellcode des Eingabeformulars PHP Endlich objektorientiert 215 4 PHP objektorientiert lt form action stifterzeugung php method post gt lt pre gt Farbe lt input name frmFarbe type text gt lt br gt lt input value Herstellen type submit gt lt br gt Sie haben die Session ID lt php echo session_id gt vom Server erhalten lt pre gt lt form gt lt body lt html gt Listing 4 3 Quellcode des Eingabeformulars Forts In der Datei die ber HTTP Post aufgerufen wird wird nun der Stift erzeugt und in die Session bergeben Der Quellcode der Datei ist in Listing 4 4 aufgef hrt lt php session_start require_once stift inc php frmFarbe _POST LfrmFarbe einStift new Stift frmFarbe _SESSION StiftContainer einStift lt html gt lt body gt Ein Stift der Farbe lt php echo einStift gt getFarbe gt wurde erzeugt lt br gt lt a href weiter php gt Weiter gehts lt ar lt br gt lt body gt lt html gt Listing 4 4 Objekterzeugung und Speicherung in der Session Die Ausgabe des Listings lautet berraschenderweise Ein Stift der Farbe rot wird erzeugt Ein Stift der Farbe rot wurde erzeugt Weiter gehts Der Stift der Farbe rot ist jetzt zerst rt Es stellt sich die Frage warum der Destruktor des Stifts aufgerufen wird obwohl das Stiftobjekt doch in der Session persistent gehalten werden soll Ist
136. in diesem Fall keine Bilanz im betriebswirtschaftlichen Sinne gemeint Unser Auftraggeber m chte dem Kunden an dieser Stelle die Statistik mit allen Gewinnen und Verlusten der Best nde sowohl in Euro als auch in Prozent pr sen tieren Wenn ein Aktienbestand noch nicht verkauft wurde also noch im Besitz des Anle gers ist sollen die aktuellen Kurse der B rse als Referenzdaten verwendet werden Wie Sie dies realisieren berl sst der Auftraggeber Ihnen als Entwickler Aus der Liste der Best nde kann der Benutzer nun einen Bestand ausw hlen der noch nicht verkauft wurde Den gew hlten Bestand merkt sich das Verwaltungsprogramm Somit kann der Benutzer den gew hlten Bestand verkaufen neue Aktien nachkaufen oder eine Dividende hinzuf gen Benutzer Aktienbestand w hlen Depotverwaltung Liste der Best nde mit ihren Bilanzen ermitteln Bestand ausw hlen Erfolgsmeldung Abbildung 5 5 Aktivit tsdiagramm Aktienbestand ausw hlen Abbildung 5 6 zeigt das Aktivit tsdiagramm um eine Dividendenzahlung in Euro zu einem bereits gew hlten Aktienbestand hinzuzuf gen Dies geschieht wiederum ber eine Eingabemaske der Depotverwaltung Die Eingabe des Benutzers wird gepr ft und die Daten des Bestands werden aktualisiert Wie blich endet das Szenario mit einer Erfolgsmeldung an den Benutzer Das Fallbeispiel der Depotverwaltung Benutzer Depotverwaltung Dividende hinzuf
137. ist auch die Fehlermeldung dass eine Dogge nicht miauen kann Nicki Hasso die Dogge grrr miau wow miau Fatal error Call to undefined method Dogge miauen in PHP Endlich objektorientiert 245 4 PHP objektorientiert 4 2 2 Aufbau von Bekanntschaften Assoziationen Die Vererbung ist eine statische Abh ngigkeit von Klassen die zur Entwicklungszeit festgelegt wird Die Bekanntschaft von Objekten untereinander entsteht jedoch erst zur Laufzeit Nachdem ein Objekt ein anderes Objekt kennt kann es Methoden auf dem bekannten Objekt ausf hren Als Beispiel wird die Beziehung einer Rechnungsposition zu einem Artikel verwendet Das Klassendiagramm der Abbildung 4 6 gibt dabei die Eigenschaften beider Klassen vor Aus Sicht des Artikels ist die Bindung sehr lose ein Artikel kennt keine Rechnungs positionen Er kann aber auf vielen Rechnungspositionen enthalten sein Eine Rechnungsposition kennt stets genau einen Artikel der in einer gewissen Menge eingekauft werden soll Diese Abh ngigkeit besteht bereits beim Erstellen der Rech nungsposition Zus tzlich wird der Einzelpreis des Artikels und ggf ein Rabatt auf die jeweilige Rechnungsposition festgehalten Rechnungsposition Menge ID Einzelpreis Name Rabatt Beschreibung Einkaufspreis Verkaufspreis MwSt Satz Abbildung 4 6 Beziehung zwischen einer Rechnungsposition und einem Artikel Listing 4 33 zeigt die Implementierung einer
138. kann dem Stift eine neue Farbe geben es handelt sich um einen so genannten Setter der eine Eigenschaft neu setzt Ob das Setzen des bergebenen Parameters erlaubt ist kann die Klasse selbst in der Pro grammierung der Set Methode entscheiden Damit wird die Datenkapselung der Objek torientierung gew hrleistet Die zweite Methode gibt den Wert der Eigenschaft zur ck Es handelt sich also um eine Get Methode Abbildung 4 1 skizziert zun chst auf der linken Seite ein Stiftobjekt und auf der rechten Seite das UML Klassendiagramm der Designphase Stift Farbe String Farbe Schwarz __construct String __destruct String getFarbe String setFarbe String Abbildung 4 1 Das erste zu erstellende Objekt und das passende Klassendiagramm Umsetzung objektorientierter Grundlagen Dieses Klassendiagramm wird nun direkt in PHP Code umgesetzt Die UML Klassen diagramme in der Designphase sollten so pr zise sein dass Sie keine M glichkeit zur Interpretation mehr zulassen Meinung Aus Erfahrung und zur Vergleichbarkeit mit anderen objektorientierten Sprachen sollte jede Klasse in eine separate Datei geschrieben werden Diese Datei sollte genauso hei en wie der Name der Klasse Da es keinen Sinn macht eine Klassendefinition direkt zu verwenden und diese stets von anderen PHP Dateien eingebunden wird sollte die Datei stift inc php genannt werden lt php class Stift private farbe Eigenschaft des Stif
139. localhost boerse http flocalhost ktienve X Depotverwaltungsprogramm Gew hlter Bestand E ON laden l speichern bersicht w hlen l neu hinzukaufen l neue Dividende l verkaufen Es wurden 1 Datens tze erfolgreich geschrieben Copyright by Dr Frank Dopatka Fertig Lokales Intranet Ar Q1 Abbildung 5 34 Meldung nach erfolgreicher Speicherung Hinweis Testen Sie einen Fehlerfall indem Sie den MySQL Server im XAMPP Control Panel deaktivieren bevor Sie auf die Schaltfl che speichern klicken 392 entwickler press Das Fallbeispiel der Depotverwaltung Den Erfolg k nnen Sie pr fen indem Sie ber phpMyAdmin nochmals die Verwaltung des Datenbankservers aufrufen und sich dort den Inhalt der Aktientabelle anzeigen las sen Z m m m Eaa localhost localhost boerse aktien phpMyAdmin 3 2 0 1 Windows Internet Explorer Jog OO A rocahostphomednind s PORRE I7 Datei Bearbeiten Ansicht Favoriten Extras 2 57 Favoriten 88 zu localhost localhost boe X http flocalhost Aktienverwal Php yAdmin g Server localhost gt Datenbank boerse gt E Tabelle aktien 1 Anzeigen Struktur PSaL Suche Einf gen Exportieren FEjlmportieren g pa 3 g p p Operationen Leeren l schen Datenbank 9 Zeige Datens tze 0 0 1 insgesamt die Abfrage dauerte 0 0005
140. lt body gt lt php data Array datal2 0 datal 5 0 0 datal8 Hallo Listing 2 16 L schen eines Elements sowie L schen des gesamten Datenfelds 30 entwickler press Grundlegende Syntax unset data l8 l schen eines Elementes echo var_dump data lt br2 data Array leeren des Arrays echo var_dump data lt br2 unset data l schen des Arrays echo var_dump data lt br gt 2 lt body gt lt html gt Listing 2 16 L schen eines Elements sowie L schen des gesamten Datenfelds Forts Die Ausgabe dieses Skripts lautet array 2 2 gt int 0 5 gt float 0 array 0 NULL Mehrdimensionale Datenfelder Genauso dynamisch wie Sie Elemente in einem Feld verwalten k nnen k nnen Sie auch Felder in einem Feld verwalten Das f hrt zu mehrdimensionalen Arrays Eine M glich keit ein mehrdimensionales Array anzulegen zeigt Listing 2 17 Dort ist auch der Zugriff auf das mehrdimensionale Datenfeld dargestellt Die Ausgabe ist identisch mit der Reihenfolge in dem die einzelnen Elemente angelegt worden sind lt html gt lt body gt lt php kunden array array Frank Dopatka array Uli M ller array Max Mustermann DB echo kunden 0 kunden 0 1 lt br gt echo kunden 1 0 kunden 1 1 lt br gt 2 echo kunden 2 0 kunden 2 1 lt br gt 2 lt body gt lt html gt Listing 2 17 Erstes mehrdimensionales Date
141. lt include gt gt und lt lt extend gt gt Beziehungen zwischen Anwendungsf llen Die Grenze zwischen einer lt lt extend gt gt Beziehung und einer Vererbung ist flie end und liegt im Ermessen des Analytikers Als Regel kann man aufstellen dass die lt lt extend gt gt Beziehung meist nur dann benutzt wird wenn sich zwei Anwendungsf lle nur in genau einer Eigenschaft unterscheiden Beispiel Was unterscheidet eine Bestellung von einer Eilbestellung Eine Eilbestellung soll schneller am Ziel ankommen Aber wie ist diese besondere Bestellung gekennzeich net was macht sie aus Eine Eilbestellung besitzt im Gegensatz zu einer normalen Bestellung eine Priorit t Genau diese Priorit t erweitert eine gew hnliche Bestel lung um das Merkmal des schnellen Versands Ob sp ter daraus zwei separate Klassen erstellt werden oder lediglich ein Priorit ts Flag zu einer gew hnlichen Bestellung hinzugef gt wird bleibt den Entwicklern berlassen Die Aussage dass eine Eilbestellung eine spezielle Bestellung ist triff auf jeden Fall zu sodass die Vererbung auch nicht falsch sein kann Abbildung 3 32 zeigt die Visualisierung der lt lt extend gt gt Beziehung Wenn Sie das Unter scheidungsmerkmal ermittelt haben ist es sehr sinnvoll dieses Merkmal auch im UML Diagramm festzuhalten damit diese Erkenntnis nicht im sp teren Projektverlauf verlo ren geht Bestellung lt lt extends gt gt Eil Bestellung setzen einer Prio
142. nnen haben Sie bereits in den vorherigen Kapiteln erfahren Hier wird die Definition der Klassen der Eigenschaften und Methoden sowie der Beziehungen der Klassen unter einander fokussiert Ebenso wurde bereits ein Aktivit tsdiagramm aus Abbildung 4 9 in Listing 4 36 in einer Methode umgesetzt Realisierung von Klassengeflechten Die Beziehung zwischen einem UML Sequenzdiagramm und einer PHP Klasse wurde jedoch noch nicht vorgestellt Wie ein Aktivit tsdiagramm zeigt ein Sequenzdiagramm einen Ablauf der jedoch weniger einen Gesch ftsprozess abbildet sondern eher die Interaktion von Objekten in den Vordergrund stellt Der Quellcode aus Listing 4 49 ist ein Ausschnitt aus dem bereits vorgestellten Quellcode des Listings 4 41 der den Test des Klassengeflechts zwischen Kunden Rechnungen Rechnungspositionen und Artikeln realisiert Es wird also eine Kommunikation von Objekten von vier verschiedenen Klassen abgebildet Dieser existierende Quellcode soll in diesem Beispiel in einem Sequenzdiagramm auf Muschelebene dokumentiert werden rechnungen k1 gt getRechnungen echo lt b RECHNUNG Nr rechnungen gt getID vom rechnungen 0 gt getDatum lt b gt lt br2 echo Kunde rechnungen gt getKunde gt getName lt br gt 2 echo Rabatt auf die Gesamtrechnung rechnungen getRabatt br gt positionen rechnungen gt getPositionen i 0 foreach positionen as index gt p ech
143. nnen mit Datenflussdiagrammen oder Sequenzdiagrammen der UML Kap 3 2 6 erstellt werden Die Entwickler implementie ren erste Klassen und Methodenr mpfe die von den Teamleitern begutachtet werden Bei Unklarheiten werden Fachexperten des Kunden herangezogen In der f nften und letzten Phase werden die Features ausprogrammiert Dies erfolgt unter Verwendung von Unit Tests und Pair Reviews n chstes Unterkapitel Abbildung 3 27 fasst den Vorgang der 5 Phasen nochmals zusammen PHP Endlich objektorientiert 157 3 Vorgehensweise bei der Softwareentwicklung l Il in IV V fachliches Feature Liste Abarbeitung der technisches Design Implementierung Gesamtmodell erstellen Features planen eines Features eines Features erstellen einige Ca 2 Wochen f r jedes Feature __ Tage a eines Teams Abbildung 3 27 Vorbereitung zur Erstellung von Testf llen Paarprogrammierung und Peer Review Die hier vorgestellte agile Methodik betrifft wie auch das testgetriebene Entwickeln den Vorgang des Codings selbst Die Paarprogrammierung kann mit anderen agilen Metho den kombiniert werden wie mit der test oder featuregetriebenen Entwicklung Die zen trale Idee dabei ist dass zwei Entwickler mit hnlich gro er Erfahrung an einem einzi gen Arbeitsplatz sitzen mit einer Tastatur und einem Bildschirm Zu jedem Zeitpunkt schreibt nur einer der beiden Entwickler den Quellcode Dieser Ent wickler
144. noch anzumerken dass der verkaufte Bestand in der bersicht nicht mehr durch den Link w hlen ausgew hlt werden kann da der Benutzer ja keine Aktio nen mehr mit einem verkauften Bestand durchf hren kann Die Anzeige in der ber sicht dient also nur noch der statistischen Auswertung Statt des Links erscheint die Anmerkung lt lt VERKAUFT gt gt an dem Bestand in Abbildung 5 31 http localhost Aktienverwaltung 004 uebersicht php Windows Internet Explorer BAX O 7 LE hto ilocahost x x a TIE Datei Bearbeiten Ansicht Favoriten Extras pr Favoriten http localhost Aktienverwaltung 004 uebersicht php Depotverwaltungsprogramm Gew hlter Bestand E ON laden speichern bersicht w hlen l neu l hinzukaufen neue Dividende verkaufen E ON DEO00ENAG999 lt lt VERKAUFT gt gt 180 St ck am 25 05 2009 gekauft und 156 Tage gehalten EK akt Wert gesamt incl Kosten EK akt Kurs pro Aktie Differenz pro Aktie Dividenden Ges Diff incl Einnahmen amp Kosten Zinsen Jahr Copyright by Dr Frank Dopatka Fertig Lokales Intranet fa K o Abbildung 5 31 Die positive Gesamtbilanz der Trading Aktionen Der dritte Prototyp Zugriff auf die Datenbank Nachdem zun chst die Fachlogik erstellt und getestet wurde erfolgte im zweiten Schritt das Aufsetzen einer Bedienoberfl che in Form von HTML Formularen die serverseitig mit der Fachlogik kommunizieren
145. noch auf die MySQL Datenbank zu so wird auch noch die Sprache SQL Structured Query Language in die Datei integriert Es gilt also den berblick ber diese Sprachen zu behalten Dieses Buch soll dabei durch ein strukturiertes Vorgehen unterst tzen 2 1 Grundlegende Syntax Als erster Schritt f r das Erlernen einer neuen Programmiersprache steht das Hallo Welt Programm Das hat zum Ziel eine erste Ausgabe als ersten Erfolg zu erreichen Nach der Installation des XAMPP Pakets befindet sich XAMPP standardm ig unter MS Windows im Verzeichnis C Programme XAMPP Dort wird das Unterverzeichnis htdocs angelegt Das ist das Basisverzeichnis f r Ihre selbstgeschriebenen Dateien Erstellen Sie in einem Texteditor im htdocs Verzeichnis die Datei hallo html mit folgendem Inhalt PHP Endlich objektorientiert 13 2 Die Sprache PHP Prozedural lt html gt lt head gt lt title Hallo lt title gt lt head gt lt body gt lt h1 gt Hallo lt h1 gt lt body gt lt html gt Listing 2 1 Die erste Datei hallo html im htdocs Verzeichnis des XAMPP Servers Um die Datei nun ber den Webserver aufzurufen m ssen Sie diesen zuerst ber das XAMPP Control Panel starten Klicken Sie dazu auf die Start Schaltfl che des Webser vers Abb 2 1 XAMPP Control Panel Application Jo XAMPP Control Panel She Apache Friends Edition Modules Bort Check Svc Apache Running 1 Ad
146. r diesen Fall k nnen Klassen als abstrakt definiert werden Von einer abstrakten Klasse kann man zwar vererben jedoch keine Objekte erstellen Der new Befehl kann also nicht angewendet werden In einer Klasse k nnen Sie ebenso einzelne Methoden mit ihren Ein und Ausgabeparametern deklarieren ohne jedoch den Inhalt der Methode auszu programmieren Wenn Sie von dieser Klasse vererben wird die abstrakte Methode mit vererbt Wenn Sie von der Kindklasse dann konkrete Objekte erstellen wollen sind Sie gezwungen die deklarierten abstrakten Methoden auszuprogrammieren Ein Interface k nnen Sie insofern mit einer abstrakten Klasse vergleichen als Sie auch von einem Interface keine Objekte anlegen k nnen Bereits zu Beginn der Einf hrung in die Objektorientierung wurde beschrieben dass die Eigenschaften einer Klasse ausschlie lich ber Methoden zugreifbar sein sollen Als Schlussfolgerung interessiert Sie die interne Verwaltung der Eigenschaften nicht Das Einzige was Sie als Anwender einer fremden Klasse wissen m ssen sind die Namen der Methoden und deren Ein und Aus gabe Parameter In einem Interface deklarieren Sie reine Funktionalit t also Methoden mit deren Parametern Eine Klasse die das Interface implementiert muss die dort dekla rierten Methoden dann ausprogrammiert haben Eine Klasse kann mehrere Interfaces implementieren Eine zweite Klasse kann eine Referenz auf das Interface besitzen und dann ein Objekt der Klasse anlegen
147. schicht wird meist durch eine relationale Datenbank aufgebaut die aus Datenbanktabel len besteht und die ber die Sprache SQL Structured Query Language von der Anwendunsgsschicht aus angesprochen wird PHP Endlich objektorientiert 83 2 Die Sprache PHP Prozedural 4 READ gt s Ka 7 4 7 Ausgabe 1 GET artikel php Internet N 8 Ausgabe der artikel php Client Ss t Web Server 5 SQL Apache 6 Daten l 2 OPEN 3 READ y I Datenbank artikel php MYSQL Abbildung 2 11 3 Schichten Architektur Client PHP und MySQL Der Aufruf erfolgt indem zun chst wie gewohnt vom Internetbrowser des Clients eine Anfrage auf eine PHP Datei des Webservers ber das HTTP Protokoll abgesetzt wird Der Webserver liest diese Datei dann aus seinem Dateisystem aus und bergibt sie an den PHP Interpreter hnlich wie Befehle zum Zugriff auf das Dateisystem des Servers oder zum ffnen einer FTP Verbindung zum Datenaustausch bietet PHP einen Befehls satz zum Zugriff auf eine MySQL Datenbank an Dabei k nnen SQL Befehle abgesetzt werden die lesenden oder schreibenden Zugriff auf die Datenbank erm glichen Ein SELECT Kommando holt beispielsweise Daten aus der Datenbank ab und speichert diese Daten in einer zweidimensionalen Datenstruktur also hnlich wie in einer Tabelle f r PHP ab Das PHP Skript durchl uft dann diese Datenstruktur und erzeugt auf dieser Basis eine dynamische HTML Ant
148. sek 3 boerse 1 SELECT FROM aktien LIMIT 0 30 boerse 1 Messen Bearbeiten SQL erkl ren PHP Code erzeugen Aktualisieren E aktien 30 Datens tze beginnend ab 0 untereinander 2 g w angeordnet und wiederhole die Kopfzeilen nach 100 Datens tzen Optionen ID name isin url anzahl kaufkurs kaufdatum kaufgeb X 1 EON DEO00ENAG999 http www boerse 90 23 54 2009 04 24 9 90 si l i Lokales Intranet Ar R o Abbildung 5 35 Inhalt der Datenbanktabelle nach erfolgreicher Speicherung Im zweiten Teil soll jetzt der bestehende Datenbestand wieder ausgelesen werden Dazu werden alle Fenster des Internetbrowsers beim Client geschlossen um die PHP Session zu beenden Nach einem erneuten ffnen erscheint dann wieder der in Abbildung 5 36 dargestellte Willkommensbildschirm A http Alocalhost Aktienverwaltung 004 start php Windows Internet Explorer Jog go hto localhost 23 Google us Datei Bearbeiten Ansicht Favoriten Extras E 4x 57 Favoriten E http localhost Aktienverwaltung 004 start php Depotverwaltungsprogramm Gew hlter Bestand Herzlich Willkommen Copyright by Dr Frank Dopatka Lokales Intranet far R o Abbildung 5 36 Willkommensbildschirm nach neuer Session PHP Endlich objektorientiert 393 5 Projektpraxis Es wurde bereits programmiert dass die Schaltfl che speichern inaktiv ist wenn keine Best n
149. sich die drei x und y Koordinaten der Punkte unterscheiden Dazu kann man ein Gegenbeispiel erzeugen P1x 1 Ply 1 P2x 2 P2y 2 P3x 4 P3y 4 Auch hier wird eine Strecke und kein Dreieck erzeugt Im Konstruktor eines Dreiecks m ssen Sie mit zwei der drei Punkten ber die Geradengleichung y ax b eine Gerade erzeugen und pr fen ob der dritte Punkt auf dieser Geraden liegt Wenn dies der Fall ist darf das Dreieck nicht erzeugt werden PHP Endlich objektorientiert 183 3 Vorgehensweise bei der Softwareentwicklung Die Existenz des Dreiecks ist also von drei Punkten abh ngig und jedes Dreieck kennt seine drei Punkte Wenn ein Punkt verschoben wird ver ndern sich auch alle Dreiecke die aufgrund dieses Punktes existieren Auch hier m ssen Sie darauf achten dass stets alle Dreiecke g ltig bleiben Als N chstes m ssen Sie sich fragen ob ein Punkt auch seine Dreiecke kennen muss Auf den ersten Blick scheint dies nicht n tig zu sein Was jedoch geschieht wenn Sie einen Punkt l schen In diesem Fall muss dieser zu l schende Punkt auch allen angeschlosse nen Dreiecken den Befehl geben sich zu l schen da diese Dreiecke nicht ohne diesen Punkt existieren k nnen Jeder Punkt muss also auch eine Liste mit angeschlossenen Dreiecken verwalten Und wenn ein Dreieck gel scht wird muss es allen drei Punkten ebenso mitteilen dass es nicht mehr existiert Denn ansonsten w rden diese Punkte noch Referenzen auf ein Dreieck besitzen
150. sind k nnen sie nicht direkt miteinander kommunizieren In einem Sequenzdiagramm stehen Objekte im Vordergrund Abbil dung 3 74 zeigt die Erzeugung des Objekts einX der Klasse X also den Aufruf des Konst ruktors Die Schreibweise wurde aus den Objektdiagrammen bernommen und ist somit innerhalb der UML konsistent Auch anonyme Objekte k nnen dargestellt werden Die gestrichelte Linie wird als Lebenslinie bezeichnet und der Balken als Zeitraum in dem das Objekt aktiv Methoden bearbeitet Dieser Balken wird Aktivierungsbalken genannt In dieser Zeit besitzt das Objekt den Kontrollfluss und ist aktiv an Interaktionen beteiligt Dieser Zustand wird als Focus of Control bezeichnet Das abschlie ende Kreuz stellt den Destruktoraufruf und damit die Zerst rung des Objekts im Speicher dar Abbildung 3 74 Lebenslinie eines Objekts im Aktivit tsdiagramm Ein Sequenzdiagramm beschreibt das Verhalten eines Systems indem es die zeitliche Ordnung von Methodenaufrufen spezifiziert Diese Aufrufe werden auch als Botschaf ten von au en oder als Stimuli in Zustandsdiagrammen bezeichnet Nicht der pr zise Zeitpunkt wann solch ein Freignis auftritt ist ausschlaggebend son dern welche Methodenaufrufe vor und welche nach einem bestimmten Freignis auftre ten m ssen Die Zeitachse verl uft in einem Sequenzdiagramm von oben nach unten sollte aber nicht als absolute Zeit verstanden werden Es k nnen lediglich kausale zeitliche
151. sind private gesetzt da sie nach der Erzeugung des Aktienobjekts nur noch ausgelesen und nicht ge ndert werden sollen lt php class Aktief private name Name der Aktie Listing 5 2 Die Klasse der Aktie PHP Endlich objektorientiert 347 5 Projektpraxis private isin ISIN Nummer der Aktie private url URL zur Aktie zum Abrufen des aktuelle Kurses public function __construct name isin url this gt setName name this gt setISIN isin this gt setURL ur public function getName return this gt name private function setName value this gt name value public function getISIN return this gt isin private function setISIN value this gt isin value public function getURL return this gt url private function setURL value this gt url value Listing 5 2 Die Klasse der Aktie Forts Mit dieser Klasse wird der Test aus Listing 5 1 erfolgreich bestanden Erkennen Sie die andere Vorgehensweise der testgetriebenen Entwicklung im Vergleich zu herk mm licher Programmierung Dann h tten Sie mit der Implementierung von Listing 5 2 begonnen Das Erf llen der zuvor definierten Tests erh ht erfahrungsgem auch den Spa an der Implementierung und die Motivation der Entwickler die bei den Werten agiler Entwicklung einen hohen Stellenwert hat Schon jetzt k nnen wir mit dem zweiten Test beginnen Aktien kann man kaufen Dies geschieht ber
152. stets im ersten Schritt gepr ft ob die entsprechende Methode im aktuellen Zustand berhaupt ausgef hrt werden darf Ist dies nicht der Fall so gibt die Methode FALSE zur ck Ansonsten erfolgt ein Zustandswechsel und die entsprechende Methode gibt den Wahrheitswert TRUE zur ck Zu ber cksichtigen ist noch dass nicht jede Reservierung in einer erfolgreichen Buchung endet Dies geschieht dann wenn die Reservierung zu sp t in eine Buchung umgewan delt wird und bereits viele andere Kunden den Flug ausgebucht haben Da jedoch in die sem Beispiel kein vollst ndiges Reservierungssystem implementiert werden soll wird die Reservierung per Zufallssystem in eine Buchung umgewandelt Dazu wird mit srand microtime 1000000 ein Zufallszahlengenerator auf Basis der Systemzeit initiali siert Der Befehl zufall rand 0 2 gibt dann eine Zufallszahl zwischen 0 und 2 zur ck Ist die erstellte Zahl gr er als 1 so gilt die Buchung als erfolgreich ansonsten nicht Der Zustandswechsel innerhalb einer Methode wird dann wiederum in der Eigenschaft zustand festgehalten lt php class AirlineReservierung implements iFlugreservierungf init l reserviert 2 gebucht 3 storniert private zustand public function _construct this gt zustand Listing 4 51 Die Interfaceimplementerung und Umsetzung des Zustandsautomaten Realisierung von Klassengeflechten public function getZustand switch this gt zustand case Q return ini
153. str Hall chen an si ber den Bergpa echo addcslashes str lt br gt echo addslashes str lt br gt 2 echo str_replace si Frank str lt body gt lt html gt Listing 2 54 Test der Funktionen zum Ersetzen von Zeichen 62 entwickler press Grundlegende Syntax Tabelle 2 14 zeigt Funktionen die Zeichen oder Zeichenketten umwandeln Bei dem Ver gleich eines eingegebenen Benutzernamens mit einem Benutzer Eintrag aus einer Daten bank wird beispielsweise gern die Funktion strtolower auf beiden Seiten des Gleich Ope rators verwendet Dadurch ist die Eingabe des Benutzernamens nicht case sensitiv Die Funktionen implode und explode zur Umwandlung von Zeichenketten in Datenfelder und umgekehrt werden oft beim Laden und Speichern von Daten in Dateien verwendet Funktion Bedeutung erg strrev str invertiert die Zeichenkette str erg strtolower str wandelt s rin Kleinbuchstaben um erg strtoupper str wandelt Ss rin Gro buchstaben um erg ord char gibt den ASCII Wert des Zeichens zur ck char chr byte gibt das Zeichen des eingegebenen ASCII Werts zur ck arr explode sep str trennt s ranhand von Ssepaus und liefert ein Datenfeld zur ck str implode sep arr wandelt ein Datenfeld in eine Zeichenkette um und f gt zwischen den Elementen den Separator sep ein Tabelle 2 14 Funktionen zur Umwandlung von Zeichenketten Listing 2 55 testet die Funktionen u
154. t der erstellten Skripte beitragen sollen 5 2 1 Ein Styleguide f r guten Quellcode Im ersten Schritt werden dabei Regeln f r die Erstellung von PHP Quellcode aufgestellt Diese Regeln m ssen nicht zwingend eingehalten werden Sie k nnen auch ohne diese Regeln lauff hige PHP Skripte schreiben jedoch hat die Praxis gezeigt dass gerade bei einer gr eren Anzahl an Skripten die Wartung und Fehlerkorrektur wesentlich schwie riger wird Dies gilt auch f r den Fall dass sich andere Entwickler in Ihren Quellcode einarbeiten m ssen Im Folgenden werden 16 goldene Regeln f r guten PHP Quell code vorgestellt 1 Schreiben Sie f r jede PHP Klasse eine Datei die genauso hei t wie die Klasse selbst Dies erleichtert die bersicht im Dateisystem und erm glicht die Programmierung eines automatischen Klassenladers Dies ist auch bei anderen Sprachen wie Java ver Erstellung von gutem Quellcode 10 11 breitet Da Klassen immer von anderen Skripten eingebunden werden sollte die Dateiendung einer Klasse stets inc php lauten Schreiben sie den ersten Buchstaben des Klassennamens stets gro sowohl im Datei namen als auch in der Klassendefinition Erstellen Sie also eine Aktie inc php mit der Deklaration class Aktief Verwenden Sie stets die Singularform bei der Namensge bung Schreiben Sie den ersten Buchstaben von Eigenschaften und Methoden stets klein Wenn es sich um ein zusammengesetztes Wort handelt schreiben S
155. t wie einen F n mit in andere L nder genommen haben und dort an das Stromnetz anschlie en wollten Dort finden Sie jedoch eine andere Steckdose bzw Schnittstelle vor Damit Sie Ihren F n betreiben k nnen ben tigen Sie einen Adapter Auch eine gr ere PHP Anwendung muss mit anderen Anwendungen ber Schnittstel len kommunizieren Dabei kann es auch vorkommen dass eine Kommunikation zu neuen Schnittstellen erforderlich wird die bei der Erstellung der PHP Anwendung noch nicht existierten Um den Vergleich mit dem Adapter f r den F n zu wahren entfernen viele Programmie rer die Steckdose und verlegen neue Kabel bis zum Z hlerkasten um ihren F n anzu schlie en Aber auch in der Softwareentwicklung k nnen Sie einen Adapter bauen Der Adapter in der Softwareentwicklung wird eingesetzt wenn eine existierende Klasse verwendet werden soll deren Schnittstelle nicht der ben tigten Schnittstelle entspricht Dies tritt insbesondere dann auf wenn Klassen verwendet werden sollen die zur Wie derverwendung konzipiert wurden beispielsweise Werkzeugsammlungen oder Klas senbibliotheken 3 lt lt uses gt gt lt lt interface gt gt Dienstbenutzer SUSS _ Zielschnittstelle _ 7 anfrage _ lt lt implements gt gt _ Adapter x this gt service Abbildung 5 42 Das Design Pattern Adapter als UML Diagramm Diese stellen ihre Dienste durch klar definierte Schnittstellen zur Ver
156. teilnehmer gt lt teilnehmerliste Listing 4 63 Beispielhafte XML Datei PHP Endlich objektorientiert 297 4 PHP objektorientiert lt seminar gt lt seminare gt Listing 4 63 Beispielhafte XML Datei Forts Profitipp Es kann sein dass die Verarbeitung von gro en XML Dateien einige Zeit in Anspruch nimmt Dann kann es vorkommen dass Sie eine Timeout Meldung in ihrem Web Browser erhalten Die Ursache liegt darin dass in der php ini eine maxi male Ausf hrungszeit f r ein PHP Skript von 30 oder 60 Sekunden im Parameter max_execution_time vorgesehen ist Dadurch wird eine hohe Serverlast durch fehler hafte PHP Skripte verhindert Diesen Wert k nnen Sie bei Bedarf erh hen beispiels weise auf 600 um ein PHP Skript maximal 10 Minuten auszuf hren Ein weiterer Timeout liegt beim HTTP Server So ist bei dem Apache Web Server in der httpd conf der Parameter Timeout standardm ig auf 300 Sekunden also auf 5 Minuten f r eine laufzeitbedingte Unterbrechung gesetzt Auch hier k nnen Sie bei Bedarf eine Erh hung vornehmen XML als Datenstrom SAX Im ersten Beispiel wird die Funktionsweise des SAX Parsers von PHP 5 erl utert Dazu wird zun chst eine Teilnehmerklasse ben tigt die f r das Beispiel stark vereinfacht wurde Um auf die zahlreichen Get und Set Methoden zu verzichten wurden die Eigen schaften der Klasse in Listing 4 64 entgegen dem Prinzip der Datenkapselung der Objektorientierung als public d
157. trahiert wird Beispiel Ein Kunde hat Ihnen das Beispiel aus Abbildung 3 48 aufgezeichnet welches Sie im n chsten Projekt in einer PHP Anwendung realisieren sollen Der Kunde m chte gern ein Tool programmiert bekommen mit dem man beliebig viele Punkte und Dreiecke in ein bereits bestehendes Koordinatensystem eintragen kann PHP Endlich objektorientiert 181 3 Vorgehensweise bei der Softwareentwicklung Abbildung 3 48 Von einem Kunden erstelltes Beispiel Bevor Sie nun ber dieses Beispiel diskutieren sollten Sie es in ein Objektdiagramm berf hren Diese Umwandlung ist relativ einfach viele Entwickler sehen sie deshalb als zu trivial an Der Vorteil der Objektdiagramme besteht jedoch darin dass Sie jedes belie bige Beispiel auf diese Weise in eine einheitliche Notation berf hren k nnen genau dies ist der Sinn der UML Zus tzlich sind Objektdiagramme so nah am Beispiel orien tiert dass der Kunde die Objektdiagramme selbst noch lesen und dadurch wie auch Anwender und andere Stakeholder einen Einstieg in die Modellierung finden kann Was also erkennen Sie in Abbildung 3 48 Es sind 3 Dreiecke und 9 Punkte zu erkennen Es gibt also Dreiecke und Punkte Damit haben Sie bereits die Klassen identifiziert Wie stehen die Klassen in Verbindung zueinander Ein Punkt kann alleine existieren siehe P6 Ein Dreieck kennt immer genau drei Punkte Ein Punkt kann aber auch mehrere Dreiecke kennen siehe P3 Aus was bestehen
158. unabh ngig von einer Programmiersprache Wir konzentrieren uns zun chst auf die Eigenschaften Z hler und Nenner sowie auf den Kon struktor und auf die Methoden der Addition einer ganzen Zahl und eines anderen Bruchs Die Pr fung der G ltigkeit eines Bruchs die ja nur bei einem Nenner ungleich 0 gegeben ist wird zun chst zur ckgestellt Die erste Realisierung der Bruchklasse sehen Sie in Listing 4 12 Die Vorbelegung des Z hlers und Nenners mit Standardwerten kann PHP leisten indem die Variablen vorbelegt werden Damit erhalten Sie auch gleichzeitig den Integer Daten typ Zus tzlich werden f r den Z hler und den Nenner passende Get und Set Metho den definiert In der Set Methode des Nenners kann sp ter die Pr fung der Eingabe erfolgen die ungleich 0 sein muss Der Konstruktor des Bruchs ruft dann die Set Metho den auf und belegt die Eigenschaften des neuen Objekts mit den bergebenen Werten Umsetzung objektorientierter Grundlagen Problematisch an der Vorgabe aus dem Klassendiagramm ist die Existenz mehrerer add Methoden die sich lediglich anhand des Datentyps unterscheiden In der Deklaration einer PHP Funktion k nnen Sie jedoch keinen Datentyp angeben wie dies bei Java oder VB NET m glich ist Dort w rden Sie mehrere add Methoden schreiben die sich nicht im Namen jedoch am Datentyp des bergebenen Eingabeparameters unterscheiden Der Java oder NET Interpreter w rde dann die passende Methode ausw hlen Genau d
159. von land1 x gt Deutschland bei einem Objekt x der Laender Klasse Da die Eigenschaft pri vat deklariert ist ist dieser Zugriff zun chst verboten ber die __get Methode k nnen Sie einen solchen Zugriff jedoch innerhalb der Klasse definieren So gibt die __get Methode das entsprechende L nderk rzel aus dem assoziativen Datenfeld zur ck Wie bei der herk mmlichen Set Methode der Stiftklasse kann die allgemeine __set Methode Elemente aus dem existierenden Datenfeld ver ndern indem beim ersten Ein gabeparameter das Land und im zweiten Eingabeparameter das neue L nderk rzel bergeben wird lt php class Laender private laender array Deutschland gt D England gt EN public function __get var return this gt laender var Listing 4 10 L nderk rzel und Get Set Verwaltung Umsetzung objektorientierter Grundlagen public function __set var wert this gt laender var wert Listing 4 10 L nderk rzel und Get Set Verwaltung Forts In Listing 4 11 wird nun ein neues L nderobjekt angelegt Es sieht so aus als k nnten Sie im Aufruf x gt Deutschland DE den Wert einer ffentlich zug nglichen Eigenschaft mit dem Namen Deutschland direkt berschreiben Dies w rde der Datenkapselung der Objektorientierung widersprechen In Wirklichkeit wird innerhalb der Klasse jedoch die __set Methode aufgerufen Dort k nnen durchaus berpr fungen der Eingabe in die sem Fall der Eingabe
160. vorgestellt die Zeitinformationen in einem Datenfeld zur ck gibt lt html gt lt body gt lt php arr gettimeofday var_dump arr lt body gt lt html gt Listing 2 56 Test der gettimeofday Funktion PHP Endlich objektorientiert 65 2 Die Sprache PHP Prozedural Die Ausgabe der Funktion lautet array 4 sec gt int 1243976506 usec gt int 171882 minuteswest gt int 120 dsttime gt int 1 Das assoziative Feld bein haltet die vergangenen Sekunden und Mikrosekunden seit dem 01 01 1970 00 00Uhr Die Variable minuteswest beinhaltet die Minuten westlich von der GMT Zone Greenwich Mean Time in diesem Fall bestehen also zwei Stunden Differenz Die dsttime beinhaltet die Korrektur durch Sommerzeit Funktion Bedeutung arr gettimeofday gibt die aktuelle Zeit in einem Datenfeld zur ck erg microtime gibt den aktuellen UNIX Zeitstempel in Mikrosekunden seit dem 01 01 1970 00 00Uhr zur ck erg time args gibt den aktuellen UNIX Zeitstempel sekundengenau in der Formatierung der Argumente zur ck erg mktime std min sek ermittelt den UNIX Zeitstempel anhand der Zeitangabe monat tag jahr Tabelle 2 18 Zeitfunktionen Die zweite vorgestellte Funktion ist microtime mit ns Genauigkeit Diese Funktion eignet sich gut zur Laufzeitmessung von PHP Quellcode Der resultierende Zeitstempel nach der Messung der Startzeit wird zerlegt und gespeichert Aus der St
161. wie gewohnt ber den entsprechenden Namens raum ein neues Objekt dieser Klasse anlegen lt html gt lt body gt lt php phar new Phar kv phar my phar require_once phar my phar Kundenverwaltung inc php use myERP kv as x kv new x Kundenverwaltung gt lt body gt lt html gt Listing 4 87 Zugriff auf eine Klasse im Archiv 4 6 3 PHP in Verbindung mit Windows Servern Da PHP aus der Open Source Gemeinde stammt und in Verbindung mit dem stabilen und weit verbreiteten Webserver Apache seine Ber hmtheit erlangt hat Stichwort LAMP Server und XAMPP zur vereinfachten Installation mangelte es lange Zeit an der Unterst tzung und Integration in die Microsoft Windows Welt Obwohl PHP auf Win dows Betriebssystemen schon lange problemlos installiert werden konnte Stichwort WAMP Server ist die wesentlich h here Verbreitung im Linux Umfeld lange auch durch die h here Verf gbarkeit von Linux Servern zu erkl ren gewesen PHP Endlich objektorientiert 323 4 PHP objektorientiert Obwohl Microsoft mit den Active Server Pages und deren Integration in die NET Welt und in den Internet Information Server IIS eine eigene Strategie verfolgt die sogar in Konkurrenz zu PHP steht verst rkt Microsoft seit dem IIS 6 die Anbindung zur Sprache PHP Dies geschieht ber eine FastCGlI Schnittstelle Common Gateway Interface die man kostenlos herunterladen kann Zus tzlich dazu bietet Microsoft finanzielle Unterst
162. zu Baumstrukturen zusammen um Teil Ganzes Hierarchien darzustellen Es erm glicht es einzelne Teile und das Ganze also eine Gruppe gleich zu behandeln Abbildung 5 43 skizziert das Kompositum mit einer Methode zeichnen die jedes Element der Gruppe berschreibt um es auf der Zeichenfl che darzustellen Wird die Methode zeichnen f r eine Gruppe aufgerufen so wird der Aufruf an die Einzelteile der Gruppe weiter delegiert Zeichnung abstract zeichne abstract A A hinzuf gen z entfernen z gibTeil i Zeichnung zeichne Dreieck Kreis J Bl tter im Baum Abbildung 5 43 Das Design Pattern Kompositum als UML Diagramm zeichne zeichne foreach elemente as Steil N teil gt zeichne Skizzierung eines variablen Algorithmus Schablone H ufig existieren Abl ufe die man prinzipiell formulieren kann und die allgemeing ltig sind Wenn Sie beispielsweise ein neues Dokument ffnen wollen f gen Sie die Objekt referenz in die Liste der ge ffneten Dokumente hinzu reservieren den Speicher f r das PHP Endlich objektorientiert 405 5 Projektpraxis neue Dokument ffnen eine Verbindung im Dateisystem und lesen das Dokument dann ein Wie beispielsweise das Einlesen funktioniert h ngt aber vom konkreten Dateityp ab Eine XML Datei wird auf eine andere Art und Weise eingelesen als eine Bin rdatei Das Design Pattern der Sch
163. zu einem Aktienbestand Das Klicken auf die OK Schaltfl che f hrt den Benutzer dann wieder in die bersicht der Aktienbest nde sodass er ohne weiteres Klicken das Ergebnis seines Zukaufs in der Bilanz des Bestands sehen kann Den ersten Kauf konnte der Anwender f r g nstige 20 Aktie t tigen er hatte damals 90 St ck gekauft Beim zweiten Kauf hat unser Benutzer ganze 40 Aktie bezahlen m s sen wobei er wiederum 90 St ck gekauft hatte Der durchschnittliche Einkaufspreis liegt also bei 30 St ck wobei zweimalig Kaufgeb hren angefallen sind Die Fachlogik berechnet dabei wie bereits ohne grafische Benutzerschnittstelle getestet wurde sowohl den gewichteten Mittelwert des Kurses als auch des Kaufdatums Dies k nnen Sie in den Abbildungen 5 22 5 23 und 5 25 nachrechnen Bei der Bilanz zieht sich die Fachlogik die aktuellen Kurse von einer B rsenhomepage Der aktuelle Wert einer Aktie liegt bei 26 96 und damit unterhalb des mittleren Kauf preises Der Aktion r hat also nach dem aktuellen Stand der Dinge Verlust erwirtschaf tet was sich in den roten negativen Zahlen in Abbildung 5 25 widerspiegelt Im n chsten Schritt soll eine Dividende zu dem Bestand hinzugef gt werden die Aktien gesellschaften typischerweise nach einer Hauptversammlung an die Aktion re pro Aktie aussch tten Den Aktion ren wird dann der gesamte Dividendenbetrag auf ihr Konto berwiesen sie sehen also den Gesamtbetrag auf ihrem Kontoau
164. 1 gt lt h3 gt Gew hlter Bestand amp nbsp lt php if _SESSION BestandGew hlt 1 status disabled Echo else status bestandGew hlt unserialize _SESSION Bestand _SESSION BestandGew hlt echo bestandGew hlt gt getAktie gt getName gt lt h3 gt lt table border 0 gt lt tr gt lt td gt lt form action laden php method post gt lt input type submit value laden vS lt form gt lt td gt lt td gt lt form action speichern php method post gt lt input type submit value speichern lt php echo status gt gt lt form gt lt td gt lt td gt lt form action uebersicht php method post gt lt input type submit value bersicht w hlen lt php echo status gt gt lt form gt lt td gt lt td gt lt form action neu php method post gt lt input type submit value neu eS lt form gt lt td gt lt td gt lt form action hinzukaufen php method post gt lt input type submit value hinzukaufen lt php echo status gt gt lt form gt lt td gt lt td gt lt form action dividende php method post gt lt input type submit value neue Dividende lt php echo status gt gt lt form gt lt td gt lt td gt lt form action verkaufen php method post gt lt input type submit value verkaufen lt php echo status gt gt lt form gt lt td gt lt tr gt Listing 5 12 header inc php Forts PHP Endlich obj
165. 161 OOA 145 330 OOD 145 342 OOP 145 344 Operation 134 Operator 25 P Paarprogrammierung 158 PAP 171 Parameter bergabe 56 Peer Review 158 Phar Archiv 322 PHP 6 326 php ini 289 PHP Endlich objektorientiert PHPDocumentator 418 PHPedit 421 PHPUnit 415 Planning Poker 147 Polymorphie 139 POST 72 Pr sentation 160 Pr sentationsschicht 116 private 137 Programmablaufplan 171 Projekt 104 329 Projektbeteiligte 122 Projektgr e 121 protected 137 Prototyping 118 345 prozedural 8 public 137 Q quadratisches Rad 410 R Rapid Prototyping 120 Refactoring 397 Referenz 24 reflexive Assoziation 189 Reporting Management 288 require 59 require_once 214 Resource ID 20 Review 397 RGB 376 Risk Value Priorisierung 147 RPC 314 RUP Modell 126 S Safe Mode 328 SAX Parser 295 298 Schablone 405 Schema 307 Schleifen 45 Schwimmbahn 174 Scrum 150 SDL 172 Sequenzdiagramm 202 272 Serialisierung 218 serialize 218 429 Stichwortverzeichnis Session 72 215 368 set_error_handler 291 Set Methode 137 212 Sichtbarkeit 136 192 Singleton 403 SOAP 314 Spaghetticode 409 Specification and Description Language 172 Spezialisierung 138 Spiralmodell 108 SQL Befehle 92 Stakeholder 122 static 226 Status 136 Steuerung 160 Story Cards 146 String 19 Styleguide 398 Sumo Hochzeit 411 SVN Versionierung 417 switch 42 Switch Statement 409 Systemanalytiker 331 Szenario 176 366 T TDD 154
166. 3 verkaufen2 php Controller Forts Die Ausgabe in Abbildung 5 30 dokumentiert den erfolgreichen Verkauf Die OK Schalt fl che f hrt wie immer zur bersicht Da sich der Aktienkurs vor dem Verkauf wieder erholt hat konnte der Bestand zu 32 Aktie wieder verkauft werden Der durchschnittliche Kaufkurs lag ja bei 30 Aktie Zus tzlich dazu hat der Anleger die Dividende in H he von 150 mitgenommen Zusammen mit dem Verkauf der 180 Aktien mit einem Gewinn von 2 Aktie ergibt sich nach dem Verkauf eine positive Gesamtbilanz Der Anleger hat nach Abzug der Kosten in 156 Tagen 480 30 erwirtschaftet Dies ent spricht einem Gewinn von ca 9 Rechnet man diesen Gewinn linear auf ein volles Jahr um so ergibt sich ein Jahreszins von ber 20 http localhost Aktienverwaltung 004 verkaufen2 php Windows Internet Explorer aax O localhost x i t x 2 Datei Bearbeiten Ansicht Favoriten Extras v7 Favoriten http localhost ktienverwaltung 004 verkaufenz php Pr Depotverwaltungsprogramm Gew hlter Bestand E ON laden speichern l Ubersicht w hlen neu l hinzukaufen neue Dividende verkaufen Der Bestand wurde erfolgreich verkauft Copyright by Dr Frank Dopatka Fertig Lokales Intranet far R1 Abbildung 5 30 Erfolgreicher Verkauf eines Aktienbestands PHP Endlich objektorientiert 387 5 Projektpraxis Abschlie end ist
167. 3 lt td gt lt tr gt lt tr gt hnlich wie bei einem Dateizugriff wird mit dem Befehl handle fopen unter Angabe des URL eine Referenz auf die betreffende Homepage erstellt Vorher wird jedoch gepr ft ob der URL String nicht leer ist Eine leere oder auch ung ltige Zeichen kette sorgt daf r dass fopen blockiert und in einen Timeout l uft der die R ckgabe der Funktion stark verz gert Die anschlie ende while Schleife liest den HTML Text der Seite so lange ein bis das Ende erreicht ist Dabei werden mit dem Befehl data fgets handle 4096 jeweils 4kByte Bl cke eingelesen und der HTML Quellcode als Zeichenkette in der Variablen data gespei chert Mit dem Befehl fclose handle wird die Verbindung zur Internetseite dann wieder geschlossen deren Inhalt Sie nun als Zeichenkette vorliegen haben Wie jede andere Zeichenkette k nnen Sie data jetzt mit den m chtigen Zeichenketten funktionen von PHP durchsuchen Die erste Suche konzentriert sich auf die Zeichenfolge lt td class column datavalue2 last strong gt Die Position an der die Zeichenfolge gefun den wurde wird unter pos1 gespeichert Die Zeichenfolge kommt nur einmalig im HTML Code vor Die Position ist nicht gr er als 0 wenn die Zeichenfolge nicht gefun den wurde In diesem Fall wird der ermittelte Kurswert auf ret Kurs FALSE gesetzt Im Anschluss daran wird das n chste lt td gt hinter der gefundenen Position gesucht Dazwischen steht d
168. 4 Zeile 10 Spalte 5 Zeile 10 Spalte 6 Zeile 10 Spalte 7 Zeile 10 Spalte 8 in in in Abbildung 2 9 Eine dynamisch erzeugte HTML Tabelle PHP Endlich objektorientiert 47 2 Die Sprache PHP Prozedural Im weiteren Verlauf dieses Buchs werden solche Tabellen mit Inhalten aus einer Daten bank beispielsweise mit einer Auswahl von zu kaufenden Artikeln oder einem Waren korb Bestand gef llt Ein weiterer Anwendungsfall f r for Schleifen liegt in dem Zugriff auf Datenfelder Lis ting 2 35 gibt die Elemente eines Arrays nacheinander aus und multipliziert deren Inhalt gleichzeitig Nach der Schleife wird das Produkt der Zahlen dann ausgegeben Achten Sie darauf dass die Variable produkt mit 1 initialisiert sein muss lt php data Array datal 4 datal 34 datal 546 lt html gt lt body gt lt php produkt 1 for i 0 i lt count data i t echo var_dump data l i lt br gt produkt datal i echo Das Produkt ist produkt gt lt body lt html gt Listing 2 35 Zugriff auf ein Datenfeld und Ausf hren einer Multiplikation Der Zugriff auf ein Datenfeld mit einer Z hlschleife ist jedoch gerade bei PHP aufgrund der dynamischen Handhabung von Arrays problematisch Im Beispiel von Listing 2 36 werden die Elemente 1 und 4 im Array data mit Werten gef llt Da das Feld nun zwei Elemente besitzt liefert count data den Wert 2 zur ck Die for Schleife liest daraufhin data 0
169. 6 Objektorientierte Fehlerbehandlung beim Datenbankzugriff Wenn eine Anweisung wie db gt ffnen p_ ffnen ein Fehlerobjekt zur ckgibt wird der regul re Programmablauf sofort unterbrochen und der n chste passende catch Block hinter dem try Block aufgesucht Passend bedeutet dass die abgefangene Fehlerklasse hier mit dem Namen Fehler mit dem erzeugten Fehlerobjekt verglichen wird Ist das erzeugte Fehlerobjekt ein Objekt der Klasse Fehler so wird der catch Block abgearbeitet Im Beispiel von Listing 4 56 wird die toString Methode der Fehlerklasse ausgef hrt und eine eventuell ge ffnete Datenbankverbindung wieder geschlossen Wenn man in diesem Fall beispielsweise die Angabe des Parameters pass bei p_ ffnen vergisst so wird unmittelbar nach dem Aufruf von db gt ffnen p_ ffnen der catch Block aufgerufen der die folgende Ausgabe erzeugt Fehler Nr 2 in Methode mysqlDZ ffnen Das Parameter Objekt ist unvollst ndig Hinweis Hinter einem try Block k nnen sich also mehrere catch Bl cke befinden die von oben nach unten durchsucht werden Da Sie Fehlerklassen voneinander vererben k nnen wird nach der ersten passenden Ist ein Beziehung gesucht Ist eine solche Bedin gung gefunden wird der catch Block abgearbeitet und hinter dem letzten catch Block mit der Abarbeitung des Quellcodes fortgefahren Es ist daher ratsam im letzten catch Block die Oberklasse Exception abzufangen und abzuarbeiten Auf eine hnliche
170. 80 dargestellt ist Im Anschluss an die Interpreta PHP Endlich objektorientiert 317 4 PHP objektorientiert tion der Datei kann der Client den Dienst wie einen gew hnlichen lokalen Methoden aufruf verwenden lt php client new SoapClient http localhost webservice server wsdi result client gt addiere 10 20 echo result gt Listing 4 80 Der vereinfachte Client mit Zugriff auf die WSDL Datei 4 6 Neuerungen in PHP 5 3 und Ausblick Seit dem 30 Juni 2009 ist die momentan aktuelle Version PHP 5 3 verf gbar die in die Version 1 72 des XAMPP Pakets http www xampp de integriert wurde Zun chst ist anzumerken dass die neue Unterversion von PHP nat rlich keine umfassende nde rung der Sprache darstellt Die letzte gro e Erweiterung der Sprache im Hinblick auf Objektorientierung wurde mit der Version 5 0 vom 13 Juli 2004 durch die neue Zend Engine II vorgenommen Die Grundz ge der Umsetzung objektorientierter Prinzipien wurde bereits in diesem Kapitel ausf hrlich vorgestellt An dieser Stelle werden nun lediglich die Neuerungen skizziert die zwischen der seit November 2006 bestehenden Version 5 2 und der aktuellen Version 5 3 von PHP beste hen Wenn Sie sich erstmals mit PHP besch ftigen werden Sie die Unterschiede der bei den Versionen kaum wahrnehmen Insbesondere wurden einige Details und einige Konzepte der Objektorientierung verbes sert Das Kapitel endet schlie lich mit einem Ausblick a
171. Abh n gigkeiten von Aufrufen festgehalten werden So tritt E1 aus Abbildung 3 75 nach S1 auf weil das Empfangs immer nach dem Sendeereignis vorkommt Analog tritt E2 nach S2 auf S2 tritt nach S1 auf weil S2 unter S1 gezeichnet ist PHP Endlich objektorientiert 203 3 Vorgehensweise bei der Softwareentwicklung E1 E2 Ko x Abbildung 3 75 Kausale zeitliche Abh ngigkeiten Auch Verzweigungen also alternative Abl ufe k nnen in Sequenzdiagrammen darge stellt werden Diese Darstellung kann jedoch leicht zu sehr un bersichtlichen gro en Diagrammen f hren und ist daher nur in begrenztem Ma e anzuwenden Generell sollte ein Sequenzdiagramm nur genau ein Szenario darstellen Alternative Abl ufe sind wenn m glich in getrennten Diagrammen festzuhalten Abbildung 3 76 zeigt das Ver halten eines Objekts einX in Abh ngigkeit einer Bedingung B Ist B wahr so wird die Methode m auf dem Objekt einY angesprochen ansonsten die Methode n auf dem Objekt einZ Diese Methoden werden dann entsprechend abgearbeitet und l sen unter Umst nden weitere Interaktionen aus Die UML Syntax zur Beschreibung einer Bedin gung ist konsistent zu den Aktivit ts und Zustandsdiagrammen B m Abbildung 3 76 Verzweigung mit verschiedenen Objektzugriffen Eine andere Art der Darstellung einer Verzweigung ergibt sich wenn aufgrund der Bedingung eine andere Methode auf demselben Objekt aufgerufen wird Da jeder Methodenaufruf Einf
172. Arcus Cosinus von var Serg atan var Arcus Tangens von Svar Serg atan2 var Arcus Tangens Hyperbolicus von var Tabelle 2 19 Trigonometrische Funktionen Die Umwandlung von Grad ins Bogenma und umgekehrt bieten die Funktionen deg2rad und rad2deg Zus tzlich existiert eine Reihe von Zusatzfunktionen zur Konvertie rung von Zahlen in verschiedene Zahlensysteme sowie zum Auf und Abrunden Funktion Bedeutung erg decbin var erg bindec var erg dechex var erg hexdec var erg decoct var erg octdec var erg deg2rad var Serg rad2deg var erg base_convert var basel base2 erg floor var konvertiert vom Dezimalsystem ins Bin rsystem konvertiert vom Bin rsystem ins Dezimalsystem konvertiert vom Dezimalsystem ins Haxadezimalsystem konvertiert vom Haxadezimalsystem ins Dezimalsystem konvertiert vom Dezimalsystem ins Oktalsystem konvertiert vom Oktalsystem ins Dezimalsystem konvertiert Grad zum Bogenma konvertiert Bogenma zu Grad konvertiert zwischen dem Zahlensystem dase in das Zahlen system Sbase2 rundet eine Flie kommazahl auf die n chste Ganzzahl ab Tabelle 2 20 Konvertierungsfunktionen PHP Endlich objektorientiert 67 2 Die Sprache PHP Prozedural Funktion Bedeutung erg ceil var rundet eine Flie kommazahl auf die n chste Ganzzahl auf rundet einen Wert bei gt x 5 auf und bei lt x 5 ab erg round var Tabelle 2 20
173. Aufstellen der notwendigen Berechnungen und deren Pr fung vom Auftraggeber Ebenso ratsam ist es die Berechnungen bereits sehr fr h in PHP zu implementieren und die Ergebnisse zu verifizieren Sp testens jetzt wird der Auftraggeber Sie fragen wie Sie den Aufwand f r die Realisie rung des Projekts bzw bis zum ersten Prototyp einsch tzen Wie viel Zeit haben Sie bis jetzt in Meetings verbracht Wie aufw ndig war die Erstellung der Anwendungsf lle die Einarbeitung in die Sprache des Auftraggebers und die Erstellung der Aktivit tsdia gramme Als N chstes m ssen Sie die Klassen und deren Verbindungen zueinander ermitteln die Eigenschaften und Methoden festlegen die Eingabemasken und die fachliche Logik implementieren Hinweis Bevor Sie an dieser Stelle weiterlesen Sch tzen Sie den bisherigen Aufwand und den noch zu erstellenden Aufwand zur Umsetzung der Funktionen des Anwendungs falldiagramms aus Abbildung 5 2 Wie viele Mannstunden w rden Sie f r eine Reali sierung ohne die Behandlung von Fehlern und ung ltigen Eingaben vorsehen Wie viele Reserven w rden Sie einkalkulieren Die Ermittlung der Klassen Die Ermittlung der wichtigsten Klassen geh rt noch zur Analyse des Systems Ihnen ist wahrscheinlich aufgefallen dass durch die Diskussion mit dem Auftraggeber bereits einige Hauptw rter gefallen sind die auf Klassennamen hindeuten Da sich die Anzahl der Klassen bei dieser Problemstellung und bis zu den ersten Prototype
174. Butter 0 50 0 70 7 a3 new Artikel 3 Zucker s sser Zucker 0 80 1 00 7 kl new Kunde l1 Dopatka Frank Hauptstrasse 4 51580 Reichshof zuweisen rl new Rechnung 1 08 10 2009 k1 5 a1 3 0 r1 gt addPosition a3 1 0 r1 addPosition a2 7 0 Listing 4 41 Test des Klassengeflechts Realisierung von Klassengeflechten wieder auslesen aus den Objekten rechnungen k1 gt getRechnungen echo lt b RECHNUNG Nr rechnungen gt getID vom rechnungen 0 getDatum lt b gt lt br gt echo Kunde rechnungen gt getKunde gt getName lt br gt 2 echo Rabatt auf die Gesamtrechnung rechnungen getRabatt lt br gt positionen rechnungen gt getPositionen i 0 foreach positionen as index gt p echo lt i Position i l lt i gt lt br2 echo p L gt getName p 1 St ck p 2 Rabatt lt br gt echo number_format p 3 2 EUR pro St ck number_format p 4 2 EUR gesamt incl echo p 0 gt getMwSt MwSt lt br gt i echo lt b GESAMTPREIS number_format rechnungen gt getGesamtsumme 2 EUR lt body lt html Listing 4 41 Test des Klassengeflechts Forts Der letzte Teil des Testprogramms besteht darin die erste Rechnung des Kunden auszu geben Dabei werden zun chst allgemeine Daten der Rechnung ermittelt wie die Rech nungsnummer das Rechnungsdatum den Namen des Kund
175. D Di Wr Seter Sicherheit Extras phpMyAdmin 3 Server localhost gt amp 3 Datenbank boerse gt amp Tabelle kurse 2 Anzeigen H Struktur saL Suche Einf gen Exportieren Ellmportieren Operationen Leeren L schen Datenbank Feld Typ Kollation Attribute Null Standard Extra boerse 2 x AG_ID int 11 Nein 0 day _tinyint 4 Nein 0 boerse 2 value double Nein 0 Ba B int 11 Nein keine auto_increment B kurse t__ Alle ausw hlen Auswahl entfernen markierte IB X lt gt 5 Lokales Intranet f Qio v Abbildung 2 15 Struktur der Tabelle kurse Zu kritisieren an der Datenstruktur ist der Datentyp double f r die Kurse da dieser Datentyp den Wert nur ann hernd repr sentiert Nat rlich ist die Genauigkeit eines dou ble Wertes wesentlich genauer als die ben tigten zwei Nachkommastellen f r W hrun gen Probleme kann es jedoch geben wenn man mit W hrungen rechnet die Rundung von Werten in Kauf nimmt und Werte auf Gleichheit berpr ft Als Regel kann man fest halten dass f r alle W hrungen stets der Datentyp decimal verwendet werden sollte der eine exakte numerische Darstellung bietet 88 entwickler press Erweiterte Funktionen Hinweis Legen Sie als bung die Datenbank mit den beiden Tabellen in der dargestellten Struktur ber phpMyAdmin an Wenn Sie das getan haben bef llen Sie die Tabellen ber den Men punkt Einf gen in phpMyAdmin mit Testdaten Mithilfe der folgenden PHP Sk
176. Dies gilt ebenso f r die Verwendung agiler Methoden die den Kunden durch das iterativ inkre mentelle Vorgehen st rker in den Entwicklungsprozess einbeziehen PHP Endlich objektorientiert 191 3 Vorgehensweise bei der Softwareentwicklung Diese Funktionalit t wird in Sequenz und Zustandsdiagrammen beschrieben die die Interaktion von Objekten untereinander beschreiben Diese Diagramme werden wiede rum von den Anwendungsfall und Aktivit tsdiagrammen abgeleitet Zun chst einmal muss in einem vollst ndigen Klassendiagramm angegeben werden wie jede Eigenschaft und jede Methode au erhalb der Klasse von anderen Objekten gesehen wird Es wurde bereits gesagt dass Eigenschaften standardm ig private sein sollen um die Datenkapselung der Objektorientierung zu gew hrleisten Wenn Eigen schaften auch direkt aus Unterklassen angesprochen werden sollen k nnen diese als protected deklariert werden Methoden sind Dienste der Klasse die normalerweise von anderen Klassen verwendet werden sollen Daher sind Methoden im Normalfall public einzustufen Nur wenn es sich um Hilfsmethoden handelt die innerhalb der Klasse ver wendet werden sollten diese private oder protected deklariert werden F r diese Sichtbar keiten besitzt die UML eine eigene Schreibweise FremdeKlasse Klasse Unter Klasse a1 zu 22 herr a a3 m1 m2 m3 Abbildung 3 64 Sichtbarkeiten public protected und private Tr Bei den Attr
177. Dies ist in Listing 4 13 dargestellt Zun chst werden zwei neue Br che erzeugt und der erste Bruch 1 2 ausgegeben Umsetzung objektorientierter Grundlagen berraschenderweise sieht die Verwendung der add Methode in a gt add 3 so aus als w rde die Bruchklasse eine Methode add int besitzen Genau dies fordert ja das UML Diagramm der Abbildung 4 2 aus der Spezifikation Die interne Realisierung ber die __call Konstruktion ist also nach au en nicht sichtbar Im Anschluss an die Addition der ganzen Zahl erfolgt zur Kontrolle eine neue Ausgabe Der Bruch hat nun korrekterweise den Wert 7 2 lt php require_once classloader inc php gt lt html gt lt body gt lt php a new Bruch 1 2 b new Bruch 3 2 echo a gt ausgeben a gt add 3 echo a gt ausgeben a gt add b echo a gt ausgeben lt body gt lt html gt Listing 4 13 Ein Beispiel der Bruchrechnung _ 0 AR 5 pen SD pen EDD Abschlie end wird in der gleichen Art und Weise der Bruch b zum aktuellen Stand des Bruchs a addiert Dies erfolgt quasi ber den Methodenaufruf add Bruch Die abschlie ende Ausgabe zeigt auch hier das korrekte Ergebnis der Bruch a hat jetzt den Wert 20 4 Umwandeln von Objekten in Zeichenketten Der Name der Methode ausgeben zur R ckgabe des aktuellen Wertes eines Bruchs ist frei gew hlt Man h tte den Namen auch print oder getDaten nennen k nnen Wenn jeder Programmierer ei
178. ERT if mysql_query sql TRUE E throw new Fehler 11 Fehler beim Ausf hren der SQL Anweisung mysqIDZ schreiben FALSE else FEHLER throw new Fehler 12 Das SQL Statement muss mit UPDATE oder INSERT beginnen mysqIDZ schreiben FALSE private function startswith str wert return strtolower substr str strlen wert strtolower wert Listing 4 55 Datenbankzugriff mit objektorientiertem Fehlermanagement Forts PHP Endlich objektorientiert 283 4 PHP objektorientiert Das Testskript f r die Fehlerbehandlung aus Listing 4 48 muss nur unwesentlich ver n dert werden Zun chst geht man davon aus dass der Quellcode erfolgreich abgearbeitet wird Die Abfragen ob das ffnen Schreiben und Lesen erfolgreich war oder nicht fal len demnach weg Im darauf folgenden Test wurde beim ffnen der Verbindung das Parameterobjekt p_ ffnen nicht vollst ndig gef llt der Parameter f r das Passwort wurde weggelassen Das PHP Skript beantwortet dies mit der folgenden Meldung Fatal error Uncaught Fehler Nr 2 lt br gt in Methode mysglDZ ffnen lt br gt Das Parameter Objekt ist unvollst ndig lt br gt thrown in mysqlDZ inc php on line 9 Es wurde also in Listing 4 55 der Fehler Nummer 2 erzeugt Die ffnen Methode wurde abgebrochen Dann wurde festgestellt dass der Quellcode nicht in einem try catch Block ausgef hrt wurde Das entstandene Fehlerobjekt konnte dadurch nicht abgefangen wer
179. Eintr gen m glich sind Sie k nnen also eine Menge von Objekten die sich gegenseitig kennen in einem XML Baum darstellen und umgekehrt In Verbindung mit der Tatsache dass Sie Objektgeflechte in XML speichern bzw laden k nnen und XML ein globales Austauschformat darstellt k nnen Sie XML als Transport mittel f r Ihre Objektstrukturen von und zu anderen Systemen verwenden So ist es beispielsweise m glich eine Liste von Kundenobjekten mit den Kundendaten wie Name Vorname Anschrift und Kundennummer in einer XML Datei abzulegen Zu jedem Kunden k nnen im XML Baum seine Rechnungen abgelegt werden wobei jede Rechnung wieder aus Rechnungspositionen besteht die jeweils einem Artikel zugeord net sind Abb 4 10 Eine solche Struktur wird in Listing 4 62 skizziert lt xml version 1 0 gt lt kundenliste gt lt kunde id 1 gt lt name gt Dopatka lt name gt lt vorname gt Frank lt vorname gt lt anschrift lt anschrift gt lt rechnung id 1 gt lt datum gt 05 02 2010 lt datum lt position id 1 gt lt artikel id 32 gt lt menge gt 3 lt menge gt lt position lt position id 2 gt lt artikel id 53 gt lt menge 1 lt menge gt lt position lt rechnung lt rechnung id 2 gt lt rechnung gt lt kunde gt lt kunde id 2 gt Listing 4 62 XML Datei die eine Objektinfrastruktur realisiert PHP Endlich objektorientiert 293 4 PHP objektorientiert lt kunde gt
180. FF00 echo lt table border 0 width 380px gt echo lt tr gt lt td gt echo lt font face Arial Helvetica size 1 gt EK akt Wert gesamt incl Kosten lt font gt echo lt td lt td align right gt echo lt font face Arial Helvetica size 1 color farbe gt number_format bilanz ekSumme 2 number_format bilanzLaktSumme 2 lt font2 echo lt td gt lt tr gt echo lt tr gt lt td gt echo lt font face Arial Helvetica size 1 gt EK akt Kurs pro Aktie lt font gt echo lt td lt td align right gt echo lt font face Arial Helvetica size 1 color farbe gt number_format bilanzlLekEinzelpreis 2 number_format bilanzlaktEinzelpreis 2 lt font gt echo lt td gt lt tr gt echo lt table gt echo lt br gt lt br gt lt php require_once footer inc php gt Listing 5 17 uebersicht php View Mithilfe der for Schleife werden die Aktienbest nde nacheinander aus dem Depot ausge lesen und deserialisiert Danach wird die Bilanz des jeweiligen Bestands ausgelesen und die Daten der Bilanz mit HTML Code grafisch aufbereitet Falls der Bestand bereits verkauft wurde kann er nicht mehr f r weitere Aktionen ausge w hlt werden In diesem Fall wird der Text amp lt amp lt VERKAUFT amp gt amp gt lt lt VER KAUFT gt gt ausgegeben Ansonsten wird ein Link dargestellt der wieder auf ueber sicht php verwe
181. Jedes Diagramm stellt einen anderen Aspekt des Quellcodes dar und kann direkt in Quellcode bersetzt werden Ebenso ist eine bersetzung von Quellcode in UML zu Zwecken der Dokumentation m glich lt lt interface gt gt Flugreservierung reservieren stornieren buchen Flugreservierung protocol reservieren Flug o erfolgreich Flug reserviert gebucht stornieren Reservierung storniert Abbildung 4 13 Zustandsdiagramm einer Interfacebeschreibung Listing 4 50 zeigt im ersten Schritt die Definition des Interfaces zur Flugreservierung mit den drei Methoden lt php interface iFlugreservierung Listing 4 50 Das Interface der Flugreservierung PHP Endlich objektorientiert 275 4 PHP objektorientiert public function reservieren public function stornieren public function buchen Listing 4 50 Das Interface der Flugreservierung Forts Listing 4 51 zeigt nun die Implementierung des Interfaces unter Ber cksichtigung des im Zustandsdiagramm definierten Protokolls Insgesamt existieren die Zust nde 1 initialisiert 2 reserviert 3 gebucht 4 storniert Der aktuelle Zustand wird in der Eigenschaft zustand festgehalten und im Konstruktor auf 0 gesetzt Zus tzlich wird eine Methode getZustand implementiert mit der man den Zustand des Reservierungsobjekts jederzeit abfragen kann Dem folgen die im Interface deklarierten Methoden reservieren stornieren und buchen Dabei wird
182. Klassenbeschreibung in PHP SQL legt DB Tabelle an g CREATE TABLE Kunde ID INTEGER NOT NULL PRIMARY KEY Name VARCHAR 50 NOT NULL Vorname VARCHAR 50 NOT NULL class Kunde private ID private Name private Vorname private Strasse private PLZ private Ort Strasse VARCHAR 50 NOT NULL PLZ VARCHAR 10 NOT NULL Ort VARCHAR 50 NOT NULL Ein konkretes Objekt Ein konkreter Tabelleneintrag D Name Vorname Strasse 342 M ller Uli Hauptstrasse einKunde ID 342 Name M ller Vorname Uli Abbildung 3 14 Klassen und Eigenschaften vs Datenbankmodellierung Um an die Methoden der bereits identifizierten Klassen zu kommen wenden Sie am bes ten folgende Fragestellungen an m Was kann man damit machen ber welche Funktionen verf gt es Die Antworten sollten stets aus Verben bestehen So kann man beispielsweise mit einem Stift schreiben Au erdem kann man einen Stift ffnen schlie en und nachf llen Dies alles sind Methoden Funktionen die man mit einem Stift ausf hren kann Abbildung 3 15 skizziert zwei Stiftobjekte mit ihren aktuellen Eigenschaftswerten und ihren Methoden Man muss jedoch bedenken dass man nicht jeden Stift ffnen schlie en und nachf llen kann Ein Buntstift bietet diese Funktionen beispielsweise nicht Die Abbildung zeigt also bereits sehr spezielle Stifte Rechts in der Abbildung ist die Klassifizierung der ein zelnen Objekte zu der Klasse Stift dar
183. Kunde ein Datenfeld mit Referenzen auf Rechnungsobjekte Sie k nnen also ein Kunden objekt nach seinen Rechnungen oder gezielt nach einer besonderen Rechnung fragen Eine Rechnung hat ein Datum einen Gesamtpreis und besteht wiederum aus mindes tens einer Rechnungsposition Eine Rechnungsposition hat ihrerseits stets einen Bezug zu genau einem Artikel Von diesem Artikel wird eine bestimmte Menge eingekauft Ein Artikel kann auf mehreren Rechnungspositionen erscheinen In der Datenbankmodellie rung entspricht dies dem in Abbildung 3 20 dargestellten ER Diagramm Abbildung 3 20 ER Diagramm der Beziehungen der DB Tabellen Objektorientierte Programmierung Zusammensetzen Aggregation und Komposition Wenn Objekte von zwei Klassen sich gegenseitig kennen k nnen ist dies eine lose Bezie hung zwischen den beiden Klassen Beide Klassen k nnten auch unabh ngig voneinan der existieren Eine sehr enge Beziehung zwischen zwei Klassen besteht wenn die eine Klasse von der anderen vererbt wurde Dann ist ein Objekt der Unterklasse ja gleichzeitig auch ein Objekt der Oberklasse Eine Bindung zwischen zwei Klassen die nicht gerade so stark ist wie bei der Vererbung wird bei einer Aggregation aufgebaut Diese Beziehung kann man mit der Phrase besteht aus bzw ist Teil von beschreiben und sie wird dann angewendet wenn ein Objekt aus einem oder mehreren anderen Objekten zusammengesetzt ist Betrachten wir das Beispiel der Kunden Rechnungen R
184. ML Formular eingegeben das in Listing 5 18 dargestellt ist Das Formular besteht im Wesentlichen aus einer HIML Tabelle in der die folgenden Daten eingegeben werden m die Anzahl der neu gekauften Aktien desselben Typs wie in dem Bestand der gerade ausgew hlt wurde der Einzelkurs zu dem gekauft wurde m das Datum des Kaufs die Geb hren die bei diesem Kauf entstanden sind Durch Klick auf die Schaltfl che Kaufen wird abschlie end ein HTTP Post auf die Datei hinzukaufen2 php abgesetzt wobei die eingegebenen Daten bertragen werden lt php require_once header inc php gt lt form action hinzukaufen2 php method post gt lt table border 9 width 100 gt lt tr gt lt td align right width 50 gt Anzahl gekaufter Aktien lt td gt lt td align left width 50 gt lt input type text name anz size 5 value 90 gt St ck lt td gt lt tr gt lt tr gt lt td align right width 50 gt Kurs beim Kauf lt td gt lt td align left width 50 gt lt input type text name kaufkurs size 10 value 23 54 gt lt td gt lt tr gt lt tr gt lt td align right width 50 gt Kauf Datum lt td gt lt td align left width 50 gt lt input type text name kaufdatum size 10 value 24 04 2009 gt lt td gt lt tr gt lt tr gt lt td align right width 50 gt Kauf Geb hren lt td gt lt td align left width 50 gt lt input type text name kaufge
185. Mit der UML 2 wurde eine Sprache vorgestellt die als Diskus sionsgrundlage und zur Dokumentation von allen Beteiligten ber das gesamte Projekt hinweg angewendet werden kann Bis zu diesem Punkt ist es noch unerheblich welche objektorientierte Sprache zur Implementierung eingesetzt wird Anstelle von PHP k n nen ebenso ASP NET oder JSP Servlets zum Einsatz kommen In diesem Kapitel wird nun vorgestellt wie man die bislang theoretisch beschriebenen Konzepte der Objektorientierung mit PHP 5 umsetzen kann 4 1 Umsetzung objektorientierter Grundlagen Damit Sie die Umsetzung der objektorientierten Grundlagen die in Kapitel 3 2 2 vorge stellt wurden in PHP leicht nachvollziehen k nnen wird in diesem Kapitel eine Vielzahl von kleinen Beispielen vorgestellt die jeweils einzelne Aspekte der objektorientierten Programmierung beschreiben Im f nften Kapitel dieses Buches werden dann komple xere zusammenh ngende Beispiele skizziert 4 1 1 Die erste PHP Klasse Am Sinnvollsten ist es direkt mit der Programmierung einer vollst ndigen Klasse zu beginnen und diese Klasse dann in einer anderen PHP Datei mit Objekterzeugung und Ausgabe zu testen Eine private Eigenschaft Die erste Klasse erzeugt einen Stift der nur eine einzelne Eigenschaft besitzt Er hat eine Farbe die als Zeichenkette festgehalten wird und nicht au erhalb des Objekts zug ng lich ist private Diese Datenkapselung unterscheidet die Objektorientierung von proze dural
186. Rechnungsposition Der Artikel ist dabei eine Eigenschaft der Rechnungsposition und wird als Referenz im Konstruktor berge ben Der Einzelpreis der Rechnungsposition wird aus dem Verkaufspreis des Artikels ermittelt Au erdem werden dir typischen Get Methoden implementiert Der Gesamt preis ist keine eigene Eigenschaft sondern wird aus den existierenden Eigenschaften unter Ber cksichtigung des optionalen Rabatts auf die Rechnungsposition sowie der Mehrwertsteuer aus dem Artikel berechnet lt php class Rechnungspositionf private artikel private menge private ep private rabatt public function __construct artikel menge rabatt this gt artikel artikel this gt menge menge this gt ep artikel gt getVK this gt rabatt rabatt public function getArtikel Listing 4 33 Die Klasse Rechnungsposition Realisierung von Klassengeflechten return this gt artikel public function getGesamtpreis return this gt ep this menge 1 this gt rabatt 100 1 this gt artikel gt getMwST 100 Listing 4 33 Die Klasse Rechnungsposition Forts Die in Listing 4 34 implementierte Artikelklasse hat keine Besonderheiten sie implemen tiert lediglich die aus dem Klassendiagramm geforderten Eigenschaften und bietet Get Methoden dazu an lt php class Artikelf private id private name private beschreibung private ek private vk private mwst public functio
187. Sie aus realen betrieblichen Abl ufen Objekte identifiziert haben m ssen Sie diese zu Klassen gruppieren Es erfolgt also eine weitere Abstraktion noch bevor Sie mit der Programmierung der ersten Zeile Quellcode beginnen Eine Klasse ist im n chsten Schritt ein Bauplan um gleichartige Objekte zu erzeugen sie beschreibt also Objekte Lassen Sie sich auch hierbei von der Realit t leiten denn im Alltag klassifizieren Sie bereits sehr oft Wenn Sie beispielsweise von einer Br cke auf eine Autobahn schauen so fahren dort Fahrzeuge n mlich Autos und einige LKWs Sie beginnen nicht die Fahrgestellnummern der einzelnen konkreten Gef hrte aufzuz hlen Bei einer Klassifizierung betrachten Sie also Mengen bzw Sammlungen von Objekten Sie wissen auch dass Fahrzeuge sowohl LKWs als auch Autos bzw PKWs beinhalten Sie k nnen demnach mehrfache Klassifizie rungen durchf hren Abbildung 3 12 skizziert die Abstraktion der Realit t zu einem Objekt und von einem Objekt zu einer Klasse gt amp einMensch C Mensch E T Name Dopatka Abstraktion _ Name Vorname Frank Vorname ni Strasse Schmiedeweg Strasse Realit t Objekt Klasse Abbildung 3 12 Abstraktion der Realit t zu einer Klasse Ein konkretes Objekt ist eine Instanz also ein existierendes Exemplar einer Klasse Das Objekt wiederum ist ein Modell eines Ausschnitts aus der Wirklichkeit Je pr ziser die Modellierung erfolgt desto besser kan
188. Sie werden beispielsweise im dritten Kapitel ler nen was Vererbung bedeutet Sowohl im dritten als auch im vierten Kapitel wird die Vererbung in der UML Notation dargestellt Im vierten Kapitel sehen Sie dann wie man eine Vererbung in PHP umsetzt Zus tzlich dazu werden typische Konstrukte erstellt die anwendungs bergreifend weiter verwendet werden k nnen Dazu geh rt die Erstel lung eines Datenzugriffsobjekts auf eine MySQL Datenbank die objektorientierte Umsetzung einer XML Verarbeitung bis hin zur Programmierung eines Web Service in PHP Zus tzlich wird skizziert wie die wichtigsten Design Patterns mit PHP 5 umgesetzt werden k nnen Das f nfte Kapitel stellt ein gr eres Fallbeispiel vor das den Einsatz der Objektorientie rung in gr eren Projekten skizziert Dazu geh rt ein kompletter Projektverlauf von einer Kundenidee ber die Gesch ftsproze analyse objektorientierte Analyse und Design bis hin zu der fertigen PHP Anwendung einer Verwaltung von pers nlichen Aktienbest nden Im Anschluss daran steht die sinnvolle Strukturierung eines PHP Projekts im Vorder grund Dazu geh rt die Umsetzung der im dritten Kapitel beschriebenen testgetriebenen Entwicklung unter Verwendung des Tools PHPUnit sowie Coding Standards die einen guten PHP Quelltext auszeichnen Abschlie end werden zahlreiche Tools vorgestellt die bei der objektorientierten Entwicklung mit PHP hilfreich sind Einem einzelnen Ent wickler gen gt vielleicht ein T
189. Speicherung CHAR abh von der maximalen Zeichenkette fester L nge wobei jedes Zeichen einen Anzahl der eingegebenen Wertebereich von 0 bis 255 besitzt ANSII Zeichen Tabelle 2 26 MySQL Datentypen 86 entwickler press Erweiterte Funktionen Datentyp Speicherplatz Beschreibung VARCHAR abh von der String L nge Zeichenkette variabler L nge wobei jedes Zeichen einen Wertebereich von 0 bis 255 besitzt ANSII BLOB abh von den eingegebe bin res Objekt mit variablen Daten weitere Typen sind nen Daten TINYBLOB MEDIUMBLOBund LONGBLOB TEXT abh von der String L nge wie BLOB ber cksichtigt jedoch beim Sortieren und Verglei chen die Gro und Kleinschreibung weitere Typen sind TINYTEXT MEDIUMTEXT LONGTEXT ENUM 1oder 2 Byte Liste von Werten max 65 535 eineindeutige Elemente m glich SET abh von den eingegebe String Objekt mit verschiedenen Variablen nen Daten 1 bis 8 Byte max 64 Mitglieder sind m glich Tabelle 2 26 MySQL Datentypen Forts ber phpMyAdmin kann die Tabelle mit Daten bef llt ge ndert oder auch gel scht wer den Dadurch ergibt sich die in Abbildung 2 14 skizzierte Darstellung ID name X 1 ADIDAS SALOMON AG X 2 ALLIANZAG VNA O N X 3 ALTANAAGO N X 4 BASFAGON f X 5 BMW S X 6 Bayer Abbildung 2 14 Inhalt der Tabelle ag Die zweite Tabelle wird als kurse bezeichnet und enth lt Kurssaten zu den angegebenen A
190. T kaufkurs _POST kaufgeb hr bestand new Aktienbestand aktie kauf _POST verkaufgeb hr _SESSION Bestand _SESSION BestandAnzahl serialize bestand _SESSION BestandAnzahl lt center gt lt h3 gt lt php if bestand NULL amp amp unserialize _SESSION Bestand _SESSION BestandAnzahl 1 bestand _SESSION BestandGew hlt _SESSION BestandAnzahl 1 echo Der Bestand wurde dem Depot erfolgreich hinzugef gt elsef echo FEHLER beim Hinzuf gen des Bestandes lt h3 gt lt form action uebersicht php method post gt lt input type submit value 0K gt lt form gt lt center gt lt php require_once footer inc php gt Listing 5 16 neu2 php Controller Abbildung 5 21 zeigt die Erfolgsmeldung bei einem erfolgreich angelegten Aktienbe stand PHP Endlich objektorientiert 373 5 Projektpraxis http localhost ktienverwaltung 004 neu2 php Windows Internet Explorer BAX Nje E localhost x 4r x 23 Pr Datei Bearbeiten Ansicht Favoriten Extras Favoriten http localhost Aktienverwaltung 004 neu2 php Depotverwaltungsprogramm Gew hlter Bestand Der Bestand wurde dem Depot erfolgreich hinzugef gt Copyright by Dr Frank Dopatka Fertig lt Lokales Intranet Ar R1 vr Abbildung 5 21 Ausgabe nach dem erfolgreichen Anlegen eines Aktienbestands Durch das Dr cken der OK Schaltfl che wird nun mit
191. Teile und Herrsche 8 Teilung und Synchronisation 174 testgetriebene Entwicklung 154 346 textueller Anwendungsfall 333 throw 281 Top Down Vorgehensweise 103 Transaktion 94 try catch 279 U ltraEdit 422 ML 9 161 ML Werkzeuge 413 mwandlung von Datentypen 23 nicode 326 nit Iest 155 unserialize 218 untypisiert 18 URN 316 Use Case 166 U U U U U U 430 V var_dump 20 Variable 17 Variable l schen 22 Verb Substantiv Methode 151 Vererbung 138 237 Vererbungshierarchie 186 vertikaler Prototyp 118 Verwaltungssysteme 126 Verzweigung 35 172 View 369 Visio 414 V Modell 110 Ww W3C 295 Warenkorb 73 Wasserfallmodell 106 Web Service 314 wechselseitige Assoziation 248 Wertzuweisung 25 while 51 wohlgeformt 294 WSDL 317 Wunderwaffe 410 X XAMPP 13 84 318 XDebug 420 XLST 311 XML 292 Z Z hlschleife 45 Zeichenkette 18 Zeichenkettenfunktionen 61 Zend Studio 424 Zielgruppe 9 Zustand 136 342 Zustandsdiagramm 196 274 342 Zwiebel Programmierung 409 entwickler press
192. Verschieben und L schen von Knoten m das Lesen ndern und L schen von Texten Bei der Verwendung von DOM steht Ihnen also der gesamte Inhalt der XML Datei jeder zeit zur Verf gung da sich die Struktur vollst ndig im Arbeitsspeicher befindet Dies ist jedoch gleichzeitig auch der Nachteil von DOM Da XML Dateien sehr gro werden k n nen und die Erzeugung der DOM Objekte im Speicher zus tzlichen Overhead belegen verwendet DOM wesentlich mehr Ressourcen als SAX Daf r erh lt man andererseits die volle Kontrolle ber die Datenstruktur Abbildung 4 16 zeigt wie eine XML Datei von einem DOM Parser eingelesen wird Dabei wird der XML Baum im Arbeitsspeicher des Servers aufgebaut auf den man dann mit vorgegebenen Methoden zugreifen kann DOM lt dozent gt Dr Frank Dopatka lt dozent gt Parser lt teilnehmerliste gt lt teilnehmer id 23 geschlecht m gt lt name gt Ulf Schmidt lt name gt Datenstrom Abbildung 4 16 Prinzip eines DOM Parsers Profitipp Sie m ssen anhand Ihres Anwendungsfalls entscheiden ob ein SAX oder DOM Par ser f r Ihre Anwendung besser geeignet ist Dabei m ssen Sie die Vor und Nachteile der beiden Parser Iechnologien abw gen und dabei die m gliche Gr e der XML Dokumente im Auge behalten Eine nachtr gliche nderung des Parser Standards bedeutet in der Regel einen gro en nderungsaufwand in Ihrer Anwendung PHP und XML Die beispielhafte XML Datei in Listing 4 63 wird im Folg
193. Verwenden Sie besser eine Versionsverwaltung wie Subversion SVN So k nnen Sie im Nachhinein den Projektverlauf und auch Design entscheidungen besser nachvollziehen Auch wenn sich solche Aussagen trivial und fast selbstverst ndlich anh ren werden Sie in der fachlichen Modellierung bald feststellen dass eine korrekte und pr zise Beschrei bung selbst einfacher Sachverhalte oft schwierig ist und zu weiche Aussagen oft von anderen Projektbeteiligten anders interpretiert werden Beispiel Sie m chten von einem Softwareunternehmen eine Software entwickelt bekommen die der Funktionalit t von Microsoft Word 2003 entspricht Erstellen Sie ein grafi sches Anwendungsfalldiagramm aus der Wolken und Meeresspiegelperspektive ohne den Begriff Microsoft Word 2003 und Textverarbeitung zu verwenden Bei dieser bung wird als L sung f r die Wolkenebene oft Funktionalit t beschrieben wie m Texte bearbeiten Bilder einf gen m Tabellen einf gen und auf der Meeresspiegelebene Dokument laden speichern drucken u fett kursiv unterstrichen m Schriftgr e und art ndern Diese Funktionen sind zun chst nicht falsch Wenn dies die Basis f r eine objektorien tierte Analyse darstellen soll kann Ihnen das Softwareunternehmen auch Microsoft Excel oder PowerPoint liefern Sie m ssen also darauf achten dass die Funktionen nicht so weich und allgemeing ltig definiert werden dass Sie zwar mit allen Beteiligten einen Konsens i
194. Weise kann auch die Flugreservierung aus Listing 4 51 auf eine objekt orientierte Fehlerbehandlung umgestellt werden Dabei kann dieselbe Fehlerklasse ver wendet werden In diesem Fall werden irregul re Zustands berg nge in Fehlerobjekte umgewandelt PHP Endlich objektorientiert 285 4 PHP objektorientiert lt php class AirlineReservierung implements iFlugreservierungf public function reservieren if this gt zustand Q throw new Fehler 29 Reservieren im Zustand this gt getZustand nicht erlaubt Reservierung FALSE this zustand 1 reserviert public function stornieren if this gt zustand 1 throw new Fehler 21 Stornieren im Zustand this gt getZustand nicht erlaubt Reservierung FALSE this zustand 3 storniert public function buchen if this gt zustand 1 throw new Fehler 22 Buchen im Zustand this gt getZustand nicht erlaubt Reservierung FALSE es ist Zufall ob die Buchung funktioniert srand microtime 1000000 zufall rand 0 2 if zufall 1 this gt zustand 3 gebucht else this gt zustand 2 storniert Listing 4 57 Implementierung der Flugreservierung mit objektorientiertem Fehlermanagement Der Test der Implementierung in Listing 4 58 erfolgt wie gew hnlich in einem try catch Block In diesem Fall wird versucht auf das Reservierungsobjekt die reservieren Methode zweimal hintereinander aufzu
195. _code parser xml_get_current_line_number parser felose fp lt html gt lt body gt lt php tn parserObjekt gt getTN foreach tn as index gt wert echo Teilnehmer ID index lt br gt echo wert lt body lt html gt Listing 4 66 Test des SAX Parsens Die Ausgabe besteht aus der Teilnehmer ID gefolgt von dem Aufruf der toString Methode jedes Teilnehmers Teilnehmer ID 23 PHP Endlich objektorientiert 301 4 PHP objektorientiert Name Ulf Schmidt Geschlecht m Vorkenntnisse Grundlagen HTML Java Teilnehmer ID 43 Name Clair Grube Geschlecht w Vorkenntnisse JavaScript XML als Baum DOM Die zweite Art der XML Verarbeitung die PHP 5 bietet ist die Rekonstruktion des XML Baums aus den Daten der XML Datei im Arbeitsspeicher des Servers Als Beispiel wird wiederum die XML Datei aus Listing 4 63 verwendet Sobald die Datei geladen wurde stehen deren Inhalte in der Objektreferenz doc zur Verf gung Wie Sie erkennen ist die load Methode eine statische Methode der Klasse DOMDocument und doc ein Objekt dieser Klasse das ber eine Vielzahl von Methoden verf gt um auf die Daten zuzugreifen Eine dieser Methoden lautet getElementsByTagname Dabei werden alle Inhalte eines Ele menttyps in einer Liste zur ckgegeben Im Beispiel in Listing 4 67 werden alle Vorkennt nisse der Teilnehmer eines Seminars in der Liste vorkenntnisse gespeichert und im HTIML Teil d
196. aben vorgenommen werden Im Anschluss daran werden die Funktionen ein gebunden die die Dienste der Datenzugriffsschicht beinhalten lt php frmAG _POSTL frmAG frmTag _POSTL frmTag funcAGs _POSTL funcA amp s funckurs _POSTL funckurs funcMW _POSTL funcMW if funcAGs NULL func else if funckurs NULL func 2 else if funcMW NULL func 3 else func 0 Listing 2 71 Fachlogik Teil 1 Auswerten der bergebenen Formulardaten 96 entwickler press Erweiterte Funktionen require DBzugriff inc php Listing 2 71 Fachlogik Teil 1 Auswerten der bergebenen Formulardaten Forts Der zweite Teil der Fachlogik besteht aus der Ausgabe der Antwort auf die HTTP Anfrage Nach dem ffnen der Verbindung zur Datenbank wird durch die switch Anweisung untersucht welchen Dienst der Benutzer angefordert hat Dementsprechend werden die Daten aus der Datenbank angefordert die als R ckgabewerte der Funktio nen aus der Datenzugriffsschicht festgehalten werden Im Anschluss daran erfolgt die HTML Aufbereitung dieser Daten f r die Ausgabe Abschlie end wird die Verbindung zur Datenbank wieder geschlossen lt html gt lt head lt title Meine B rse lt title gt lt head gt lt body gt lt php if DB_open echo Fehler beim oeffnen der DB Verbindung DB_error else switch func case 1 alle AGs AGs DB_AGs foreach AGs as index gt datensatz
197. ablone definiert in einer Methode den Rumpf eines Algorith mus und delegiert einzelne Teilschritte an Unterklassen weiter Dies wird angewendet um invariante Teile eines Algorithmus nur einmal zu kodieren und variierende Teile in konkreten Unterklassen zu implementieren Die Schablone wird angewendet wenn ein gemeinsames Verhalten in einer Oberklasse realisiert werden soll um Codeduplikation zu vermeiden und Erweiterungen der Unterklassen zu kontrollieren indem die Ober klasse einen allgemeing ltigen Ablauf vorschreibt Ein allgemeines Schema zur Umset zung einer Schablone ist in Abbildung 5 44 skizziert Schablonenklasse abstract start methode1 fabstract sei methode2 abstract methodel methode2 Konkretelmplementierung methode1 methode2 Abbildung 5 44 Das Design Pattern Schablone als UML Diagramm Viele beobachten und ndern eine Datenquelle Beobachter Das letzte vorgestellte Design Pattern wird in der Kategorie der objektbasierten Verhal tensmuster eingeordnet Nehmen wir an Sie haben einen Datenstamm in Form einer Tabelle der auf verschiedene Art und Weise aufbereitet werden soll beispielsweise als Linien Balken oder Kuchendiagramm Alle Darstellungen befinden sich auf einer einzi gen Seite Nehmen wir weiter an dass in jeder Darstellung der Datenstamm ver ndert werden kann zum Beispiel soll durch ein Ziehen an einem Balken nach oben der Wert dieses Datensatzes v
198. al im Feld Announce myself as den Wert localhost eintragen 98 entwickler press Erweiterte Funktionen Im Register Connection Control k nnen Sie das H kchen Do not permit SMTP relaying of non local mail wegnehmen So k nnen Sie auch Zieladressen von anderen Domains lokal testen Mit Klick auf OK k nnen Sie dann das Fenster schlie en Klicken Sie im Anschluss daran nochmals auf Configuration und dann auf MercuryS SMTP Client Hier m ssen Sie unter Indentify myself as nochmals localhost und als Name server die IP Adresse 127 0 0 1 Diesen Dialog beenden Sie mit Save MercuryE End to end SMTP Client Configuration General Identify myself as localhost N Poll the queue every 15 seconds for outgoing mail Hab TCP IP connection timeout setting secs 60 Maximum simultaneous delivery threads 10 Address discovery and DNS access Name servers 127 0 0 1 Enter name server IP addresses separated by commas If you leave this field blank MercuryE will use the name servers defined in the Windows Network control panel DNS Timeout secs 20 DNS retries 4 Logging General log file U Verbose logging Session log directory l Enable session logging V Honour requests for transcript generation Abbildung 2 19 Einstellungen des MercuryS SMTP Client Im n chsten Schritt m ssen Sie noch den Benutzer einrichten also ein Mail Konto auf dem Server anlegen Klicken Sie dazu
199. amm der Abbildung 4 4 sind die drei Klassen mit einigen Eigenschaften und einer Methode abgebildet PHP Endlich objektorientiert 237 4 PHP objektorientiert Name Vorname Strasse PLZ Ort Telefon e Mail getAnschrift String Mitarbeiter ID Tarifgruppe FirmeneEintritt Abbildung 4 4 Klassendiagramm mit Vererbung und abstrakter Klasse Es ist nun die Frage zu stellen wie Sie das existierende Klassendiagramm aus der OOA und OOD in PHP 5 umsetzen k nnen Mit der Vererbung und abstrakten Klassen wer den also weitere Elemente der objektorientierten Programmierung OOP vorgestellt lt php abstract class Person private name private vorname private strasse private plz private ort private tel private mail public function __construct name vorname strasse plz ort this gt name name this gt vorname vorname this gt strasse strasse this gt plz plz this gt ort ort public function getName return this gt name public function setName name this gt name name public function getAnschrift Listing 4 24 Die abstrakte Klasse Person Realisierung von Klassengeflechten ret ret this gt name this gt vorname lt br gt ret this strasse lt br gt 2 ret this gt plz this gt ort lt br gt return ret Listing 4 24 Die abstrakte Klasse Person Forts Eine ab
200. ann k nnen Sie ein platzieren um auftretende Meldungen zu unterdr cken Wichtig ist dabei dass das unmittelbar f r die fehleranf llige Funktion geschrieben wird und nicht vor die ganze Zeile Der korrekte Befehl zur Unterdr ckung der Meldung nn lautet also datei fopen counter txt w Schl gt der Befehl fopen fehl wird jetzt keine Fehlermeldung mehr ausgegeben Dennoch m ssen Sie daf r sorgen dass das Programm korrekt ausgef hrt wird Dazu m ssen Sie wissen dass dieser Befehl im Fehlerfall die Variable datei als Wahrheitswert ausgibt und diesen auf FALSE setzt Sie m ssen also direkt hinter dem Befehl im Quellcode eine Pr fung mit if datei FALSE f vornehmen um die korrekte Ausf hrung des Skripts zu gew hrleisten 76 entwickler press Erweiterte Funktionen Lesen und Schreiben von Dateien In diesem Kapitel wird vorgestellt wie Sie Dateien im Dateisystem des Webservers aus lesen und schreiben k nnen Das macht dann Sinn wenn sich eine komplexe Datenbank anbindung nicht lohnt Als Beispiel wird im Folgenden eine typische Anwendung eines Z hlers der Besucher auf eine Homepage erstellt Dieser einzelne Wert m sste sonst in einer eigenen Datenbanktabelle abgelegt werden Dabei wird zun chst versucht eine Datei mit dem Namen counter txt aus demselben Ver zeichnis in dem das Skript ausgef hrt wird auszulesen Diese Datei ist nat rlich beim ersten Aufruf noch nicht vorhanden sodass der f
201. ann der Kurs der extrahiert und in AktKurs gespeichert wird Zus tzlich wird das Kommatrennzeichen ber die Funktion str_replace in einen Punkt umgewandelt sodass AktKurs als Gleitkommazahl gesehen wird Auf diese Weise kann man mit dem extrahierten Wert rechnen Nach dem gleichen Prinzip werden das Datum und die Uhrzeit ausgelesen zu der der Kurs ermittelt wurde Hier wird nach der einmalig im HTML Code vorkommenden Zei Das Fallbeispiel der Depotverwaltung chenkette lt td class column datavalue2 last gt gesucht Da das Datum mit dd mm yyyy hh mm ein festes Format und im Gegensatz zu einem Aktienkurs 1 23 oder 123 45 eine feste Anzahl an Stellen hat werden die n chsten 16 Stellen hinter der gesuchten Zei chenkette extrahiert Die ersten 10 Stellen werden als Datum in der Variablen ret Datum und die Stellen 11 bis 15 als Uhrzeit in der Variablen ret Zeit abgelegt Wenn dies nicht erfolgreich ist werden diese beiden Variablen ebenfalls mit FALSE belegt Zur weiteren Verarbeitung wird das Datenfeld mit dem Kurs dem Datum und der Zeit dann als R ck gabewert der Funktion zur ckgegeben Die zweite Methode der Bilanz getDaten gibt die Ergebnisse der Bilanzberechnung als Datenfeld zur ck Aus dem Aktienbestand werden zun chst ausgelesen m der Name der Aktie die ISIN der Aktie der URL der Aktie Im Anschluss daran werden die Daten des Einkaufs in das Datenfeld hinzugef gt Dazu geh ren m die Anzahl d
202. ar Dadurch k nnen bei zuk nftigen Projekten Kosten und Zeit gespart werden Die Fachlogik bildet die mittlere Schicht der Anwendung Hier werden die Dienste bzw die Funktionen realisiert die Ihr Kunde verlangt hat Die Fachlogik greift auf die Funkti onen der Datenzugriffsschicht zu wodurch Anfragen auf die Datenbank ausgel st wer den Die Ergebnisse der Abfragen werden dann in der Fachlogik interpretiert und weiter verarbeitet Gleichzeitig werden die Eingaben von der Pr sentationsschicht die das Graphical User Interface GUI realisiert entgegennimmt und auf Plausibilit t pr ft Typische Dienste der Fachlogik sind Verwaltungsmodule wie eine Kunden Artikel oder Rechnungsverwaltung mit den entsprechenden Funktionalit ten Oft wirken die Aufgaben der Pr sentationsschicht im Vergleich zu den anderen Schich ten sehr einfach und schon trivial Es ist jedoch keine leichte Aufgabe ein gutes Benutze rinterface zu schaffen Einerseits muss das Design gerade im Internetumfeld an die Gepflogenheiten Ihres Kunden angepasst sein um ein einheitliches Erscheinungsbild von Internetauftritt Visitenkarten und Briefk pfen zu ereichen Stichwort Corporate Identity Zus tzlich m ssen sich die Eingaben von Daten an den Gesch ftsprozess des Kunden also an die allt gliche Arbeit anpassen da die Benutzer die Anwendung sonst unzufrieden sind was wiederum f r mangelnde Akzeptanz sorgt Weitere Merkmale der Pr sentations Schicht liegen in ei
203. arallele Abl ufe k nnen Sie jedoch auch technisch betrachten In der Fisch und Muschelperspektive kann beispielsweise ein Dokument gedruckt werden w hrend der Anwender gleichzeitig weitere Funktionen der Anwendung nutzen kann In diesem Fall bedeutet dies die Anwendung von Multi Threading oder Multi Processing Das linke Symbol zeigt den Beginn eines parallelen Ablaufs das n chste Symbol eine Synchronisation Dabei m ssen beide ankommenden Pfade beendet sein damit die Ver arbeitung fortgesetzt wird Das dritte Symbol beinhaltet eine Synchronisation mit gleich zeitigem Start von zwei neuen Prozessen wenn beide vorherigen beendet sind Sie k nnen sogar einen beliebigen booleschen Ausdruck verwenden der erf llt sein muss damit die Verarbeitung fortgesetzt wird Das rechte Symbol setzt die Bearbeitung dann fort wenn auf jeden Fall der ankommende Prozess A beendet ist und zus tzlich dazu der Prozess B oder C Aus Sicht des Gesch ftsprozess kann dies hei en das auf PHP Endlich objektorientiert 173 3 Vorgehensweise bei der Softwareentwicklung jeden Fall der Vorstand einer Entscheidung zustimmen muss und zus tzlich der Einkauf oder die Personalabteilung join A and B or A and C Abbildung 3 39 Teilung und Synchronisation im Aktivit tsdiagramm Mit der Hilfe von Schwimmbahnen Swim Lanes k nnen Sie den Fluss ber Grenzen von Zust ndigkeiten modellieren Oft wird die Kommunikation zwischen Akteuren und dem Syst
204. arieren Sie im Praktikum die Methode addStudent s Schreiben Sie Konstanten immer komplett gro Trennen Sie zusammengesetzte W r ter in Konstanten stets mit einem Unterstrich Beispiele sind PI oder MAX_STUDEN TEN Eine Klasse hat prinzipiell den folgenden Aufbau gt statische Konstanten Klasseneigenschaften Eigenschaften jedes Objekts Konstruktoren vvv y alle Get und Set Methoden der Eigenschaften jeweils Get und Set zu jeder Eigen schaft abwechselnd alle ffentlichen Dienste bzw Methoden dieser Klasse gt alle privaten Hilfsmethoden R cken Sie jeden Funktionsblock z B innerhalb einer Klasse einer Methode einer if Verzweigung oder einer Schleife einheitlich mit zwei Leerzeichen ein PHP Endlich objektorientiert 399 5 Projektpraxis 12 Klammern Sie Funktionsbl cke stets einheitlich Dabei hat sich folgendes System bew hrt class Test eigenschaft methode anweisung if var true anweisung anweisung 13 Deklarieren Sie PHP Zeichenketten stets mit einfachen Hochkommata also var Hallo Dies beschleunigt die Verarbeitung und ist besonders dann hilfreich wenn Sie den Inhalt der Variablen f r eine HTML Ausgabe verwenden wollen Dort k nnen Sie dann n mlich doppelte Hochkommata verwenden ohne mit der PHP Deklaration zu kollidieren Ein Beispiel daf r ist var lt table border 1 gt 14 Es gibt prinzipiell zwei M glichkeiten HTML Code in PHP einzub
205. arsen steht die Liste der Teilnehmer zur Verf gung die ber die Get Methode getTN abgerufen werden k nnen Listing 4 66 testet den SAX Parser von PHP Dazu werden zun chst ein Parser erzeugt und die Methoden definiert die auf die ffnenden und schlie enden Elemente sowie auf Daten innerhalb der Elemente reagieren sollen PHP und XML Im Anschluss daran wird ein Objekt der Hilfsklasse aus Listing 4 65 erzeugt und dem Parser zugewiesen Nun kann die XML Datei zum Lesen ge ffnet werden Es werden jeweils 1 024 Byte aus gelesen und dem Parser ber den Befehl xmi_parse zugef hrt Der Aufruf der Methoden der Hilfsklasse erfolgt automatisch ber den Parser Sobald der gesamte Dateiinhalt durch den SAX Parser gelaufen ist kann die Datei wieder geschlossen werden Im HTML Teil des Testprogramms stehen jetzt die ausgelesenen Teilnehmerdaten zur Verf gung Das Datenfeld tn der Teilnehmer wird ber das Hilfsobjekt abgeholt und die Daten der Teilnehmer werden in der foreach Schleife ausgegeben lt php require_once classloader inc php gt parser xml_parser_create xml_set_element_handler parser start ende xml_set_character_data_handler parser cData parserObjekt new Parserklasse xml_set_object parser parser bjekt fp fopen beispiel xml r while data fread fp 1024 result xml_parse parser data if result FALSE die sprintf XML FEHLER s in Zeile d xml_error_string xml_get_error
206. artzeit und der gemessenen Endzeit wird ein neuer Zeitstempel errechnet der abschlie end gerundet wird So ergibt sich die Zeit in Sekunden Die gemessene verschachtelte Schleife ben tigt im Test ca 1 4 Sekunden lt html gt lt body gt lt php Start Zeit messungl microtime zeittemp explode messungl messungl zeittemp L zeittemp 1 zu messenger Code for i 0 1 lt 10000000 i for 12 0 12 lt 1000 i2 i Ende Zeit messung2 microtime zeittemp explode messung2 messung zeittemp 0 zeittemp 1 Zeitstempel und Nanosek messung messung2 messungl Zeit Differenz messung substr messung 0 8 auf 6 Kommastellen runden Listing 2 57 Eine PHP Zeitmessung 66 entwickler press Grundlegende Syntax print Seitenaufbau in messung Sekunden lt body gt lt html gt Listing 2 57 Eine PHP Zeitmessung Forts Mathematische Funktionen Neben den Grundrechenoperatoren verf gt PHP zus tzlich ber eine Reihe von mathe matischen Funktionen die f r Aufgaben des Alltags ausreichen sollten Tabelle 2 19 zeigt zun chst die wichtigsten trigonometrischen Funktionen die im Bogenma rechnen Um mit der Zahl Pi zu rechnen bietet PHP die Funktion pi an So ergibt sin pi 2 1 Funktion Bedeutung erg sin var Sinus von var erg cos var Cosinus von var erg tan var Tangens von var Serg asin var Arcus Sinus von var Serg acos var
207. as jetzige Datum falls der Bestand noch nicht verkauft wurde oder das Datum des Verkaufs zun chst in Sekunden umgewandelt mit der Funktion strtotime Die erhaltene Differenz der beiden Werte ergibt dann die Anzahl der Sekunden die der Aktienbestand im Besitz des Anlegers war bzw ist Dividiert man den Wert durch 86 400 so erh lt man die Anzahl der Tage die die Aktie im Besitz war bzw ist da ein Tag 24 Stunden hat eine Stunde 60 Minuten und eine Minute 60 Sekunden hat 24x60x60 86 400 m ekSumme beschreibt den Betrag die der Anleger f r den Aktienbestand bezahlen musste Sie besteht aus dem durchschnittlichen Kurs der Aktie beim Einkauf multi pliziert mit der Anzahl der gekauften Aktien Hinzu kommen noch die angefallenen Kaufgeb hren m aktSumme beschreibt den Wert des Bestands Dies ist der aktuelle Kurs bzw der Ver kaufskurs multipliziert mit der Anzahl Davon m ssen die Verkaufsgeb hren noch abgezogen werden diffAktieEur ist die Differenz des Kurses beim Einkauf zu dem aktuellen Kurs bzw zum Kurs zu dem verkauft wurde m diffAktieProz ist dieselbe Differenz jedoch in Prozent Bei beiden Differenzen wird nur der Kurs betrachtet und keine angefallenen Kosten und Dividendenzahlungen m gewinnEur ist der Gewinn oder Verlust in Euro die der Aktienbestand abgeworfen hat Dazu wird der Wert beim Einkauf vom aktuellen Wert des Bestands bzw der Wert beim Verkauf abgezogen Da hier die Kosten bereits ber cksichtigt sind
208. ass die Struktur dieser Systeme stets sehr hnlich ist So ist es in der Objektorientierung nur von untergeordneter Bedeutung ob Sie in einer Artikelverwaltung nun Autos oder B cher verwalten Nach einer Definition der Begriffe der Objektorientierung werden insbesondere im vier ten Kapitel dieses Buches diese Verwaltungssysteme skizziert Eine gute bung wird darin bestehen diese Beispiele im ersten Schritt nachzuvollziehen und zu verstehen im zweiten Schritt selbst nachzuprogrammieren und zu erweitern Der Rational Unified Process RUP Bevor in die Begriffe der Objektorientierung eingestiegen wird soll zun chst das pas sende Vorgehensmodell kurz vorgestellt werden Der Rational Unified Process RUP ist ein objektorientiertes Vorgehensmodell zur Softwareentwicklung Es wurde 1997 als kommerzielles Produkt der Firma Rational Inc entwickelt und liegt mittlerweile in der neunten Version vor Interessant ist dabei wer das Vorgehensmodell entwickelt hat Es handelt sich um die Programmierer Grady Booch Ivar Jacobson und James Rumbaugh die in dieser Zeit bei Rational Inc angestellt waren Diese drei Entwickler haben seit 1995 ebenfalls die Syntax der UML erstellt und gelten als V ter der UML Die Standardisierung und Weiterent wicklung der UML wurde an die Object Management Group OMG bergeben die dann im Januar 1997 offiziell die erste Version der UML herausbrachte Das Modell des Rational Unified Process benutzt seinerseits
209. ataltagelmBesitz 0 Tagen lt br echo Gewinn number_format datalgewinnProz 2 lt br gt echo Gewinn number_format datalgewinnProzProJahr 2 Jahr lt br gt lt body lt html gt Listing 5 9 Test des Aktienbestands mit Verkauf und Bilanz Forts Die erwartete Ausgabe sieht durch die unmittelbare Erholung nach der Wirtschaftskrise sehr vielversprechend aus COMMERZ EK 1 900 15 VK 2 390 10 Gewinn 489 95 in 148 Tagen Gewinn 25 78 Gewinn 63 63 Jahr METRO EK 2 009 90 VK 3 945 00 Gewinn 2 070 10 in 291 Tagen Gewinn 103 00 Gewinn 129 29 Jahr Die existierende Klasse des Aktienbestands wird dabei um zwei Methoden erweitert Einerseits muss die Verkaufsorder in den Bestand mit aufgenommen werden Dies PHP Endlich objektorientiert 357 5 Projektpraxis geschieht ber die Methode addVerkauforder value die eine Verkaufsorder als Eingabe parameter bergeben bekommt Dabei erfolgt zun chst eine Pr fung ob der Bestand bereits verkauft ist Nur wenn dies nicht der Fall ist kann der Verkauf eingerechnet wer den Dann wird berpr ft ob die Verkaufsorder den gesamten Bestand zum Verkauf ent h lt Dies ergibt in den ersten Prototypen eine vereinfachte Berechnung Streng genom men sollte auch berpr ft werden ob es sich bei value wirklich um ein Verkaufsorderobjekt handelt Darauf wird an dieser Stelle aber zu Zwecken der ber sichtlichkeit v
210. atum Dies kann hilfreich sein wenn sp ter Werkzeuge eingesetzt werden sol len die eine Hilfestellung beim Ausf llen der Parameter geben In diesem Fall w rde die Hilfestellung ekDatum anbieten lt php class Kauforder extends Order public function __construct aktie anzahl ekDatum ekEinzelpreis ekKosten parent __construct aktie anzahl ekDatum ekEinzelpreis ekKosten Listing 5 5 Implementierung der Klasse Kauforder Auf die gleiche Weise wird mit einer Verkaufsorder in Listing 5 6 verfahren Damit sind bereits 4 der 6 ben tigten Klassen implementiert lt php class Verkauforder extends Order public function __construct aktie anzahl vkDatum vkEinzelpreis vkKosten parent __construct aktie anzahl vkDatum vkEinzelpreis vkKosten Listing 5 6 Implementierung der Klasse Verkauforder Mit dieser Implementierung wird die gew nschte Ausgabe erzeugt Nun gilt es die Order in einem Aktienbestand zu speichern Dies geschieht in Listing 5 7 Zus tzlich dazu soll eine Dividende zum Bestand hinzugef gt werden Im zweiten Teil des Tests werden weitere Aktien gem den erstellten Formeln aus der Analyse Abb 5 8 nachge kauft und die gewichteten arithmetischen Mittelwerte f r das Kaufdatum und den Kauf kurs ausgegeben lt php require_once classloader inc php gt lt html lt body gt lt php metro new Aktie METRO AG Stammaktien o N DE0007257503 http
211. atum und fortlaufende Nummer Nummer der bergeordneten Story Card m Aktivit t neu Fehler beheben Funktion erweitern Funktion umgesetzt Objektorientierte Programmierung m Priorit t des Kunden und des Entwicklers m Risiko und Aufwandsch tzung m kurze pr zise Beschreibung Notizen m aktueller Fortschritt Datum Status Aufgabe Kommentar Abbildung 3 21 zeigt eine Story Card f r die Erstellung einer Anwendung zur Verwal tung von Seminaren Diese Karte zeigt eine Managementsicht auf die zu erstellende Soft ware und dient dazu sich die Fachsprache des Kunden anzueignen und die Aufgabe zu umrei en Es m ssen nat rlich noch weitere Karten erstellt werden die die einzelnen Funktionen der Seminarverwaltung auflisten und beschreiben Nr 023 bergeordnet Datum 18 10 2008 Aktivit t neulx Fehler beheben erweitern umgesetzt Risk Value Kunde Progr Risiko Zeitdauer Beschreibung Seminare m ssen mit Agenda und Preis angelegt und verwaltet werden Ein offenes Seminar hat beliebig viele Termine Jedem Termin ist Raum und Dozent zugeordnet Es gibt eine min und max TN Zahl Ein Inhouse Seminar wird dagegen dyn per Telefon verwaltet da gibts keine festen Termine Telefonate sind Vorg nge in der Kundenverwaltung Notizen Funktion schon teilweise im Visual Basic Programm vorhanden Kundenverwaltung wird noch im alten Cobol Programm ausgef hrt Fortschritt Datum Aufgabe Status Kommen
212. ausgef llt und per PHP serverseitig interpretiert werden k nnen m der Funktionsumfang der AJAX Programmierung Asynchronous JavaScript and XML Die neuen M glichkeiten der JavaScript Programmierung mit einer clientseiti gen JavaScript Engine sorgen daf r dass Webseiten nicht bei jedem Aufruf vollst n dig neu geladen werden m ssen Serverseitig kann hier durchaus auch PHP zum Einsatz kommen das Versenden von Adobe Flash oder Microsoft SilverLight Quellcode deren Auf rufe in HTML Quellcode eingebunden werden Flash und SilverLight verf gen ber eine Vielzahl von optischen Gestaltungseffekten und hoher Multimedialit t sodass ansprechende browserbasierte Anwendungen erstellt werden k nnen Da PHP den HTML Code generiert kann die Skriptsprache somit auch Einfluss auf die Parametri sierung der bertragenen Fremdformate nehmen Prozedurale und modulare Programmierung der Versand von Java Applets die ber den Applet Tag des HTML Befehlssatzes mit zum Client bertragen werden k nnen Die Applet Technologie gilt jedoch als veraltet Neben der Technologie besteht das Ziel eines Entwicklers der Pr sentationsschicht darin eine f r den Benutzer angenehm bedienbare Schnittstelle zu bieten Stichwort Softwareergonomie die in allt gliche Gesch ftsvorg nge des Benutzers integriert ist Stellen Sie sich vor der Bediener m chte beispielsweise einen neuen Kunden erfassen Dazu sind die folgenden Daten in die Datenbank ein
213. b hr size 10 value 9 9 gt lt td gt lt tr gt Listing 5 18 hinzukaufen php View PHP Endlich objektorientiert 377 5 Projektpraxis lt tr gt lt td align right width 50 gt lt input type submit name eingabe value Kaufen gt lt td gt lt td align left width 50 gt lt input type submit name eingabe value Abbrechen gt lt td gt lt tr gt lt table gt lt form gt lt php require_once footer inc php gt Listing 5 18 hinzukaufen php View Forts Abbildung 5 23 zeigt die HTML Datei f r die Datenerfassung eines weiteren Aktien kaufs http localhost Aktienverwaltung 004 hinzukaufen php Windows Internet Explorer BAX Dp E localhost 1 x 4x Pr Datei Bearbeiten Ansicht Favoriten Extras pr Favoriten http localhost Aktienverwaltung 004 hinzukaufen php Depotverwaltungsprogramm Gew hlter Bestand E ON laden l speichern bersicht w hlen l neu l hinzukaufen neue Dividende verkaufen Anzahl gekaufter Aktien 90 St ck Kurs beim Kauf 40 Kauf Datum 24 06 2009 Kauf Geb hren 9 9 Copyright by Dr Frank Dopatka Lokales Intranet fa R 00 Abbildung 5 23 Eingabemaske f r einen weiteren Kauf zu einem Aktienbestand Die PHP Datei hinzukaufen2 php in Listing 5 19 die den Kaufvorgang in der Fachlogik erfasst hnelt in ihrem Aufbau der Datei neu2 php mit der ein neuer Bes
214. beiden Listings Um den Verlauf eines Programms darzustellen eignen sich Programmablauf pl ne PAP besonders gut Sie sind nach DIN 66001 genormt Die Aktivit tsdiagramme der UML Kapitel 3 k nnen als Weiterentwicklung der Programmablaufpl ne gesehen werden Anweisung1 Anweisung Anweisung2 Anweisung2 Bedingung nicht erf llt Bedingung nicht erf llt Bedingung erf llt Bedingung erf llt pi I y Anweisung3 Anweisung4 Anweisung3 Anweisung4 Anweisung5 Anweisung5 Anweisung6 Anweisung6 Hl if then Verzweigung if then else Verzweigung a b Abbildung 2 6 Die Wenn Dann a und die Wenn Dann Ansonsten Verzweigung b Im Folgenden werden einige Szenarien beschrieben bei denen Verzweigungen im Kon text der HTML Ausgabe h ufig eingesetzt werden Falls Sie bislang noch nicht mit PHP programmiert haben sollten Sie diese kleinen Beispiele nachprogrammieren selbst ver ndern und verstehen PHP Endlich objektorientiert 37 2 Die Sprache PHP Prozedural Listing 2 24 zeigt bereits eine verschachtelte Verzweigung bei der eine Variable wert auf eine Grenze im Beispiel 10 gepr ft wird Es gibt hier drei M glichkeiten Die Grenze kann unterschritten oder berschritten sein Ist beides nicht der Fall so entspricht der Wert genau dem Grenzwert In diesem Beispiel wird die Ausgabe ber den echo Befehl von PHP in den HTML Ausga
215. ben Wie bei Konstruktoren blich existiert kein R ckgabewert Objektorientierte Programmierung z hler int 0 nenner int 1 anzahl int 0 Bruch int int add int add double add Bruch isNull boolean getAnzahl int Abbildung 3 65 Eine Klasse in Designform Als Dienste dieser Klasse werden 5 Methoden skizziert die ffentlich verwendet werden k nnen Man kann zu einem Bruch eine Ganzzahl eine Flie kommazahl 0 34 ent spricht 34 100 und einen anderen Bruch addieren Es gibt eine Methode die pr ft ob der Bruch gerade den Wert 0 hat also ob der Z hler 0 ist Diese Methode gibt einen Wahrheitswert zur ck Die letzte Methode getAnzahl geh rt ebenso zur Klasse selbst und gibt den aktuellen Z hlerstand der erzeugten Br che der in anzahl festgehalten wird zur ck Der Z hlerstand wird bei jedem Aufruf des Default Konstruktors inkre mentiert und bei jedem Destruktoraufruf dekrementiert Im n chsten Beispiel existiert wie bereits bei der Person in der Analysephase eine abs trakte Klasse von der man keine Objekte anlegen kann Diese Klasse Tier besitzt eine abs trakte Methode gibLaut Wenn man von einer Unterklasse von Tier Objekte anlegen will muss man diese abstrakte Methode mit Quellcode f llen Die Unterklassen Katze und Hund tun dies Zus tzlich definieren sie noch die ffentlichen Methoden miauen bzw bellen Die Methode gibLaut beinhaltet dann intern nur den Auf
216. ber eine Vererbung realisiert Aktienbestand k o1 Bilanz a i Aktie Km name anzahl isin datum einzelpreis geb hr Verkauforder Kauforder Abbildung 5 13 Ein weiterentwickeltes Klassendiagramm Im n chsten Schritt wird in Abbildung 5 14 das Klassendiagramm so weit verfeinert dass man aus der Zeichnung mit einem geeigneten Tool direkt die R mpfe der Klassen erstellen kann Im Wesentlichen werden dabei die einzelnen privaten Eigenschaften der Klassen nun vollst ndig dargestellt Die Eigenschaften resultieren aus den ermittelten Daten der objektorientierten Analyse Au erdem werden die wichtigsten Methoden der Klassen definiert mit deren Eingabe parametern Typischerweise werden die Get und Set Methoden nicht mit angegeben um die Komplexit t der ohnehin umfangreichen Grafik zu minimieren Die an den Aktienbestand bergebene Kauf bzw Verkauforder wird nicht intern gespei chert Stattdessen werden die Daten der Order Objekte extrahiert und flie en in den Bestand und dessen Bilanz ein Sowohl eine Aktie als auch eine Order mit deren Unterklassen verf gen lediglich ber die Get und Set Methoden und bieten keine eigenen zus tzlichen Dienste an Sie sind also Datencontainer f r die anderen Klassen Neben dem Namen und der ISIN muss f r jede Aktie noch ein URL angegeben werden unter dem man den aktuellen Kurs ermitteln kann Dieser URL soll von der Depotver waltung eingelesen
217. bereits die Umsetzung von Zustands und Aktivit tsdiagrammen in PHP Code Hierbei ist entscheidend dass das Werkzeug auch PHP Code generieren kann Die meisten Tools sind dabei auf Java spezialisiert einige erzeugen ausschlie lich C oder VB NET Quellcode Zu pr fen ist auch die Frage wie gut Sie mit generiertem PHP Code umgehen k nnen Viele Werkzeuge erzeugen kryptischen Code den ein Entwickler im Nachhinein nur schwer lesen kann Eine weitere Entscheidung innerhalb der quellcodegenerierenden Werkzeuge besteht darin ob sie Re Engineering unterst tzen oder nicht Im ersten Fall k nnen Sie modifi zierte PHP Skripte in das Tool zur ckladen und die UML Darstellung automatisch aktu alisieren Im zweiten Fall modellieren Sie eher und erzeugen stets neuen PHP Code Einige Tools berschreiben dabei durchgef hrte nderungen am Quellcode Weitere Unterscheidungskriterien in den UML Werkzeugen liegen darin welche UML Diagrammarten von dem Werkzeug unterst tzt werden Mit reinen Zeichenprogram men k nnen Sie nat rlich beliebige Diagramme erstellen die jedoch nicht unbedingt dem UML Standard entsprechen UML Werkzeuge schr nken Sie hier zugunsten des Standards ein Bei nahezu allen Werkzeugen werden Klassendiagramme unterst tzt Nur einige davon unterst tzen zus tzlich die Erstellung von Anwendungsfall Aktivi t ts Sequenz und Zustandsdiagrammen Letztlich ist noch als Unterscheidungskriterium zu nennen ob Sie ein Open Source
218. bestrom geschrieben lt php wert 10 gt lt html gt lt body gt Der Wert ist lt php if wert lt 10 echo kleiner als else if wert gt 10 echo gr er als else echo gleich gt 10 lt body gt lt html gt Listing 2 24 Pr fung eines Werts PHP bietet Ihnen aber auch die Option den PHP Quellcode beim Eintreffen einer Bedin gung zu unterbrechen und direkt mit der HTML Ausgabe fortzufahren Damit k nnen Sie ununterbrochenen HTML Code schreiben Listing 2 25 zeigt das gleiche Beispiel mit direkter HTML Ausgabe indem mit gt HTML lt php der PHP Code unterbrochen wird Dabei werden auch einige HTML Befehle in die Ausgabe integriert Welche Art der Aus gabe Sie w hlen liegt an Ihrem eigenen Ermessen und am eigenen Programmierstil lt php wert 10 gt lt html gt lt body gt lt php if wert lt 10 gt lt h22Der Wert ist lt b gt kleiner als lt b gt 19 lt h2 gt lt php else if wert gt 10 gt lt h2 gt Der Wert ist lt b gt gr er als lt b gt 10 lt h2 gt lt php Listing 2 25 Pr fung eines Werts mit unterbrochenem PHP Code 38 entwickler press Grundlegende Syntax else gt lt h2 gt Der Wert ist lt b gt 2gleich lt b gt 10 lt h2 gt lt php gt lt body gt lt html gt Listing 2 25 Pr fung eines Werts mit unterbrochenem PHP Code Im Beispiel des Listings 2 26 wird anhand einer Verzweigung eine Farbe im HTML Code gesetzt
219. bindungsobjekt zu einer Datenbank oder zu einer Datei verwalten Wenn das Objekt entfernt wird sollte man noch die ge ff nete Verbindung zum Datenbankserver schlie en bzw die ge ffnete Datei schlie en F r diese F lle bietet PHP eine spezielle Destruktormethode Sie wird aufgerufen sobald das Objekt gel scht wird Der Destruktor dient dazu auch nach dem Entfernen des Objekts einen konsistenten Zustand im Speicher des Webservers zu hinterlassen Sich kennen lernen Assoziationen Wenn ein Objekt A eine Referenz auf ein anderes Objekt B besitzt so kann das Objekt A auf alle Methoden von Objekt B zugreifen Man sagt Objekt A kennt Objekt B Wenn sich Objekte von zwei Klassen kenne k nnen besitzen sie eine Assoziation zueinander Abbildung 3 19 zeigt dass die Assoziationen sehr komplexe Geflechte von Objekten bil den k nnen die die Wirklichkeit modellieren PHP Endlich objektorientiert 141 3 Vorgehensweise bei der Softwareentwicklung einKunde Name Dopatka Vorname Frank Strasse PLZ Joanne K Rowling Beschreibung RechPos1 Menge 5 EinzelPreis 5 23 MwSt 7 Datum 12 02 2009 oMwSt 345 45 mMwsSt 411 09 Die Gef hrten Autor J R R Tolkien RechPos2 Menge 2 EinzelPreis 4 97 MwSt 7 Abbildung 3 19 Assoziationen zwischen Objekten Die Abbildung zeigt dass ein Kunde eine Rechnung kennt In Wirklichkeit besitzt der
220. blaufpl nen wurden die Bedingungen noch in die Raute selbst geschrieben Das hatte dazu gef hrt dass die Rauten eine berdimensionale Gr e eingenommen hatten x lt 0 gt 0 Abbildung 3 36 Verschiedene Verzweigungen Ebenfalls neu hinzugekommen in die UML2 sind die Symbole der Abbildung 3 37 Das linke Symbol erinnert an eine Sanduhr und bedeutet den Ablauf einer absoluten oder relativen Zeitspanne die in der Regel als Beschriftung unter dem Symbol angegeben wird So kann das Symbol beispielsweise nach einer Rechnungsstellung mit einer Zeit dauer von zwei Wochen im Aktivit tsdiagramm platziert werden Im Anschluss daran erfolgt mittels einer Verzweigung eine Pr fung ob die Rechnung bereits bezahlt ist Ist dies nicht der Fall wird die erste Mahnung versendet Die beiden anderen Symbole wurden aus der Specification and Description Language SDL bernommen und beschreiben den Empfang einer Nachricht bzw deren Absen dung Dabei kann es sich um eine Nachricht im weitesten Sinne halten von einem digita len Signal bis hin zu einem eingehenden Telefonat einer E Mail oder einer Faxnachricht Der Empfang einer E Mail kann beispielsweise als Trigger bzw als ausl sendes Ereignis eines Anwendungsfalls verwendet werden vgl dazu Abbildung 3 33 Generell dienen Aktivit tsdiagramme dazu die Abl ufe innerhalb eines Anwendungsfalls darzustellen Objektorientierte Programmierung Yun ua Abbildung 3 37 Zeitereignis empfan
221. brochen und der Login Vorgang aufgezeichnet Auch nach einem Logout Vorgang wird die Verbindung wieder unterbrochen Jede Transaktion wird von einem unabh ngigen zweiten System parallel protokolliert Wie bei Aktivit tsdiagrammen k nnen auch bei Zustandsdiagrammen parallel ausge f hrte Vorg nge modelliert werden Die Durchf hrung von Banktransaktionen ist so komplex dass es in einem separaten Zustandsdiagramm das hier nicht dargestellt wird festgehalten ist Darin werden typische Anwendungsf lle ausgef hrt die ein Kunde w nscht wie Kontost nde einzusehen berweisungen zu t tigen Dauerauftr ge ein zurichten Zugriff auf sein Aktiendepot zu nehmen oder sein Handy aufzuladen In sehr seltenen F llen k nnen Probleme auftreten w hrend ein Benutzer mit dem Ser ver verbunden ist In diesem Fall wird die Verbindung unterbrochen protokolliert und an einen Administrator des Systems bergeben PHP Endlich objektorientiert 201 3 Vorgehensweise bei der Softwareentwicklung nicht verbunden do warten auf Verbindung von aussen verbinden SSL verf gbar trennen oder unterbrochen abbrechen verbunden Authentifizerung fehlgeschlagen protokollieren Login Maske Authentifizerung OK authentifiziert Transaktion durchf hren Q Transaktion protokollieren Abbildung 3 73 Zustandsdiagramm eines Bankservers interner Fehler Admin verst ndigen Abl ufe im technischen
222. browser des Clients gesendet wird In Listing 2 27 ist die resultierende HTML Ausgabe dargestellt Das Ergebnis ist eine gew hnliche HTML Datei mit einigen CSS Angaben lt html gt lt body gt lt font face Arial Helvetica color FF0000 gt 5 8 Some lt body gt lt html gt Listing 2 27 HTML Ausgabe von Listing 2 26 Die elseif Verzweigung Oft kommt es vor dass Sie mehrere Fallunterscheidungen schachteln m ssen Die if then else Konstruktionen sind in diesem Fall un bersichtlich Deshalb existiert eine weitere ver einfachte Struktur die genau f r mehrfache Bedingungen geeignet ist Die if elseif Verzwei gung wird in Listing 2 28 vorgestellt indem das Beispiel der Farbauswahl von Listing 2 26 umgeschrieben wird Der ausgegebene HTML Code des Beispiels bleibt identisch Bereits bei der Verwendung von zwei Bedingungen wirkt der elseif Befehl kompakter lt php wert 0 if wert lt 0 farbe FF0000 elseif wert gt 0 farbe 00FF00 else farbe 000000 gt Listing 2 28 Definition einer Farbe f r eine HTML Ausgabe mit elseif Die elseif Bl cke k nnen mehrfach hintereinander kopiert werden Bei der ersten zutref fenden Bedingung wird der Inhalt des entsprechenden Quellcodeblocks abgearbeitet Nach der Abarbeitung wird der Quellcode hinter der letzten Klammer von if elseif weiter bearbeitet Im Beispiel wurde ausschlie lich die Variable wert f r die Formulierung der Bedingung verwendet
223. bt Informationen bez glich des Datums im UNIX Zeitstempel als Datenfeld zur ck Tabelle 2 16 Datumsfunktionen 64 entwickler press Grundlegende Syntax Die date Funktion gibt das aktuelle Datum und die Uhrzeit des Servers zur ck Die For matierung wird ber den Parameter der Funktion anhand der in Tabelle 2 17 abgebilde ten K rzel vorgenommen So gibt der PHP Befehl echo date d m Y H i s das aktuelle Datum und die Uhrzeit im lesbaren Format 02 06 2009 22 54 16 zur ck Platzhalter Bedeutung A am oder pm A AM oder PM D Tag des Monats mit f hrender Null J Tag des Monats ohne f hrende Null D abgek rzter Tag vollst ndig ausgeschriebener Wochentag F vollst ndig ausgeschriebener Monat M Monat mit f hrender Null M abgek rzt geschriebener Monat N Monat ohne f hrende Null H Stunde im 12 Stunden Format mit f hrender Null H Stunde im 24 Stunden Format mit f hrender Null G Stunde im 12 Stunden Format ohne f hrende Null G Stunde im 24 Stunden Format ohne f hrende Null l Minuten mit f hrender Null S Sekunden mit f hrender Null T Anzahl der Tage des Monats W Wochentag als Zahl 0 f r Sonntag bis 6 f r Samstag Y zweistellige Jahresangabe Y vierstellige Jahresangabe Z Tag im Jahr Tabelle 2 17 Datums und Zeitformatierung Zus tzlich existieren Funktionen zum Umgang mit der Uhrzeit die in Tabelle 2 18 aufge listet sind Zun chst wird die Funktion gettimeofday
224. bt die Anzahl der Zeichen in s rzur ck wert strpos str such offset gibt die erste Position von such in der Zeichenkette s rab dem Wert von Soffsetzur ck wert strrpos str such gibt die letzte Position von Sswchin der Zeichenkette Ss rzur ck erg strstr str such sucht swchin der Zeichenkette s rund gibt die Teilzeichenkette von strab der gefundenen Position bis zum Ende zur ck erg substr str start len gibt die Teilzeichenkette ab der Position s arfvon strmit der L nge S en zur ck erg stremp stri str2 vergleicht s r und str2und gibt 1 zur ck wenn str7 lt str2 0 wenn beide Strings gleich sind und 1 wenn Sstr gt Sstr2 erg streasecmp str1 str2 wie strcmp ber cksichtigt jedoch keine Gro und Kleinschreibung Tabelle 2 12 Funktionen zum Suchen und Vergleichen von Zeichenketten Listing 2 53 zeigt Tests der Zeichenkettenfunktionen Die Ausgaben lauten 6 2 llo liebe Leute liebe und 1 lt html gt lt body gt lt php echo strlen Hallo lt br gt 2 wert strpos Hallo 1 1 echo wert lt br gt Listing 2 53 Test der Funktionen zum Suchen und Vergleichen von Zeichenketten PHP Endlich objektorientiert 61 2 Die Sprache PHP Prozedural echo strstr Hallo liebe Leute 1 lt br gt 2 echo substr Hallo liebe Leute 6 5 lt br gt echo stremp Frank Hans lt br gt 2 lt body lt html gt Lis
225. ce header inc php gt lt form action dividende2 php method post gt lt table border 0 width 100 gt lt tr gt lt td align right width 50 gt erhaltene Dividende lt td gt lt td align left width 50 gt lt input type text name dividende size 10 value gt lt td gt lt tr gt lt tr gt lt td align right width 50 gt lt input type submit name eingabe value Hinzuf gen gt lt td gt lt td align left width 50 gt lt input type submit name eingabe value Abbrechen gt lt td gt lt tr gt lt table gt lt form gt lt php require_once footer inc php gt Listing 5 20 dividende php View PHP Endlich objektorientiert 381 5 Projektpraxis Die entstehende Eingabemaske in Abbildung 5 26 ist dementsprechend kompakt Durch Klicken der Schaltfl chen Hinzuf gen bzw Abbrechen gelangt der Benutzer per HTTP Post auf dividende2 php http localhost Aktienverwaltung 004 dividende php Windows Internet Explorer BAX EI 7 E h ilocahost x 4x 2 JE Datei Bearbeiten Ansicht Favoriten Extras Favoriten http localhost Aktienverwaltung 004 dividende php Depotverwaltungsprogramm Gew hlter Bestand E ON laden l speichern bersicht w hlen l neu l hinzukaufen neue Dividende verkaufen erhaltene Dividende 150 Hinzuf gen Abbrechen Copyright by Dr Frank Dopatka Lokales Intranet ar R
226. ch mit dem Namen aus dem grafischen Anwendungsfall Globale Zielsetzung bei erfolgreicher Ausf hrung dieses Anwendungsfalls Handelt es sich um einen prim ren sekund ren oder optionalen Anwendungsfall Dies ist ein erster Anhaltspunkt f r eine sp tere Priorisierung m Erwarteter Zustand vor Beginn dieses Anwendungsfalls m Erwartetes Ergebnis nach erfolgreicher Ausf hrung m Erwarteter Zustand falls Ziel nicht erreicht werden kann Fehlschl ge sind jedoch noch nicht technisch zu betrachten z B wenn w hrend einer Anmeldung das Netz werk gest rt ist Vielmehr sind Fehlschl ge innerhalb der Gesch ftsprozesslogik gemeint wie das Anmelden f r ein bereits ausgebuchtes Seminar m Die beteiligten Rollen oder Personen k nnen den grafischen Anwendungsf llen ent nommen werden m Das ausl sende Ereignis ist ein Trigger bei dessen Auftreten der Anwendungsfall gestartet wird Dieser Trigger muss nicht innerhalb des Systems auftreten es kann beispielsweise der Anruf eines Kunden sein m Die Beschreibung gibt in kurzen nummerierten Stichpunkten wider wie der k rzeste Weg zum Erfolg des Anwendungsfalls lautet Dieser k rzeste Pfad l sst sich in der Regel bei Verwendung einer agilen Vorgehensweise sehr schnell in einem fr hen Pro totyp realisieren der bereits f r eine gro e Zahl an F llen einsatztauglich ist m In einem separaten Punkt werden typische Erweiterungen des Funktionsumfangs im Gegensatz zur Beschreibung auf
227. ch wird der Anwendungsfall ausgel st Die zweite Antwort ergibt das ausl sende Ereignis Die Definition der Fehlschl ge aus fachlicher nicht aus technischer Sicht und die Reak tion darauf sind von ebenso gro er Bedeutung wie die Beschreibung Wie kommt man auf dem k rzesten Weg zu einer erfolgreichen Ausf hrung und die Erweiterungen bzw Alternativen PHP Endlich objektorientiert 333 5 Projektpraxis W hrend die Beschreibung den Prim rfluss darstellt der in fr hen Prototypen zu reali sieren ist sind die Erweiterungen Hinweise auf m gliche optionale oder Nice to have Funktionen Alternativen beschreiben hingegen eher leichte Verzweigungen in der Beschreibung und damit alternative Wege um zum Erfolg zu gelangen Meinung Sie erkennen dass die erste Phase sehr textlastig ist Es gilt hier vor allem Begriffe Aufgaben und Funktionen zu definieren und eine gemeinsame Sprache mit dem Auftraggeber zu finden der meist aus einem anderen Fachgebiet stammt Sie als Analytiker m ssen dabei in den Gespr chen und Workshops die richtigen Fragen stellen Eine kreative Atmosph re mit verschiedenen Personen also verschiedenen Sichtweisen ist dabei hilfreich Versuchen Sie auch herauszufinden welche Funktio nen nicht zwingend in den ersten Schritten des Projekts notwendig sind Ein Ausf l len der Schablonen im stillen K mmerlein und insbesondere ein Copy Paste Ausf l len erzeugt zwar Papier aber nur einen ger
228. chgradig modular die objektorientierte Entwick lung ablaufen kann nderungen sollen dabei nur einen geringen Teil des Quellcodes betreffen Jede Art von mehrfachem identischem Quellcode soll durch die Bildung von Ober Klassen verhindert werden wie Sie an der Personenklasse erkennen k nnen In diesem Beispiel werden die Eingabewerte in die Methoden noch nicht auf G ltigkeit gepr ft Hier sind noch Plausibilit tskontrollen mit einem entsprechenden Fehlerma nagement durchzuf hren siehe Kapitel 4 3 In diesem Beispiel wurde der Fokus auf die Realisierung der Komposition zwischen der Rechnung und ihren Rechnungspositionen gelegt Die Referenzen auf die Positionen werden von der Rechnungsklasse verwaltet Sie bleiben innerhalb dieser Klasse und werden nicht nach au en weitergegeben Das n chste Beispiel realisiert eine Aggregation Dazu wurde im dritten Kapitel in der objektorientierten Analyse bereits ein Beispiel aufgezeichnet Abb 3 48 und ein Objekt diagramm erstellt Abb 3 49 Daraus wurde in Abbildung 3 54 das Klassendiagramm abgeleitet das nochmals in Abbildung 4 11 dargestellt wird 3 Dreieck Abbildung 4 11 Klassendiagramm mit zu realisierender Aggregation Die Teile hier die Punkte k nnen im Gegensatz zu einer Komposition auch ohne das Ganze hier das Dreieck existieren Ein Punkt kann auch zu mehreren Dreiecken geh ren Ein Dreieck besteht jedoch stets aus genau drei Punkten Listing 4 42 zeigt die Punkt
229. chiedenen Aktien die der Kunde zuvor gekauft hat Der Anleger als Kunde der Bank soll neben den aktuellen Kursen jederzeit eine ber sicht seiner Gewinne bzw Verluste erhalten k nnen Zus tzlich dazu soll ein einfacher Vergleich der Zinsen aus den Aktiengewinnen mit Zinss tzen von Festgeld und Spar einlagen m glich sein Im Gegensatz zu anderen Depotverwaltungsprogrammen sollen auch Gewinne aus Dividenden ber cksichtigt werden k nnen die Aktiengesellschaften blicherweise j hrlich an die Aktion re im Anschluss an die Hauptversammlungen aus sch tten Die zu erstellende PHP Anwendung soll sich aber zun chst nicht direkt mit einem Aktiendepot des Anlegers verbinden Stattdessen soll jeder Anleger seinen Aktienbe stand und jede Transaktion zun chst manuell eingeben Dadurch soll ein Kunde der Bank sich auch ein Musterdepot anlegen k nnen um in den Aktienhandel hineinzu schnuppern Die Bank erhofft sich dadurch die Gewinnung von Neukunden Eine Transaktion ist neben dem Kauf auch ein Verkauf eines Aktienbestands Ebenso wird der Erhalt einer Dividende als zus tzliche Zahlung an den Anleger als Transaktion bezeichnet und vom System durch manuelle Eingabe erfasst Die aktuellen Kurse sollen aber nicht vom Anleger manuell eingegeben werden Statt dessen sollen diese Kurse aktuell von einer existierenden Homepage eingelesen werden k nnen Solche Homepages existieren nach den Aussagen des Auftraggebers f r jede Aktie die
230. chkeit wie gew nschte Modularit t zu realisieren Das geschieht insbesondere durch die Verwendung folgender Befehle m require datei php m require_once datei php m include datei php m include_once datei php Alle Befehle binden Quelltext aus einer anderen Datei in das aktuelle Skript ein Der Unterschied zwischen den include und require Befehlen liegt in dem Umgang mit Feh lern insbesondere wenn die einzubindende Datei nicht existiert W hrend include eine PHP Warnmeldung zur ckgibt erzeugt require einen PHP Fehler wonach die Verarbei tung des Skripts abgebrochen wird Verwenden Sie also require wenn Sie m chten dass eine fehlende Datei die Ausf hrung ihres Skripts beendet Ein Problem kann sich ergeben wenn PHP Dateien sich gegenseitig mehrfach includie ren Wird beispielsweise eine PHP Datei mehrfach eingebunden die eine Funktionsdefi nition enth lt dann f hrt das zu einem PHP Fehler Das k nnen Sie mit require_once bzw mit include_once verhindern In diesem Fall pr ft PHP vor der Einbindung der Fremdda tei ob diese bereits eingebunden ist Wenn das der Fall ist wird sie nicht nochmals einge bunden Abschlie end wird der include Befehl getestet Eine Homepage soll dabei in einen ein heitlichen Header und Footer strukturiert werden Der Header enth lt alle PHP Initiali sierungen Skripte Funktionsdefinitionen und Meta Iags Der Footer soll aus einer Copyrightmeldung bestehen Listing 2 50 zeigt de
231. chnischen System abgebildet werden Aber auch wenn keine Abbildung in einer PHP Anwendung erfolgt ist allein die Definition der Anwen dungsf lle und der Gesch ftsprozesse ein Mehrwert f r Ihren Kunden Diese Abbildung kann auf zwei verschiedene Arten erfolgen die auch vermischt werden k nnen Zum einen k nnen Sie Datenabl ufe modellierten beispielsweise wie das Auf nehmen einer Bestellung bis zu deren Versand in ihrem Unternehmen abl uft Dies wird als Daten oder Kontrollfluss bezeichnet und ist in Abbildung 3 34 oben rechts darge stellt Wenn Sie bereits Objekte identifiziert haben k nnen Sie auch die Weitergabe dieser Objekte innerhalb Ihres Unternehmens festhalten So kann es sich bei der Aktion 1 in Abbildung 3 34 unten rechts um den Vorgang der Erfassung einer Bestellung handeln die ein Bestellungsobjekt erzeugt und zur ckliefert Dieses Objekt wird dann in Aktion 2 vom Versand weiterverarbeitet Jede Aktion wird in einem abgerundeten Viereck dargestellt und sollte in ihrer Beschrei bung eine T tigkeit also ein Verb enthalten Wenn Sie in einem Diagramm an eine Sei tenbeschr nkung gelangen k nnen Sie so genannte Wurml cher einf gen wie es in der Abbildung mit dem Kreis A dargestellt ist Um eine hohe bersicht zu gew hrleisten sollten Sie jedoch nach M glichkeit auf dieses Mittel verzichten Die Wurml cher k n nen jedoch auch auf ein anderes Aktivit tsdiagramm verweisen Aktion 1 Abbildung 3 34 Akti
232. cho var_dump P2 lt br gt 2 echo var_dump P3 lt br gt 2 echo var_dump D1 lt br gt 2 echo var_dump D2 lt br gt 2 echo var_dump D3 lt br2 lt body gt lt html gt Listing 2 61 Quellcode der Auswertung des POST Formulars fachlogik_post php Profitipp Beachten Sie dass die bertragung von ausgef llten HTML Formularen mit GET oder auch mit POST unverschl sselt erfolgt Es ist relativ leicht mit einem Paketana lysator wie WireShark http www wireshark org im Netzwerk bertragene Daten auszulesen Bieten Sie dem Benutzer am besten eine gesch tzte HTIPS Verbindung an damit er seine pers nlichen Daten eingeben und nicht f r andere Personen lesbar bertragen kann Sessions und Weiterleitung Im vorherigen Kapitel wurde gezeigt wie ein Anwender ein HTML Formular ausf llt das ber das HTTP Protokoll zum Server zur ck sendet und wie die Formulardaten ber ein PHP Skript ausgelesen und verarbeitet werden k nnen Ein Problem besteht 72 entwickler press Erweiterte Funktionen darin wenn sich der Server diese Formulardaten merken soll die Daten jedoch nicht so endg ltig sind dass es sich lohnt sie in einer Datenbank zu speichern Beispielsweise kann ein Anwender ein gro es Formular ber mehrere HTML Seiten eingeben Oder PHP soll sich merken ob der Anwender der sich eben eingeloggt hat auch wirklich authentifiziert ist Ein weiterer Anwendungsfall besteht im Aufbau eines Ware
233. cht nachtr glich nderbar sein soll lt php abstract class Order private aktie private anzahl private datum private einzelpreis private geb hr public function __construct aktie anzahl datum einzelpreis geb hr this setAktie aktie this setAnzahl anzahl this gt setDatum datum this gt setEinzelpreis einzelpreis this gt set eb hr geb hr Listing 5 4 Implementierung der Klasse Order PHP Endlich objektorientiert 349 5 Projektpraxis public function getAktie return this gt aktie private function setAktie value this gt aktie value public function getAnzahl return this anzahl private function setAnzahl value this gt anzahl value public function getDatum return this gt datun private function setDatum value this gt datum value public function getEinzelpreis return this gt einzelpreis private function setEinzelpreis value this gt einzelpreis value public function getGeb hr return this gt geb hr private function setGeb hr value this gt geb hr value Listing 5 4 Implementierung der Klasse Order Forts Bei der Kauforder wird in Listing 5 5 lediglich der Konstruktor so ver ndert dass die Eingabedaten namentlich einer Kauforder entsprechen Aus dem Datum wird daher ein 350 entwickler press Das Fallbeispiel der Depotverwaltung Einkaufsd
234. d Personen Genauso sind PKWs LKWs und Z ge Fahrzeuge Man spricht in dieser Richtung von einer Generali sierung Der Kombi Y3 ist ein spezieller PKW und ein PKW ist ein spezielles Fahrzeug Durchl uft man die Klassenhierarchie also in die andere Richtung so spricht man von einer Spezialisierung Es stellt sich die Frage warum das Finden von Klassenhierarchien von so gro er Bedeu tung in der Objektorientierung ist und welchen Nutzen man von einer Klassenhierarchie hat Die Antwort liegt im Wesentlichen in der Vermeidung von doppeltem Quellcode durch die logische Unterteilung Da sowohl der Kunde als auch der Mitarbeiter Perso nen sind m ssen die Eigenschaften und auch die Methoden einer Person nur einmalig kodiert werden Die Klasse Kunde und Mitarbeiter erbt dann alle Eigenschaften und Methoden von der Oberklasse Weder vererbte Eigenschaften noch vererbte Methoden k nnen in den Unterklassen gel scht oder verworfen werden Man kann also sein Erbe nicht leugnen Dies bedeutet dass man sehr sorgf ltig pr fen muss ob die Eigenschaften und Methoden der Ober klasse wirklich allgemeing ltig sind Ansonsten m ssen sie ggf in die Unterklassen aus gelagert werden Eine sinnvolle Struktur der Objektorientierung besteht darin vererbte Methoden neu zu definieren Man spricht hier von einem berschreiben der Funktionalit t Nehmen wir an Sie modellieren eine Klasse Tier und m chten dass jedes Tier einen Laut geben kann Sie de
235. d ab so ergibt sich ein Gesamtgewinn von 486 00 bzw 22 83 Rechnet man die erhaltenen Zinsen linear auf ein Jahr hoch so ergibt sich ein Zinssatz von sehr guten 49 64 Jahr Es lohnt sich also in einer Wirt schaftskrise Aktien zu kaufen Abbildung 5 10 zeigt den Bezug einer Aktie zu einer Kauforder Die Anzahl der Preis pro Aktie das Kaufdatum und die Kaufgeb hren sind mit dem Aktienobjekt verbunden Die Aktie selbst wei nicht unbedingt von wem sie gekauft wurde Wenn der Kauf abgewickelt wurde gehen die Daten aus dem Objekt der Kauforder in den Aktienbestand ber Das Kauforderobjekt spielt dann keine Rolle mehr in der bishe rigen Modellierung Kauforder 90 St ck 23 54 St ck Preis pro Aktie 24 04 2009 gekauft 9 90 Kaufgeb hren E ON DEOO0OENAG999 Abbildung 5 10 Objektdiagramm einer Aktie und deren Bezug zu einem Kauf Aus den bislang ermittelten Funktionen deren Beschreibung und den Objektdiagram men kann ein erstes Klassendiagramm der Analysephase erstellt werden Dieses Dia gramm ist in Abbildung 5 11 abgebildet Ein Aktienbestand besteht aus Aktien deren Kauf mit einer Kauforder in Zusammen hang steht Wenn Sie Aktien verkaufen wollen muss analog dazu eine Verkauforder existieren Unabh ngig davon ob ein Aktienbestand bereits verkauft wurde oder nicht k nnen Sie jederzeit eine Bilanz mit den Gewinnen Verlusten aus dem Aktienbestand erstellen Der Aktienbes
236. d align right width 50 gt Name der Aktie lt td gt lt td align left width 50 gt lt input type text name name size 30 gt lt td gt lt tr gt lt tr gt lt td align right width 50 gt ISIN der Aktie lt td gt lt td align left width 50 gt lt input type text name isin size 30 gt lt td gt lt tr gt lt tr gt lt td align right width 50 gt URL der Aktiendaten lt td gt lt td align left width 50 gt lt input type text name url size 30 gt lt td gt lt tr gt lt tr gt lt td align right width 50 gt Anzahl gekaufter Aktien lt td gt lt td align left width 50 gt lt input type text name anz size 5 gt St ck lt td gt lt tr gt lt tr gt lt td align right width 50 gt Kurs beim Kauf lt td gt lt td align left width 50 gt lt input type text name kaufkurs size 10 gt lt td gt lt tr gt lt tr gt lt td align right width 50 gt Kauf Datum lt td gt lt td align left width 50 gt lt input type text name kaufdatum size 10 gt lt td gt lt tr gt lt tr gt lt td align right width 50 gt Kauf Geb hren lt td gt lt td align left width 50 gt lt input type text name kaufgeb hr size 10 gt Listing 5 15 neu php View Das Fallbeispiel der Depotverwaltung lt td gt lt tr gt lt tr gt lt td align right width 50 gt Verkauf Geb hren lt td gt lt td align
237. d die Entwicklung auch nach der Ausliefe rung der PHP Anwendung fortgesetzt Ein bekanntes Werkzeug unter freier Lizenz das eine Versionierung der Dateien unter st tzt ist Subversion SVN der Firma CollabNet SVN wird als Nachfolger des weit ver breiteten Concurrent Versions System CVS angesehen Die Versionierung ist dabei unabh ngig von der Programmiersprache PHP Es k nnen beliebige Quellcodedateien und auch Dokumentationen f r die Versionierung verwendet werden F r die Versionierung wird ein Server im Intranet ben tigt der das PHP Projekt enth lt Die Versionierung erfolgt in diesem zentralen Projektarchiv in Form einer einfachen Revisionsz hlung Das Archiv wird auch als Repository bezeichnet Wenn ein Entwick ler eine Quellcodedatei ndern will checkt er diese Datei aus und bearbeitet sie Dies ist jedoch meist nur im Kontext des Gesamtprojekts m glich da die PHP Datei ja mit ande ren PHP Dateien verkn pft ist Daher checken mehrere Entwickler das gesamte Projekt aus und editieren idealerweise verschiedene Quellcode Dateien Sobald ein Entwickler fertig ist mit der Bearbeitung seiner Dateien werden zun chst die PHPUnit Iests durchgef hrt Im Anschluss daran checkt der Entwickler die ge nderten PHP Endlich objektorientiert 417 5 Projektpraxis Dateien ber das SVN System wieder ein Dabei werden nur die ge nderten Dateien auf den Server bertragen Diese Dateien erhalten dann eine neue Revisionsnummer
238. dann intern f r das Erstellen Verwalten und L schen von Br chen ver antwortlich Sie beinhaltet ihrerseits nichtstatische Eigenschaften und Methoden und verwaltet eine Liste aller Br che Bei der ausschlie lichen Verwendung von Klassenattributen haben Sie beispielsweise ein Problem wenn Sie ein zuvor serialisiertes Objekt wieder einlesen Dabei wird kein Konstruktor aufgerufen und die Anzahl der Br che im System nicht erh ht In einer Ver waltungsklasse k nnen Sie hingegen aus das Serialisieren und Deserialisieren verwalten und dabei auch die Anpassung der Anzahl von Objekten vornehmen 4 1 6 Konstanten in Klassen und Verhinderung von Vererbung Bereits in Kapitel 2 1 wurde gezeigt wie Sie in PHP ber den define Befehl Konstanten in Ihr prozedurales Programm einbauen k nnen So definiert die folgende Zeile define WERT_KONST Meine tolle Homepage eine Konstante mit dem Namen WERT_ KONST die den Inhalt Meine tolle Homepage enth lt Bei der Angabe des Namens einer Konstanten ist darauf zu achten dass bei Konstanten zwischen Gro und Kleinschrei bung unterschieden wird Der define Befehl funktioniert innerhalb einer Klasse jedoch nicht Sie k nnen also auf diese Weise keine Konstante als Eigenschaft einer Klasse definieren Stattdessen existiert f r Klassen der Befehl const mit dem eine f r die Klasse g ltige Konstante deklariert wird die sich im Aufruf wie ein Klassenattribut verh lt lt php class Kreist Li
239. das Stiftobjekt in der Session jetzt verloren Die Antwort lautet Nein das Stiftobjekt in der Session ist noch vorhanden Die Session datei befindet sich auf dem Dateisystem des PHP Servers In diese Datei wurde das Objekt hineinserialisiert siehe dazu auch das n chste Kapitel zur Serialisierung Lediglich das Stiftobjekt aus dem Arbeitsspeicher des PHP Servers wurde wieder freige geben Die Daten der Session k nnen Sie sich brigens ansehen Wenn Sie das XAMPP Paket installiert haben wurde in dessen Unterverzeichnis tmp mit dem ersten Start der Session eine Datei angelegt Falls die Session mit der ID 32174032e41dfe5fa52a481b35391302 ange legt wurde so hei t die Datei sess_3217d032e41dfe5fa524481b35391302 Diese Datei k n Umsetzung objektorientierter Grundlagen nen Sie mit einem Texteditor ffnen und finden das serialisierte Objekt mit seiner Eigen schaft StiftContainer O 5 Stift 1 5 12 Stift farbe s 3 rot Das O bedeutet dass im Folgenden ein Objekt abgespeichert ist Dann kommt die Anzahl der Zeichen f r den Klassennamen Die 1 ist die erste Eigenschaft die aus einer Zeichenkette s f r String besteht Dem folgt der Name der Eigenschaft in 12 Zeichen wobei der Name aus dem Namen der Klasse und dem Namen der eigentlichen Eigen schaft zusammengesetzt ist Der Wert der Eigenschaft folgt dann hinter dem Semikolon Es ist eine Zeichenkette mit drei Zeichen und der Wert lautet rot Mit ei
240. das nicht mehr existiert Meinung Dieser Ausblick der von einem Objektdiagramm ausgeht und bis tief in die Imple mentierung reicht zeigt die notwendige Disziplin und Sorgfalt die man als Analyti ker und auch als Entwickler bei der objektorientierten Programmierung besitzen muss Dies wird noch unterst tzt davon dass Sie als Autor der Klassen Punkt und Dreieck bei Fehlern wesentlich leichter zur Verantwortung gezogen werden k nnen als bei einem prozedural entwickelten Projekt bei dem die Aufgaben mehrerer Ent wickler nicht so stark voneinander trennbar sind Aus dem in Abbildung 3 48 dargestellten Objektdiagramm der Analyse m ssen Sie im n chsten Schritt ein Klassendiagramm der Analyse erstellen Der Fokus der Analyse besteht darin die Klassen und deren Beziehungen zu ermitteln Es wurde bereits festge stellt dass die Klassen Punkt und Dreieck existieren die sich gegenseitig kennen Die m glichen Darstellungen einer Assoziation finden Sie in Abbildung 3 51 Wenn keine Pfeile eingezeichnet sind machen Sie noch keine Aussage dar ber welche Klasse welche andere kennt Gerade zu Beginn der Analysephase ist dies blich Zus tzlich wird in der Abbildung ausgesagt dass K3 Objekte K4 Objekte kennen k nnen Ob K4 Objekte auch K3 Objekte kennen k nnen ist nicht spezifiziert worden Wenn Sie eine Kenntnis explizit verbieten wollen m ssen Sie dies durch ein Kreuz darstellen So ist es zwar sinnvoll dass ein Richter Zugriff auf di
241. de nicht mehr erkennbar ist Ein Beispiel daf r sind quasiflexible Datenmodelle die auf anwendungsbezogene Datenbanktabellen wie Kunde Artikel und Rechnung verzichten und stattdessen mittels allgemeiner Tabellen eine eigene Verwaltungsschicht f r die Datenstruktur implementie ren wollen Um dem Plattformeffekt zu begegnen m ssen Sie sich zun chst bewusst sein dass Sie niemals alle Anforderungen und Erweiterungen im Vorfeld erkennen und ber cksichti gen k nnen Oft entstehen neue unvorhersagbare Anforderungen die auch Ihrem Kun den nicht beim Start des Projekts bekannt sein konnten Die Verwendung agiler Methoden mit einer ausgiebigen Kommunikation aller Beteilig ten sowie ein robustes Design der Anwendung mit gekapselten wiederverwendbaren Komponenten helfen zus tzlich den Plattformeffekt zu vermeiden und dennoch eine erweiterbare Anwendung zu erzeugen Sumo Hochzeit Viele Datenbankhersteller bieten an einen Teil der Fachlogik in gespeicherten Prozedu ren innerhalb des Datenbankservers zu realisieren Au erdem wird der standardisierte SQL Befehlssatz oft erweitert Dies hat zur Folge dass der Client unnat rlich stark von der Datenbank abh ngig ist Auch wenn dies einen Gewinn an Performance bietet wird die Architektur der Anwendung dadurch unflexibel und es entsteht eine Abh ngigkeit vom Datenbankhersteller Wird die Anwendung zu einer Internetanwendung migriert oder die Datenbank ausge tauscht so m ssen auf beide
242. de vorliegen Statt neue Best nde manuell anzulegen sollen Sie ber die Schalt fl che laden auch existierende Best nde aus der Datenbank einlesen k nnen Die Funktion der laden php die durch das Klicken auf die gleichnamige Schaltfl che aus gef hrt wird ist in Listing 5 26 beschrieben Wie schon beim Speichern wird ein neues Datenbankzugriffsobjekt erstellt und die Verbindung zur Datenbank ber die Angabe der Parameter host user passt und db hergestellt ber den SQL Befehl SELECT FROM aktien ORDER BY ID werden dann alle Best nde aus der Datenbanktabelle ausgelesen Ist dies erfolgreich so ergibt sich eine mit den Best nden gef llte Ergebnismenge ausgabe Diese Menge wird in der foreach Schleife Datensatz f r Datensatz und damit Bestand f r Bestand durchgegangen F r jeden Bestand wird dann ein Kauforderobjekt erstellt mit dessen Hilfe ein neues Bestandsobjekt angelegt wird Dann werden eventuell gezahlte Dividenden zum Bestand hinzugef gt Wurde der Bestand bereits verkauft so wird anschlie end ein Ver kaufsorderobjekt erstellt und dem Bestand hinzugef gt Dies sind dieselben Schritte die auch ein Anwender in der Benutzeroberfl che t tigen kann Es werden dabei dieselben Methoden der Fachlogik aufgerufen Die Daten stammen diesmal lediglich aus der Datenbank und nicht aus gef llten HTML Formularen Der Bestand wird abschlie end in die PHP Session serialisiert und der Z hler der Objekte in der Session inkrementi
243. definiert ist sondern lediglich au erhalb Wenn Sie dennoch auf die externe Variable zugreifen wollen m ssen Sie diese zun chst innerhalb der Funktion bekannt machen Das geschieht ber den global Befehl Danach erfolgt die Ausgabe Hallo Welt wie erwartet lt php a Hallo function Ausgabe global a return a Welt Listing 2 46 Korrekte Ausgabefunktion Wert und Referenz bergabe von Parametern In einer strukturierten Anwendung sollte nach M glichkeit auf die Verwendung von globalen Variablen verzichtet werden Ein besserer Programmierstil liegt darin die innerhalb der Funktion ben tigten Parameter von au en zu bergeben und das Ergebnis zur ck zu geben Ein Beispiel ist die Funktion Swap in Listing 2 47 die zwei Werte ver tauschen soll Diese Werte hei en innerhalb der Funktion x und y Leider funktioniert diese Funktion auch nicht auf Anhieb Die Ausgabe der Werte im HTIML Teil der Datei ist unver ndert a 33 und b 99 Die Funktion selbst ist jedoch korrekt Der Wert der x Variable wird in eine tempor re Variable bergeben Dann wird der x Wert vom y Wert berschrieben und abschlie end wird der tempor re Wert in die y Variable geschrieben lt php a 33 b 99 function Swap x y temp x x y y temp Listing 2 47 Kein Tausch durch den Swap Befehl 56 entwickler press Grundlegende Syntax lt html gt lt body gt lt php Swap a b echo a lt br gt echo
244. den Dies f hrt zum Abbruch der Abarbeitung des Skripts und zur Ausgabe der Mel dung Um einen Fehler abzufangen versuchen Sie nun den Quellcode erfolgreich auszuf h ren Dazu wird er in eine try Konstruktion geschrieben Dieser Code wird in Listing 4 56 fett dargestellt Sie erkennen dass der Code nicht durch Fehlerabfragen unterbrochen wird lt php require_once classloader inc php gt lt html gt lt body gt lt php db new mysqlDZ tryt 1 ffnen p_ ffnen new ParameterListe p_ ffnen gt add host localhost p_ ffnen gt add user root p_ ffnen gt add pass p_ ffnen add db boerse db ffnen p_ ffnen 2 schreiben p_schreiben new ParameterListe p_schreiben gt add sql UPDATE ag SET name Dopatka AG WHERE ID 6 db gt schreiben p_schreiben 3 lesen p_lesen new Parameterliste p_lesen gt add sql SELECT ID name FROM ag ORDER BY ID ausgabe db gt lesen p_lesen echo Anzahl Datens tze count ausgabe lt br gt echo Anzahl Spalten count ausgabe lt br2 foreach ausgabe as index gt datensatz Listing 4 56 Objektorientierte Fehlerbehandlung beim Datenbankzugriff Objektorientierte Fehlerbehandlung foreach datensatz as index2 gt wert echo wert echo lt br gt db gt schliessen NULL catch Fehler f echo f db gt schliessen NULL lt body gt lt html gt Listing 4 5
245. den realen Hausbau entnehmen dies w rde zu gro en Messfehlern f hren Jedes UML Diagramm zeigt ebenso eine Sicht auf die zu erstellende Anwendung Einige Aspekte k nnen Sie an bestimmten Diagrammen besonders gut entdecken andere Aspekte weniger gut Daf r existieren dann wieder andere Diagramme Klassen und Paketdiagramme zeigen besonders gut die statische Struktur der zu erstellenden Anwendung Dies betrifft die Datenhaltung und den Zusammenhang zwischen Klassen PHP Endlich objektorientiert 161 3 Vorgehensweise bei der Softwareentwicklung und Modulen Aktivit ts und Sequenzdiagramme stellen dagegen insbesondere die Interaktion Kommunikation und Abl ufe in den Vordergrund und fokussieren die Dynamik in der zuk nftigen Anwendung Profitipp Sie k nnen eine Anwendung niemals mit nur einem UML Diagrammtyp beschrei ben Es gibt zwar wichtigere und unwichtigere Diagramme aber wenn Sie die Viel falt der Diagramme zu sehr eingrenzen um nicht die gesamte Notation verwenden zu m ssen werden Sie auch einige Aspekte Ihrer Anwendung nicht betrachten Die Anwendung der UML eignet sich insbesondere bei der Programmierung im Gro en wenn also viele Stakeholder an dem Projekt beteiligt sind Teile der UML k nnen jedem Projektbeteiligten bekannt gemacht werden sodass die Notation als gemeinsame Spra che und als Diskussionsgrundlage verwendet werden kann Der Detailgrad Von der Wolke bis zur Muschel Gerade zu Projektbeginn
246. denaufrufe zur ckgibt Wenn man jeder Person das Recht geben will direkt auf den Namen zuzu greifen was ja durchaus sinnvoll ist so kann man diese Eigenschaft als protected dekla rieren Herr Meier als Instanz des Verk ufers kann dann so auf die Eigenschaft zugreifen als w re sie direkt in seiner Klasse deklariert worden Polymorphie Ein sehr interessantes Konzept in Verbindung mit Vererbung in objektorientierten Spra chen ist die Polymorphie Polymorphie beschreibt die F higkeit einer Eigenschaft oder Methode sich abh ngig von ihrer Verwendung unterschiedlich darzustellen Sie erlaubt der Eigenschaft oder Methode je nach Kontext einen unterschiedlichen Datentypen anzunehmen Die Bedeutung dieser Definition ist zun chst schwer zu erfassen Anhand einiger Beispiele wird das Prinzip der Polymorphie jedoch deutlich Nehmen wir an Sie erstellen wie bereits beschrieben eine Klasse Tier mit den Unterklassen Katze und Hund Sie definieren dass jedes Tier einen Laut von sich geben muss und erstellen PHP Endlich objektorientiert 139 3 Vorgehensweise bei der Softwareentwicklung daher in der Klasse Tier die Methode gibLaut die Sie in den Klassen Katze und Hund ber schreiben Dies ist mit Pseudocode in Abbildung 3 18 skizziert Tier gibLautf echo laut Tier 0 1 2 a Katze Hund gibLautf gibLautf echo miau echo wow Bello Abbildung 3 18 Polymorphie am Beispiel von Tieren Hunden und
247. dene Zwecke nicht mehr m glich Hier gilt die Regel Sie m ssen nur wissen wo die Funktionen stehen die Sie ben tigen Und Sie m ssen so viel von der Sprache PHP beherrschen dass Sie die Definitionen der Funktionalit t verstehen und anwenden k nnen In dem n chsten Beispiel wird die DOM Klasse dazu verwendet zun chst ein DOM Objekt im Speicher des Servers aufzubauen und dieses Objekt anschlie end als XML Datei abzuspeichern Auf diese Weise k nnen Sie genausogut alle Eigenschaften eines Objekts ber eine selbstdefinierte Methode in ein DOM Objekt berf hren um die Persistenz des Objekts sicherzustellen In Listing 4 68 erzeugen Sie zun chst ein neues DOM Dokument in der XML Version 1 0 mit westeurop ischem und amerikanischem Zeichensatz Das XML Dokument soll men schenlesbar formatiert werden was sich insbesondere in entsprechenden Zeilenumbr chen hinter den Ende Elementen und in Einr ckungen bei verschachtelten Elementen bemerkbar macht Wenn Sie die XML Datei ausschlie lich maschinell verarbeiten k n nen Sie auf die Formatierung verzichten die Verarbeitung etwas beschleunigen und die Dateigr e leicht minimieren Jedes XML Element wird ber die DOM Methode createElement erzeugt und mit der Methode appendChild dem DOM Baum hinzugef gt Die Methode set Attribute definiert den Namen und den aktuellen Wert eines Attributs in einem XML Element Wenn Sie createTextNode verwenden k nnen Sie Text hinter dem zuletzt
248. der Pr fungen fehlerhaft ist In diesem Fall darf das Dreieck nicht gebildet werden Die R ckgabe eines Konstruktor Aufrufs ist jedoch immer eine Objektreferenz ein FALSE als R ckgabe im Konstruktor ist nicht erlaubt Zum jetzigen Zeitpunkt besteht nur die M glichkeit das Skript hart ber den die Befehl in einer separaten internen Fehlermethode abzubrechen In Kapitel 4 3 wird jedoch ein objektorientiertes Konzept der Fehlerbehandlung vorgestellt bei dem der Konstrukto raufruf ein Fehlerobjekt zur ckgeben kann das der Aufrufer dann auswerten kann bzw muss lt php class Dreieck private pl private p2 private p3 public function __construct pl p2 p3 this gt pl pl this gt p2 p2 this gt p3 p3 Gleichheit ist verboten if p1 gt getX p2 gt getX if p1 gt getY p2 gt getY this gt fehler if p1 gt getX p3 gt getX if p1 getY p3 gt getY this gt fehler if p2 gt getX p3 gt getX if p2 getY p3 gt getY this gt fehler if p1 gt getX p2 gt getX amp amp p2 gt getX p3 gt getX Listing 4 43 Die Dreieckklasse Realisierung von Klassengeflechten this gt fehler if p1 gt getY p2 gt getY amp amp p2 gt getY p3 gt getY this gt fehler y m x n m y2 y1 x2 x1 m p2 gt getY p1 gt getYC C p2 gt getX pl gt getX n1 n2 y2 m x2 n p1 gt g
249. dere die Klassen f r die XML PDF und SOL Unterst tzung Auf einige wenige dieser Klassen wird im wei teren Verlauf dieses Kapitels noch eingegangen Im letzten 139 sten Element des Daten felds finden Sie dann Ihre geladene Rechnungsklasse 4 2 Realisierung von Klassengeflechten In diesem Kapitel stehen die Erstellung von mehreren Klassen und die Beziehung zwi schen Objekten im Vordergrund Im dritten Kapitel dieses Buches wurde gezeigt wie Sie aus einer Gesch ftsprozessanalyse einer objektorientierten Analyse mit anschlie endem Design Klassendiagramme erstellen die in PHP 5 umgesetzt werden k nnen Dabei kommen die folgenden objektorientierten Konzepte zum Einsatz Vererbung und Polymorphie m Assoziationen m Aggregationen und Kompositionen m Implementierung von Interfaces W hrend in Kapitel 3 die Identifikation der Konzepte aus Problemstellungen Ihres Kun den im Vordergrund standen fokussiert sich dieses Kapitel auf die Umsetzung der Kon zepte in PHP 5 4 2 1 Vererbung in PHP In Kapitel 3 2 2 wurde bei der Analyse des Autohauses bereits die Vererbung angespro chen die man an der Ist ein Phrase erkennen kann So ist der Verk ufer ein Mitarbeiter des Autohauses und jeder Mitarbeiter des Autohauses ist eine Person Auch ein Kunde ist eine Person Es macht jedoch keinen Sinn eine Person im System anzulegen die weder ein Kunde noch ein Mitarbeiter ist Die Klasse ist deshalb abstrakt definiert Im Klassendiagr
250. die das Interface implementiert ber die Referenz auf das Interface k n nen die dort deklarierten Methoden dann verwendet werden Der besondere Vorteil von Interfaces liegt darin dass Sie die Interfacespezifikation im Klartext an verschiedene Ent wicklerteams oder auch an Ihre Kunden offenlegen k nnen Sie k nnen das Interface dann nutzen um ihre eigene Software an Ihre Anwendung anzudocken Interfaces f r dern also die Wiederverwendbarkeit sowie das Komponentendenken bei dem eine Anwendung aus verschiedenen Modulen m glichst einfach zusammengesetzt werden kann Klassenattribute und Klassenmethoden Bislang geh rte jede Eigenschaft zu jedem Objekt einer Klasse jeder Kunde hat einen Namen und jede Rechnung eine Anzahl von Rechnungspositionen Es ist jedoch auch m glich eine Eigenschaft der Klasse selbst zuzuordnen Dies kann beispielsweise f r statistische Zwecke sinnvoll sein Nehmen wir an Sie wollen die Anzahl der Objekte die von einer Klasse erzeugt worden sind z hlen Ein einzelnes Objekt hat jedoch keine Kenntnis von der Existenz anderer Objekte Da die Klasse der Bauplan f r Objekte ist liegt die Kompetenz hier bei der Klasse selbst Ebenso k nnen Sie die Frage nach der Anzahl der erzeugten Objekte auch dann stellen wenn noch gar kein Objekt dieser Klasse erzeugt wurde Hier bleibt Ihnen keine andere Wahl als die Klasse selbst zu fra gen Eine solche Eigenschaft die zur Klasse selbst geh rt wird als Klassenattribut ode
251. die geforderten Dienste Funktionalit ten im Lastenheft vom Kunden definiert und aus Sicht des Systemanalytikers und Entwicklers im Pflichten heft genauer spezifiziert worden Die Fachlogik besteht aus PHP Dateien die nahezu aus schlie lich PHP Code also weder SOL Anweisungen noch HTML JavaScript oder gar CSS Befehle enth lt Sie beinhaltet die Intelligenz der Anwendung die auf dem Web PHP Endlich objektorientiert 115 3 Vorgehensweise bei der Softwareentwicklung server ausgef hrt wird und realisiert die Dienste der Artikel Kunden oder Bestellverwal tung Abbildung 3 6 skizziert die Dienste Kunde anlegen und Kunde suchen die in einer kundenverwaltung php als Funktionen realisiert sein k nnen Bei einem Vorgehen nach dem Spiralmodell werden die ben tigten Dienste in den Anfor derungen an die Software vom Kunden ermittelt und im Entwicklungsplan festgehalten Abb 3 2 Die Spezifikation der Entwickler erfolgt im Produktentwurf Durch die fr he Erstellung von Prototypen der Anwendung kann der Kunde jedoch stets Einfluss auf die Implementierung nehmen Beim V Modell geh rt die Spezifikation der Dienste der Fachlogik in die Phase der Anforderungsstellung an die Entwickler die auf dieser Basis einen Entwurf des Systems vornehmen Dabei werden die Module wie Kundenverwaltung und Artikelverwaltung mit ihren Diensten zun chst formal in Textform oder in Ablaufdiagrammen beschrieben Diese bilden die Anforder
252. dig die Umsetzung der neuen Funktiona lit t ist Dies wird meist vom Projektmanagement durchgef hrt M gliche Techniken zur Aufwandsch tzung sind die erwarteten Zeilen an Quellcode eine Function Point Ana lyse zur Gr enbestimmung der Anforderungen oder ein Sch tzverfahren wie COCOMO COnstructive COst MOdel zur Kosten und Aufwandsch tzung Es ist verst ndlich dass diese Einsch tzungen nur dann aussagekr ftig sind wenn alle Beteiligten bereits ber eine gro e Erfahrung in der Erstellung von Softwareprojekten und Informationen von bereits erfolgreich durchgef hrten Projekten hnlicher Gr e verf gen Abbildung 3 22 zeigt die Aufspaltung der Anwendung zur Seminarverwaltung in ein zelne Funktionen sowie die Priorisierung des Kunden K der Entwickler E die Ein sch tzung der technischen Schwierigkeit S und der gesch tzte Aufwand Die Priorisie rungen des Kunden und der Entwickler werden in der Zielspalte addiert 4 epuny ond 3 1opjs myug Old S noy uo myag uy9e S 3 Y wung meues Sominaraniegen ala ro Tomintaniegen jefal2lal r zum Seminaranmaiden o 7 e e 76s Rechnung zum Sominaranucken 2 1 6 6 3 Dozenten verwalten 3 s5 3 2 Kunden verwalten gt WaWi Abbildung 3 22 Priorisierung von Funktionalit t Objektorientierte Programmierung Als Ergebnis ist zu nennen dass die Anwendung zur Kundenverwaltung und das Anle gen eines neuen Semi
253. duct opuml Umbrello UML Modeller http uml sourceforge net f r Linux E WinA amp D f r Windows http www excelsoftware com wina amp dproducts html aufgrund ihrer Bekanntheit und ihrer Unterst tzung von PHP Quellcode UML Diagramme mit Microsoft Visio erstellen Als exemplarisches UML Werkzeug das auch bei der Erstellung dieses Buches einge setzt wurde wird Microsoft Visio 2003 Professional vorgestellt Die Bedienbarkeit der neuen Version Microsoft Visio 2007 ist nahezu identisch da Microsoft bei Visio 2007 nicht das neue Konzept der Men f hrung mit zentraler Office Schaltfl che oben links im Fenster etabliert hat Das neue in Microsoft Word Excel und Access 2007 eingesetzte Bedienkonzept ist gr tenteils auf Kritik der Anwender gesto en Im Gegensatz zu der Standardversion besitzt die Professional Version eine eigene Sammlung von UML Schablonen von deren Einsatz jedoch abzuraten ist Die Ursache liegt darin dass die Handhabung unpraktischer ist und eine PHP Quellcodegenerierung nicht unterst tzt wird Stattdessen werden eigene UML Symbole gezeichnet und ver wendet Somit kommen wir zu der Klassifizierung dieses Werkzeugs Es handelt sich bei Microsoft Visio um ein reines Zeichenwerkzeug mit dem kein PHP Quellcode erzeugt werden kann Die erstellten Diagramme k nnen zur Diskus sion und Dokumentation vor allem in der OOA und OOD verwendet werden m Dadurch dass Visio ein Zeichenwerkzeug ist mit dem Linien Pfei
254. dung pr fen kann wird in Abbildung 5 18 ein typisches Szenario in einem Aktivit tsdiagramm auf Meeresspiegelebene also auf der Ebene des Benutzers zusam mengestellt welches einen Gro teil der geforderten Anwendungsf lle abdeckt Dieses Szenario wird im Folgenden ber das zu erstellende GUI abgedeckt Depotverwaltung Aktien kaufen Bestand ansehen Aktien a starten p J nachkaufen N Dividende Bestand Bestand ansehen 7 2 Bestand ansehen hinzuf gen verkaufen J I p Bilanz ansehen Abbildung 5 18 Szenario f r die Schnittstelle zum Benutzer Der erste Schritt besteht also darin die Depotverwaltung zu starten Die entsprechende Inhaltsdatei soll eine leicht in HTML zu realisierende Willkommensmeldung darstellen und sowie das Men der Depotverwaltung pr sentieren Wie in jede Inhaltsdatei werden der Header und der Footer eingebunden Der Inhalt dieser beiden Rahmendateien wird in den Listings 5 12 und 5 13 dargestellt lt php session_start require_once classloader inc php if lisset _SESSION Bestand _SESSION Bestand NULL if lisset _SESSION BestandAnzahl _SESSION BestandAnzahl 0 if isset _GET W _SESSION BestandGew hlt _GET w else if lisset _SESSION BestandGew hlt _SESSION BestandGew hlt 1 lt html gt lt body gt Listing 5 12 header inc php Das Fallbeispiel der Depotverwaltung lt center gt lt h1 gt Depotverwaltungsprogramm lt h
255. durch alle Schichten hindurch zu implementieren wird in einem horizontalen Prototyp umgesetzt Dieser ist f r den Kunden zun chst uninteressant denn er sieht lediglich die eine Eingabemaske Viel wichtiger ist ein solcher Prototyp f r Sie als Entwickler da mit ihm noch vorhandene Funktionalit ts oder Implementie rungsfragen gekl rt werden k nnen Nach der Umsetzung des Prototyps k nnen Sie also Testkunden im System anlegen und sich vergewissern dass dies mit der von Ihnen vor geschlagenen WAMP oder LAMP Architektur auch funktioniert Beispiel Implementieren Sie einen Dienst zum Anlegen eines Iestkunden indem Sie zun chst eine entsprechende Datenbanktabelle in MySQL ber PHPMyAdmin anlegen Im zweiten Schritt entwerfen Sie eine PHP Funktion f r die Fachlogik mit Namen anle genKunde die die Parameter f r einen Neukunden als Input entgegennimmt eine Verbindung zum Datenbankserver aufbaut die Daten ablegt und die Verbindung wieder schlie t Erstellen Sie im dritten Schritt ein passendes HTML Formular zur Eingabe der Daten das auf eine PHP Seite verweist die die Daten dann ablegt und ber den Erfolg als HTML Ausgabe berichtet Die entsprechenden PHP Funktionen sind in Kapitel 2 2 beschrieben Neben dem Test der Technologie kann mit einem vertikalen Prototyp auch die Perfor mance der PHP Anwendung auf dem Server getestet werden So k nnen Sie beispiels weise nahezu gleichzeitig von verschiedenen Clients aus 100 oder 1 000 Kund
256. dy gt lt php fib Array obergrenze 1P fib 0 0 fib 1 1 i 2 dof fib i fib i 1 fib i 2 i while i lt obergrenze i 0 dof echo Fib L i ergibt fib i lt br gt itt while i lt obergrenze Listing 2 41 Aufbau und Ausgabe der Fibonacci Folge mit zwei do while Schleifen 52 entwickler press Grundlegende Syntax gt lt body gt lt html gt Listing 2 41 Aufbau und Ausgabe der Fibonacci Folge mit zwei do while Schleifen Forts Diese Schleife wird unter anderem f r Benutzereingaben verwendet die mindestens ein mal get tigt werden m ssen bis eine besondere Eingabe als Fertig Kennzeichnung erfolgt Wie auch die while Schleife kann die do while Schleife geschachtelt werden um komple xere Abl ufe durchzuf hren Auch hier ist wieder eine Umwandlung in einen anderen Schleifentyp m glich Welche Schleife letztlich verwendet wird liegt an Ihrem eigenen Ermessen und Programmierstil Wenn Sie sich gerade in Ihre erste Programmiersprache einarbeiten sollten Sie versuchen die Listings 2 33 bis 2 41 in diesem Kapitel mit ande ren Schleifen zu realisieren Den Erfolg k nnen Sie anhand der Ausgaben pr fen die bei einer korrekten Umwandlung identisch sein m ssen Ebenso k nnen Schleifen verschiedenen Typs in Kombination mit Verzweigungen einge setzt werden Das Ergebnis ist dann Ihr prozedurales Programm Break und continue Zum Anschluss dieses Kapitels m sse
257. e _SESSION Bestand _SESSION BestandGew hlt serialize bestand echo Die Dividende wurde dem Bestand erfolgreich hinzugef gt elsef echo FEHLER beim Hinzuf gen der Dividende gt lt h3 gt lt form action uebersicht php method post gt lt input type submit value 0K gt lt form gt lt center gt lt php require_once footer inc php gt Listing 5 21 dividende2 php Controller Forts ber den Erfolg wird der Benutzer wie immer benachrichtigt wie es in Abbildung 5 27 dargestellt ist Durch das Klicken auf die OK Schaltfl che gelangt er wieder in die ber sicht seiner Best nde die man als zentrale Ausgabeseite sehen kann http localhost Aktienverwaltung 004 dividende2 php Windows Internet Explorer BAX E Nje 3 localhost lit 1x B Alm Datei Bearbeiten Ansicht Favoriten Extras pr Favoriten http localhost Aktienverwaltung 004 dividende2 php Depotverwaltungsprogramm Gew hlter Bestand E ON laden l speichern l bersicht w hlen l neu l hinzukaufen l neue Dividende l verkaufen Die Dividende wurde dem Bestand erfolgreich hinzugef gt Copyright by Dr Frank Dopatka Fertig S3 Lokales Intranet fa R Abbildung 5 27 Best tigung des erfolgreichen Hinzukaufens einer Dividende PHP Endlich objektorientiert 383 5 Projektpraxis Die hinzugef gte Dividende erscheint unmittelbar in der Bilanz Dies ze
258. e Kunde Mitarbeiter Ausl sendes Ereignis Anmeldung des Kunden liegt vor Beschreibung 1 Kundendaten abrufen 2 Seminar pr fen 3 Anmeldebest tigung erstellen Erweiterung 1a Kundendaten aktualisieren 1b Wenn Kunde MA einer Firma ist Firmendaten erfassen bzw wenn vorhanden dann abrufen und aktualisieren 1c Zahlungsmoral pr fen Alternativen 1a Neukunden erfassen wenn Kunde noch nicht existiert 1b Auf alternative Veranstaltungen hinweisen wenn ausgebucht 1c Mitteilung Falsche Veranstaltung falls Veranstaltung nicht existiert und auch nichts hnliches Abbildung 3 33 Textuelle Anwendungsfallbeschreibung Objektorientierte Programmierung Abl ufe im Gesch ftsprozess Aktivit tsdiagramme Aktivit tsdiagramme geben die Struktur eines Prozesses als Fluss dynamisch wider Die urspr ngliche Notation auf der die Aktivit tsdiagramme aufbauen existiert bereits seit 1980 unter dem Namen der Programmablaufpl ne PAP Diese Diagramme sind nach DIN 66001 genormt und werden noch heute zur Dokumentation von sequenziellen Anweisungen Verzweigungen und Schleifen in einem Quellcode verwendet Genau dies ist auch mit den Aktivit tsdiagrammen auf Fisch und Muschelebene also nah am Entwickler m glich und auch blich Eine gr ere Bedeutung innerhalb der UML haben die Aktivit tsdiagramme jedoch um Gesch ftsprozesse innerhalb des Unternehmens abzubilden die im Anschluss daran ganz oder teilweise in einem te
259. e dass Sie gern Aktien kaufen wollen Wenn ein Partner am Handelsplatz mit Ihrer Order einverstanden ist werden der Kauf bzw der Verkauf durchgef hrt Aus dieser Beschreibung lassen sich folgende Klassen erkennen Aktienverwaltung Depot Aktie Kurs Handelsplatz Order entweder Kauforder oder Verkaufsorder Was es hat und was es kann Eigenschaften und Methoden Wie geht es nun nach der Identifikation der Klassen weiter Aus was besteht eine Klasse Ein solcher Bauplan f r die Erstellung von Objekten besteht aus zwei Teilen den Eigen schaften und den Methoden Eigenschaften werden auch als Attribute der Klasse bezeichnet die jedes erzeugte Objekt aus dieser Klasse kennzeichnen Programmierer aus prozeduralen Sprachen nennen die Eigenschaften auch Variablen oder Daten Sie besitzen jeweils einen Datentyp aus der verwendeten Programmiersprache Jeder Stift verf gt beispielsweise ber die Eigenschaft dass er eine Farbe und einen F ll stand besitzt Eine Person hat einen Namen und einen Vornamen Wenn ein Kunde eine Person ist dann besitzt dieser auch einen Namen einen Vornamen und zus tzliche Eigenschaften Eine Aktie hat einen Namen eine ISIN International Securities Identifi cation Number einen aktuellen Kurs an jedem Handelsplatz Jeder Kurs besteht aus sei nem Handelsplatz einem W hrungswert und einem Datums und Zeitwert Wenn Sie nach den Eigenschaften einer Klasse suchen m ssen Sie sich die Frage stellen m Was
260. e Informationen eines Str flings erh lt jedoch sollte dieser verst ndlicherweise aus Datenschutzgr nden nicht den Wohnort und Familienverh ltnisse des Richters kennen d rfen Der untere Teil der Abbildung zeigt die gegenseitige Bekanntschaft zwischen Punkten und Dreiecken Welche Objekte welche anderen Objekte kennen k nnen wird als Navigierbarkeit bezeichnet Objektorientierte Programmierung K 2 K 4 Richter Str fling Punkt Abbildung 3 51 Navigierbarkeit der Assoziationen Dreieck 3 52 dargestellt ist Jede Assoziation kann mit einer Beschriftung versehen werden die die Assoziation n her textuell beschreibt Der schwarze Pfeil zeigt dabei die Leserich tung der Beschriftung an also in diesem Fall Punkt kann Eckpunkt sein von Drei eck 7 4 kann Eckpunkt sein von Dreieck Punkt Abbildung 3 52 Erstes Klassendiagramm der Analyse Ein Punkt kann Eckpunkt eines Dreiecks sein muss es aber nicht Ein Dreieck besteht aber stets aus genau drei Eckpunkten Diese Abh ngigkeiten werden als Multiplizit ten bezeichnet die im Laufe der objektorientierten Analyse immer mehr herausgearbeitet werden Abbildung 3 52 enthielt noch unspezifizierte Multiplizit ten Die M glichkeit Diagramme mehr oder weniger detailliert anzugeben ist typisch f r die UML Spezifika tion und macht diese Sprache f r eine iterative Vorgehensweise tauglich bei der die zu erstellende Software in mehreren Stufen verfeinert wird 0
261. e Variable x die mit der Ausgabe echo x deren Inhalt name ausgibt Diesen Inhalt der Variablen benutzen Sie nun mit x daten als Bezeichnung f r eine weitere Variable die den Inhalt daten erh lt Damit haben Sie eine neue Variable name erstellt die mit echo name deren Inhalt n mlich daten zur ck gibt Diesen Inhalt k nnen Sie auch direkt ber echo x zugreifen Bei der Verwaltung von Variablen verh lt sich PHP sehr hnlich wie die Sprache C die als Vorbild von PHP gilt Ebenso wie in C k nnen auch in PHP Referenzen auf Daten verwal tet werden die man auch als Zeiger bezeichnet Mit wert 4 erzeugt man einen Zeiger wert der auf eine Speicherstelle zeigt in der ein Integer Wert in diesem Fall 4 gespeichert ist In PHP k nnen mehrere Zeiger auf dieselbe Speicherstelle zeigen Einen neuen Zeiger wert2 erzeugen Sie mit der Anweisung wert2 amp wert Beachten Sie das kaufm nnische amp vor dem Dollar Symbol Wenn Sie nun mit echo wert2 den Wert auslesen so ist die ser mit der Ausgabe von wert identisch Interessant wird es dann wenn Sie wert2 ndern z B durch die Anweisung wert2 99 Wenn Sie nun echo wert bzw echo wer2 ausf h ren stellen Sie fest dass sowohl wert als auch wert2 die Ausgabe 99 liefern lt html gt lt body gt lt php wert 4 echo wert echo lt br gt 2 wert2 amp wert echo wert2 echo lt br gt 2 wert2 99 echo wert echo lt br gt
262. e aus einer v llig anderen Fachdom ne vielleicht aus dem Banken Versicherungs oder Gesundheitswesen stammt Man muss davon aus gehen dass ein Versicherungsmakler oder ein Arzt als zuk nftiger Benutzer aus der Fachabteilung keinerlei Kenntnisse eines Entwicklers besitzt PHP Endlich objektorientiert 123 3 Vorgehensweise bei der Softwareentwicklung Auf der Seite Ihres Unternehmens ist zus tzlich das Projektmanagement zu nennen das den Zeit und Kostenplan und die gesamten Ressourcen der Entwicklung berwacht Das Projektmanagement kann dabei in direkter Kommunikation zu Ihrer Gesch ftslei tung stehen insbesondere bei gr eren Vorhaben und hohem Auftragsvolumen Dies sind demnach die Stakeholder Ihres Unternehmens Falls Ihr Unternehmen den Auftrag gar nicht vollst ndig selbst umsetzt kommen als zus tzliche Stakeholder Ihre Subunter nehmer hinzu Das Outsourcing der Programmierung sogar in andere L nder ist bei gr eren Konzernen durchaus blich Ebenso wird die Systemanalyse unter Umst nden von einem externen Consulting Unternehmen durchgef hrt das entweder von Ihrer Firma oder vom Kunden beauftragt wurde Zus tzlich besitzen Sie in Ihrem Unterneh men eine gewisse fachliche und technische Kompetenz aufgrund der Ausbildung aller Mitarbeiter und der gesammelten Erfahrung aus vergangenen Projekten Auch auf der Seite des Kunden existiert neben der bereits angesprochenen Gruppe der Anwender aus der Fachabteilung
263. e verstehen der die Beziehungen zwischen den Klassen realisiert und dass Sie diesen Code auch bei der L sung ande rer Problemstellungen einsetzen k nnen Der Vorgang der Anmeldung ist also der Kern dieses Problems Ein Student kann sich bei einem Praktikum anmelden und umgekehrt Im Anschluss an eine Anmeldung m s sen die Objekte beider Klassen eine Referenz auf das jeweils andere Objekt besitzen Hier besteht die Gefahr einer endlos laufenden Rekursion Das Aktivit tsdiagramm auf Muschelebene der Abbildung 4 9 zeigt die Anmeldung eines Studenten s an einem Praktikum p mit der Methode s anmelden p Der umgekehrte Fall p anmelden s verl uft analog Die Pfeile des regul ren Ablaufs sind etwas dicker dar gestellt Dies ist nicht in der UML spezifiziert erh ht jedoch die bersichtlichkeit prak ist kein Praktikum prak ist ein Praktikum Student bereits angemeldet Student noch nicht angemeldet Praktikum merken Anzahl ht en Student bereis Student noch nicht Praktika erh hen anmelden ausgelastet voll ausgelastet Anmeldung beim Anzahl belegter Praktikum nicht erfolgreich Praktika verringern Anmeldung beim Praktikum erfolgreich Praktikum aus der Liste l schen Abbildung 4 9 Aktivit tsdiagramm zur Anmeldung eines Studenten an einem Praktikum Zun chst wird ein Praktikumsobjekt an die anmelden Methode des Studenten bergeben Da PHP die Datentypen nicht im V
264. earbeitung von Datenfeldern Die Wichtigsten dieser Funktionen sind im Folgenden kurz zusammengefasst Wenn Sie eine vollst ndige bersicht erhalten m chten k nnen Sie in Suchmaschinen wie Google mit Begriffen wie PHP Array und Funktionen weitere seltener verwendete Funktionen abrufen Beispielsweise hat sich die Internetseite http www phpcenter de de html manual ref array html als sehr bersichtlich herausgestellt F r Sie als Programmierer ist es sinnvoll zu wissen welche Funktionen PHP bereits bereit stellt damit Sie bei Bedarf darauf zugreifen k nnen Es ist nicht ratsam dass Sie 32 entwickler press Grundlegende Syntax existierende Funktionen nachprogrammieren da Sie mit Sicherheit weder die Perfor mance noch die Fehlerfreiheit von PHP erreichen Die erste Gruppe von Funktionen umfasst das Sortieren von Feldern Neben einer zuf l ligen Anordnung k nnen Sie eine auf bzw absteigende Sortierung w hlen Funktion Bedeutung shuffle arr ordnet alle Elemente des Datenfeldes zuf llig neu an sort arr sortiert ein eindimensionales Datenfeld vorw rts war es ein assoziatives Feld so wird es in ein nummerisches Feld umgewandelt rsort arr sortiert ein eindimensionales Datenfeld r ckw rts war es ein assoziatives Feld so wird es in ein nummerisches Feld umgewandelt asort arr sortiert ein eindimensionales Datenfeld vorw rts und beh lt die Beziehungen in einem assoziativen Feld bei
265. echnungspositionen und Artikel aus den Abbildungen 3 19 und 3 20 Selbst wenn ein Kunde nur dann ein Kunde ist wenn er die erste Rechnung erh lt besteht ein Kunde nicht aus der Rechnung Ebenso kann man eine Rechnung fragen zu welchem Kunden sie geh rt jedoch ist der Kunde nicht als Ganzes Bestandteil der Rechnung Eine Rechnung ohne eine einzige Rechnungsposition macht jedoch keinen Sinn Auf dem Dokument der Rechnung sind eine oder mehrere Positionen abgedruckt Die Rech nungsposition ist demnach ein essenzieller Bestandteil der Rechnung Ein Artikel ist unabh ngig von einer Rechnungsposition aber eine Rechnungsposition besteht immer genau aus einem Artikel Auch hier kann man also von einer Aggregation sprechen Eine Komposition ist eine st rkere Bindung des Teils an sein Ganzes Ein Unterschied zur Aggregation ist dass die Existenz des Teilobjekts durch die des bergeordneten Objekts bedingt ist Das Teilobjekt kann also nicht allein existieren Im Gegensatz zur Aggrega tion kann bei einer Komposition das Teil zu einem Zeitpunkt nur zu genau einem Gan zen zugeh rig sein Wird das Ganze gel scht m ssen auch dessen Teilobjekte gel scht werden die zu diesem Zeitpunkt Bestandteil des Ganzen waren Sie m ssen f r die Rea lisierung einer Komposition die Lebensdauer der Objekte verwalten Im Vergleich zu einer Aggregation sind Kompositionen wesentlich seltener Im Beispiel der Rechnungsverwaltung macht eine einzelne Rechnungspositio
266. egriffen Bei der Validierung handelt es sich um eine Pr fung ob ein Entwicklungsergebnis die individuellen Anforderungen bez glich einer speziellen beabsichtigten Nutzung erf llt Es wird also gepr ft ob das realisiert wurde was vom Kunden gefordert war Die Verifikation ist ebenfalls eine Pr fung Hier wird gepr ft ob die Ergebnisse einer Entwicklungsphase den Vorgaben der Dokumenta tion die den Input dieser Phase bildeten entsprechen Neben den erstellten Softwarekomponenten werden im V Modell weitere Produkte defi niert bei denen es sich um Dokumente zur Spezifikation handelt Jedes Produkt durch l uft die vier Zust nde geplant in Bearbeitung vorgelegt und akzeptiert Wenn Ihr Kunde ein vorgelegtes Produkt sei es als Schriftst ck oder als Funktionalit t im Prototyp der Software nicht akzeptiert wird es nachgebessert nachbessern geplant erstellen vorlegen vorgelegt akzeptieren akzeptiert Bearbeitung wieder aufnehmen Abbildung 3 4 Zust nde von Produkten im V Modell Viel bedeutender ist jedoch die Aussage in Abbildung 3 4 dass bereits akzeptierte Pro dukte wieder aufgenommen werden k nnen Wie ist es m glich dass etwas Fertiges nochmals bearbeitet wird Bei der Erstellung des V Modells wurde erstmals beachtet dass die Anforderungen an eine Software selbst dem Kunden nicht von Beginn an bekannt sind Bei einem l nger andauernden Projekt ist es ebenso normal dass sich PHP Endlich objekto
267. ehlerfall beispielsweise Daten bankverbindungen oft nicht korrekt geschlossen oder es bleiben tempor re Dateien bestehen Dies sorgt wiederum f r eine langfristige Instabilit t der Anwendung Hier m ssen Sie als PHP Entwickler besonders sorgf ltig und gewissenhaft alle m glichen F lle eines Programmablaufs beachten Eine weitere Schwachstelle im try catch Konzept von PHP 5 liegt darin dass es nicht uni versell anwendbar ist So f hrt unter anderem die Anweisung x 10 0 zu der Ausgabe PHP Endlich objektorientiert 287 4 PHP objektorientiert Warning Division by zero in php on line 3 selbst wenn die Anwendung in einem try Block steht Das Konzept funktioniert in PHP also nur in Verbindung mit Objekten die selbst Exceptions werfen Im selben Zusammenhang wirft beispielsweise Java selbstst ndig eine NullPointerExcep tion die innerhalb des Anwendungskontexts gefangen werden kann Bis zur derzeit aktuellen Version 5 3 von PHP m ssen Sie hingegen auf das veraltete Reporting Management von PHP zugreifen Dabei unterscheidet PHP folgende Arten von Fehlern deren Werte bereits als Konstanten hinterlegt sind Konstante Wert Bedeutung E_ERROR 1 Fehler die nicht behoben werden k nnen f hrt zum Abbruch des Skripts E_WARNING 2 Laufzeitwarnungen die nicht zum Abbruch des Skripts f hren E_PARSE 4 Parser Fehler beim Interpretieren des Skripts das Skript startet nicht E_NOTICE 8 Benachrichtigungen w hrend d
268. eht F r jede Imple Realisierung von Klassengeflechten mentierung muss also im Frontend noch eine passende Eingabemaske erstellt werden mit der die Parameter festgelegt werden Doch zun chst zur ck zum Testprogramm Bei p_ ffnen p_schreiben und p_lesen han delt es sich um die Parameterobjekte die gem den Vorgaben aus der Implementierung mysgIDZ gef llt werden Das Verbindungsobjekt selbst hei t db Der schreibende Zugriff db gt schreiben p_schreiben liefert als Ergebnis lediglich einen Wahrheitswert der den Erfolg des Schreibzugriffs widerspiegelt Interessant ist der lesende Zugriff Wie bereits beschrieben wurde liefert ausgabe db gt lesen p_lesen ein zweidimensionales Feld als Ergebnismenge in der Referenz ausgabe zur ck Mit den PHP Befehlen count ausgabe k nnen Sie die Anzahl der Datens tze ermitteln und mit count ausgabe 0 die Anzahl der zur ckgegebenen Spalten der Ergeb nistabelle Das sind die Spalten die Sie hinter dem SELECT Befehl der SOL Anweisung angegeben haben Mit der verschachtelten foreach Schleife k nnen Sie nun auf jedes Datenelement zugreifen lt php require_once classloader inc php gt lt html gt lt body gt lt php neues DB Verbindungsobjekt erstellen welches das Interface iDZ implementiert db new mysq1DZ 1 ffnen p_ ffnen new Parameterliste p_ ffnen gt add host Tocalhost p_ ffnen gt add user root p_ ffnen gt add pass
269. ei Bearbeiten Suchen Projekt Ansicht Format Spalte Makro Extras Fenster Hilfe ale x DESERAHR HB ST EB ea Fa t t d eR uebersicht php i lt _SESSION BestandAnzahl i ION Bestand i gt isVerkauft p lt amp lt VERKAUFT amp Egt amp gt lt br gt 12 13 elset 14 echo enbsp lt a href uebersicht php w i gt w hlen a gt lt br gt is 16 17 echo bilanz anzahl St ck am bilanz lekDatum gekauft tand gt isVerkauft und number_ format bilanz ltageIlmBesitz O Tage gehalten wi Um Hilfe zu erhalte Zeile 1 Spalte 1 CW DOS nd 25 10 2009 12 17 40 Dateigr e 2887 EINF Abbildung 5 52 Der Quellcodeeditor UltraEdit in der lteren Version 9 00c Die Entwicklungsumgebung Eclipse f r PHP W hrend es sich bei PHPedit und UltraEdit in erster Linie um reine Quellcodeeditoren handelt sind Eclipse f r PHP und das im folgenden Kapitel vorgestellte Zend Studio Entwicklungsumgebungen mit denen insbesondere gr ere Projekte verwaltet werden k nnen Bei Eclipse handelt es sich um ein Open Source Projekt das selbst in Java pro grammiert wurde Es basiert auf einem OSGi Framework namens Equinox und stellt eine hochmodulare Plattform dar die aus einem minimalen Kern besteht auf den zahl reiche Plug ins installiert werden k nnen Die integrierte Entwicklungsumgebung wurde urspr nglich nur f r Java Anwendungen verwende
270. ei der Hund ein Stockobjekt entgegen nimmt m gibStock aus der Klasse Hund bei der der Hund sein Stockobjekt wieder abgibt Eine Dogge ist ein spezieller Hund der auch bei en kann Da eine Dogge auch ein Hund ist kann sie auch einen Stock kennen und alle Methoden eines Hundes ausf hren Eine Katze ist zwar auch ein Tier wie ein Hund kann aber keinen Stock kennen Abschlie end wird noch vorgestellt wie man das Konzept der Interfaces in UML Klas sendiagrammen darstellen kann Da ein Interface ausschlie lich Funktionalit t beschreibt beinhaltet es lediglich Methodendefinitionen die jedoch noch nicht imple mentiert sind Diese Methodendefinitionen k nnen mit der abstrakten Methode gibLaut der Tierklasse verglichen werden Im Beispiel der Abbildung 3 67 wird ein all gemeines Datenzugriffsinterface beschrieben das zun chst unabh ngig von einer Datenbank ist Objektorientierte Programmierung Die Klasse DZ_MySQL implementiert nun dieses Interface Eine Klasse kann auch meh rere Interfaces implementieren Dadurch wird die Klasse gezwungen alle im Interface definierten Methoden zu implementieren Die Klasse bietet also einen Datenzugriff auf eine MySQL Datenbank an Genauso k nnen Sie einen Zugriff f r eine Oracle Daten bank oder auf ein Dateisystem implementieren Wenn jemand einen solchen Zugriff ver wenden will kann er das Interface verwenden und damit sicher sein dass genau diese Methoden bereit stehen Bei gro en P
271. eichen aller bekannten Schriften ein digita ler Code festgelegt wird Das Ziel ist es dabei die Verwendung unterschiedlicher und inkompatibler Zeichens tze in verschiedenen L ndern zu beseitigen Unicode wird lau fend um weitere Zeichen erg nzt Die ereg Befehl aus dem bisherigen PHP Wortschatz soll in PHP 6 entfallen Mit ereg k n nen Sie eine Zeichenkette unter Ber cksichtigung der Gro und Kleinschreibung gegen einen regul ren Ausdruck pr fen und ggf eine Umformatierung des Ausdrucks vorneh men sofern eine bereinstimmung vorliegt Der regul re Ausdruck wird ebenfalls als Zeichenkette definiert Der Quellcode aus Listing 4 89 konvertiert ein Datum date im ISO Format JJJJ MM TT in das in Deutschland typische Format TT MM J lt php if ereg 0 9 4 10 9 1 2 0 9 1 1 2 date regs echo regs 3 regs 2 regs 1 Listing 4 89 Umwandlung einer Datumsdarstellung mittels ereg Befehl Neuerungen in PHP 5 3 und Ausblick else echo Ung ltiges Datum Listing 4 89 Umwandlung einer Datumsdarstellung mittels ereg Befehl Forts Da PHP urspr nglich als einfach zu handhabende leichte Skriptsprache konzipiert war haben sich einige Vorgehensweisen eingeb rgert aus denen sich Sicherheitsl cken im PHP Code ergeben Bereits in den aktuellen PHP Versionen wurde die Verwendung die ser Vorgehensweisen standardm ig in der php ini abgeschaltet um die Sicherheit der Sprache zu erh hen E
272. eigt das Zustandsdiagramm eines Seminartermins auf Meeresspiegelebene Nachdem der Termin angelegt wurde und sich noch niemand zu diesem Termin angemeldet hat kann man die Seminaragenda und weitere Daten zu die sem Termin noch beliebig ndern Es kommt vor dass sich niemand zu diesem Termin anmeldet In diesem Fall entf llt der Termin und das Terminobjekt wird gel scht Sobald sich der erste Kunde anmeldet wird das Seminar zu diesem Termin in den Zustand buchend berf hrt In diesem Status kann das Seminar zwar noch ausfallen weil beispielsweise der Dozent erkrankt ist In diesem Fall geht der Termin in den Zustand storniert ber Sobald dieser Zustand eintritt werden alle bereits angemeldeten Teilneh mer benachrichtigt und ber alternative Termine informiert In einem buchenden Seminar k nnen sich weitere Teilnehmer an bzw abmelden Wenn die Obergrenze der m glichen Teilnehmer erreicht ist wechselt der Termin in den Zustand ausgebucht in dem keine neuen Anmeldungen zugelassen werden Auch ein ausgebuchter Termin kann aufgrund einer Krankheit des Dozenten noch ausfallen Wenn sich bei einem ausgebuchten Seminartermin jemand wieder abmeldet geht der Termin wieder in den Zustand buchend ber in dem neue Anmeldungen m glich sind Abbildung 3 71 zeigt auch die M glichkeiten eines Zustandsdiagramms Zeitbedingun gen einzuf gen ber den Ausdruck after Seminarende wechselt ein Seminartermin vom Zustand buchend selbstst ndig i
273. ein mal die Beziehungen zwischen den Klassen textuell Es kann in weiteren Schritten um Multiplizit ten Aggregationen bzw Kompositionen sowie um die Navigierbarkeiten erweitert werden Seminar Verwaltung verwaltet hat ist reserviert f r y Termin Kireinan Fiaa statt in Anmeldung Raum a Y Pe erzeugt Abbildung 3 63 Erstes Klassendiagramm der Seminarverwaltung Analysephase Klassen im objektorientierten Design In der Designform beinhalten Klassendiagramme alle notwendigen Methoden und Eigenschaften Es existieren bereits Modellierungswerkzeuge die aus solchen Diagram men Coder mpfe f r verschiedene objektorientierte Programmiersprachen wie Java C und auch PHP generieren Diese m ssen dann vom Entwickler nur noch mit Funktiona lit t gef llt werden W hrend sich die objektorientierte Analyse auf den Gesch ftsprozess konzentriert und ihn in einem fachlichen Modell abbildet fokussiert sich das objektorientierte Design auf das so genannte technische Modell Dies ist die weitere Abstraktion des fachlichen Modells auf die F higkeiten einer objektorientierten Programmiersprache Die hier erstellten Diagramme zumeist Klassen Zustands und Sequenzdiagramme dienen den Entwicklern als direkte Vorlage f r die objektorientierte Programmierung Hier kann man erkennen dass der Aufwand der Implementierung im Vergleich zur Analyse und Design geringer geworden ist wie es im RUP Modell beschrieben wurde
274. ein Dreieck und ein Punkt Ein Dreieck besteht aus drei Punkten Ein Punkt wiederum besteht aus genau zwei Koordinaten Alle diese Sachverhalte k nnen Sie in der normierten Darstellung auch in Abbildung 3 49 erkennen P1 Punkt D1 Dreieck P2 Punkt x 0 x 5 y 10 y 5 D2 Dreieck P5 Punkt y 5 P4 Punkt y 0 y x 15 y 5 y 5 Abbildung 3 49 Objektdiagramm des Beispiels Objektorientierte Programmierung Zentriert im oberen Viereck eines Objekts steht zun chst dessen Name und durch einen Doppelpunkt getrennt der Name der Klasse Dies alles ist unterstrichen um eine bessere Unterscheidbarkeit zu den Klassendiagrammen zu gew hrleisten Besitzt ein Objekt zus tzliche Eigenschaften werden sie in einem zweiten Viereck unter dem Namen benannt und deren aktuelle Wertauspr gungen f r das jeweilige Objekt ein getragen Bei den Punkten sind dies die jeweiligen x und y Koordinaten Wenn ein Objekt ein anderes Objekt kennt wird diese Assoziation in einer Programmiersprache auch ber eine Eigenschaft abgebildet Die Kenntnis von Objekten untereinander wird jedoch in den Objekt und auch in den Klassendiagrammen durch eine Linie gekenn zeichnet Der Fokus der Assoziation liegt darin dass zwei Klassen miteinander kommu nizieren die aber ansonsten eigenst ndig sind Methoden werden in einem Objektdiagramm nicht ber cksichtigt da alle Objekte einer Klasse stets dieselben Methoden besitzen Bei den Objektd
275. eine Kauforder Eine Kauforder ist eine Order die in unserem Klassen modell keine zus tzlichen Methoden besitzt Der Quellcode des zweiten Tests in Listing 5 3 legt wieder eine Aktie an die einer Kauforder bergeben wird Um den Erfolg des Tests zu pr fen werden Daten der erstellten Order ausgegeben Das Fallbeispiel der Depotverwaltung lt php require_once classloader inc php gt lt html lt body gt lt php metro new Aktie METRO AG Stammaktien 0 N DE0007257503 http www boerse ISIN DEO007257503 kauforder new Kauforder metro 20 06 02 2009 28 00 9 90 echo Name kauforder gt getAktie gt getName lt br gt echo Datum kauforder gt getDatum lt br gt 2 echo Menge kauforder gt getAnzahl lt br gt echo Kurs kauforder gt getEinzelpreis lt br2 echo Geb hren kauforder gt getGeb hr lt br gt lt body gt lt html gt Listing 5 3 Testklasse der Fachlogik die Kauforder Die zu erwartende Ausgabe lautet Name METRO AG Stammaktien o N Datum 06 02 2009 Menge 20 Kurs 28 Geb hren 9 9 Da sowohl die Kauforder als auch die Verkauforder eine Order noch ohne zus tzliche Funktionalit t ist und alle Parameter Anzahl Datum Einzelpreis Geb hr zu jeder Order geh ren werden die Eigenschaften in Listing 5 4 in die abstrakte Oberklasse Order ausgelagert Auch hier sind die Set Methoden wieder private deklariert da eine Order noch ni
276. einer PHP Datei Wenn Sie dieses Beispiel erfolgreich getestet haben sind Sie erfahrungsgem sehr gespannt welche Befehle die Sprache PHP bietet und auf welche Arten sich die Erzeu gung von HIML Code mit PHP manipulieren l sst 2 1 1 Von Kommentaren Variablen und Operanden Als grundlegendes Element einer Programmiersprache ist die Definition von Konstan ten und Variablen zu nennen Dazu ist noch von Interesse welche Datentypen eine Spra che anbietet und mit welchen vorgegebenen Operanden ein Programmierer Rechenope rationen ausf hren kann Kommentare Die Kommentare in PHP entsprechen in ihrer Syntax den Kommentaren von Java oder C Man unterscheidet zwischen einem Zeilenkommentar der mit den Zeichen beginnt und den Rest der Zeile als Kommentar markiert Dort k nnen dann beliebige Zeichen platziert werden die keinen Einfluss auf die Verarbeitung haben Wird der Kommentar vor einer Anweisung platziert so wird diese Anweisung nicht ausgef hrt sie ist auskommentiert Die zweite Art der Kommentierung bezieht sich je nach Anwendung auf mehrere Zeilen Sie beginnt mit und endet mit den Zeichen In Listing 2 3 wird von beiden Arten der Kommentierung Gebrauch gemacht 16 entwickler press Grundlegende Syntax Konstanten Eine Konstante enth lt wie auch eine Variable einen Wert Im Unterschied zu einer Varia blen wird eine Konstante einmalig gesetzt Sie kann im Anschluss ausgelesen aber nicht ver ndert w
277. eklariert Ein Teilnehmer besteht dabei aus E einem Namen m einem Geschlecht m einer optionalen Liste seiner Vorkenntnisse Die definierte toString Methode gibt alle Daten des erzeugten Teilnehmerobjekts aus class Teilnehmer public name null public geschlecht null public vorkenntnisse function _toString ausgabe Name this gt name lt br gt 2 ausgabe Geschlecht this gt geschlecht lt br gt if this gt vorkenntnisse ausgabe Keine Vorkenntnisse lt br gt lt br gt 2 else ausgabe Vorkenntnisse lt br gt this gt vorkenntnisse lt br gt Listing 4 64 Die einfache Klasse Teilnehmer PHP und XML return ausgabe Listing 4 64 Die einfache Klasse Teilnehmer Forts Das Ziel besteht darin aus der XML Datei aus Listing 4 63 Teilnehmerobjekte zu erzeu gen die dann weiterverwendet werden k nnen Dazu wird noch eine zweite Klasse ben tigt deren Objekt sp ter dem XML Parser zugewiesen wird Die Parser Klasse aus Listing 4 65 besteht aus drei Methoden Die Methode start wird aufgerufen wenn der Parser ein ffnendes XML Element wie lt teilnehmer gt identifiziert die Methode ende bei einem schlie enden Element wie lt name gt und die Methode cData wenn Textdaten in einem XML Element gefunden werden Beispielsweise bei lt name gt Dopatka lt name gt sind die Textdaten Dopatka class ParserKlasse private aktuell null pr
278. ektorientiert 367 5 Projektpraxis lt table gt lt hr gt lt center gt Listing 5 12 header inc php Forts In der PHP Session Kap 2 2 wird vor allem die Liste der Aktienbestandsobjekte in der Referenz _SESSION Bestand verwaltet Zus tzlich wird festgehalten wie viele Aktien best nde im Depot liegen _SESSIONI Bestand Anzahl und welcher Aktienbestand ggf ausgew hlt wurde _SESSIONI BestandGew hlt Der gew hlte Bestand kann ber eine HTTP Get Anfrage _GET w an jede Datei bergeben werden die die header inc php einbindet Im Anschluss daran beginnt die Ausgabe des HTML Codes Sie ist abh ngig davon ob bereits ein Aktienbestand gew hlt wurde oder nicht Ist dies nicht der Fall wird zun chst eine Statusvariable status mit dem Textwert disabled belegt die sp ter im Men der HTML Datei noch Verwendung findet Wurde bereits ein Bestand gew hlt so bleibt die Statusvariable leer Im zweiten Schritt wird das gew hlte Aktienbestandsob jekt aus der Liste der Best nde in die Variable bestandGew hlt extrahiert Da die Liste der Objekte in einer Session nicht direkt zugegriffen werden kann muss das entsprechende Objekt zun chst deserialisiert werden Kap 4 1 2 Im Anschluss daran k nnen Sie aus der Aktie des Bestands den Namen auslesen und ausgeben Hinweis Erkennen Sie wie sich die objektorientierte Denkweise der Aktienbest nde mit der prozeduralen Denkweise bei der Darstellung des HTML Codes
279. elbe Objekt und auf eine Kopie Umsetzung objektorientierter Grundlagen Im Testprogramm wird zun chst die Kopie erstellt bevor die Rechnung r2 bzw damit auch r1 ausgeliefert wird Die Kopie r3 ist deshalb immer noch im Zustand nicht aus geliefert Die Ausgabe des Testprogramms lautet also Rechnung ber 100EUR wurde ausgeliefert Rechnung ber 100EUR wurde ausgeliefert Rechnung ber 100EUR wurde noch nicht ausgeliefert Ich bin ein Klon 4 1 8 Informationen ber Objekte und Klassen zur Laufzeit PHP bietet Ihnen die M glichkeit an zur Laufzeit weitere Informationen zu geladenen Klassen und zu existierenden Objekten abzufragen Diese Informationen werden Meta informationen genannt Sie haben bereits den Befehl instanceof kennen gelernt der in Verbindung mit einer Ver zweigung pr ft ob ein Objekt eine Instanz einer bestimmten angegebenen Klasse ist oder nicht Die folgende Tabelle listet die wichtigsten Metainformationen ber Objekte auf Funktion Bedeutung erg get_class obj gibt den Namen der Klasse des Objekts Sodjzur ck erg get_parent_class obj gibt den Namen der Ober Klasse des Objekts Sodjzur ck oder FALSE wenn keine Ober Klasse existiert erg method_exists obj methode pr ft ob die Methode mit dem Namen methode im Objekt obj existiert oder nicht erg is_subclass_of obj klasse pr ft ob die Klasse des Objekts Sodjeine Unterklasse von Sklasse ist oder nicht erg get_object_vars obj
280. ell wurde 1988 von Barry Boehm ver ffentlicht also ganze 18 Jahre nach dem Was serfallmodell Der Kern dieses Modells ist iterativ die bislang beschriebenen Phasen werden demnach st ndig wiederholt Prozedurale und modulare Programmierung Nachdem der Kunde den Bedarf f r die Software erkannt hat startet im Spiralmodell das Projekt Sie erstellen m glichst schnell einen kleinen Prototyp oder pr sentieren dem potenziellen Kunden ein bereits durchgef hrtes hnliches Projekt als Diskussions grundlage Nun macht man sich Gedanken ber die betrieblichen Abl ufe vgl Analyse im Wasserfallmodell Das Ziel ist die Erstellung des n chsten etwas passenderen Proto typs der Anwendung So ergeben sich mit der Zeit die Anforderungen an die zu realisie rende Anwendung bzw an das Produkt Die Achsen des Spiralmodells gliedert die im Wasserfallmodell beschriebenen Phasen in vier sich wiederholende Aktivit ten 1 Bestimmung von Zielen Identifikation von Alternativen und Beschreibung von Rah menbedingungen und Beschr nkungen 2 Bewertung der Alternativen und das Erkennen Absch tzen und Reduzieren von Risiken z B durch Simulationen oder Prototyping 3 Realisierung und berpr fung der n chsten Produktstufe 4 Planung des n chsten Zyklus zur Fortsetzung des Projekts Insbesondere in der dritten Aktivit t finden Sie sich in der Rolle des Entwicklers wieder In der letzten Spirale ist dort der Feinentwurf die Kodierung der ne
281. em ber Schwimmbahnen verdeutlicht Das Aktivit tsdiagramm verl uft ber die Schwimmbahnen Die Aktionen f r die ein Akteur verantwortlich ist werden dann in seinem Bereich gezeichnet Profitipp Bitte verwenden Sie nicht zu viele Schwimmbahnen in einem Aktivit tsdiagramm Mehr als vier Zust ndigkeiten machen das Diagramm un bersichtlich Versuchen Sie in diesem Fall die Aktionen ber mehrere Diagramme zu verteilen Zust ndigkeit 1 Zust ndigkeit 2 Zust ndigkeit 3 Abbildung 3 40 Abbildung von Zust ndigkeiten durch die Verwendung von Schwimmbahnen Eine weitere Neuerung in der UML2 besteht darin dass Sie in einem Aktivit tsdia gramm zwischen einer regul ren Abarbeitung eines Gesch ftsprozesses und einer Abar beitung die zu einem Fehlerfall f hrt unterscheiden k nnen Diese Unterscheidung wurde erstmals in der textuellen Anwendungsfallschablone beschrieben Abbildung 3 41 zeigt die Aktion bei der sich ein Kunde an einem Seminar anmelden will Wenn dies erfolgreich ist existiert ein neues Anmeldungsobjekt das dann in der Datenbank abgelegt wird Au erdem erh lt der Kunde in diesem Fall automatisch eine Anmeldebest tigung Objektorientierte Programmierung Ist das Seminar aber bereits ausgebucht schl gt der Versuch einer Anmeldung fehl Das Ergebnis ist ein Fehlerobjekt das durch das Dreieck gekennzeichnet wird Dieser Fehler ist nicht so kritisch dass deshalb die ganze PHP Anwendung beendet we
282. ementierung der Methode in der Klasse k nnen Sie echo a fehlerfrei aus f hren und erhalten die Ausgabe 1 2 als Zeichenkette 4 1 5 Einzigartige Eigenschaften und Methoden Bereits in der Beschreibung objektorientierter Modellierung wurden in Kapitel 3 2 2 Klassenattribute und Klassenmethoden erw hnt Im Gegensatz zu herk mmliche Eigen schaften wie dem Z hler oder Nenner eines Bruchs existieren Klassenattribute nur ein mal pro Klasse und geh ren zur Klasse selbst also nicht zu jedem Objekt Man ben tigt Klassenattribute also um Eigenschaften einer Klasse selbst abzuspeichern Das sind meist statistische Informationen wie die Anzahl erzeugter Objekte der Tarif lohn einer Tarifklasse oder der minimale und maximale Lohn einer Klasse von Mitarbei tern Auch in der Bruchklasse ist ein Klassenattribut vorgesehen das in dem UML Klassen diagramm von Abbildung 4 2 unterstrichen dargestellt wird und die Anzahl der erzeug ten Br che verwaltet Ebenso wie gew hnliche Eigenschaften sollten Klassenattribute als private deklariert sein und ber Methodenaufrufe zug nglich gemacht werden Diese Methoden geh ren dann ebenfalls zur Klasse selbst und werden Klassenmethoden genannt In Abbildung 4 2 ist eine Get Methode vorgesehen Listing 4 15 zeigt die Erweiterung der Bruchklasse um das Klassenattribut anzahl und um die Klassenmethode getAnzahl Geh ren eine Eigenschaft oder eine Methode zu einer Klasse so geschieht dies ber das Schl
283. en pr zisen Stichpunkten Auf der rechten Seite stehen die Klassen mit denen die beschriebene Klasse zusam men arbeitet Auf der R ckseite beschreibt man die Klasse etwas detaillierter anhand eines Ver zeichnisses der Methoden und der Eigenschaften Der Vorteil der CRC Karten liegt in der einfachen Handhabung Man kann problemlos Informationen hinzuf gen oder streichen Auf Grund des einfachen Ansatzes ist man auch unabh ngig von verwendeten Programmiersprachen und werkzeugen Der begrenzte Platz zwingt die Beteiligten zus tzlich dazu sich auf die wesentlichen Aufga ben einer Klasse zu konzentrieren Die CRC Karten werden meist in kreativen Work shops erstellt an denen Vertreter der Entwickler des Managements des Kunden sowie zuk nftige Anwender teilnehmen Assoziationen zwischen den Klassen kann man auf unterschiedlichen Wegen veran schaulichen Entweder schreibt man die Namen der behandelten Klassen auf die Karte oder man befestigt die Karten an einer Wand und zeichnet Striche zwischen den Karten Auf diese Weise m ssen sich die Teilnehmer mehr bewegen was die Situation auflo ckert Die Atmosph re in den Workshops soll generell ungezwungen und frei von F h rungshierarchien sein Als Vorgehensweise kann man im ersten Schritt typische Anwendungsf lle der zuk nfti gen Software wie die Erstellung eines Neukunden oder das Aufgeben einer Bestellung durchspielen W hrenddessen h lt der Systemanalytiker auf den CRC Kar
284. en Man bergibt also nicht eine Kopie des Objekts wie das beispielsweise bei Zahlen blich ist sondern lediglich einen Zeiger auf das Objekt Dies ist auch bei anderen objektorientierten Sprachen blich und auch sinnvoll da Objekte im Speicher sehr viel Platz einnehmen k nnen Ein st ndiges Kopieren von gro en Objekten w rde Performanceprobleme nach sich ziehen Wenn Sie jedoch unbedingt eine Kopie eines Objekts ben tigen bietet PHP Ihnen den clone Befehl Das Anlegen der Kopie wird von PHP automatisch durchgef hrt Sie k nnen jedoch den Kopiervorgang eines Objekts einer Klasse beeinflussen indem Sie die __clone Methode in der Klassendefinition implementieren Listing 4 19 zeigt eine einfache Rechnungsklasse die aus einer Rechnungssumme besteht und einem Merker ob die Rechnung bereits ausgeliefert wurde oder nicht Test weise wird eine weitere Eigenschaft hinzugef gt die besagt ob es sich bei der Rechnung um ein Original handelt oder nur um eine Kopie ber eine Set Methode kann der Auslieferungsstatus der Rechnung ver ndert werden und die implementierte __toString Methode gibt alle Daten der Rechnung als Zeichen kette aus Abschlie end ist noch die implementierte __clone Methode zu nennen W h rend beim regul ren Klonvorgang alle Parameter des Originalobjekts auf die Kopie unver ndert bertragen werden werden in dieser Methode nderungen des Vorgangs spezifiziert In diesem Fall wird der Merker gesetzt dass es s
285. en einer solchen Verarbeitung ein Mehrwert f r die Beschreibung des Gesch ftsprozesses Beispiel Wenn Sie sich an Ihrer PHP Anwendung morgens anmelden sehen Sie in einem Unterfenster eine Liste von Auftr gen die Sie zu erledigen haben Die Liste ist nach Deadlines geordnet Sie w hlen die n chste wichtige Aufgabe aus und erhalten vom System Detailinformationen Nun bearbeiten Sie diesen Auftrag und markieren ihn nach der Erledigung als fertiggestellt Eine solche iterative Mengenverarbeitung ist beispielsweise in Microsoft Outlook im Modul der Aufgabenverwaltung integriert PHP Endlich objektorientiert 175 3 Vorgehensweise bei der Softwareentwicklung verarbeitung Abbildung 3 42 Abarbeitung einer Objektmenge Die Notation der Aktivit tsdiagramme wurde nun ausreichend beschrieben Als n chs tes ist zu berlegen wie Sie auf eine sinnvolle Art Aktivit tsdiagramme erstellen Aktivi t ts Diagramme werden typischerweise aufgestellt wenn einige zusammenh ngende Anwendungsf lle fertig gestellt wurden Als n chstes m ssen Sie die grunds tzlichen Abl ufe die zur Erf llung der Funktionalit t der Anwendungsf lle notwendig sind ermitteln Dies ist am Besten ber die Erstellung von Szenarien m glich Ein Szenario ist eine spezifische Sequenz von Aktionen die das Verhalten des Systems unter bestimmten Bedingungen beschreibt Dies ist beispielsweise m ein Login m ein Bestellvorgang m eine Rechnungsstellung
286. en gew nschten Betrag w hlen Meist ben tigt der Kunde genauso lange zum berlegen wie der Geldautomat f r die Kommunikation mit dem Server Objektorientierte Programmierung Karte PIN eingeben Betrag w hlen Karte PIN lesen Geld auszahlen Abbildung 3 43 Geld abheben an einem Bankautomaten Wenn die Pr fung erfolgreich ist und der Kunde den gew nschten Betrag zur Auszah lung gew hlt hat bekommt er das Geld ausgezahlt m Wasjedoch geschieht wenn die Karte und oder die PIN ung ltig sind m Was geschieht wenn das Tageslimit des Kunden berschritten wird m Was geschieht bei der Eingabe eines ung ltigen Betrags m Wie wird ein Netzwerkfehler zwischen dem Geldautomaten und dem Bankserver gehandhabt Die L sung besteht darin dass diese Szenarien hier nicht betrachtet werden Abbildung 3 43 zeigt n mlich lediglich das Prim rszenario bei einem erfolgreichen Durchlauf des Anwendungsfalls Geld abheben Profitipp Sie sollten stets zuerst das Prim rszenario ohne Ausnahmen modellieren Dies ent spricht der Beschreibung des textuellen Anwendungstalls Versuchen Sie also nicht alle Ausnahmen nachtr glich in das Prim rszenario einzuf gen Das Diagramm w rde dadurch extrem un bersichtlich und man w rde den einfa chen Fall gar nicht mehr erkennen In der oberen Auflistung wurden vier Sonderf lle definiert die nicht zu einer regul ren Abarbeitung des Anwendungsfalls f hren PHP Endlich objektori
287. en m ssen Sie zun chst die Dokumenttypdefinition angeben nach der Sie die Pr fung vornehmen wollen Lis ting 4 70 zeigt die Verbindung der beispiel xml mit der seminare dtd Datei Mit seminare ist der notwendige Wurzelknoten also das oberste Element der XML Datei gemeint An dieser Stelle beginnt auch die Beschreibung der Regeln innerhalb der DTD lt xml version 1 0 standalone no gt lt DOCTYPE seminare SYSTEM seminare dtd gt lt seminare gt lt seminar id S1120 gt Listing 4 70 Modifikation der XML Datei f r eine DTD Pr fung Als N chstes m ssen in Listing 4 71 die Regeln definiert werden Die DTD ist eine eigene Sprache mit eigener Syntax Das Wurzelelement seminare besteht aus Elementen seminar PHP Endlich objektorientiert 305 4 PHP objektorientiert wobei mindestens ein Seminar angegeben werden muss Dies ist an dem im Listing zu erkennen Ein Seminar besteht wiederum aus genau einem Namen genau einem Dozenten und optional aus einer Teilnehmerliste Au erdem hat ein Seminar zwangsweise eine ID Bei dem Namen und dem Dozenten handelt es sich um beliebigen Text und oder Zah len Das Format PCDATA parsed character data kann leider nicht genauer spezifiziert werden was beim Einsatz eines Schemas m glich w re Die Teilnehmerliste kann leer sein oder aus beliebig vielen Teilnehmern bestehen Beim Teilnehmer muss wiederum ein Name angegeben werden und keine bzw genau eine Liste von Vor
288. en wohin Ihr Kunde die Entwicklung steuern wird Wie m ssen Sie Objektorientierte Programmierung vorgehen wenn Sie sp te nderungen der Anforderungen in das Testkonzept integrie ren wollen Bei Entwicklern die nicht testgetrieben entwickeln h ren Sie oft nach der Erstellung des Quellcodes die Formulierung Das Programm ist zu komplex Man kann es nicht so ein fach testen Der L sungsansatz besteht auch hier in einem iterativ inkrementellen Vorgehen Der Design Test und Entwicklungsprozess ist dem organischen Anpassungs und Wachs tumsprozess sehr hnlich Der Trend f hrt also zu evolution rem Prototyping mit Pha sen des Refactorings Das testgetriebene Entwickeln ist eine Just in Time Iechnik um auf wechselnde Anforderungen flexibel einzugehen Das Testen einzelner Funktionalit t auf Quellcodeebene meist auf der Ebene einzelner Objekte wird als Unit Testing bezeichnet Die Unit Tests und der zugeh rige Quellcode werden dabei parallel zueinander in kleinen und wiederholten Mikroiterationen entwi ckelt Die Dauer einer Iteration dauert nur wenige Minuten um den Entwickler nicht von seiner Problemstellung abzulenken Dennoch erfordert die testgetriebene Denk weise eine gewisse Selbstdisziplin und Umgew hnung im Vergleich zum Herunterha cken von Quellcode Profitipp Stellen Sie sich stets die Frage Was soll die Funktion leisten die ich jetzt program mieren will Schreiben Sie die Antwort darauf di
289. en Ans tzen und erh ht die Wartbarkeit und Modularit t PHP Endlich objektorientiert 211 4 PHP objektorientiert In der Realit t w rde man auch eine Farbe als Objekt repr sentieren das seinerseits drei Eigenschaften hat Dies k nnten beispielsweise die Rot Gr n und Blauanteile der Farbe sein So w rde man sicherstellen dass man stets eine g ltige Farbe erh lt In einer Zeichenkette k nnte die Farbe auch Frank lauten was jedoch keinen Sinn macht Konstruktor und Destruktor Die Klasse besitzt au erdem einen Konstruktor der zwingend einen Parameter erh lt Dieser Parameter gibt eine Farbe von au en vor die intern im Objekt abgelegt wird Ein Default Konstruktor ist in diesem Beispiel nicht vorgesehen Sie m ssen bei der Objekterzeugung also den Farbparameter angeben In PHP 5 lauten alle Methoden die Konstruktoren f r ein Objekt sind __construct Sie k nnen diese Methode mehrmals mit einer unterschiedlichen Anzahl an Parametern verwenden sodass Sie mehrere m gliche Konstruktoren f r ein Objekt definieren k nnen Zus tzlich besitzt die Klasse einen Destruktor der beim Entfernen des Objekts aus dem Arbeitsspeicher des Servers automatisch aufgerufen wird Ein Destruktor wird ber den Aufruf __destruct definiert und ist stets parameterlos Get und Set Methoden Zus tzlich erh lt ein Stift zwei Methoden die als Dienste von anderen Klassen aus ange sprochen werden k nnen public Die erste Methode
290. en Pr fung ansonsten FALSE PHP und XML lt php doc D0MDocument load beispiel xml gt lt html gt lt body gt lt php if doc gt validate echo Die Datei beispiel xml ist g ltig else echo Die Datei beispiel xml NICHT ist g ltig lt body gt lt html gt Listing 4 72 Pr fen der XML Datei anhand der DTD auf G ltigkeit Wenn Sie anstelle der DTD ein XML Schema zur Pr fung Ihrer XML Dateien verwenden m chten k nnen Sie wesentlich pr zisere Pr fungen vornehmen Sie k nnen beispiels weise Formate f r Telefonnummern Datums und W hrungsangaben oder f r E Mail Adressen vorgeben Au erdem ist ein XML Schema selbst eine XML Datei mit einem vordefinierten Satz von Elementen hnlich wie bei einer HTML Datei das lt h1 gt eine vor definierte Bedeutung hat n mlich die einer Hauptkapitel berschrift Andererseits ist aufgrund der vielen M glichkeiten die Sprache des XML Schemas auch deutlich komplexer und schwieriger von einem Menschen zu lesen und zu schreiben Listing 4 73 zeigt das entsprechende XML Schema f r die Seminardatei die noch nicht einmal wesentlich pr ziser ist als die DTD aus Listing 4 71 Erkennen Sie die komplexere Syntax Zun chst werden die XML Elemente Dozent Name Vorkenntnis und Seminar vergeben Ein Seminar besteht aus einem Namen einem Dozenten und einer Teilnehmerliste die sp ter definiert wird Ein Element wie das Seminar das aus anderen Elementen bes
291. en Rollen zusammen Bei gro en Projekten arbeiten Sie als PHP Entwickler normalerweise nicht allein als Pro grammierer vielmehr sind die Aufgaben in einem Entwicklerteam aufgeteilt Jeder Ent wickler ist f r eine Reihe von zu entwickelnden Komponenten zust ndig Die Kompo nenten sind dann zusammenzuf gen und bilden die Anwendung Bereits an dieser Stelle treten oft Probleme auf falls die Schnittstellen der Komponenten zueinander nicht klar festgelegt wurden oder zu dem Zeitpunkt der Festlegung noch gar keine Spezifika tion m glich war Unternehmen der Kunde mit Bedarf Software Entwickler e G Geldgeber Einkauf Projektmanager Projektmanager E z c b g 7 Q 5 N bu E System Analytiker E E E Benutzer Fachabteilung 2 2 Entwickler EDV a S 4 o N N Kompetenz vor allem aus S vergangenen Projekten Haus interne EDV Abbildung 3 10 Beteiligte Personen gruppen am Projekt Bei gr eren Projekten beginnen Sie als Entwickler nicht sofort bei Projektbeginn mit ihrer Arbeit Ihrer T tigkeit ist die T tigkeit einer oder mehrerer Systemanalytiker vorge schaltet Der Begriff vorgeschaltet darf jedoch nicht so verstanden werden dass die Analytiker ihre Arbeit beenden bevor Sie beginnen Dies w re eine Wasserfallmethode Vielmehr sollen Systemanalytiker Ihnen als Entwickler bei der Kommunikation mit dem Kunden helfen der blicherweis
292. en anlegen lassen indem HTTP Anfragen mit ausgef llten Formulardaten an den Webserver automa PHP Endlich objektorientiert 119 3 Vorgehensweise bei der Softwareentwicklung tisiert abgesendet werden Der Lasttest zeigt ob alle Clients in einer angemessenen Ant wortzeit eine Erfolgsmeldung der Erstellung erhalten haben oder nicht Ein Anwender wartet nicht gerne l nger als 1 2 Sekunden auf die Antwort vom System nachdem er eine Eingabe get tigt hat Eine l ngere Wartezeit f hrt zu Frustration ber das langsame System und damit zu verminderter Akzeptanz der Anwender Andererseits l sst sich mit dem Lasttest aber auch pr fen ob alle Kunden korrekt angelegt wurden Besitzt wirklich jeder Kunde eine eindeutige ID oder wurden Kundennummern doppelt vergeben Abbildung 3 9 skizziert den Weg durch die Schichten bei einem vertikalen Prototyp Kunde getKundAg Zugriff X A Datenzugriff getBest K Abbildung 3 9 Ein vertikaler Prototyp Eine weitere Unterscheidung der Prototypen liegt in ihrer Wiederverwendung Beim Rapid Prototyping erstellen Sie einen Prototyp der nur zur Erkenntnisgewinnung dient beispielsweise um eine der folgenden Fragen zu beantworten m W nscht sich der Kunde diese Art der Navigation Funktioniert dieser Dienst mit diesem WAMP Server prinzipiell m Wie performant ist die Anwendung Das Rapid Prototyping dient also zu Forschungszwecken bzw f r die Suche nach M g lichkeiten zur Realisierung ei
293. en dabei eine Diskussionsgrundlage f r die iterativ inkrementelle Entwicklung und dienen zus tzlich zur Dokumentation der Entstehung einer L sung Die einzelnen Diagramme bieten verschiedene Sichtweisen auf das Prob lem und auf die L sung Sie geben zus tzlich durch die Reihenfolge ihrer Anwendung eine Anleitung damit Sie sich der Probleml sung n hern k nnen Alle in diesem Kapitel skizzierten Beispiele k nnen Sie als Auftr ge f r die Implementie rung von PHP Anwendungen sehen die Sie mit den neuen M glichkeiten von PHP 5 umsetzen k nnen Im n chsten Kapitel werden Sie erfahren wie Sie die vorgestellten Konzepte der Objekt orientierung und der Spezifikation der einzelnen UML Diagramme in PHP implemen tieren k nnen 4 PHP objektorientiert Im zweiten Kapitel dieses Buches wurde die grundlegende Syntax der Sprache PHP vor gestellt Diese Syntax und alle vorgestellten Befehle k nnen nat rlich auch im Rahmen der Objektorientierung verwendet werden Verzweigungen Schleifen Session Hand ling der Versand von E Mails und auch die Befehle zur Datenbankanbindung stehen nach wie vor zur Verf gung In gro en Projekten sollte der gesamte Zugriff auf solche Ressourcen jedoch nur einmalig implementiert und in Objekte gekapselt werden Das dritte Kapitel pr sentierte Vorgehensweisen bei der Abwicklung von Projekten unterschiedlicher Gr e und stellte im Anschluss die grundlegenden Begriffe objektori entierter Denkweise vor
294. en der Rechung sowie den ggf existierenden Rabatt auf die Gesamtrechnung Im Anschluss daran werden alle Rechnungspositionen als Datenfeld ausgelesen und mit der foreach Schleife durchlaufen Dort werden dann die Daten jeder Rechnungsposition ausgegeben wie die Nummer der Position der Name des Artikels die eingekaufte Menge der ggf gew hrte Rabatt f r diese Position der Einzelpreis den Gesamtpreis sowie der Mehrwertsteuersatz f r diese Rechnungsposition wobei der erm igte Steu ersatz unter anderem f r Lebensmittel und B cher in Deutschland momentan 7 betr gt und der Steuersatz f r andere Waren und Dienstleistungen 19 Nachdem alle Rechnungspositionen in dieser Art ausgegeben wurden wird abschlie end der Gesamtpreis der Rechnung unter Ber cksichtigung der Rabatte und der Mehr wertsteuer ausgegeben Dies f hrt zur folgenden Ausgabe die nat rlich noch unter Ver wendung von HTML Tabellen und CSS Formatierungen versch nert werden kann RECHNUNG Nr 1 vom 08 10 2009 Kunde Dopatka Rabatt auf die Gesamtrechnung 5 PHP Endlich objektorientiert 261 4 PHP objektorientiert Position 1 Milch 3 St ck 0 Rabatt 1 20EUR pro St ck 3 85EUR gesamt incl 7 MwSt Position 2 Zucker 1 St ck 0 Rabatt 1 00EUR pro St ck 1 07EUR gesamt incl 7 MwSt Position 3 Butter 7 St ck 0 Rabatt 0 70EUR pro St ck 5 24EUR gesamt incl 7 MwSt GESAMTPREIS 9 66EUR Sie erkennen an diesem Beispiel wie ho
295. enden verwendet um die Implementierung des SAX und DOM Parsers in PHP 5 zu testen Die Unterst tzung des XML Formats wurde in PHP 5 weitreichend verbessert Bei der Datei handelt es sich um einen Ausschnitt aus einer Seminarverwaltung bei der neben dem Namen des Seminars auch der Dozent und die optionale Teilnehmerliste ver waltet werden Jeder Teilnehmer kann bei seiner Anmeldung Vorkenntnisse angeben die ebenfalls in der XML Datei gespeichert werden lt xml version 1 0 gt lt seminare gt lt seminar id S1120 gt lt name PHP5 objektorientiert lt name gt lt dozent Dr Frank Dopatka lt dozent gt lt teilnehmerliste gt lt teilnehmer id 23 geschlecht m gt lt name gt Ulf Schmidt lt name gt lt vorkenntnisse gt lt vorkenntnis gt Grundlagen HTML lt vorkenntnis gt lt vorkenntnis Java lt vorkenntnis gt lt vorkenntnisse lt teilnehmer gt lt teilnehmer id 43 geschlecht w gt lt name gt Clair Grube lt name gt lt vorkenntnisse gt lt vorkenntnis gt JavaScript lt vorkenntnis gt lt vorkenntnisse lt teilnehmer gt lt teilnehmer id 56 geschlecht w gt lt name gt Ulla Hansen lt name gt lt teilnehmer gt lt teilnehmer id 53 geschlecht m gt lt name gt Franz Streber lt name gt lt vorkenntnisse gt lt vorkenntnis gt Visual Basic 6 lt vorkenntnis gt lt vorkenntnisse lt teilnehmer gt lt teilnehmer id 98 geschlecht m gt lt name gt Hans Wurst lt name gt lt
296. enkette sondern ihrerseits wieder eine Zusammensetzung von Eigenschaften ist lohnt es sich auch die Klasse Farbe einzuf h ren Ein solches Objekt kann beispielsweise je 0 bis 255 Rot Gr n und Blau Anteile besitzen Dann w re es ein RGB Farbobjekt das dem Stift in der Methode setFarbe ber geben werden k nnte Neben den Sichtbarkeiten public und private existiert noch eine dritte Sichtbarkeit die als protected bezeichnet wird Eine Eigenschaft oder eine Methode mit protected Deklaration PHP Endlich objektorientiert 137 3 Vorgehensweise bei der Softwareentwicklung verh lt sich dabei wie private f r fremde Klassen und wie public f r vererbte Klassen Man erlaubt also seiner eigenen Kindklasse einen tieferen Eingriff in die Privatsph re als einer fremden Klasse Wie die Vererbung prinzipiell funktioniert und welche Bedeutung sie hat wird im n chsten Unterkapitel erl utert Spezialisieren und Generalisieren Vererbung Bereits bei dem Ermitteln der Klassen im Beispiel des Autohauses ist eine Kette von Klas sen ermittelt worden n mlich zwischen Verk ufer Mitarbeiter und Person sowie zwi schen K ufer und Person Klassen k nnen miteinander ber eine Vererbung verkettet sein In der Analyse erkennen Sie diese Ketten stets durch die Ist ein Beziehung So ist der Verk ufer ein Mitarbeiter des Autohauses und jeder Mitarbeiter des Autohauses ist eine Person Sowohl Mitarbeiter als auch Kunden und Lieferanten sin
297. ens tze _SESSION BestandAnzahl count ausgabe if count ausgabe gt Q _SESSION BestandGew hlt 0 echo Es wurden count ausgabe Aktienbest nde geladen elsef _SESSION BestandGew hlt 1 echo ACHTUNG Es wurde KEIN Bestand geladen db gt schliessen lt h3 gt lt form action uebersicht php method post gt lt input type submit value 0K gt lt form gt lt center gt lt php require_once footer inc php gt Listing 5 26 Laden der Aktienbest nde in die PHP Session Forts Abbildung 5 37 zeigt dass in diesem Beispiel genau ein Bestand ausgelesen wurde der auch direkt gew hlt wird PHP Endlich objektorientiert 395 5 Projektpraxis http focalhost ktienverwaltung 004 laden php Windows Internet Explorer OR OO gt E nsincahostianien BREI ooge IEIE Datei Bearbeiten Ansicht Favoriten Extras 57 Favoriten http localhost ktienverwaltung 004 laden php Depotverwaltungsprogramm Gew hlter Bestand E ON laden speichern bersicht w hlen neu hinzukaufen neue Dividende verkaufen Es wurden 1 Aktienbest nde geladen Copyright by Dr Frank Dopatka Lokales Intranet Abbildung 5 37 Erfolgsmeldung nach erfolgreichem Laden Der Klick auf die OK Schaltfl che f hrt wie immer in die bersicht sodass der Benutzer die Bilanz des aus der Datenbank geladenen Aktienbestands betrachten kann
298. ensatz Array for i 0 i lt count row i t datensatz i row i ausgabe x datensatz x J return ausgabe public function schreiben p if lisset p return FALSE if p gt isParam sql return FALSE sql p gt get sql if this gt starts_with sql UPDATE TRUE this gt starts_with sq INSERT TRUE UPDATE oder INSERT return mysql_query sql else return FALSE FEHLER Listing 4 47 Die Implementierung des Interfaces f r einen MySQL Zugriff Forts PHP Endlich objektorientiert 269 4 PHP objektorientiert private function starts_with str wert return strtolower substr str strlen wert strtolower wert Listing 4 47 Die Implementierung des Interfaces f r einen MySQL Zugriff Forts Der Datenzugriff kann nat rlich um Transaktionen und oder verschl sselten Zugriff erg nzt werden Es wurde im UML Teil des dritten Kapitels bereits erkl rt dass Inter faces auch vererbt werden k nnen um zus tzliche Funktionalit t hinzuzuf gen Dies kann beispielsweise durch die Definition interface iCryptedDZ extends iDZ erfolgen Nun muss der Zugriff auf diese Implementierung noch getestet werden Dazu wird auf die existierende B rsendatenbank aus dem zweiten Kapitel zur ckgegriffen Abb 2 11 ff In der Datenbank boerse ist eine Tabelle ag enthalten die einen Identifikator und den Namen von Aktiengesellschaften enth lt Zu
299. entdecken Viele Programmierer ber sehen jedoch dass auch aus den Punkten P4 1 1 P5 2 2 und P6 3 3 kein Dreieck gebildet werden kann obwohl die Punkte ungleich sind und keine identischen x oder y Koordinaten besitzen Es kommt also die folgende dritte Bedingung hinzu m Drei Punkte bilden kein Dreieck wenn Sie auf einer Geraden liegen PHP Endlich objektorientiert 263 4 PHP objektorientiert Profitipp Streng genommen m ssen Sie im Konstruktor des Dreiecks pr fen ob das Dreieck berhaupt gebildet werden darf Die eben geleisteten Vor berlegungen dazu sind zwingend notwendig wenn Sie eine langfristig stabile Anwendung bauen wollen Solche Vor berlegungen werden jedoch oft aus Zeitmangel nicht durchgef hrt oder sie werden als trivial abgetan Daraus resultiert dann eine Anwendung die in 99 9 der F lle korrekt funktioniert jedoch pl tzlich v llig falsche Werte liefert Im Konstruktor des Dreiecks in Listing 4 43 werden diese Pr fungen durchgef hrt in der Hoffnung keine Spezialf lle bersehen zu haben Sie erkennen wie aufw ndig dadurch der Konstruktor wird um ein einfaches Dreieck zu erzeugen Zun chst werden die Punkte wechselseitig auf Gleichheit gepr ft sowie auf Parallelit t zur x und zur y Achse Dann wird die Geradengleichung y mx n aus den Punkten 1 und 2 gebildet und abschlie end gepr ft ob der dritte Punkt auf der Geraden liegt Was soll jedoch geschehen wenn eine
300. entiert 177 3 Vorgehensweise bei der Softwareentwicklung Erstellen Sie also zu diesen vier F llen eigene Aktivit tsdiagramme Es ist kein Mehrauf wand im Vergleich zur Integration aller F lle in einem einzigen Diagramm Abbildung 3 44 zeigt zur Abwechslung ein Aktivit tsdiagramm auf Muschelebene das eine Schleife in einem Quellcode beschreibt In diesem Fall wird eine Variable x solange inkrementiert wie sie kleiner als der Wert 10 ist Daran k nnen Sie die vielf ltige Anwendung dieses Diagrammtyps erkennen der von grob beschriebenen Gesch ftsprozessen bis zu sequenziellen Anweisungen Verzwei gungen und Schleifen im Quellcode reicht Abbildung 3 44 Ein Aktivit tsdiagramm zur Quellcodebeschreibung aus der Muschelebene Beispiel Entwerfen Sie ein Aktivit tsdiagramm auf Muschelebene das f r eine gegebene nat rliche Zahl n gt 0 die Summe s und das Produkt p aller Zahlen von 1 bis n berech net So gilt beispielsweise f r n 5 das Ergebnis s 1 2 3 4 5 15 und p 1 2 3 4 5 720 Das Verfahren besteht darin in einer Schleife jede Zahl i von 1 bis n zu durchlaufen und in jeder Iteration i zu s zu addieren bzw mit p zu multiplizieren Abbildung 3 45 zeigt die L sung f r dieses Beispiel Als bung k nnen Sie dieses Aktivi t tsdiagramm bereits mit den beschriebenen M glichkeiten des zweiten Kapitels umset zen F r die Eingabe von n k nnen Sie ein HTML Formular mit einem Textfeld verwen den dessen Daten dann z
301. entwickler press N L PHP Endlich objektorientiert OO und UML Praxisbuch vom Anf nger zum Fortgeschrittenen Dr Frank Dopatka Frank Dopatka PHP Endlich objektorientiert OO und UML Praxisbuch vom Anf nger zum Fortgeschrittenen Frank Dopatka PHP Endlich objektorientiert OO und UML Praxisbuch vom Anf nger zum Fortgeschrittenen entwickler press Frank Dopatka PHP Endlich objektorientiert OO und UML Praxisbuch vom Anf nger zum Fortgeschrittenen ISBN 978 3 86802 039 7 2010 entwickler press Ein Imprint der Software amp Support Verlag GmbH Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie detaillierte bibliografische Daten sind im Internet ber http dnb ddb de abrufbar Ihr Kontakt zum Verlag und Lektorat Software amp Support Verlag GmbH entwickler press Geleitsstra e 14 60599 Frankfurt Tel 49 0 69 630089 0 Fax 49 0 69 630089 89 lektorat entwickler press de http www entwickler press de Lektorat Sebastian Burkart Korrektorat Katharina Klassen und Frauke Pesch Satz mediaService Siegen Belichtung Druck amp Bindung M P Media Print Informationstechnologie GmbH Paderborn Alle Rechte auch f r bersetzungen sind vorbehalten Reproduktion jeglicher Art Fotokopie Nachdruck Mikrofilm Erfassung auf elektronischen Datentr gern oder andere Verfahren nur
302. er Adobe PDF Frage hier eingebe a OOR MEEN A FENE MIA E EN PAEA 1 8 E Aa o Lad i Arial aiat aE g UERS A PERCRE BEE BPos4 BLZ Shapes x Nach Shapes suchen Geben Sie Ihren Sucht 39 schablonei rd r Su e99 joins A and B or A and C x gt 0 x lt 0 4 x gt 0 DA atona Amon wW vif 4 MN Use Case A Use Case 2 A Aktivit t A Aktivit t2 A Analyse A Analyse lt gt Zeichenblatt 4 12 v Abbildung 5 47 Screenshot von Visio 2003 Automatisch testen mit PHPUnit Das aus der Java Welt bekannte Werkzeug JUnit ist nun auch f r PHP unter dem Namen PHPUnit verf gbar Es ist bei der Umsetzung der agilen testgetriebenen Entwicklung behilflich indem noch vor der Implementierung einer Funktionalit t separate Iestklas sen geschrieben werden Diese Testklassen ersetzen die Testskripte wie sie in Kapitel 5 1 beispielsweise in Listing 5 3 verwendet wurden Eine Testklasse besteht aus beliebig vie len Testmethoden die alle hintereinander geschrieben und bei jedem Testdurchlauf aus gef hrt werden So sammelt sich eine Vielzahl von Tests Jeder erfolgreiche Testdurch lauf dient dem Nachweis der Robustheit der Software und dokumentiert gleichzeitig den Kontext in dem die zu testende Klasse eingesetzt wird PHP Endlich objektorientiert 415 5 Projektpraxis Nach der Installation ber den bereits in PHP integrierten PEAR Installer PHP Exten si
303. er Aktien im Bestand m die ggf erhaltenen Dividendenzahlungen m das Datum des Einkaufs bzw der arithmetisch gewichtete Mittelwert bei mehreren Eink ufen m die Geb hren beim Einkauf der Einzelpreis der eingekauften Aktien bzw der arithmetisch gewichtete Mittel wert bei mehreren Eink ufen Der n chste Teil der Bilanz ist abh ngig davon ob der Bestand bereits verkauft wurde oder nicht Wenn er bereits verkauft wurde so besitzt das Bilanzobjekt eine Verkaufsor der Daraus werden extrahiert und dem Datenfeld hinzugef gt m das Datum des Verkaufs die Verkaufsgeb hren der Einzelpreis der Aktie zu dem verkauft wurde Wurde der Bestand noch nicht verkauft werden zun chst die aktuellen Daten von der Homepage ausgelesen Aus diesen Daten werden ausgegeben m das aktuelle Datum die Zeit zu dem der Kurs ermittelt wurde der aktuelle Einzelpreis also der Kurs selbst Zus tzlich dazu werden die Verkaufsgeb hren aus dem Konstruktor der Bilanz ausgege ben die bei einem Verkauf anfallen w rden PHP Endlich objektorientiert 363 5 Projektpraxis Im Anschluss daran werden die eigentlichen Berechnungen der Bilanz durchgef hrt Dabei werden die folgenden Fakten ermittelt und in das Ausgabefeld data hinzugef gt die auch sp ter in der Ausgabe erscheinen sollen m tagelmBesitz beschreibt die Anzahl der Tage die der Bestand schon existiert Dazu wird das Datum des Einkaufs und das aktuelle Datum entweder d
304. er Ausleihen miteinander verbunden Eine Ausleihe hat unter ande rem ein Datum zu dem der Leser das Buch ausgeliehen hat und die M glichkeit die Ausleihe ein oder mehrfach zu verl ngern Wie die Assoziationsklasse letztlich umge setzt wird ist Aufgabe der Entwickler im Systemdesign Leser name anschrift Abbildung 3 59 Beispiel einer Assoziationsklasse Assoziationen sind auch zwischen mehr als zwei Klassen m glich Diese Assoziationen werden als n re Assoziationen bezeichnet So wird die Beziehung zwischen einem Passagier einem Flug und einem Sitzplatz ber die Reservierung hergestellt Das Erken nen solcher Zusammenh nge bildet den Kern der objektorientierten Analyse Objektorientierte Programmierung Reservierung Passagier Sitzplatz Abbildung 3 60 Beispiel einer n ren Assoziation Beispiel Wie sind ein Kaufinteressent ein Artikel und ein Verk ufer in der Modellierung mit einander verbunden Die Antwort lautet ber ein Verkaufsgespr ch das im Nach hinein protokolliert wird Eine weitere Besonderheit der objektorientierten Analyse sind reflexive Assoziationen bei denen Objekte einer Klasse andere Objekte derselben Klasse kennen k nnen Dabei sind oft verschiedene Rollen von Bedeutung deren Bezeichnung an die Assoziation geschrieben werden k nnen Im Beispiel in Abbildung 3 61 sind sowohl die Chefs als auch deren Mitarbeiter Ange stellte eines Unternehmens Da Angestellte nur einma
305. er Laufzeit die nicht zum Abbruch des Skripts f hren E_CORE_ERROR 16 wie ERROR wobei die Meldungen vom PHP Kernel stammen E_CORE_WARNING 32 wie WARNING wobei die Meldungen vom PHP Kernel stammen E_COMPILE_ERROR 64 schwerer Fehler beim bersetzen des Skripts wobei die Meldungen der Zend Engine stammen die f r das Kompilieren des Skripts ver antwortlich ist und gleichzeitig die Virtuelle Maschine VM von PHP darstellt E_COMPILE_WARNING 128 Warnungen beim bersetzen des Skripts wobei die Meldungen von der Zend Engine stammen E_USER_ERROR 256 eigene Fehlermeldungen die Sie ber den Befehl Zrigger_error erzeugen k nnen E_USER_WARNING 512 eigene Warnmeldungen die Sie ber den Befehl rigger_error erzeugen k nnen E_USER_NOTICE 1024 eigene Benachrichtigungen die Sie ber den Befehl frigger_errorerzeugen k nnen E_STRICT 2048 enth lt zus tzlich Vorschl ge f r bessere Kompatibilit t des Codes E_RECOVERABLE_ERROR 4096 potenziell gef hrlicher Fehler aufgetreten der die Engine aber nicht in einem instabilen Zustand hinterlassen hat wird der Fehler nicht durch set error handler behoben so wird das Skript wie bei E ERROR abgebrochen E_DEPRECATED 8192 Warnung dass der Quellcode in zuk nftigen PHP Versionen nicht mehr funktionieren wird Tabelle 4 3 bersicht ber die Fehler und Warnmeldungen von PHP Objektorientierte Fehlerbehandlung Konstante Wert Bedeutung E_USER_DEPRECATED 16384 wie
306. er Oberklasse bis auf das fehlende Schl sselwort abstract Dadurch dass diese Methode nun realisiert wurde k nnen konkrete Objekte der Klasse angelegt werden lt php class Katze extends Tier public function __construct name parent __construct name public function gibLaut return this miauen public function miauen return miau Listing 4 29 Die abgeleitete Klasse Katze Die Implementierung der Hundeklasse erfolgt in Listing 4 30 analog zur Katzenklasse PHP Endlich objektorientiert 243 4 PHP objektorientiert lt php class Hund extends Tier public function __construct name f parent __construct name public function gibLaut return this bellen public function bellen return wow Listing 4 30 Die abgeleitete Klasse Hund Von der Hundeklasse wird wiederum die Dogge als spezieller Hund abgeleitet Da der Hund bereits das Lautgeben implementiert ist dies bei der Dogge nicht zwingend n tig Der Laut k nnte nat rlich durch ein berschreiben der Methode mit identischer Defini tion public function gibLaut neu definiert werden Stattdessen wird die Methode get Name bei der Dogge im Vergleich zum Tier neu definiert Zus tzlich wird die neue Methode beissen definiert lt php class Dogge extends Hund public function __construct name parent __construct name public function beissen raid One oe 2 p
307. er Tabelle ag ist in Abbildung 2 13 skizziert localhost localhost boerse ag phpMyAdmin 3 1 3 1 Windows Internet Explorer a Ov A localhost i PTAR ET ek Datei Bearbeiten Ansicht Favoriten Extras r Favoriten E LOCAL AKTIEN g8 r http localhost formjf 44h localhost localhos X 2 D J v Setev Sicherheit Extras r 23 Server localhost gt Datenbank boerse gt Tabelle ag RELATION name zu ID ElAnzeigen amp Struktur RsaL J Suche Einf gen BjExportieren Elimportieren Operationen Leeren L schen Feld Typ Kollation Attribute Null Standard Extra afe int 11 Nein 0 ED name varchar 60 latin1_swedish_ci Nein Alle ausw hlen Auswahl entfernen markierte I8 X Datenbank boerse 2 boerse 2 Bas E kurse Druckansicht Beziehungs bersicht B Tabellenstruktur analysieren 1 Felder hinzuf gen An das Ende der Tabelle An den Anfang der Tabelle Nach D gal m 1 a Lokales Intranet far Rio Abbildung 2 13 Struktur der Tabelle ag PHP Endlich objektorientiert 85 2 Die Sprache PHP Prozedural Auffallend ist noch der Typ jedes Felds Wie auch eine Programmiersprache besitzt eine Datenbank eine Reihe von Datentypen die man bei der Erstellung der Tabelle angeben muss Die Tabelle 2 26 zeigt eine bersicht der MySQL Datentypen sowie den ben tig ten Speicherplatz f r jeden Eintrag
308. erden In PHP wird eine Konstante ber den Befehl define erzeugt der zwei Parameter erh lt Der erste Parameter erh lt den Namen der Konstante und der zweite deren Inhalt lt php In diesem Skript wird eine Konstante definiert und im HTML Teil des Skriptes verwendet Autor Dr Frank Dopatka define WERT_KONST Meine tolle Homepage hier ist die Def lt html gt lt head gt lt title gt lt php echo WERT_KONST gt lt title gt lt head gt lt body gt lt h1 gt lt php echo WERT_KONST gt lt h1 gt lt body gt lt html gt Listing 2 3 Definition einer Konstanten Profitipp Um Konstanten leicht im Quellcode zu erkennen schreibt man sie am besten stets komplett in Gro buchstaben Variablen Im Gegensatz zu einer Konstanten beginnt eine Variable immer mit dem Symbol das von einem PHP Anf nger leicht vergessen wird Die Zuweisung eines Werts erfolgt direkt ber den Operator Listing 2 4 zeigt g ltige Deklarationen von Variablen lt php a 4 b 1 c 8 3 d Hallo e Hallo f TRUE g FALSE h false i lt tabler lt tr gt lt td gt Spaltel lt td gt lt td gt Spalte2 lt tdr lt tr gt lt tabler Listing 2 4 Deklaration und Zuweisung von Variablen PHP Endlich objektorientiert 17 2 Die Sprache PHP Prozedural Bei den Variablen a und b handelt es sich um Ganzzahlen Integer bei c um eine Flie kommazahl Double und bei d und e um Zeichenketten Zeiche
309. erden im Folgenden beide Verfahren durchgegangen Dabei wird in Abbildung 5 3 zun chst die Anwendungsfallschablone f r den Use Case nachkaufen erstellt Aktien nachkaufen N Ziel Benutzer hat Aktien nachgekauft Vorbedingung Benutzer ist angemeldet und hat bereits einen Aktienbestand mit Aktien des gew nschten Typs Nachbedingung Erfolg Benutzer besitzt weitere Aktien desselben Typs in seinem Aktienbestand Nachbedingung Fehlschlag Mitteilung an Benutzer das seine Eingaben fehlerhaft waren oder die Aktien aus technischen Gr nden nicht in den Bestand aufgenommen werden konnten Akteure Benutzer der Depotverwaltung Ausl sendes Ereignis Benutzer m chte nachgekaufte Aktien in das Verwaltungsprogramm einpflegen Beschreibung 1 Bestand ausw hlen mit Aktien des Typs die nachgekauft werden sollen 2 Nachkaufen ausw hlen 3 Daten des Nachkaufs einpflegen Menge Kaufdatum Kurs Geb hren und best tigen 4 Erfolgsmeldung ber das Einpflegen in den Bestand Erweiterung 3a direkter Check der Eingaben des Benutzers auf G ltigkeit Alternativen 1a neuen Bestand anlegen wenn noch keine Aktien dieses Typs existieren 4a Meldung bei fehlerhaften Eingaben und Korrekturm glichkeit Abbildung 5 3 Textueller Anwendungsfall zum Nachkaufen von Aktien Achten Sie dabei insbesondere auf eine saubere Definition der Vorbedingung Was muss erf llt sein damit der Anwendungsfall ausgef hrt werden kann Wodur
310. erechnungen f r den Zugriff auf Zeichenketten zum Rechnen mit Datums und Zeitwerten und vieles mehr Zus tzlich dazu k nnen Sie eigene Funktionen definieren die Sie mehrfach weiterver wenden k nnen Das dient dazu gleichbleibende Teile des Quellcodes nicht mehrfach zu schreiben und verbessert die Wartbarkeit Ihrer Anwendung Gleichzeitig k nnen Sie die korrekte Funktionsweise einmalig ordentlich testen und danach relativ sicher sein dass Ihre Funktion auch in einem anderen Kontext korrekt funktioniert Listing 2 45 zeigt den ersten Versuch eine Funktion selbst zu schreiben Ihr Aufruf soll den Wert der Variablen a mit einer zus tzlichen Zeichenkette verkn pft ausgeben Die R ckgabe einer Funktion definieren Sie durch den return Befehl Beinhaltet die Funktion weiteren Quellcode hinter einem return Befehl wird dieser nicht mehr ausgef hrt Der Anwender wird also nicht zu sp t in seinem Internetbrowser lesen k nnen Dennoch entspricht die Ausgabe nicht dem erhofften Ergebnis Lediglich Welt erscheint auf dem Bildschirm PHP Endlich objektorientiert 55 2 Die Sprache PHP Prozedural lt php a Hallo function Ausgabe return a Welt echo zu sp t gt lt html gt lt body gt lt php echo Ausgabe gt lt body gt lt html gt Listing 2 45 Keine erfolgreiche Ausgabe durch die Funktion Die Ursache daf r liegt darin dass die Variable a nicht innerhalb der Funktion Ausgabe
311. ergr ert werden In diesem Fall soll dadurch die Datenquelle aktu alisiert werden was wiederum eine Aktualisierung aller Darstellungen zur Folge hat Abbildung 5 45 skizziert den Fall Erstellung von gutem Quellcode Abbildung 5 45 Anwendungsfall f r ein Kompositum Nun soll diese Aktualisierung nat rlich ohne Verz gerung erfolgen sobald der Anwen der eine Darstellung ver ndert hat Zus tzlich dazu ist die Anzahl der verschiedenen Darstellungen nicht im Vorfeld bekannt und es k nnen neue noch unbekannte Visuali sierungen des Datenbestands hinzukommen Wenn Sie dies manuell realisieren wollen ist der Programmieraufwand sehr hoch Ebenfalls ist es wahrscheinlich dass Sie zun chst Probleme mit dem Update des Datenbestands bekommen mit der Geschwin digkeit der Aktualisierung und ggf sogar eine Endlosschleife erzeugen falls die Aktuali sierungen versehentlich zu einer Rekursion f hren Als fertige L sungsstrategie f r die ses Problem dient das Kompositum Ein Kompositum sorgt daf r dass bei nderung eines Objekts alle davon abh ngigen Objekte benachrichtigt werden Diese k nnen dann ihren Zustand aktualisieren Die Objekte sind also wechselseitig voneinander abh ngig jedoch ist es unbekannt wie viele Objekte ge ndert werden m ssen Die Datenquelle soll bei einer nderung die anderen Objekte benachrichtigen sodass eine lose Kopplung der Objekte untereinander entsteht Um dies umzusetzen besitzt ein Objekt der
312. ersicht ber die Aktienbest nde In diesem Fall ist genau ein Bestand vorhanden dessen Bilanz angezeigt wird Jeder Bestand kann ber den Hyper link w hlen in der PHP Session ausgew hlt werden http localhost Aktienverwaltung 004 uebersicht php Windows Internet Explorer Hog O gt e localhost nverwal x 1x S cooo e S E Pr Datei Bearbeiten Ansicht Favoriten Extras v7 Favoriten http localhost Aktienverwaltung 004 uebersicht php Depotverwaltungsprogramm Gew hlter Bestand E ON laden l speichern bersicht w hlen neu l hinzukaufen neue Dividende verkaufen E ON DEO00ENAG999 w hlen 90 St ck am 24 04 2009 gekauft vor 182 Tagen Stand vom 23 10 2009 19 57Uhr EK akt Wert gesamt incl Kosten EK akt Kurs pro Aktie Differenz pro Aktie Dividenden Ges Diff incl Einnahmen amp Kosten Zinsen Jahr Copyright by Dr Frank Dopatka Fertig Lokales Intranet far Q Abbildung 5 22 Ausgabe der Bestands bersicht Im n chsten Schritt des Szenarios sollen weitere Aktien zu dem existierenden Bestand hinzugekauft werden indem der Anwender auf die Schaltfl che hinzukaufen klickt Das Fallbeispiel der Depotverwaltung Aus Sicht der Fachlogik ist ein neuer Kaufvorgang zu erstellen der in den Bestand integ riert wird Zun chst m ssen aber die Daten f r die Erstellung des Kaufvorgangsobjekts vorliegen Diese werden wieder ber ein HT
313. ert Der Benutzer enth lt dann als HTML Antwort die Anzahl der erfolgreich ausgelesenen Aktienbest nde lt php require_once header inc php gt lt center gt lt h3 gt lt php db new mysq1DZ p_ ffnen new ParameterListe p_ ffnen gt add host localhost p_ ffnen gt add user root p_ ffnen gt add pass p_ ffnen add db boerse if db gt ffnen p_ ffnen FALSE echo FEHLER beim ffnen der Datenbank else p_lesen new ParameterListe p_lesen gt add sql SELECT FROM aktien ORDER BY ID ausgabe db gt lesen p_lesen if ausgabe FALSE db gt schliessen echo FEHLER beim Zugriff auf die Datenbank Listing 5 26 Laden der Aktienbest nde in die PHP Session Das Fallbeispiel der Depotverwaltung elsef i 0 foreach ausgabe as index gt data aktie new Aktie datalname datalisin datalurl kauf new Kauforder aktie datalanzahl date_format new DateTime datalkaufdatum d m Y datalkaufkurs datalkaufgebuehr bestand new Aktienbestand aktie kauf datalverkaufgebuehr bestand gt addDividende dataldividenden if datalverkaufkurs gt 20 bereits verkauft verkauf new Verkauforder aktie datalanzahl date_format new DateTime datalverkaufdatum d m Y datalverkaufkurs datalverkaufgebuehr bestand gt addVerkauforder verkauf _SESSION Bestand i serialize bestand itt Anzahl der Dat
314. erte Funktionalit t in kleinere Einheiten zu zerteilen und sie nacheinander mit den Mitteln der Programmiersprache PHP abzuarbeiten Wie viel Zeit werden Sie f r die Realisierung einer Artikelverwaltung ben tigen Multi pliziert mit Ihrem Stundensatz Wie viel Geld wollen Sie von Ihrem Kunden daf r ver langen F r eine Aufwandsch tzung brechen Sie in der Regel zun chst die Anforderun gen Ihres Kunden im Vorfeld in Prozeduren herunter und beginnen dann die geforderten Module aus den elementaren Prozeduren zusammenzusetzen Falls sie bis lang nur wenige oder keine Softwareprojekte durchgef hrt haben und eine Aufwand sch tzung vom potentiellen neuen Kunden gefordert wird so neigen viele Entwickler dazu den Aufwand bereits f r kleine Projekte drastisch zu untersch tzen Profitipp Sch tzen Sie als Anf nger den Aufwand Zeit und Kosten f r ein zuk nftiges Soft wareprojekt ein und multiplizieren Sie Ihre Einsch tzung mindestens mit dem Fak tor 3 Dann bestehen gute Chancen dass Sie bei dem Projekt zumindest keinen Ver lust machen Eine Vorgehensweise die bei einer Sammlung von Prozeduren beginnt und bei der Funktionalit t f r den Anwender endet wird als Bottom Ulp Strategie bezeichnet Diese Vorgehensweise wird h ufig dann eingesetzt wenn bereits eine Vielzahl von Prozeduren bei Projektbeginn fertig vorliegt weil sie aus alten Projekten wiederverwendet werden kann PHP Endlich objektorientiert 103 3 Vorgehenswe
315. erts einer gegebenen Aktiengesellschaft ein Eingabe parameter notwendig Alle drei Schaltfl chen leiten die eingegebenen Daten ber HTTP POST an die Datei fachlogik php weiter lt html gt lt head gt lt title gt lt title gt lt head gt lt body gt lt form action fachlogik php method post gt lt pre gt AG lt input name frmAG type text value BMW gt lt br gt Tag lt input name frmTag type text value 5 gt lt br gt lt input name funcAGs type submit value alle AGs ausgeben style width 11em gt lt br gt lt input name funcKurs type submit value Kurs anzeigen Listing 2 70 Das Eingabeformular PHP Endlich objektorientiert 95 2 Die Sprache PHP Prozedural style width 11em gt lt br gt lt input name funcMW type submit value MW berechnen style width 11em gt lt pre gt lt form gt lt body gt lt html gt Listing 2 70 Das Eingabeformular Forts Dadurch entsteht ein Frontend das in Abbildung 2 17 dargestellt wird ac BMW Abbildung 2 17 HTML Formular zum Auslesen der B rsendaten aus der Datenbank Die Datei fachlogik php bildet das Bindeglied zwischen der Pr sentationsschicht und der Datenzugriffsschicht In ihrem ersten Teil der in Listing 2 71 dargestellt wird werden die Eingaben aus dem ausgef llten HTML Formular entgegengenommen und in PHP Vari ablen abgelegt Hier k nnen in einer realen Anwendung auch Pr fungen der G ltigkeit von Eing
316. erzichtet Sind alle Pr fungen bestanden wird der Bestand als verkauft markiert und ein neues Bilanzobjekt angelegt Dieses Objekt bekommt den Aktienbe stand selbst sowie die Verkaufsorder zur Auswertung bergeben Die zweite Erweiterung der Aktienbestandklasse beinhaltet die R ckgabe der Bilanz in der Methode getBilanz Wenn der Bestand noch nicht verkauft wurde wird eine neue Bilanz auf Basis der aktuellen Kursdaten erstellt Statt der Verkaufsorder aus dem ersten Fall werden lediglich die Verkaufsgeb hren an den Konstruktor des Bilanzobjekts ber geben die bei einem Verkauf anfallen w rden Wenn der Bestand bereits verkauft wurde wird das schon existierende Bilanzobjekt ver wendet In beiden F llen werden die Daten der Bilanz als R ckgabe der Methode an den Aufrufer bergeben lt php class Aktienbestand Verkaufen public function addVerkauforder value if this gt isVerkauft f throw new Exception addVerkauforder Bestand ist bereits geschlossen Vereinfachung if value gt getAnzahl this gt getAnzahl throw new Exception addVerkauforder Kann nur den gesamten Bestand verkaufen this gt verkauft TRUE Bilanz der Trading Aktion gt Bilanz Objekt this bilanz new Bilanz this value public function getBilanz if this gt isVerkauft FALSE Bestand noch nicht verkauft gt Bilanz h ngt vom aktuellen Kurs ab Listing 5 10 Erweiterte Klasse des Aktienbestands
317. es Element eines Datenfeldes anwenden Die eigene Funktion addiere erh lt einen Parameter x per Referenz bergeben und addiert einen festen Wert auf diesen Parameter Im Gegensatz zu anderen Sprachen m ssen Sie bei PHP nicht mit einer Schleife ber das Datenfeld laufen um den Wert zu addieren Stattdessen k nnen Sie die PHP Funktion array_walk verwenden die ihrerseits wiederum zwei Parameter ben tigt Der erste Para meter ist das Array und der zweite der Name der Funktion als Zeichenkette lt php data Array datall 6 datal 675 datal 46 datal 235 function addiere amp x x x t11 Listing 2 48 Eine Funktion wird auf ein Array angewendet PHP Endlich objektorientiert 57 2 Die Sprache PHP Prozedural array_walk data addiere lt html gt lt body gt lt php echo var_dump data gt lt body gt lt html gt Listing 2 48 Eine Funktion wird auf ein Array angewendet Forts Das Skript arbeitet wie erwartet und addiert die Zahl 11 auf jedes Element des Datenfel des das abschlie end ausgegeben wird array 4 0 gt int 17 1 gt int 686 2 gt int 57 3 gt int 246 Der Tod des Programms die Mit dem Befehl die k nnen Sie die Bearbeitung des aktuellen PHP Skripts unverz glich beenden Dem Befehl k nnen Sie als Parameter eine Zeichenkette bergeben die zum Abschluss noch gesendet wird Der die Befehl wird meist bei schweren Fehlern verwen det bei denen eine
318. es Quellcodes haben sich auch Regeln gefunden wie man bestimmte Probleme objektorientiert l sen kann Ein Design Pattern Entwurfsmuster beschreibt eine bew hrte Schablone f r ein Entwurfsproblem und damit eine wieder verwendbare Vorlage zur Probleml sung Der Nutzen eines Design Patterns liegt in der Beschreibung einer L sung f r eine bestimmte Klasse von Entwurfsproblemen die einem Entwickler immer wieder ber den Weg laufen Die Design Patterns wurden erstmals von Erich Gamma Richard Helm Ralph Johnson und John Vlissides in ihrem Buch Design Patterns Elements of Reusa ble Object Oriented Software erw hnt Dieses Buch hat einen Standard in der Soft waretechnik geschaffen seine Autoren sind seitdem als Viererbande bzw Gang of Four bekannt Design Patterns werden heutzutage an jeder deutschen Hochschule im Rahmen der Informatikausbildung gelehrt damit die Absolventen diese Muster als Anleitung zur objektorientierten L sung von typischen Problemstellungen verwenden k nnen Die Autoren des Buches klassifizieren ihre Design Patterns nach den beiden Kriterien des Zwecks und des Anwendungsbereichs auf den sie wirken Nach dem Zweck des jeweiligen Musters unterscheiden sie drei Gruppen Die erste Gruppe der Erzeugungsmuster bezieht sich auf die Erzeugung von Objekten Ein Anwendungsfall besteht darin die Anzahl von erzeugten Objekten einer Klasse zu kont rollieren oder den konkreten Typ der erzeugten Objekte a
319. es Skripts nacheinander mit Zeilenumbruch ausgegeben lt php doc D0MDocument load beispiel xml vorkenntnisse doc gt getElementsByTagname vorkenntnis gt lt html gt lt body gt lt php echo Anzahl der Vorkenntnisse vorkenntnisse gt length lt br gt for i 0 i lt vorkenntnisse gt length i kenntnis vorkenntnisse gt item i echo kenntnis gt textContent lt br gt 2 lt body gt lt html gt Listing 4 67 Ein einfaches DOM Parsen PHP und XML Aus den Daten der eingelesenen XML Datei ergibt sich dann die folgende Ausgabe Anzahl der Vorkenntnisse 4 Grundlagen HTML Java JavaScript Visual Basic 6 Die einzelnen Methoden von DOMDocument hier aufzulisten und zu beschreiben w rde einige Seiten f llen Kein Entwickler lernt diese Methoden auswendig sondern sucht bei Bedarf die Methoden aus einer Onlinedokumentation die ihm bei der L sung seiner konkreten Problemstellung behilflich sind Die bereitgestellten Dienste von DOMDocu ment k nnen Sie beispielsweise unter http de3 php net book dom nachlesen Bitte achten Sie dabei auf die Endung dom und nicht com der Homepage Dort befinden sich auch zahlreiche Quellcodebeispiele zum Umgang mit DOM Profitipp In einer prozeduralen Programmiersprache kann ein Entwickler nach einigen Jahren Erfahrung meist die gesamte Sprache auswendig In der Objektorientierung ist dies aufgrund der Vielzahl der Klassen und Methoden f r verschie
320. esamten Prozess der objektorientierten Entwicklung Die Sprache existiert seit 1994 die derzeit aktuelle Version lautet 2 1 Die Sprache selbst wurde erfunden von Grady Booch Ivar Jacobson und James Rum baugh die bei der Firma Rational Software angestellt waren Sie haben auch das letzte schwergewichtige Modell zur Softwareentwicklung den Rational Unified Process spe zifiziert Die Weiterentwicklung und Standardisierung haben die drei Erfinder der Spra che an die OMG Object Management Group bergeben Dieses Konsortium mit heute ber 800 Mitgliedern ist international anerkannt f r die herstellerunabh ngige system bergreifende Standardisierung der Objektorientierung Die OMG hat die UML dann 1997 als Standard akzeptiert und entscheidend zu der weltweiten Verbreitung der Nota tion beigetragen Die UML definiert eine Vielzahl von Diagrammtypen Jeder Typ besitzt eine eigene Notation und stellt eine spezielle Sichtweise auf das modellierte System dar Sie k nnen einen Diagrammtyp mit einer Darstellung aus der Architektur beim Hausbau verglei chen Eine Zeichnung mit einer Seitenansicht auf ein Haus zeigt sehr gut Treppenver l ufe und die H he von Decken jedoch kann man die Raumaufteilung nicht erkennen Dies funktioniert besser mit einer Draufsicht Ein Modell eines Hauses ist gut f r Marke tingzwecke geeignet beispielsweise bei einer ffentlichen Ausschreibung Einem sol chen Modell sollten Sie aber nicht die Abmessungen f r
321. esen Error Handler den Sie in jedem Skript mit der require Anweisung einbinden k nnen ein zentrales Fehlermanagement erm g licht wird So k nnen Sie innerhalb dieses Handlers ineine Logdatei schreiben m eine Datenbankverbindung eigens f r das Fehlermanagement ffnen und den Fehler dort ablegen dem Administrator der Anwendung eine E Mail senden 4 4 PHP und XML Die Extensible Markup Language XML dient zur Beschreibung von baumf rmig ange ordneten Daten die textbasiert dargestellt werden Eine XML Datei besteht also aus schlie lich aus Textzeichen die Sie mit einem gew hnlichen Texteditor darstellen k n nen Die Idee bei XML besteht darin die Daten von ihrer Darstellung zu trennen Ziel ist es die Daten nach Wunsch als Liste Tabelle oder auch als Grafik auszugeben und f r alle Arten der Darstellung die gleiche Datenbasis im XML Format zu nutzen PHP und XML Gerade bei gro en Anwendungen wird auch h ufig gefordert einen Teil des Daten stamms zu im oder exportieren Hier hat sich das XML Format als effektives plattfor munabh ngiges Austauschprotokoll etabliert das sich auch f r den automatisierten Datenaustausch eignet Die n chste Frage die sich stellt ist die Verbindung von XML mit der objektorientierten Denkweise XML stellt eine Baumstruktur dar w hrend Objekte sich gegenseitig belie big kennen k nnen Die Antwort liegt darin dass auch in einem XML Baum Querrefe renzen zwischen einzelnen
322. eses einen Bauplans k nnen Sie beispielweise f nf konkrete H user nebenein ander bauen lassen Dies sind die Objekte die aus der Spezifikation der Klasse entstan den sind Obwohl sich die Farbe die Fenster Holz oder Kunststoff die Form der Haus t r und die Gestaltung der Inneneinrichtung bei den einzelnen Objekten unterscheiden sieht man den H usern an dass sie nach einem einzigen Plan gebaut wurden Den Effekt kann man besonders gut bei Reihenhaussiedlungen erkennen In einem dritten Beispiel sollen die Klassen f r eine Aktienverwaltung ermittelt werden Mit der Anwendung soll man sein Depot also seinen Aktienbestand als PHP Anwen dung verwalten k nnen Sowohl die Aktienverwaltung als auch das Depot sind dabei Klassen in der zuk nftigen objektorientierten Anwendung In einer Aktienverwaltung kann man unter Umst nden mehrere Depots verwalten Ein Depot beinhaltet verschie dene Aktien Jede Aktie hat einen Kurs wobei sich die Kurse an verschiedenen Handels pl tzen leicht unterscheiden k nnen Ein Aktienkurs ist also einem Handelsplatz zuge ordnet Will man Aktien kaufen oder verkaufen so geschieht dies nicht unmittelbar Sie Objektorientierte Programmierung k nnen in der Regel nicht direkt einen Kauf bzw Verkauf durchf hren Stattdessen set zen Sie eine Order ab Mit einer Verkaufsorder bieten Sie eine Menge von Aktien eines Typs zum Verkauf an einem bestimmten Handelsplatz an mit einer Kauforder signalisie ren Si
323. esign der Anwendung kann nicht mit den Iterationen mithalten Um einen Death Sprint zu vermeiden sollten bereits zu Beginn des Projekts in jede Itera tion eine Phase des Testens sowie ein Refactoring eingeplant werden um die neu entwi ckelten Funktionen sauber in das bestehende Systemdesign zu integrieren Erstellung von gutem Quellcode 5 2 4 Entwicklungsumgebungen und Tools Im letzten Kapitel dieses Buches werden Werkzeuge und Entwicklungsumgebungen vorgestellt die Ihnen bei der Entwicklung von PHP Projekten behilflich sein sollen Klassifizierung von UML Werkzeugen zur Entscheidungshilfe Noch bevor Sie Tests entwerfen Quellcode versionieren oder dokumentieren stehen die objektorientierte Analyse und das objektorientierte Design mit UML Zu diesem Zweck existiert eine Vielzahl von UML Werkzeugen die auf verschiedene Arten klassifiziert werden k nnen Die erste Entscheidung besteht darin ob Sie aus Ihren UML Diagrammen Quellcode erzeugen wollen oder nicht Einige Tools sind lediglich Zeichenprogramme mit denen Sie zu Zwecken der Diskussion und Dokumentation UML Diagramme erstellen Diese Tools sind meist leicht zu handhaben jedoch m ssen Sie einen gewissen Aufwand ein planen um UML Diagramme und Quellcode auf einer einheitlichen Version zu halten Wenn Sie sich f r ein quellcodegenerierendes Werkzeug entscheiden so k nnen Sie zumeist aus Klassendiagrammen direkt PHP Coder mpfe erstellen Einige Werkzeuge unterst tzen
324. etY m p1l gt getX y_gerade m p3 gt getX n if y_gerade p3 gt getY this gt fehler private function fehler die Aus diesen 3 Punkten kann kein Dreieck gebildet werden public function _toString rem PIC Susi J r2d S A PC SSA 3 Listing 4 43 Die Dreieckklasse Forts Die beiden neu erstellten Klassen werden wie immer getestet Dabei werden im Hauptprogramm zun chst drei Punkte mit ihren Koordinaten erzeugt Die Punkte k n nen ja auch ohne Dreiecke existieren Dann wird aus diesen drei Punkten ein Dreieck erzeugt und dessen Daten werden ausgegeben Der zweite Test erzeugt drei neue Punkte die jedoch auf einer Geraden liegen Hier sollte die Erzeugung des Dreiecks nicht erfolgreich sein lt php require_once classloader inc php gt lt html gt lt body gt lt php pl new Punkt 0 10 p2 new Punkt 5 5 p3 new Punkt 10 5 d1 new Dreieck p1 p2 p3 echo d1 lt br2 p4 new Punkt 1 1 p5 new Punkt 2 2 p6 new Punkt 3 3 d2 new Dreieck p4 p5 p6 echo d2 lt br2 22 lt body gt lt html gt Listing 4 44 Erstellung von Punkten und Dreiecken PHP Endlich objektorientiert 265 4 PHP objektorientiert Die Ausgabe des Tests erfolgt wie erwartet P1 x 0 y 10 P2 x 5 y 5 P3 x 10 y 5 Aus diesen 3 Punkten kann kein Dreieck gebildet werden 4 2 5 Interfaces und deren Implementierung Bereits in der Definition der objektorie
325. ette ist ein Attri butkandidat Um nun von den Kandidaten zu den Klassen zu gelangen werden zun chst doppelt vor kommende Kandidaten gestrichen und stets die Singularform des Substantivs verwen det Dadurch bleiben folgende Klassenkandidaten bestehen PHP Anwendung Verwaltung Student bung Raum bungsgruppe Nun werden die Substantive gestrichen die zum Beschreibungstext aber nicht zum Pro blem geh ren So muss die PHP Anwendung sicherlich nicht als eigene Klasse deklariert werden Der Name Verwaltung deutet auf eine separate Verwaltungsklasse f r die bun gen Die anderen vier Klassen bilden den Kern der Fachlogik Es wird gesagt dass jede bung aus maximal 10 bungsgruppen besteht Die Phrase besteht aus deutet auf eine Aggregation oder eine Komposition Da eine bungsgruppe genau zu einer bung geh rt und allein keinen Sinn macht ist hier eine Komposition zwischen den beiden Klassen zu erstellen Eine bung verwaltet eine Liste mit ihren Gruppen die bis zu 10 Referenzen auf Gruppenobjekte enthalten kann Zu jeder Gruppe werden Raum und Uhrzeit gespeichert Zwischen den Klassen Gruppe und Raum existiert also eine Assoziation Die Uhrzeit ist eine Eigenschaft der bungs gruppe Durch die Aussage dass jeder Raum eine Raumnummer und eine bestimmte Anzahl von Pl tzen hat werden die Eigenschaften Raumnummer und Pl tze als elemen tare Datentypen festgelegt Die Eigenschaften eines Studente
326. exteditor mit Syntax Highlighting F r komplexere Pro jekte sind jedoch komplexere Werkzeuge notwendig 1 4 Verwendete Software Der in diesem Buch verwendete PHP Interpreter wurde als Teil des XAMPP Pakets beliebiges Betriebssystem X Apache MySQL Perl und PHP in der Version 1 7 2 instal liert Zu dem Paket geh rt der Webserver Apache 2 2 12 der Datenbankserver MySQL 5 1 37 PHP in der Version 5 3 0 sowie das in PHP programmierte Tool zur Verwaltung des Datenbankservers phpMyAdmin in der Version 3 2 0 1 Als Betriebssystem wurde Windows XP Professional mit ServicePack 3 verwendet sodass ein WAMP Server Win dows Apache MySQL PHP entsteht Die UML Diagramme die insbesondere in den Abbildungen im dritten Kapitel zu sehen sind wurden mit Microsoft Visio 2003 Professional gezeichnet Auf die Anwendung der UML Schablonen von Visio wurde verzichtet die Diagramme wurden lediglich aus ele mentaren Zeichnungselementen Vierecke Linien Text usw erstellt PHP Endlich objektorientiert 11 2 Die Sprache PHP Prozedural In diesem Kapitel wird die grundlegende Syntax von PHP vorgestellt Es richtet sich auch an Programmieranf nger die bislang noch keinen Bezug zu einer Programmier sprache besitzen Dieses Kapitel zeigt die wesentlichen Merkmale jeder prozeduralen Programmiersprache auf z B Verzweigungen und Schleifen Wenn Sie diese Merkmale verstanden haben werden Sie kein Problem haben sich in eine andere prozedurale Spra
327. f gung die nicht ge ndert werden sollen Dies ist auch h ufig nicht m glich da sie von fremden Herstel lern stammen Des Weiteren wird der Adapter bei der Erstellung wiederverwendbarer Erstellung von gutem Quellcode Klassen benutzt wenn diese mit unabh ngigen oder nichtvorhersehbaren Klassen zusammenarbeiten sollen Abbildung 5 42 zeigt einen Klassenadapter der einem Dienst benutzer ber eine neue Schnittstelle den Zugriff auf einen vorhandenen Service bietet Etwas zusammenbauen mit einem Kompositum In der Objektorientierung wird ein Ganzes h ufig aus anderen Objekten Teilen zusam mengesetzt Man spricht hier von einer Aggregation oder einer Komposition Wie l st man jedoch das Problem dass ein Teil selbst wieder ein Ganzes ist Dies klingt auf den ersten Blick verwirrend und vielleicht sogar unrealistisch Betrachten Sie jedoch einmal ein Zeichenprogramm Dort k nnen Sie auf einer Zeichen fl che Dreiecke Vierecke und Kreise zeichnen Mit diesen Programmen kann man auch mehrere Elemente gruppieren um sie dann gemeinsam zu behandeln zusammen zu verschieben oder mit einer einheitlichen F llfarbe zu versehen Die Gruppe selbst ist dann eine Zeichnung in der Zeichnung Auch mehrere Gruppen k nnen wiederum gruppiert werden So ergibt sich eine Baumstruktur mit der Zeichenfl che als Wurzel den Gruppen als Knoten und den Elementen Dreiecke Vierecke und Kreise als Bl tter Das Design Pattern Kompositum setzt Objekte
328. finieren also die Methode gibLaut Ein Hund gibt aber einen anderen Laut als eine Katze obwohl beides Tiere sind Daher definieren Sie die Methode gibLaut f r einen Hund ebenso neu wie f r eine Katze Ein Terrier ist wiederum ein spezieller Hund Diese Klasse von Hunden kann sich dadurch auszeichnen dass sie anders bellt als ein gew hnlicher Hund Auch hier definieren Sie die Funktionalit t neu Wenn eine Eigenschaft wie im vorherigen Kapitel gefordert als private markiert ist kann es von einem Objekt der Unterklasse nicht zugegriffen werden Damit ein Objekt der Unterklasse Zugriff erhalten kann muss es wie jedes fremde Objekt auch die entspre chende Get bzw Set Methode ausf hren Objektorientierte Programmierung I TON ist ein ist W Person O ist enf AN 2 N Tu Kunde R Bunua s le zads Q amp gt Instanz i D Lieferant Mechaniker v 2 s Q 4 Instanz 7 gt Verk ufer a Frau Schulz Inhaber jil Lagerist Herr Meier Abbildung 3 17 Vererbungshierarchie von einer Person zu Kunden und Verk ufern In Abbildung 3 17 kann man beispielsweise spezifizieren dass jede Person einen Namen hat Wenn ein anderes Objekt nach dem Vornamen von Herrn Meier fragt muss dieser wiederum die Methode getName vom Verk ufer aufrufen falls diese Methode ber schrieben wurde So gelangt man irgendwann zur Methode getName der Person die dann wiederum die Zeichenkette ausliest und ber die Kette der Metho
329. fragen Funktion Bedeutung count arr oder gibt die Anzahl der Elemente im Datenfeld zur ck size_of arr reset arr setzt den internen Zeiger im Datenfeld auf das erste Element end arr setzt den internen Zeiger im Datenfeld auf das letzte Element current arr oder gibt den Inhalt des Elements zur ck auf dem der Zeiger steht pos arr key arr gibt den Index des Elements zur ck auf dem der Zeiger steht next arr setzt den internen Zeiger im Datenfeld um 1 nach vorne prev arr setzt den internen Zeiger im Datenfeld um 1 zur ck array_walk arr func wendet eine selbst definierte Funktion auf jedes Element des Datenfelds an Tabelle 2 10 Zugriffsfunktionen auf ein Datenfeld Interessant ist auch die Funktion array_walk die eine eigene Funktion auf jedes Element im Feld anwendet Damit k nnen Sie eine Schleifenstruktur einsparen und erzeugen bersichtlichen Quellcode In Listing 2 21 wird der Zeiger auf ein Datenfeld kunden zun chst auf das erste Element mit der reset Funktion gesetzt Dieses Element wird dann ber die key und current Funk tion ausgegeben Im Anschluss daran wird der Zeiger ber die next Funktion weiter mit erneuter Ausgabe bewegt lt html gt lt body gt lt php kunden array Frank Uli Max reset kunden echo Position key kunden lt br gt echo Wert current kunden lt br gt next kunden echo Position key kunden lt br gt echo Wert cu
330. ft auszulesen verwendet der Verwalter des Objekts eine ent sprechende Get Methode die den Wert der Eigenschaft zur ckliefert Wenn eine Eigen schaft von au en nicht ge ndert werden kann existiert keine Set Methode Ist eine interne Eigenschaft nicht auslesbar so existiert keine Get Methode Andere Methoden wie ndernDaten der Klasse Artikel k nnen komplexere nderungen der internen Eigen schaften vornehmen Generell gelten folgende Regeln 1 Eigenschaften sind private also nicht von au en zugreifbar zu deklarieren Sie wer den vom Objekt selbst verwaltet und m ssen gesch tzt werden 2 Methoden sind die Dienste des Objekts und sind daher als public zu deklarieren Aus nahmen bilden nur Hilfsfunktionen zur internen Berechnung die nach au en nicht sichtbar sein sollen Als Beispiel kann die Farbe eines Stifts herhalten die nachtr glich ge ndert wird indem beispielsweise ein Kugelschreiber eine neue Mine erh lt Ein dummer Ansatz besteht in der ffentlichen Definition einer Eigenschaft Farbe als Zeichenkette Denn so k nnte man dem Stift mit dem Aufruf einStift farbe Frank eine sinnlose Farbe zuweisen Damit der Stift diese Zuweisung pr fen kann muss die Farbe private deklariert sein und der Stift eine Methode setFarbe besitzen die eine Zeichenkette als Parameter bekommt und als public deklariert ist Der Aufruf w rde dann mit einStift gt setFarbe Blau erfolgen Da eine Farbe selbst in Wirklichkeit keine Zeich
331. ftigt sich wiederum mit dem Beispiel der Seminarverwaltung In Abbildung 3 46 wurde dazu bereits ein Aktivit tsdiagramm vorgestellt ber das Web Frontend gibt der Kunde mit Nachnamen Miiller in diesem Szenario den Suchbegriff PHP in der Suchmaschine des Seminaranbieters ein Die Seminarverwaltung im Backend gibt dabei alle PHP Seminare mit den Seminarnummern und deren Termine zur ck Herr M ller entscheidet sich f r das Seminar S1 zum Termin T2 und m chte es jetzt buchen Die Session des Web Frontends merkt sich diese Auswahl Im n chsten Schritt gibt Herr M ller seine pers nlichen Daten ein die ebenfalls in der Session hinterlegt werden M ller Kunde Web Frontend Seminarverwaltung PHP Seminar T2 Termin 51 523 543 w hle S1 T2 Session gew hlt S1 T2 setDaten M ller Uli Session gew hlt S1 T2 pers Daten M ller Uli AnzTN MaxTN 1 gt buche check gt S1 T2 M ller Uli AnzTN MaxTN TN AnzTN M ller Uli Jl Abbildung 3 81 Seminarbuchung als Aktivit tsdiagramm Abschlie end setzt der Kunde die Buchungsanfrage verbindlich ab Alle Daten der Ses sion werden an die Seminarverwaltung weitergeleitet Dort wird nochmals gepr ft ob zu diesem Termin noch ein freier Platz existiert und die Buchung ber das Seminarobjekt zu dem zugeordneten Termin durchgef hrt PHP
332. ftware orientiert sich also mehr an den menschlichen Abl ufen als an einer Maschinensprache Aus technischer Sicht werden die Daten der Objekte dennoch wieder separat und getrennt von ihrer Funktionalit t in den Datenbanken verwaltet Langfristig versucht man die relationalen Datenbanken durch objektorientierte Datenbanken zu ersetzen in 8 entwickler press Zielgruppe dieses Buchs denen man direkt die Objekte verwaltet Heutzutage programmiert man ein Daten zugriffsobjekt das eine Verbindung zur Datenbank repr sentiert Das Datenzugriffs objekt fragt die Objekte an welche gerade von Interesse sind Das Datenzugriffsobjekt sucht sich die passenden Daten aus der relationalen Datenbank baut die Objekte aus die sen Daten zusammen und gibt diese Objekte dann als Ergebnis der Anfrage zur ck Die Anwendung arbeitet dann nur mit diesen Objekten indem die in den Objekten integ rierte Funktionalit t verwendet wird ber das Zugriffsobjekt werden die Daten auch wieder gespeichert Es stellt sich die Frage wann die Objektorientierung der prozeduralen Programmierung vorzuziehen ist Man kann sagen dass bei kleinen Projekten bis zu 10 000 Codezeilen bzw bis zu zwei Personenjahren keine besondere formale Planung notwendig ist Bei diesen Projekten kann eine einzelne Person den berblick wahren und die vollst ndige Realisierung selbst vornehmen Das ist typisch f r freiberufliche PHP Einzelentwickler die in eigener Regie kleine L sungen
333. ftwareentwicklung von der Modellierung bis zur Entwicklung sind Bestandteil jeder Iteration Auf diese Weise wird die Software iterativ und inkrementell entwickelt Iterativ bedeutet die Zerlegung der Entwicklung in mehrere gleichartige Schritte Jede Iteration erzeugt ein funktionsf higes Teilergebnis Inkrementell bedeutet dass die Gesamtfunktionalit t des Systems mit jeder Iteration w chst Dadurch wird die Software schnell an den Kun den ausgeliefert der unmittelbar Feedback erzeugt Im Folgenden werden einige dieser Methoden und Techniken vorgestellt die sich durch alle Phasen der Softwareentwicklung ziehen Sie k nnen diese Techniken unabh ngig voneinander einsetzen und ausprobieren mit dem Ziel die W nsche Ihres Kunden bes ser zu erf llen Die Erstellung von Story Cards Das erste Hilfsmittel um sich den W nschen des Kunden zu n hern ist das gemeinsame Erstellen von Story Cards die jeweils eine User Story enthalten Dies geschieht zumeist in Workshops Eine User Story ist eine in Alltagssprache textuell formulierte Softwarean forderung Sie ist bewusst kurz gehalten und umfasst nicht mehr als zwei S tze Die Story Card ist die wichtigste Methode um ein agiles Projekt zu steuern denn aus den Story Cards entwickeln sich in kooperativer Zusammenarbeit mit dem Kunden die Anwendungsf lle die die Funktionalit t der zu erstellenden Anwendung in UML abbil den Eine Story Card besteht in der Regel aus folgenden Feldern m D
334. g dass jedes Objekt ja irgendwie jedes andere kennen muss Das Resultat sind sehr kommunikative Objekte die sich alle gegenseitig kennen Es k n nen keine Komponenten aus der Anwendung extrahiert und wiederverwendet werden Alles geh rt irgendwie zusammen und ist von allem anderen abh ngig Die verwobene Struktur wird als au erirdische Spinne bezeichnet der man am Besten mit einem konse quenten modularen Design unter Verwendung von Design Patterns begegnet Erstellung von gutem Quellcode Eine Systemarchitektur mit Gottklasse Eine hnliche Problemstellung ergibt sich wenn Sie davon berzeugt sind eine zentrale Managerklasse zu ben tigen Ein Objekt dieser Klasse weitet sich schnell zu einem Gott objekt aus das alle Aufgaben bernimmt alle anderen Objekte kennt und verwaltet Andere Klassen existieren oft nicht oder haben lediglich die Funktion von Datencontai nern f r die Gottklasse Eine Aufteilung nach Verantwortlichkeiten durch Bildung von Unterklassen Datenkap selung und die Verwendung von Design Patterns sind dabei behilflich die Gottklasse zu verhindern Eine Systemarchitektur als innere Plattform Um auf zuk nftige Erweiterungen vorbereitet zu sein versuchen viele Analytiker und auch Entwickler alle m glichen zuk nftigen Erweiterungen im Vorfeld zu ber cksichti gen Dadurch entsteht eine Anwendung mit derartig weitreichenden Konfigurations M g lichkeiten dass die eigentliche Funktionalit t im Quellco
335. g 2 38 zeigt Die Datenstruktur der Kundenliste wurde aus Listing 2 18 entnommen lt html gt lt body gt lt php kunden array Kl gt array VN gt Frank N gt Dopatka K2 gt array VN gt U1i N gt M ller K3 gt array VN gt Max N gt Mustermann JE foreach kunden as kundennr gt kunde echo Kunden Nr kundennr lt br gt foreach kunde as index gt wert echo index wert lt br gt gt lt body gt lt htm1 gt Listing 2 38 Ausgabe eines zweidimensionalen Feldes mit geschachtelter foreach Schleife In der u eren foreach Schleife wird die Kundennummer und der Kunde voneinander getrennt in den Variablen kunndennr und kunde Bei kunde handelt es sich wiederum um ein Datenfeld das in der inneren foreach Schleife abgearbeitet wird Dort werden der Vorname und der Name getrennt und ausgegeben sodass folgende Gesamtausgabe im Internetbrowser des Clients entsteht Kunden Nr K1 VN Frank N Dopatka Kunden Nr K2 VN Uli N M ller 50 entwickler press Grundlegende Syntax Kunden Nr K3 VN Max N Mustermann Als bung k nnen Sie die das Datenfeld kunden um einige Elemente erweitern und die Ausgabe in eine HTML Tabelle wie in Listing 2 34 umstrukturieren while Schleife Als n chsten Schleifentyp wird die kopfgesteuerte while Schleife vorgestellt Hinter dem Schl sselwort while wird lediglich eine Bedingung in runden Klammern a
336. g robust zu halten und die Gefahr des gehackten Quellcodes zu verringern m ssen Sie regelm ig Refactorings durch f hren Damit ist eine Strukturverbesserung des Quellcodes unter Beibehaltung des Ver haltens der Anwendung gemeint Ein Refactoring hat das Ziel die Lesbarkeit Verst nd lichkeit Wartbarkeit und damit auch die Erweiterbarkeit der gesamten Anwendung zu verbessern Wenn Sie also eine evolution re Entwicklung Ihrer PHP Anwendung pla nen sollten Sie sowohl in der Zeit als auch in der Kostenplanung regelm ige Refacto rings ber cksichtigen 3 2 Objektorientierte Programmierung Mit der Verbreitung der Programmiersprache Java in den letzten 10 Jahren hat sich das Pro grammierparadigma der Objektorientierung verbreitet Als passende Beschreibungsspra che die die Ideen der Objektorientierung beinhaltet hat sich nahezu zeitgleich die Unified Modeling Language UML etabliert Java hat sich insbesondere serverseitig mit dem Kon zept der Enterprise Java Beans EJB in der aktuellen dritten Version sowie der Skriptspra che JSP Java Server Pages und Servlets durchgesetzt Dem hat Microsoft das NEI Frame work mit den Sprachen C VisualBasic NET und ASP NET Active Server Pages ebenfalls ausschlie lich mit objektorientierten Konzepten gegen bergestellt JSP im Java und ASP im Microsoft Umfeld kann man als konkurrierende L sung zu PHP Anwendungen anse hen W hrend die Objektorientierung in PHP4 nur rudiment r unte
337. g vorgestellten Vorgehensmodelle teilen diesen Prozess in eine Anforderungs erhebung eine fachliche Analyse der Anforderungen ein technisches formales Design der Anwendung mit anschlie ender Implementierung Der Rational Unified Process RUP definiert die Gesch ftsproze analyse GPA dessen Modellierung GPM die objektorientierte fachliche Analyse OOA das technische Design OOD und die Imple mentierung OOP in zeitlich stark verzahnte Phasen Dort wird bereits gezeigt dass die Implementierung gerade in gro en Projekten nur ca 20 des Gesamtaufwands aus macht w hrend die anderen Phasen incl der Managementaufgaben mit ca 80 ins Gewicht fallen In diesem Kapitel werden nun neue Methoden vorgestellt die von der Gesch ftsprozess analyse bis zum Ende der objektorientierten Analyse behilflich sein sollen Hier werden insbesondere die folgenden Schritte durchgef hrt 1 Sprechen Sie mit dem Kunden ber die Wirklichkeit um sich die Sprache seiner Fachdom ne anzueignen 2 Stellen Sie fest welche Arbeitsabl ufe existieren und welche Ausschnitte der Arbeits abl ufe in die zu erstellende Anwendung abgebildet werden sollen GPA GPM 3 Modellieren Sie fachlich welche Objekte daran beteiligt sind und abstrahieren Sie daraus die Klassen OOA 4 Stellen Sie das fachliche Modell dem Kunden in seiner Sprache vor und verifizieren Sie die Korrektheit des Modells Mit den Jahren hat sich herausgestellt dass eine Einteilu
338. g zum Kunden Dies k nnte nat rlich auch ber die Senden und Empfangssymbole aus Abbildung 3 37 erfolgen PHP Endlich objektorientiert 179 3 Vorgehensweise bei der Softwareentwicklung Kunde 1 Seminarverwaltung Suchbegriff PHP eingeben Seminar ausw hlen g pers Daten eingeben Buchung abschicken Liste der Seminare zur ckgeben Seminar status buchend AnzTN MaxTN 1 Daten pr fen und ggf abgleichen 1 Seminar status ausgebucht AnzTN MaxTN Best tigung der Buchung senden Abbildung 3 46 Erfolgreiches Buchen eines Seminars auf Meeresspiegelebene Diesem positiven Beispiel wird in Abbildung 3 47 ein Fehlschlag gegen bergestellt In diesem Szenario hat sich der Kunde den Link auf einen Seminartermin in den Book marks seines Internetbrowsers gemerkt und ruft diesen Link nun ab Er gibt auch hier seine pers nlichen Daten ein und erzeugt ein Buchungsobjekt das an den Server gesendet wird Der Seminartermin ist jedoch bereits ausgebucht der Kunde hat sich also zu sp t angemeldet In diesem Fall ist vorgesehen dass der Kunde eine Mitteilung erh lt dass dieser Termin bereits ausgebucht ist Zus tzlich erh lt er eine Liste mit anderen m glichen Terminen sowie eine Kontaktanschrift des Seminaranbieters Das Ziel des Gesch ftsprozesses besteht darin den buchungswilligen potenziellen Kunden nicht zu verlieren Objektorientierte Progra
339. ge ffneten XML Element platzieren Dies ist beispielsweise bei dem Namen des Seminars der Fall PHP Endlich objektorientiert 303 4 PHP objektorientiert Wenn Sie mehrere Elemente bef llen k nnen Sie die Methoden createElement und appendChild in einer Schleife anwenden um beispielsweise zuvor aus einer Datenbank ausgelesene Werte einem XML Dokument hinzuzuf gen Die Methode saveXML speichert das DOM Objekt nicht in einer Datei sondern erzeugt einen Datenstrom Im HTML Teil von Listing 4 68 wird dieser Datenstrom in eine neue Datei umgeleitet sodass letztlich eine XML Datei im Dateisystem des Webservers ent steht lt php dom new DOMDocument 1 0 iso 8859 1 dom gt formatQutput TRUE Wurzel erzeugen seminare dom gt createElement seminare dom gt appendChild seminare Seminar erzeugen php dom gt createElement seminar php gt setAttribute id S1120 Name des Seminars und des Dozenten festlegen name dom gt createElement name name gt appendChild dom gt createTextNode PHP5 objektorientiert php gt appendChild name doz dom gt createElement dozent doz gt appendChild dom gt createTextNode Dr Frank Dopatka php gt appendChild doz Teilnehmer Liste anlegen tn_liste dom gt createElement teilnehmerliste Teilnehmer Daten bef llen php gt appendChild tn_liste XML Dokument zusammensetzen seminare gt appendChild php dom gt appe
340. geben in diesem Konzept also keine Fehlermeldungen wie FALSE oder bestimmte Error Codes zur ck Stattdessen k nnen diese Methoden auf einem neuen unabh ngigen Fehlerkanal ihre Fehlermeldungen zur ckgeben In der objektorientierten Denkweise sind auch Fehler Objekte die Eigenschaften und Methoden besitzen Da Objekte von der Schablone einer Klasse erzeugt werden k nnen Sie nun eigene Fehlerklassen schreiben und ein Fehlermanagement ihrer komplexen Anwendung einf hren Listing 4 54 skizziert eine erste Fehlerklasse die von der in PHP vordefinierten Klasse Exception vererbt wird Damit ist die eigene Klasse eine Exception die geworfen und behandelt werden kann Unsere Fehlerklasse besteht aus einer Fehlernummer m einer Fehlermeldung m einer Eigenschaft in der man den Namen der Methode speichern kann in der der Fehler aufgetreten ist m einem Wahrheitswert der signalisiert ob ein Fehler kritisch ist oder nicht Im Konstruktor werden die vier Eigenschaften wie blich gesetzt Beim Erzeugen eines kritischen Fehlerobjekts k nnte man beispielsweise automatisch eine E Mail an den Administrator absetzen Kap 2 2 oder ein Logging in eine Datenbank und oder in eine Textdatei vornehmen Zus tzlich besitzt die eigene Fehlerklasse Get Methoden um die gesetzten Eigenschaf ten auszulesen sowie eine toString Methode damit der Fehler unmittelbar vorforma tiert ausgegeben werden kann lt php class Fehler extends Exceptiont priva
341. gef hrt m Der letzte Punkt einer textuellen Schablone beinhaltet zumeist Alternativen zum k r zesten Weg einen Anwendungsfall zu durchqueren Wenn eine Alternative an eine Bedingung gekoppelt ist sollten Sie diese unbedingt angeben PHP Endlich objektorientiert 169 3 Vorgehensweise bei der Softwareentwicklung Profitipp Textuelle Anwendungsfallbeschreibungen bieten einen flie enden bergang zwi schen grafischen Anwendungsf llen und Aktivit tsdiagrammen die sich vollst n dig auf Abl ufe im Gesch ftsprozess konzentrieren Abbildung 3 33 zeigt einen exemplarischen textuellen Anwendungsfall der die Anmel dung an einem Seminar beschreibt An den m glichen Fehlschl gen erkennen Sie sofort Fehlerklassen die bei der Ausf hrung des Anwendungsfalls zum Einsatz kommen k nnten Diese Klassen werden im vierten Kapitel dieses Buches behandelt In der Ana lyse m ssen Sie sich mit Ihrem Auftraggeber darauf verst ndigen was beim Auftreten dieser F lle geschehen soll Bei der Beschreibung Erweiterung und den Alternativen erkennen Sie erstmalig eine Abfolge in der UML Bei den Alternativen werden stets die Bedingungen angegeben bei denen die alternative Ausf hrung eintritt Seminar buchen Ziel Anmeldebest tigung an den Kunden geschickt Vorbedingung Nachbedingung Erfolg Kunde ist angemeldet Nachbedingung Fehlschlag Mitteilung an Kunden das Veranstaltung ausgebucht ist ausf llt oder nicht existiert Akteur
342. gen Exportieren Importieren a a gQ Operationen flleeren L schen e Datenbank _ IE MySQL lieferte ein leeres Resultat zur ck d h null Zeilen die Abfrage dauerte 0 0002 sek boerse 1 M secr FROM aktien bessert LIMIT 0 30 Messen Bearbeiten SQL erkl ren PHP Code erzeugen Aktualisieren B aktien Feld Typ Kollation Attribute Null Standard Extra ID int 11 Nein Kein Ss name varchar 100 latini_swedish_ci Nein Kein S isin varchar 12 latin _swedish_ci Nein Kein S url varchar 100 latin1_swedish_ci Nein Kein S anzahl smallint 6 Nein Kein D kaufkurs decimal 10 2 Nein Kein F kaufdatum date Nein Kein kaufgebuehr decimal 10 2 Nein Kein verkaufkurs decimal 10 2 Nein Kein verkaufdatum date Nein Kein S verkaufgebuehr decimal 10 2 Nein Kein S dividenden decimal 10 2 Nein Kein pm Kl gt Lokales Intranet far Rio Abbildung 5 32 MySQL Datenbanktabelle f r Aktienbest nde Der Zugriff auf die Datenbank soll wiederum mit den Mitteln der Objektorientierung erfolgen Dazu wurde bereits in Kapitel 4 2 5 eine Interfacedefinition vorgeschlagen und begr ndet mit der ein Zugriff auf eine beliebige Datenbank erfolgen kann Diese Defini tion wird in Listing 5 24 nochmals dargestellt lt php interface iDZ public function ffnen param public function schliessen public function lesen param public function schreiben param gt Listing 5 24 Interface f r den Datenbankzug
343. gen des Kunden umzusetzen Sie modellieren die L sung hier theoretisch und erw hnen auch dass Sie PHP in einer WAMP Architektur verwenden m chten Dazu erkl ren Sie wie Sie die wichtigsten beschriebenen gesch ftlichen Abl ufe abbilden wollen Diese Beschreibun gen enden in einem Pflichtenheft Es umfasst nach DIN 69905 die vom Auftragnehmer erarbeiteten Realisierungsvorgaben aufgrund der Umsetzung des vom Auftraggeber vorgegebenen Lastenhefts Generell endet jede Phase in einem Meilenstein der mit einem Ergebnis sei es ein Dokument oder eine Anwendung verbunden ist Sie legen das Pflichtenheft idealerweise zusammen mit Ihrer Kostenkalkulation und einem m glichen Abgabetermin Ihrem Kunden vor und Kunde gibt Ihnen daraufhin den Auftrag In der Phase der Implementierung ziehen Sie sich vom Kunden zur ck in Ihr B ro und programmieren die L sung Das schaffen Sie idealerweise in der vorgeschriebenen Zeit denn Sie haben sich ja in der Entwurfsphase bereits die notwendigen Gedanken gemacht wie Sie zur L sung kommen PHP Endlich objektorientiert 107 3 Vorgehensweise bei der Softwareentwicklung Wenn Sie mit der Implementierung fertig sind testen Sie Ihre Software zun chst selbst und dann zusammen mit dem Kunden Dieser macht abschlie end eine Abnahme und Ihre Anwendung geht in Betrieb Die Abnahme kann beispielsweise mit einem Projekt abschlussbericht nach DIN 69901 enden der die zusammenfassende abschlie ende Da
344. gene Namen zur Ausgabe des Objekts erfinden w rde g be es keinen Standard und man m sste stets in der Dokumentation nachsehen Ein Standard besteht darin zu Debug Zwecken den aktuellen Stand aller Eigenschaften eines Objekts auszugeben So ergibt die Ausgabe var_dump a des zuvor definierten Bruchs a new Bruch 1 2 die folgende Ausgabe object Bruch 1 2 z private gt int 1 n private gt int 2 F r einen Programmierer sind diese Daten sehr hilfreich der Anwender w rde von einer solchen Ausgabe jedoch eher abgeschreckt Was geschieht eigentlich wenn Sie ein fach das Objekt mittels echo a im PHP Code ausgeben Eine Zahl k nnen Sie ja auch auf diese Art und Weise ausgeben Wenn Sie eine solche Ausgabe bei einem Objekt versu chen liefert PHP seit der Version 5 2 jedoch die folgende Ausgabe Catchable fatal error Object of class Bruch could not be converted to string in C EigeneDateien HTTP klassenlc bruchrechnen2 php on line 7 PHP Endlich objektorientiert 225 4 PHP objektorientiert Damit Sie ein Objekt in eine Zeichenkette konvertieren k nnen m ssen Sie eine weitere besondere PHP Methode in Ihrer Klasse implementieren Die urspr ngliche Methode ausgeben wird umbenannt in __toString und sieht nun folgenderma en aus public function _toString return this gt getZ hler this gt getNenner Listing 4 14 Implementierte toString Methode der Bruchklasse Nach der Impl
345. gene und gesendete Nachricht Wenn Sie bereits Objekte aus dem Gesch ftsprozess erkennen k nnen Sie diese im Akti vit tsdiagramm auch direkt benennen Dies ist in Abbildung 3 38 dargestellt Achten Sie darauf dass das Viereck hier nicht abgerundet ist Die eckigen Klammern in diesem Vier eck stellen keine Bedingung dar sondern einen Zustand in den das Objekt zu diesem Zeitpunkt versetzt wird Dieser Zustand spielt wieder im Zustandsdiagramm im vor letzten Teil dieses Kapitels eine Rolle So kann das Objekt Bestellung beispielsweise in die Zust nde in Bearbeitung ausgeliefert bezahlt und storniert versetzt werden oder das Objekt Seminar in die Zust nde existiert buchend laufend abgesagt und durchgef hrt Bereits im Aktivit tsdiagramm sollten Sie sich wenn Sie Objekte entdecken ber m gliche Zust nde erste Gedanken machen Objekt Zustand Abbildung 3 38 Ein Objekt wird in einen Zustand versetzt Gegen ber den Programmablaufpl nen haben die Aktivit tsdiagramme eine weitere Erweiterung erhalten Mit der in Abbildung 3 39 abgebildeten Syntax k nnen Sie paral lele Abl ufe darstellen Aus Sicht des Gesch ftsprozesses Wolken bis Meeresspiegelser spektive sind dies parallel ablaufende Vorg nge im Unternehmen Beispiel Wenn beispielsweise eine Anfrage f r ein Angebot eingeht pr ft der Einkauf die Preise f r das Material w hrend der Vorstand den ersten Kontakt zum potenziellen Kunden aufnimmt P
346. gestellt Die Namen der Attribute deren Datenty pen sowie die anwendbaren Methoden gelten also f r jeden Stift und sind Teil der Beschreibung des Bauplans also der Klasse Die Belegung der Eigenschaften also deren konkrete Wertauspr gung geh rt hingegen zu jedem Objekt Die Summe der gesetzten Werte bildet den inneren Zustand des existierenden Objekts bzw Exemplars einer Klasse PHP Endlich objektorientiert 135 3 Vorgehensweise bei der Softwareentwicklung einZweiterStift Stift einStift Farbe schwarz Farbe Farbe blau F llstand 30 F llstand F llstand 90 Zustand zu Zustand Zustand offen Abbildung 3 15 Zwei Stiftobjekte und deren Klassifizierung F r das Beispiel des Autohauses bedeutet dies dass Sie die Funktionen der 8 Hauptklas sen ermitteln m ssen So k nnen Sie beispielsweise einen Artikel anlegen ndern aus dem Bestand entfernen nach einem Artikel suchen seine Daten ausgeben seinen Ein kaufspreis neu setzen usw Auch eine Person k nnen Sie im System anlegen ihre Daten aktualisieren und ausgeben nach ihr suchen oder sie l schen Im Beispiel der Aktienverwaltung k nnen Sie beispielsweise eine Kauforder platzieren mit oder ohne Limit oder den Status bzw den Zustand der Order einsehen wie ausge f hrt teilweise ausgef hrt in Bearbeitung abgelaufen oder storniert Au erdem k nnen Sie eine noch nicht vollst ndig ausgef hrte Order noch ndern sie stornieren oder sich ein fach die
347. gibt eine Liste der ffentlich sichtbaren Eigenschaften eines Objekts als Datenfeld zur ck Tabelle 4 1 Informationen ber Objekte zur Laufzeit In Listing 4 22 werden die Metainformationen auf der Rechnungsklasse die in Listing 4 19 beschrieben wurde getestet Dabei wird zuerst eine Rechnung angelegt und dann werden die Informationen zu dieser Rechnung abgefragt lt php require_once classloader inc php gt lt html gt lt body gt lt php r new Rechnung 100 0 echo lt br get_class lt br gt 2 echo var_dump get_class r1 echo lt br gt get_parent_class lt br gt 2 Listing 4 22 Testen der Metainformationen eines Objekts PHP Endlich objektorientiert 233 4 PHP objektorientiert echo var_dump get_parent_class r1 echo lt br gt method_exists lt br gt 2 echo var_dump method_exists r1 bla echo lt br gt is_subclass_of lt br gt 2 echo var_dump is_subelass_of rl Lager echo lt br gt get_object_vars lt br gt 2 echo var_dump get_object_vars r1 gt lt body gt lt html gt Listing 4 22 Testen der Metainformationen eines Objekts Forts Die Ausgabe der getesteten Methoden lautet wie erwartet get_class string 8 Rechnung get_parent_class bool false method_exists bool false is_subclass_of bool false get_object_vars array 0 Zus tzlich dazu existieren noch einige Methoden die Informationen zu einer Klasse selbst zur ckgeben Die
348. glichkeit der Pr sen tationsschicht besteht darin nur genau eine dieser Formen zuzulassen Ob eine Benutzerschnittstelle gelungen ist oder nicht wird im Wasserfallmodell in der Testphase und beim V Modell beim Abnahmetest festgestellt In der Realit t ist dies zu sp t da das Projekt bereits viel zu weit fortgeschritten und der Zeitdruck zu gro ist um nderungen vorzunehmen Das Resultat besteht in einer mangelnden Akzeptanz der Anwender Das Spiralmodell erw hnt bereits den fr hen Entwurf von Prototypen die PHP Endlich objektorientiert 117 3 Vorgehensweise bei der Softwareentwicklung sinnvollerweise auch den Endanwendern zur Verf gung gestellt werden sollten Ein fr her GUI Prototyp als Diskussionsgrundlage kann hier bereits in einer fr hen Projekt phase Designentscheidungen hervorrufen die die Akzeptanz f rdern Die Arten der Prototypen werden im folgenden Kapitel vorgestellt In Kapitel 3 2 werden im Kontext der Objektorientierung agile Vorgehensweisen skizziert die die Kommuni kation zu allen Projektbeteiligten st rker fokussieren mit dem Ziel einer Erh hung der Akzeptanz der zuk nftigen Anwendung Arten des Prototypings Bei der Erstellung einer Anwendung ist es selbstverst ndlich geworden dem Auftragge ber bereits vor der Abgabe eine nicht vollst ndig fertige Vorversion zu pr sentieren Diese wird Prototyp genannt Man hat aus den b sen berraschungen bei der Wasser fall Vorgehensweise gelernt be
349. grammierung mit PHP Das dritte Kapitel steigt in die objektorientierte Denkweise ein die zun chst unabh ngig von PHP ist Die Objektorientierung besitzt eine eigene Sprache deren Begriffe und Vokabeln in diesem Kapitel anwendungsbezogen beschrieben werden Dabei erlangen Sie einen Einstieg in die weit verbreitete UML Notation die Sie und alle Projektbeteilig ten von der Idee bis zur Umsetzung begleiten wird Es wird dargestellt wie man mithilfe der UML von einer gew nschten Funktionalit t eines Kunden ber eine Gesch ftspro ze analyse eine fachliche Modellierung im Rahmen der objektorientierten Analyse zu einem objektorientierten Design gelangt Das objektorientierte Design repr sentiert die technische Modellierung die sp ter unter Verwendung von PHP umgesetzt werden soll In Verbindung mit der Objektorientierung sind die Begriffe der testgetriebenen Entwicklung Test driven Development TDD und der featuregetriebenen Entwicklung Feature driven Development FDD entstanden 10 entwickler press Verwendete Software die zum Ende des Kapitels vorgestellt werden Das dritte Kapitel schlie t mit der Vorstel lung bekannter Design Patterns die bew hrte Schablonen in der objektorientierten Pro grammierung darstellen Im vierten Kapitel wird nun gezeigt wie man die vorgestellten objektorientierten Kon zepte mit PHP 5 umsetzen kann Dabei wird jeder Begriff in UML dargestellt und der Realisierung in PHP gegen bergestellt
350. gt Aus dem Text des Beispiels k nnen die folgenden Objekte identifiziert werden m Herr Meier Autohaus EuroCar Frau Schulz Kombi Y3 m Bus i2000 Hybridantrieb Ausstattung B ro von Herrn Meier m Kaufvertrag zwischen Herrn Meier und Frau Schulz Dabei handelt es sich ausschlie lich um materielle Objekte Ob Sie alle Objekte in Ihrer Anwendung abbilden oder nicht wird sp ter zusammen mit dem Kunden entschieden Dann ist die Frage zu stellen welchen Beitrag Ihre Software leisten soll Meist schwieri ger sind f r Anf nger Objekte zu identifizieren die man nicht greifen kann Solche Objekte sind in dem Beispiel m Verkaufsgespr ch zwischen Herrn Meier und Frau Schulz m Kaufinteresse von Frau Schulz Welchen Sinn macht es ein Verkaufsgespr ch und ein Kaufinteresse in einer Software abzubilden F r eine Gesch ftsleitung k nnen solche Daten sehr bedeutend sein bei spielsweise um das Kaufverhalten potenzieller Kunden oder Interessen und Trends zu analysieren Falls es nicht zum Kauf kommt stellt sich die Frage was der Verk ufer beim n chsten Mal besser machen kann Vielleicht ist auch die Produktpalette zu verbessern wenn der Trend hin zu sparsamen Familienwagen geht Solche Analysen will der Inha ber des Autohauses in diesem Fall wahrscheinlich durchf hren In einem n chsten Gespr ch sollten Sie ihn also nach dem Zweck der zu erstellenden Anwendung fragen Objektorientierte Programmierung Nachdem
351. gt kaufDatumMW anz2 value gt getAnzahl ep2 value gt getEinzelpreis d2 value gt getDatum g anz2 anzl anz2 this gt kaufPreisMW epl ep1 g anzTage strtotime d2 strtotime d1 86409 Dx date_add new DateTime d1 new Datelnterval P round g anzTage D this gt kaufDatumMW Dx gt format d m Y this gt aktBestand value gt getAnzahl this gt kauf eb hrent value gt getGeb hr Listing 5 8 Implementierung des Aktienbestands ohne Verkauf und ohne Bilanz Forts Im n chsten Schritt werden die Bilanzierung eines Aktienbestands und der Verkauf des gesamten Bestands implementiert Eine Bilanz kann auch erstellt werden wenn der Bestand noch nicht verkauft wurde In diesem Fall sollen die Gewinne bzw Verluste nach dem aktuellen Kurs der Aktie berechnet werden Dieser Kurs soll von einer beste henden B rsenhomepage ermittelt werden Wenn dann der Bestand verkauft wird gibt es ein Verkaufsdatum einen Kurs zu dem verkauft wurde sowie ggf angefallene Verkaufsgeb hren Die Bilanz wird in diesem Fall aus den Verkaufsdaten ermittelt und kann im Nachhinein nicht mehr ver ndert wer den PHP Endlich objektorientiert 355 5 Projektpraxis In Listing 5 9 werden zwei Aktienbest nde testweise verwaltet Zun chst wird eine Commerzbank Aktie angelegt mit ihrem Namen der ISIN und dem URL unter dem der aktuelle Kurs der Aktie abgefragt werden kann Bei der Erstel
352. gun gen Kapitel 2 1 3 und Schleifen Kapitel 2 1 4 eingesetzt Operation Bedeutung x gt y liefert TRUE wenn der Wert von xgr er ist als der Wert von y x gt amp y liefert TRUE wenn der Wert von Sxgr er oder gleich dem Wert von Syist x lt y liefert TRUE wenn der Wert von xkleiner ist als der Wert von y x lt y liefert TRUE wenn der Wert von xkleiner oder gleich dem Wert von yist x y liefert TRUE wenn der Wert von xgleich dem Wert von yist x y liefert TRUE wenn der Wert von xungleich dem Wert von yist x y liefert TRUE wenn der Wert von xgleich dem Wert von yist und xund yvom selben Typ sind x y liefert Z VE wenn der Wert von S xungleich dem Wert von yist und die Datentypen von xund yunterschiedlich sind Tabelle 2 4 Vergleichsoperatoren Die Pr fung auf Gleichheit besteht also aus einem doppelten Gleichheitszeichen um eine Pr fung von einer Zuweisung zu unterscheiden Zus tzlich wird noch ein drei faches Gleichheitszeichen als Operator eingef hrt um auch ein Vergleich von Wert und Datentyp zu erm glichen So liefert Listing 2 12 in der ersten Ausgabe TRUE und in der zweiten Ausgabe FALSE 26 entwickler press Grundlegende Syntax lt html gt lt body gt lt php x 0 y 0 0 echo var_dump x y echo lt br gt 2 echo var_dump x y echo lt br gt 2 lt body gt lt html gt Listing 2 12 Pr fen auf Gleichheit de
353. gung auf kleiner pr fen fehlt neben gr er noch der Fall gleich Wenn man keinen Gewinn erwirtschaftet macht man nicht unbedingt Verlust Es kann auch sein dass das Ergebnis 0 lautet Werden solche F lle bersehen erh lt man eine Software die in 99 9 der F lle korrekt funktioniert jedoch pl tzlich eine falsche Annahme macht Sucht man dann die fehlerhafte Verarbeitung ist das meist sehr zeitaufwendig Das Fragezeichen als Verzweigung Bei vielen Programmiersprachen wie auch in PHP existiert eine weitere if then else Kon struktion die jedoch sehr selten zum Einsatz kommt Listing 2 30 zeigt das Setzen einer Ausgabe in Abh ngigkeit einer Variablen alter wobei zwischen jung und alt unter schieden werden soll Das w rden Sie bislang mit einer einzigen if then else Verzwei PHP Endlich objektorientiert 4 2 Die Sprache PHP Prozedural gung l sen Der Fragezeichenoperator der auch als Trinit tsoperator bezeichnet wird bietet eine L sung in einer einzigen Zeile bei minimalem zus tzlichen Text lt php alter 50 alter lt 50 ausgabe jung ausgabe alt lt html gt lt body gt lt php echo ausgabe gt lt body gt lt html gt Listing 2 30 Eine Fallunterscheidung mit Fragezeichen Zun chst muss eine Bedingung formuliert werden die einen Wahrheitswert zur ck gibt Diese Bedingung wird in Klammern gesetzt Ihr folgt der Operator Die Anweisung hinter dem
354. h wurde herausgearbeitet dass ein URL not wendig ist um den aktuellen Kurs der Aktie abzurufen Einen solchen URL k nnen wir bereits der Aktie bergeben ohne dass die Funktion zum Auslesen der aktuellen Kurs daten implementiert ist Der erste Schritt des Tests besteht also darin eine Aktie erfolgreich anzulegen und deren Daten auszulesen Im Beispiel aus Listing 5 1 wird die Aktie der Metro AG angelegt und die Daten werden ber Get Methoden ausgelesen lt php require_once classloader inc php gt lt html lt body gt lt php metro new Aktie METRO AG Stammaktien o N DE0007257503 http www boerse ISIN DEO007257503 echo Name metro gt getName lt br gt 2 echo ISIN metro gt getISIN lt br gt 2 echo URL metro gt getURL lt br gt 2 lt body gt lt html gt Listing 5 1 Die erste Testklasse der Fachlogik die Aktie Bevor Sie nun mit der Implementierung der Aktienklasse beginnen sollten Sie sich ber legen welche Ausgaben Sie bei den Get Methoden erwarten Die Ausgabe sollte lauten Name METRO AG Stammaktien o N ISIN DE0007257503 URL http www boerse ISIN DE0007257503 Eine andere Ausgabe w rde eine fehlerhafte Implementierung bedeuten Nun erstellen Sie die Aktienklasse sodass diese Ausgabe erfolgreich auf dem Bildschirm erscheint Die Klasse ist in Listing 5 2 dargestellt Sie enth lt aus Sicht eines Entwicklers keine span nenden Elemente Die Set Methoden
355. hatjedes Objekt dieser Klasse m Wie kann man es beschreiben Aus welchen Teilen besteht es Aus dem Beispiel des Autohauses wurden die folgenden Hauptklassen identifiziert Autohaus Person Artikel Antrieb Ausstattung Vertrag Gespr chsprotokoll Kaufinteresse PHP Endlich objektorientiert 133 3 Vorgehensweise bei der Softwareentwicklung Wenn Sie sich nun die oben genannten Fragen stellen k nnen Sie zu dem in Abbildung 3 13 dargestellten Ergebnis kommen Wichtig ist auch zu unterscheiden ob die Eigen schaften die Sie finden f r wirklich jedes der Objekte zutreffen oder optional sind Eine Person die Sie in Ihrer Anwendung beschreiben wollen hat beispielsweise auf jeden Fall einen Namen Aber nicht jede Person muss ber einen F hrerschein verf gen um ein Auto kaufen zu k nnen Ausstattung Vertrag ES ID Name Artikel Beschreibung Person Preis Person2 Nummer E Datum haat 7 l Gegenstand Beschreibung 2 Inhalt Einkaufspreis Antrieb Unterschrift 1 Verkaufspreis k Unterschrift 2 Person Verbrauch CO2 Aussto Name en Vorname Gespr chs Strasse Autohaus protokoll PLZ Kaufinteresse Ort Name Nummer 5 Inhaber Person Person1 Person Steuernummer Person2 Artikel Nummer Datum Datum Verlauf Text Abbildung 3 13 Einige Attribute der
356. hige Anwendung zu erhalten Im Fall der Flugreservierung hat dies zur Folge dass Sie unter Umst nden einen Flug in einem Zustand stornieren wollen der ungleich reserviert ist In diesem Fall liefert die Methode stornieren den Wert FALSE Wird dieser R ckgabewert nicht ausgewertet so geht der Aufrufer der Methode davon aus dass sein Flug erfolgreich storniert wurde Nun k nnte man sagen Aber dann h tte der Wert doch ausgewertet werden m ssen Die Verantwortung f r die Fehlerbehandlung wird also vom Programmierer der Klasse auf den Aufrufer der Methode weitergegeben Dieser muss dann nach jedem Methoden aufruf eine Pr fung vornehmen ob der Aufruf erfolgreich war oder nicht Dies f hrt dazu dass Sie den regul ren erfolgreichen Ablauf des Programms bei vielen Zeilen Quellcode kaum noch nachvollziehen k nnen da er st ndig von der Fehlerpr fung unterbrochen wird So zeigt Listing 4 53 einen Ausschnitt aus dem bereits vorgestellten Listing des objektori entierten Datenzugriffs mit dem Datenzugriffsobjekt db Der regul re Programmablauf ist fett gedruckt w hrend der restliche Code zur Fehlerbehandlung dient Bei gr erem Quellcode entstehen viele Fehlerpfade im Quellcode sodass Sie den regul ren Ablauf des Programms kaum noch erkennen k nnen p_lesen new ParameterListe p_lesen gt add sql SELECT ID name FROM ag ORDER BY ID ausgabe db gt 1lesen p_lesen if ausgabe FALSE db gt schliessen die FEHLER
357. hinzu dabei m ssen die Namen der Spalten angegeben werden die zu bef llen sind sowie die Daten die den neuen Datensatz bilden ndert aktualisiert Datens tze in einer Tabelle die dem Krite rium in der WHEREKlausel entsprechen SELECT FROM kunde liest Spalten aus der angegebenen Tabelle aus entspricht WHERE vorname Frank allen Spalten und beschr nkt die Ausgabe durch Eintr ge die LIMIT 20 der WHEREKlausel entsprechen hier nur Leute mit dem Vor namen rank zur ckgeben zus tzlich kann noch ein Limit angegeben werden hier max 20 Eintr ge zur ckgeben Tabelle 2 27 Typische SQL Befehle Ein weiteres wichtiges Merkmal f r Datenbanken ist die M glichkeit Transaktionen durchzuf hren Dabei wird eine Reihe von Zugriffen auf die Datenbank entweder ganz oder gar nicht ausgef hrt Das ist sinnvoll wenn mehrere Benutzer gleichzeitig nde rungen an einem einzigen Datenstamm durchf hren k nnen Im folgenden Beispiel wird der Ausschnitt eines Quellcodes skizziert der eine Kontobu chung t tigt Dabei soll ein Betrag von 100 Euro umgebucht werden Das soll aber nur m glich sein wenn das Quellkonto noch positives Guthaben besitzt Das Problem liegt darin dass generell bei mehreren hintereinander programmierten Datenbankabfragen nicht garantiert werden kann dass diese ohne Unterbrechung auch hintereinander ausgef hrt werden Ein anderes Skript kann stets zwischen zwei Zugrif fen auf die Datenbank den Date
358. hluss daran wird die aufgerufene Methode wie bei einer return Anweisung sofort beendet Das Fehlerobjekt wird dabei automatisch an den Auf rufer weiter gegeben Im Gegensatz zu Listing 4 47 erkennen Sie dass die Texte der neu erzeugten Fehlermel dungen fett gedruckt den Quelltext vergr ern Bei der Fehlerbehandlung sind Sie jedoch auf aussagekr ftige Texte angewiesen Als Alternative k nnten Sie auch nur Feh lernummern vergeben und jeder Nummer in einer externen Textdatei oder in einer MS Excel Liste einen Fehlertext zuweisen Auf diese Weise kann mit mehreren externen Dateien auch eine Sprachumschaltung der Fehlermeldungen realisiert werden lt php class mysqlDZ implements iDZ private conn private connected FALSE public function ffnen p if lisset p throw new Fehler 1 Das Parameter Objekt ist Listing 4 55 Datenbankzugriff mit objektorientiertem Fehlermanagement PHP Endlich objektorientiert 281 4 PHP objektorientiert ung ltig mysqlDZ ffnen FALSE if p gt isParam host p gt isParam user p gt isParam pass p gt isParam db throw new Fehler 2 Das Parameter Objekt ist unvollst ndig mysqlDZ ffnen FALSE host p gt get host user p gt get user pass p gt get pass db p gt get db conn mysql_connect host user pass if conn if mysql_select_db db conn 1 throw new Fehler 3 Datenbank db konnte nicht ge ff
359. hmen wir an dass eine Aktiengesellschaft umbenannt wird was in der heutigen Zeit nicht un blich ist Bei 1000 Eintr gen in die Kurstabelle m ssten dann 1000 Zeichenket ten anpassen bei einer separaten Tabelle nur eine einzige Zeichenkette Das ist jedoch der weniger wichtige Grund Wenn man davon ausgeht dass nach 400 nderungen der Datenbankserver abst rzt befindet sich die gesamte Tabelle in einem ung ltigen Zustand Man kann nicht mehr sagen welche Daten bereits ge ndert wurden und wel che nicht Oft f llt der Fehler erst wesentlich sp ter auf Man spricht in diesem Zusam menhang von einer Updateanomalie Um diese zu vermeiden d rfen in Datenbanken keine Daten redundant abgelegt werden Das wird durch h here Normalformen erreicht Wenn mehrere Operationen auf einer Datenbank entweder vollst ndig ausgef hrt wer den m ssen oder durch einen Fehler w hrend der Ausf hrung gar nicht ausgef hrt wer den d rfen spricht man von Transaktionen Transaktionsmanagement wird von neueren Versionen der MySQL Datenbank ebenso unterst tzt wie von professionellen Daten banksystemen wie Oracle oder MS SQL Server localhost localhost boerse kurse phpMyAdmin 3 1 3 1 Windows Internet Explorer BAX E Ir Ai localhost x Bl x Ar Datei Bearbeiten Ansicht Favoriten Extras jr Favoriten 5 E LOCAL AKTIEN 28 gt http localhost formff 4 localhost fIocalhos X A
360. ht dass diese Anwendung noch wesentlich gr er wird sollte ber die Erstellung von Template Klassen f r die Darstellung View und f r den Controller nachgedacht werden Dies f hrt zu einer verbesserten Wartbarkeit der Gesamtanwendung an der Benutzerschnittstelle 3 An vielen Stellen werden Benutzereingaben noch nicht auf G ltigkeit gepr ft Ebenso ist die Datenbankanbindung idealisiert und kann eine Vielzahl von Fehlern verursachen An dieser Stelle kann durch das Erstellen eigener Exception Klassen ein Fehlermanagement eingef hrt werden das in die Bedienung integriert wird Zus tz lich dazu k nnten Benutzereingaben clientseitig ber JavaScript Pr froutinen verifi ziert werden noch bevor das HTML Formular zum Server zur ckgesendet wird Zus tzlich dazu sind bei der Entwicklung des ersten Prototyps einige Erweiterungsm g lichkeiten aufgefallen die in den n chsten Iterationen realisiert werden k nnten Dies sind Die Erstellung eines Logins mit Benutzernamen und Kennwort sowie eine benutzer abh ngige Speicherung der Aktienbest nde So hat jeder Aktion r Zugriff auf seine pers nlichen Best nde Diese Idee hat bereits unser Auftraggeber bei der Analyse ge u ert Abb 5 1 Er hat die Umsetzung jedoch damals zur ckgestellt PHP Endlich objektorientiert 397 5 Projektpraxis m Die Anbindung eines realen Depots im Onlinebanking Die PHP Anwendung w rde dann f r den Depotbesitzer einen Mehrwert durch die Bi
361. html lt body gt lt php function teile x y if y 0 trigger_error Kann nicht durch 9 teilen E_USER_ERROR return x y a 4 b 0 echo teile a b gt lt body gt lt html gt Listing 4 60 Ein selbsterzeugter Fehler Sie k nnen aber nicht nur Fehler selbst erzeugen sondern die Verarbeitung von Fehlern in PHP auch umleiten F r die Fehlergruppen m E NOTICE m E WARNING m E_USER_NOTICE m E USER_WARNING m E_USER_ERROR k nnen Sie eine Umleitung der Fehlerbehandlung in eine selbstdefinierte Funktion bewirken Diese Funktion wird als Error Handler bezeichnet Listing 4 62 zeigt die Defi nition eines solchen Handlers und das Umleiten auf diesen Handler mithilfe des PHP Befehls set_error_handler PHP Endlich objektorientiert 291 4 PHP objektorientiert lt php function meldung typ meldung datei zeile echo Typ typ lt br2 echo Meldung meldung lt br gt 2 echo in Datei datei lt br2 echo Zeile zeile lt br2 set_error_handler meldung lt html gt lt body gt lt php echo x gt lt body lt html gt Listing 4 61 Eine eigene Fehlerbehandlung Im HTML Teil des Listings wird dann der Wert einer Variablen ausgegeben die nicht zuvor deklariert wurde Dies f hrt zu der folgenden Ausgabe Typ 8 Meldung Undefined variable x Datei C Programme xampp htdocs fehler test1 php Zeile 12 Nun k nnen Sie sich vorstellen dass durch di
362. hts jeder Schritt nach rechts bedeu tet eine Division durch 2 Tabelle 2 6 Bit Operatoren Abschlie end werden noch die Inkrement und Dekrementoperatoren vorgestellt wie sie auch in Sprachen wie C und Java verwendet werden In einer Vielzahl von Anwen PHP Endlich objektorientiert 27 2 Die Sprache PHP Prozedural dungen ist das Ver ndern einer Variable um 1 von Bedeutung beispielsweise um in einem Datenfeld zu suchen Statt einer Operation mit anschlie ender Wertzuweisung wie x x 1 oder x 1 kann in PHP eine bersichtlichere und performantere Art der Schreibweise gew hlt werden n mlich x Operation Bedeutung x erh ht den Wert von xum 1 und gibt den neuen Wert von x zur ck x gibt den Wert von x zur ck und erh ht den Wert anschlie end um 1 x verringert den Wert von xum 1 und gibt den neuen Wert von x zur ck x gibt den Wert von x zur ck und vermindert den Wert anschlie end um 1 Tabelle 2 7 Inkrement und Dekrementoperatoren 2 1 2 Datenfelder Arrays Es wurde bereits kurz erw hnt dass es sich bei Arrays um Datenfelder handelt also um zusammengefasste Sammlungen von Variablen Die Verwaltung von Arrays erfolgt in PHP sehr dynamisch sodass flexible Datenstrukturen erzeugt werden k nnen Einer seits muss die Gr e eines Datenfeldes nicht im Vorfeld bekannt sein und andererseits kann ein Datenfeld aus Variablen verschiedener Datentypen bestehen Ein Array wird
363. i Pflichtattributen Geschlecht und ID die eben falls noch genauer spezifiziert werden k nnten Bei dem Geschlecht ist diese Spezifizierung exemplarisch vorgenommen worden Dazu definieren Sie einen neuen Datentyp der gesch genannt wurde Er basiert auf einer Zei chenkette base xs string deren Werte jedoch eingeschr nkt werden Dazu wird ein regul rer Ausdruck pattern verwendet der nur die Zeichen m oder w zul sst Ein regul rer Ausdruck ist selbst eine Zeichenkette die als Beschreibung von Mengen von Zeichenketten mithilfe eines eigenen sehr komplexen und m chtigen Regelwerks dient Regul re Ausdr cke stellen also eine Art Filterkriterium f r Texte dar indem der jeweilige regul re Ausdruck in Form des Musters mit einem gegebenen Text aus der XML Datei abgeglichen wird Im XML Schema wird auf diese Weise ein Filter f r die Obermenge der Zeichenketten angegeben Im Anschluss an die Definition eines Teilnehmers mit dem neuen Datentyp Geschlecht wird in Listing 4 73 die Teilnehmerliste definiert die aus mindestens einem Teilnehmer da minOccurs nicht angegeben wurde ist die Mindestzahl automatisch 1 bis unendlich vielen Teilnehmern maxOccurs unbounded besteht Abschlie end wird noch definiert dass die Liste der Vorkenntnisse aus mindestens einer Vorkenntnis besteht Auch hier ist keine obere Grenze der Vorkenntnisse vorgesehen Damit ist das XML Format der Seminare ausreichend beschrieben Beachten Sie bitte das
364. i der die Auftraggeber und auch die Anwender die Anwendung erst bei der Inbetriebnahme zu Gesicht bekommen Selbst bei kleineren Pro jekten kommt es dabei kaum vor dass die Abnahme problemlos verl uft und die Auf traggeber und Anwender mit der ersten Version vollst ndig zufrieden sind Wie bereits erw hnt sind nderungsw nsche umso schwieriger umzusetzen je mehr die individu elle Anwendung bereits fertig gestellt und je weiter das Projekt fortgeschritten ist da ein Gro teil der Ressourcen Arbeitszeit und Budget bereits aufgebraucht sind Einem freiberuflichen Programmierer der zun chst eine Programmiersprache lernt und sich im Verlauf seiner Projekte Methoden des Projektmanagements erst aneignet sind zumeist die verschiedenen Arten des Prototypings in der Softwareentwicklung nicht gel ufig Denn auch das Prototyping sollte strukturiert erfolgen und sich einem Ziel wid men Dazu existieren verschiedene Verfahren wie man einen Prototyp entwickeln kann Ein weit verbreiteter Prototyp in der Softwareentwicklung ist der vertikale Prototyp Hier wird nur eine Ebene des Gesamtsystems exemplarisch realisiert Dies ist meist die Pr sentationsschicht sodass ein GUI Prototyp entsteht Der Kunde erh lt dadurch einen Einblick in das zuk nftige Design der PHP Anwendung denn in den Eingabefeldern k nnen bereits Testdaten eingegeben werden Auch den Ablauf eines Gesch ftsprozes ses wie die Erstellung eines Neukunden kann man ausprobieren
365. iagrammen n hert man sich also der Modellierung ber die gemeinsamen Eigenschaften von Objekten an Abbildung 3 50 Objekt ohne Klassenbeschreibung und anonymes Objekt Abbildung 3 50 zeigt in der linken Darstellung dass Sie den Namen der Klasse nicht bereits kennen m ssen wenn Sie ein Objektdiagramm zeichnen Frank kann ein Kunde Lieferant Mitarbeiter oder nur irgendeine Person sein Genauso k nnen Sie auch ano nyme Objekte erstellen wenn Sie die Objekte nicht konkret benennen m chten So defi niert die rechte Darstellung der Abbildung irgendeinen Kunden F r die Implementierung k nnen Sie aus dem Objektdiagramm als Diskussionsgrund lage jedoch noch viel mehr erkennen Zun chst k nnen Punkte auch ohne Dreiecke exis tieren Sie k nnen also beliebige Punkte zeichnen Wenn Sie aber ein neues Dreieck zeich nen wollen m ssen Sie bereits in dessen Konstruktor drei Punkte bergeben da ansonsten das Dreieck nicht existieren kann Die n chste Frage die Sie sich als aufmerksamer Entwickler stellen m ssen lautet K n nen Sie aus drei beliebigen Punkten ein Dreieck erstellen Dies geht sicherlich nicht wenn die drei Punkte auf derselben x oder y Koordinate liegen Denn dann w rden Sie kein g ltiges Dreieck sondern eine Strecke erzeugen die keinen Fl cheninhalt besitzt Au erdem k nnten Sie keine Winkelberechnungen durchf hren die ja vielleicht als Methoden eines Dreiecks sinnvoll sind Gen gt es also zu pr fen ob
366. iative Datenfelder indem nur die bef llten Elemente eines Arrays nach einander zugegriffen werden Die foreach Schleife speichert dabei den Index und den aktuellen Wert des Elements das gerade untersucht wird Listing 2 37 zeigt die verbes serte Berechnung des Produkts im Vergleich zu Listing 2 36 lt php data Array datall 4 data 4 546 lt html gt lt body gt lt php produkt 1 foreach data as index gt wert echo Index index Inhalt wert lt br gt produkt wert echo Das Produkt ist produkt lt body gt lt html gt Listing 2 37 Korrigierte Berechnung des Produkts mit foreach Schleife Auf eine Z hlvariable wird bei der foreach Schleife verzichtet Dadurch werden Endlos schleifen durch falsche Inkrementierung und Verletzungen der Datenfeldgrenzen ver PHP Endlich objektorientiert 49 2 Die Sprache PHP Prozedural mieden Stattdessen wird als erster Parameter das zu untersuchende Datenfeld hier data angegeben Hinter dem Schl sselwort as wird das aktuelle Element des Felds in dessen Index und dessen Wert aufgespaltet Im Rumpf der Schleife kann man nun auf diese beiden Variablen zugreifen sodass die folgende korrekte Ausgabe entsteht Index 1 Inhalt 4 Index 4 Inhalt 546 Das Produkt ist 2184 Auf die gleiche Art und Weise kann ein assoziatives Datenfeld ausgegeben werden Au erdem k nnen auch mehrere foreach Schleifen geschachtelt werden wie Listin
367. ibuten sollten Sie in der Designphase zus tzlich die zu verwendenden Datentypen und falls n tig den Startwert angeben der bei der Erzeugung eines neuen Objekts verwendet werden soll Bedenken Sie dass sich jedes Objekt zu jedem Zeitpunkt in einem g ltigen Zustand befinden muss So ist ein Bruch der die Eigenschaften z hler und nenner hat bei nenner 0 ung ltig und darf nach den Regeln der Mathematik nicht als Bruch bezeichnet werden Achten Sie daher stets auf g ltige Initialisierungswerte bereits in der UML Darstellung Auch bei den Methoden sollten Sie Datentypen der Parameter benennen die als Einga ben der Methode notwendig sind Zus tzlich sollten Sie falls vorhanden den Datentyp des R ckgabewerts der Methode angeben Dies ist auch dann sinnvoll wenn Sie eine untypisierte Sprache wie PHP verwenden bei der Sie den Variablen keine Datentypen zuweisen m ssen In Abbildung 3 65 sehen Sie die UML Darstellung der Klasse Bruch in Designform Die Eigenschaften z hler und nenner sind nicht ffentlich zug nglich und werden auch beim Default Konstruktor so initialisiert dass ein g ltiger Bruch entsteht Die dritte Eigen schaft anzahl bezieht sich nicht wie die beiden anderen Eigenschaften auf jeden Bruch sondern geh rt zur Klasse Bruch selbst Dies sieht man daran dass diese Eigenschaft unterstrichen ist Zus tzlich zum Default Konstruktor existiert ein zweiter Konstruktor bei dem Sie den Z hler und Nenner als Ganzzahlen berge
368. ich bei dieser Rechnung um eine Kopie handelt lt php class Rechnungf private summe private ausgeliefert FALSE private istKopie FALSE Listing 4 19 Eine einfache Rechnungsklasse Umsetzung objektorientierter Grundlagen public function __construct summe this gt summe summe public function setAusgeliefert wert f if wert FALSE this gt ausgeliefert FALSE elsef this gt ausgeliefert TRUE public function _toString if this gt ausgeliefert TRUE ausgabe Rechnung ber this gt summe EUR wurde ausgeliefert else ausgabe Rechnung ber this gt summe EUR wurde noch nicht ausgeliefert if this gt istKopie TRUE ausgabe Ich bin ein Klon return ausgabe public function _clone this gt istKopie TRUE Listing 4 19 Eine einfache Rechnungsklasse Forts Zus tzlich wird eine einfache Lagerklasse implementiert Das Lager bekommt eine Rechnung deren Inhalt sie ausliefern muss Wenn dies geschehen ist wird die Rechnung von dem Lager in den Status ausgeliefert gesetzt In der Methode ausliefern sehen Sie wie der Datentyp des Eingabeparameters mithilfe von instanceof gepr ft wird lt php class Lager public function ausliefern r if r instanceof Rechnung r setAusgeliefert TRUE Listing 4 20 Eine einfache Lagerklasse PHP Endlich objektorientiert 231 4 PHP objektorientiert Listing 4 20 Eine einfache Lagerkla
369. ich ist eine Dogge ein spezieller Hund Er kann besonders gut bei en und bietet dies als eigene Methode an name String Tier String getName String gibLauf String Katze String Hund String gibLaut String gibLaut String miauen String bellen String TA Dogge String getName beissen Abbildung 4 5 Klassendiagramm der Tierhierarchie Listing 4 28 zeigt die Umsetzung der Tierklasse in PHP 5 Beachten Sie die Syntax der abstrakten Methode gibLaut lt php abstract class Tier protected name Listing 4 28 Die abstrakte Klasse Tier mit abstrakter Methode gibLaut Realisierung von Klassengeflechten public function __construct name this gt name name public function getName return this gt name abstract public function gibLaut Listing 4 28 Die abstrakte Klasse Tier mit abstrakter Methode gibLaut Forts Im n chsten Schritt wird die Katze modelliert die ein Tier ist Im Konstruktor besteht die M glichkeit die Eigenschaft name direkt zu setzen Darauf wird jedoch verzichtet und stattdessen der Konstruktor der Oberklasse aufgerufen Dort k nnten zuk nftig noch weitere Initialisierungen vorgenommen werden die auch f r ein Katzenobjekt von Bedeutung w ren Neben der Bereitstellung der Methode miauen ist die Implementierung der Methode gibLaut zu nennen Die Methodendefinition muss genauso lauten wie in d
370. icklung kann etwas getestet werden was noch gar nicht implementiert wurde Die Antwort liegt in der Spezifikation der Testf lle Bereits nachdem die ersten Anforderungen an die Anwendung festgeschrieben sind sollte man festhalten wie die Umsetzung der Anfor derungen getestet werden kann Dabei sind die Testf lle bereits m glichst fr hzeitig fest zuhalten Neben den grundlegenden Schritten der Entwicklung definiert der RUP weitere unter st tzende Arbeitsschritte die sich durch das gesamte Projekt ziehen Dazu geh rt das Konfigurations und nderungsmanagement zur Dokumentation der Anforderungen deren Erf llung und deren nderungen w hrend des Projektverlaufs sowie das Projekt management zur F hrung Koordination Steuerung und Kontrolle der Ressourcen des Softwareentwicklungsprojekts Die Aktivit ten zur Errichtung der notwendigen Infra struktur f r die zu erstellende Anwendung werden in einem separaten Arbeitsschritt zusammengefasst der sich ebenfalls ber das gesamte Projekt erstreckt Die technologische Infrastruktur ist eine Umgebung in der das Gesamtprodukt entwi ckelt zusammengestellt und den Stakeholdern zur Verf gung gestellt wird Dazu wer den einerseits die ben tigten Tools der Entwickler und andererseits ein Arbeitsbereich f r die Integration aller Teilprodukte zum Gesamtprodukt eingerichtet Diese Integra tion wird als Continous Integration bezeichnet und beschreibt den Prozess des regelm figen vollst
371. ie zur besseren Lesbarkeit die ersten Buchstaben der Teilw rter gro beispielsweise farbe oder akti enListe f r die Bezeichnung der Eigenschaften und berechneGewinn f r eine Methode Deklarieren Sie alle Eigenschaften als private zur Datenkapselung und alle Methoden die Dienste eines Objekts dieser Klasse darstellen als public Schreiben Sie zu jeder Eigenschaft eine entsprechende Get und Set Methode So geh ren in einer Stifteklasse beispielsweise zu der Eigenschaft farbe die Methoden getFarbe und setFarbe f Pr fen Sie innerhalb der Set Methode ob der bergebene Wert f g ltig ist und im aktuellen Zustand des Objekts gesetzt werden darf In der Get Methode k nnen Sie eine Formatierung f r die Ausgabe vorsehen Sind Eigenschaften schreibgesch tzt so setzen Sie die Set Methode private und grei fen nur innerhalb der Klasse zu D rfen Eigenschaftswerte z B aus Datenschutz gr nden nicht ausgelesen werden so setzen Sie die Get Methode private Fragen Sie einen Wahrheitswert ab so schreiben Sie nicht die Methode getVerkauft sondern isVerkauft Dies macht dem Benutzer dieser Klasse der ja auch ein Pro grammierer sein kann die Handhabung leichter Wenn Sie einen Wert zu einer kumulierenden Eigenschaft hinzuf gen wollen schrei ben Sie nicht setDividende d sondern addDividende d Dies verdeutlicht dass etwas aufaddiert wird und gilt auch f r Objekte Meldet sich ein Student zu einem Praktikum an dekl
372. ieben Der Fokus dieses Buchs liegt auf Entwicklern und Projektleitern die bereits erste Erfah rungen mit der traditionellen PHP Programmierung gesammelt haben bzw die in Zukunft gr ere PHP Projekte planen Erfahrungsgem sind diese Entwickler nur wenig mit den Konzepten der Objektorientierung und der UML vertraut und wollen m ssen ihren Umgang mit PHP und der neuen Denkweise professionalisieren Das ist die zentrale Zielgruppe dieses Buchs Projektleiter und Freiberufler mit gr eren Projekten im PHP Umfeld werden mithilfe dieses Buchs eine praxisnahe Methodik kennen lernen wie sie Kundenw nsche ermit teln erfassen und strukturieren k nnen Das bildet die Grundlage f r eine Umsetzung in objektorientiertem PHP Quellcode 1 3 Gliederung und Vorgehensweise Im folgenden Kapitel wird im ersten Schritt die grundlegende Syntax der Sprache PHP und deren Einsatz in Verbindung mit HTML beschrieben Neben den wichtigsten Befeh len wird gezeigt wie man Funktionen schreibt PHP Dateien strukturiert und Verzwei gungen sowie Schleifen in PHP realisiert Dieses Kapitel ist insbesondere f r Einsteiger gedacht die bislang noch keine PHP Skripte selbst verfasst haben Au erdem wird gezeigt wie Sie ausgef llte HTML Formulare mit PHP verarbeiten einen Warenkorb mit einer Session verwalten einen Zugriff auf eine MySQL Datenbank realisieren und auf einen E Mail Server zugreifen Dieses Kapitel verdeutlicht die traditionelle prozedu rale Pro
373. ientiert Attribut 133 Aufwand 145 Ausgabe 20 au erirdische Spinne 410 B Beobachter 406 Blendwerk 412 Boolean 18 19 Bottom Up Strategie 103 break 53 cC Casting 23 const 228 continue 54 Controller 371 Copy Paste Programmierung 409 CRC Karten 153 D Dateizugriff 77 Datenbankverbindungsobjekt 270 Datenfeld 19 28 Datenfeldfunktionen 32 Datenmodell 160 Datentypen 18 Datentyppr fung 22 Datenzugriffsschicht 114 388 Datum und Zeitfunktionen 64 Death Sprint 412 define 228 Deserialisierung 218 Design Patterns 401 Destruktor 140 212 Detailgrad 162 die 58 Diskriminator 188 display_errors 291 427 Stichwortverzeichnis DOM Parser 295 302 Double 18 do while 52 DTD 305 dynamisches Feld 30 E echo 15 Eclipse 423 Eigenschaft 133 211 E Mail Funktionen 98 ER Diagramm 115 ereg 326 error_log 291 Erschleichung von Funktionalit t 412 evolution res Prototyping 120 extend Beziehung 165 extends 239 F Fabrik 402 Fachlogik 115 347 FDD 156 featuregetriebene Entwicklung 156 Fehler Arten 288 Fehlerbehandlung 278 final 230 Float 19 foreach 49 foreach Schleife 252 for Schleife 46 FTP Funktionen 80 Funktionen als Parameter 57 Funktionsaufrufe 55 fu gesteuert 45 G Generalisierung 138 Gesch ftsprozessanalyse 145 Gesch ftsprozessmodellierung 145 GET 70 Get Methode 137 212 Gottklasse 411 GPA 145 GPM 145 GUI 365 g ltig 294 428 H Handle 20 horizontaler Pr
374. ients oft keinerlei Ausgabe Die Frage in welcher Methode gerade ein Fehler aufgetreten ist l sst sich bislang nur anhand von Statusausgaben beispielsweise in einer Logdatei realisieren Gerade bei komplexeren Anwendungen ist dies unzureichend Um diesen Zustand zu verbessern wurde die PHP Erweiterung XDebug entwickelt die als Open Source Anwendung sowohl f r MS Windows als auch f r Linux verf gbar ist Wie bei PHPUnit bereits beschrieben wird auch XDebug ber den PEAR Installer in den entsprechenden WAMP bzw LAMP Server integriert Dabei bietet XDebug im Wesent lichen zus tzlich zu PHP m eine verbesserte var_dump Ausgabe m eine Beschr nkung der Rekursionstiefe bei Methodenaufrufen Erstellung von gutem Quellcode eine Protokollierung der aufgerufenen Methoden incl deren Ein und Ausgabepara metern Stack Trace eine Messung des Laufzeitverhaltens und des ben tigten Speichers von PHP Skrip ten auf dem Server Profiling m eine Analyse der Codeabdeckung Code Coverage um zu pr fen ob nie genutzte Codeteile existieren m die M glichkeit eine interaktive Fehleranalyse unter Verwendung von Haltepunkten und einer Einzelschrittausf hrung von PHP Skripten durchzuf hren Abbildung 5 50 zeigt die XDebug Ausgabe eines Skript Iracings Entwickeln Sie in einer PHP Entwicklungsumgebung so k nnen diese Ausgaben meist in einer besseren grafi schen Formatierung dargestellt werden TRACE START 2007 01 22 08 06 31
375. iesen Schritt nimmt Ihnen PHP nicht ab Sie m ssen die Auswahl der richtigen Funktion selbst implementieren Es wird entweder eine ganze Zahl oder ein anderer Bruch bergeben An dieser Stelle kommt die __call Funktion ins Spiel Wenn Sie diese besondere PHP Funktion in einer Klasse implementieren wird sie aufge rufen wenn Sie eine Methode eines Objekts aufrufen die gar nicht existiert Den Aufruf k nnen Sie dann in der __call Funktion umleiten lt php class Bruch private z 0 private n 1 public function __construct z n f this gt setZ hler z this gt setNenner n public function getZ hler return this gt z public function getNenner return this gt n public function setZ hler z this gt z z public function setNenner n this gt n n public function ausgeben return this gt getZ hler this gt getNenner public function _call func data if func add Listing 4 12 Die erste Bruchklasse PHP Endlich objektorientiert 223 4 PHP objektorientiert if is_integer data 0 this gt add_int datal0 else if data 0 instanceof Bruch this gt add_bruch data 0 private function add_int int this gt z int this gt n private function add_bruch b this gt z this gt z b gt getNenner this gt n b gt getZ hler this gt n b gt getNenner gt Listing 4 12 Die erste Bruchkla
376. igt das gute Zusammenspiel der Objekte untereinander sowie die Kooperation der Fachlogik mit den Quellcodes des Benutzerinterfaces der Anwendung Au erdem wird durch die zus tzliche Einnahmequelle der Verlust in der Gesamtdiffe renz incl aller Zusatzeinnahmen und Zusatzkosten richtigerweise von 567 auf 417 reduziert http localhost Aktienverwaltung 004 uebersicht php Windows Internet Explorer BAX I8 v EI htto Nocalhost ktienverwaltung 004 cht p Well ie nn ek Datei Bearbeiten Ansicht Favoriten Extras yr Favoriten http localhost Aktienverwaltung 004 uebersicht php Depotverwaltungsprogramm Gew hlter Bestand E ON laden speichern bersicht w hlen l neu l hinzukaufen neue Dividende verkaufen E ON DEOO0OENAG999 w hlen 180 St ck am 25 05 2009 gekauft vor 151 Tagen Stand vom 23 10 2009 19 57Uhr EK akt Wert gesamt incl Kosten 5 419 80 4 852 80 EK akt Kurs pro Aktie 30 00 26 96 Differenz pro Aktie 3 04 10 13 Dividenden 150 00 Ges Diff incl Einnahmen amp Kosten 417 00 7 69 Zinsen Jahr 0 00 Copyright by Dr Frank Dopatka Fertig S3 Lokales Intranet f R1 Abbildung 5 28 Reduzierung des Verlusts durch Erhalt der Dividende Im letzten Schritt des Szenarios soll nun der gesamte Aktienbestand verkauft werden Dazu muss der Benutzer die Daten des Verkaufs angeben die in dem HTML
377. ildung 4 15 Prinzip eines SAX Parsers Prinzipiell ben tigen SAX Parser wenig Speicher und sind schnell in der Verarbeitung der Daten Andererseits ist die Interpretation der Daten oft aufwendig zu implementie ren und Sie besitzen keine Sicht auf den gesamten XML Baum SAX Parser eignen sich besonders dann wenn Sie in einer XML Datei nach Inhalten suchen oder nur einen Teil der XML Datei auslesen wollen Im Gegensatz zu SAX wird das DOM Document Object Model vom W3C World Wide Web Consortium als Organisation definiert Das Ziel eines DOM Parsers besteht darin die Baumstruktur der XML Datei im Speicher nachzubilden wobei jeder Knoten und jedes Blatt aus einem Objekt besteht Die wichtigsten Knoten im DOM sind der Dokumentknoten der die gesamte Baumstruktur darstellt Dokumentfragmentknoten die jeweils einen Teil der Baumstruktur darstellen PHP Endlich objektorientiert 295 4 PHP objektorientiert m Elementknoten die jeweils exakt einem XML Element entsprechen Attributknoten die jeweils exakt einem Attribut in XML entsprechen m Textknoten welche den textuellen Inhalt eines Elements oder Attributs darstellen Ein DOM Parser liest im ersten Schritt die XML Datei ein und erzeugt ein Dokumenten objekt ber dieses Objekt k nnen Sie nun mittels der DOM Methoden auf die Inhalte und auf die Struktur des Datenbaums zugreifen Dazu geh ren vor allem die Navigation zwischen den einzelnen Knoten des Baums m das Erzeugen
378. in Datum der Immatrikulation Ein Student kann sich an bis zu 5 Praktika gleichzeitig anmelden Man kann einen Studenten fragen an welchen Praktika er teilnimmt Er gibt daraufhin ein Datenfeld seiner Praktikumsobjekte zur ck Nach einer Anmeldung soll der Student sein Praktikum kennen er muss ja wissen an welchen Veranstaltungen er teilnimmt und gleichzeitig muss auch das Praktikum seine Studenten kennen da ggf eine Anwesenheitspflicht besteht Ein Praktikum hat einen Namen und eine Zeitdauer in dem es stattfindet Zu einem Praktikum k nnen sich bis zu 20 Studenten anmelden Eine andere Sichtweise besteht darin dass sich ein Student an einem Praktikum anmeldet Beide Klassen verf gen also ber eine Methode anmelden Person Name Vorname Strasse PLZ Ort Telefon e Mail getAnschrift String Student matrNr immatrikuliertSeit Student getPraktika Praktikum anmelden Praktikum Boolean Praktikum String Date Date getAnmeldungen Student anmelden Student Boolean Abbildung 4 8 Wechselseitige Beziehung zwischen Praktika und Studenten PHP Endlich objektorientiert 249 4 PHP objektorientiert Hinweis Die Anzahl der Eigenschaften und der Methoden ist in diesen Beispielen nat rlich beschr nkt sodass Sie die Testprogramme noch nicht in der Realit t einsetzen k n nen Es geht vielmehr darum dass Sie den Quellcod
379. in unvorsichtiger Administrator oder Programmierer kann diese Vorgehensweisen durch nderung der php ini jedoch wieder aktivieren Dies soll in PHP 6 nicht mehr m glich sein Zu diesen Funktionen z hlt register_globals Bei Aktivierung kann man auf zuvor definierte Variablen direkt zugreifen die mittels HTTP Get HTTP Post oder ber einen Cookie vom Client bertragen werden lt php if loggedin fpassthru portal index html Listing 4 90 Globale Registrierung register_globals on Stattdessen soll bereits jetzt aus Sicherheitsgr nden der Zugriff dediziert ber ein von PHP vordefiniertes Datenfeld erfolgen wie es in Listing 4 91 dargestellt wird Manipula tionen bei der Kommunikation zwischen Client und Server werden dadurch erschwert jedoch nicht unm glich lt php if _COOKIELloggedin kann nur von einem Cookie stammen good_login 1 fpassthru portal index html Listing 4 91 Globale Registrierung register_globals off Ein weiteres Element ist die Einstellung magic_quotes der php ini seit der vierten PHP Ver sion die in PHP 6 wieder entfernt werden soll Dabei werden allen Request Variablen an den n tigen Stellen mit Backslashes versehen was als Escapen bezeichnet wird Das entspricht der Anwendung der Funktion addslashes auf alle Variablen In der prakti schen Anwendung waren die Probleme dieser Idee jedoch gr er als deren Nutzen So kann die Einstellung auf jedem Server ande
380. ind dabei in der Regel nicht zu Beginn erkennbar die andere bereits gel st haben Dies f hrt dazu dass versucht wird das Rad nochmals neu zu erfinden Das Ergebnis ist meist ein Rad das nicht so rund l uft wie es sollte Der Aufwand f r die Entwicklung war wesentlich h her als zun chst angenommen Recherchieren Sie also zun chst nach kostenfreien bzw kosteng nstigen Alternativen bevor Sie eine Neuentwicklung begin nen Meist hat bereits jemand anders vor Ihnen dieses Problem gehabt und es auch gel st Und selbst wenn Sie sich f r eine Neuentwicklung entscheiden sollten Sie zumindest die existierenden L sungsans tze kennen Die Wunderwaffe Im letzten Kapitel haben Sie einige Design Patterns gesehen von denen Sie vielleicht bereits eines implementiert haben Wenn man ein Design Pattern oder generell eine Vor gehensweise versteht neigt man dazu es berall anzuwenden Die Problemstellung wird dann auf das Muster bzw auf die bekannte Vorgehensweise angepasst obwohl dies eigentlich nicht m glich ist Die bekannte Vorgehensweise wird somit als Wunderwaffe angesehen die jedes Prob lem l st Entgegenwirken kann man der Wunderwaffe durch ein breites Spektrum an Kenntnissen Offenheit f r Neues und durch Dialog mit allen Beteiligten Eine Systemarchitektur als au erirdische Spinne Zu Beginn eines objektorientierten Designs k nnen viele Analytiker eine Trennung der einzelnen Klassen nur schwer vornehmen Sie sind der Meinun
381. inden Entweder beenden Sie den PHP Block und geben HTML Code aus oder Sie geben den HTML Code unter Verwendung des PHP Befehls echo zur ck Die erste Methode hat den Vorteil dass Sie HTML Code direkt aus einem HTML Bearbeitungsprogramm wie Microsoft Frontpage oder Macromedia Dreamweaver einbinden k nnen und der HTML Code nicht so stark von PHP Anweisungen durchsetzt wird Hier sehen Sie ein Beispiel dazu lt php if var true i gt lt hl gt Hallo lt h1 gt lt p gt Herzlich Willkommen auf meiner Homepage lt p gt lt php gt 15 Schreiben Sie vor jeder Klasse einen Kommentar der Informationen zu der Klasse ihrem Autor und ggf Copyrights beinhaltet Kommentieren Sie vor jeder Methode was diese Methode dem Benutzer an Funktionalit t anbietet 16 Trennen Sie Skripte mit Fachlogik von Skripten mit Zugriff auf die Datenbank und Skripten f r die Benutzerinteraktion Arbeiten Sie striktnach dem Model View Cont roller Prinzip MVC Auch wenn dies anfangs unhandlicher erscheint ergibt diese Vorgehensweise eine bessere Struktur Ihrer Anwendung Sie k nnen zur Unterschei dung die Namen der Skripte auch entsprechend benennen z B m_xxxx php f r Zugriffe auf die Datenbank v_xxxx php f r HTML Formulare bzw HTML Ausgaben sowie c_xxxx php f r Skripte die Fachlogikklassen verwenden Erstellung von gutem Quellcode 5 2 2 Erfolgreiche Codestrukturen Design Patterns Neben den Regeln f r eine bessere Lesbarkeit d
382. ingen Mehrwert Gew nschte Abl ufe mit Aktivit tsdiagrammen hnlich wie die Beschreibung die Erweiterungen und Alternativen der textuellen Anwendungsf lle stellen die Aktivit tsdiagramme Abl ufe im Gesch ftsprozess dar die man auch als Workflows bezeichnet Die im Folgenden dargestellten Diagramme befin den sich vorwiegend auf der Wasserspiegelebene und reichen leicht in die Fischebene herunter die aber noch von einem Benutzer nachvollzogen werden kann In Abbildung 5 4 wird das Vorgehen eines Benutzers beschrieben der einen neuen Akti enbestand anlegen will Der Benutzer kommuniziert dabei mit dem zu erstellenden Pro gramm zur Depotverwaltung Nachdem der Benutzer den Dienst neuen Bestand anlegen ausgew hlt hat m chte unser Auftraggeber dem Benutzer eine Eingabemaske zur Verf gung stellen Dort sind Anga ben zur Aktie sowie die Daten des ersten Kaufs einzugeben Zu den Angaben zur Aktie geh ren insbesondere m der Name der Aktie m die ISIN International Securities Identification Number eine zw lfstellige Buchsta ben Zahlen Kombination nach ISO 6166 die eine weltweit eindeutige Identifikation f r ein Wertpapier darstellt man kann diese Nummer also als Prim rschl ssel betrachten Die wichtigsten Daten zum ersten Kauf die den vorhandenen Aktienbestand ausma chen sind m das Datum des Kaufs m die Anzahl der gekauften Aktien m deren Kurs zu dem die Aktien gekauft wurden m Geb hren die bei dem Kauf angefal
383. inzelnen Getr nkef cher dem M nzautomat usw Der Automat bleibt solange in diesem Zustand bis ein Kunde die erste M nze einwirft Daraufhin wechselt er in den Zustand kassierend Dort k nnen weiterhin beliebig viele M nzen eingeworfen werden Wenn der Kunde ein Getr nk w hlt wechselt der Automat in einen tempor ren Zustand in dem das entsprechende Getr nkefach auf Inhalt und das Wechselgeld gepr ft wird Gleichzeitig zeigt der Automat den Preis f r das gew hlte Getr nk digital an Ist der Beh lter leer wird dies angezeigt und der Automat bleibt im Zustand kassie rend Der Kunde kann dann ein anderes Getr nk w hlen oder den Vorgang abbrechen wobei er sein eingezahltes Geld zur ck erh lt Der Automat bleibt auch in dem Zustand wenn noch nicht gen gend Geld eingeworfen wurde Ist das eingezahlte Geld ausreichend so wechselt der Automat in den tempor ren Zustand Wechselgeld ausgeben wenn der Kunde noch Geld zur ckbekommt Ansonsten wird direkt die Mechanik des Getr nkeauswurfs aktiviert und der Automat wechselt wieder zur ck in den bereit Zustand M nzeneEin Betrag Guthaben setzen kassierend M nzenEin Betrag Guthaben erh hen bereit abbrechen M nzen zur ck Flaschen leer leer w hlen Getr nk Preis anzeigen do Flaschen pr fen und Wechselgeld berechnen Wechselgeld 0 Wechselgeld gt 0 do Flasche ausgeben Abbildung 3 72 Zustandsdiagram
384. ionSource 31 gt string 17 DOMImplementation 32 gt string 7 DOMNode 33 gt string 16 DOMNameSpaceNode 34 gt string 19 DOMDocumentFragment 35 gt string 11 DOMDocument 36 gt string 11 PHP Endlich objektorientiert 235 4 PHP objektorientiert DOMNodeList 37 gt string 15 DOMNamedNodeMap 38 gt string 16 DOMCharacterData 39 gt string 7 DOMAttr 49 gt string 10 DOMElement 41 gt string 7 DOMText 42 gt string 10 DOMComment 43 gt string 11 DOMTypeinfo 44 gt string 18 DOMUserDataHandler 45 gt string 11 DOMDomError 46 gt string 15 DOMErrorHandler 47 gt string 10 DOMLocator 48 gt string 16 DOMConfiguration 49 gt string 15 DOMCdataSection 50 gt string 15 DOMDocumentType 51 gt string 11 DOMNotation 52 gt string 9 DOMEntity 53 gt string 18 DOMEntityReference 54 gt string 24 DOMProcessingInstruction 55 gt string 15 DOMStringExtend 56 gt string 8 DOMXPath 57 gt string 25 RecursivelteratorIterator 58 gt string 16 IteratorIterator 59 gt string 14 FilterIterator 60 gt string 23 RecursivefilterIterator 61 gt string 14 ParentIterator 62 gt string 13 Limitlterator 63 gt string 15 CachingIterator 64 gt string 24 RecursiveCachinglIterator 65 gt string 16 NoRewindIterator 66 gt string 14 AppendIterator 67 gt string 16 I
385. ionen einer Klasse Die beeindruckende Ausgabe des Skripts aus Listing 4 23 lautet class_exists bool true get_class_methods array 4 0 gt string 11 construct 1 gt string 15 setAusgeliefert 2 gt string 10 _toString 3 gt string 7 _clone get_declared_classes array 140 0 gt string 8 stdClass 1 gt string 9 Exception 2 gt string 14 ErrorException 3 gt string 16 COMPersistHelper 4 gt string 13 com_exception 5 gt string 19 com_safearray_proxy 6 gt string 7 variant 7 gt string 3 com 8 gt string 6 dotnet 9 gt string 19 ReflectionException 10 gt string 10 Reflection 11 gt string 26 ReflectionFunctionAbstract 12 gt string 18 ReflectionFunction 13 gt string 19 ReflectionParameter 14 gt string 16 ReflectionMethod 15 gt string 15 ReflectionClass 16 gt string 16 ReflectionObject 17 gt string 18 ReflectionProperty 18 gt string 19 ReflectionkExtension 19 gt string 8 DateTime 20 gt string 12 DateTimeZone 21 gt string 11 LibXMLError 22 gt string 22 _PHP_Incomplete_Class 23 gt string 15 php_user_filter 24 gt string 9 Directory 25 gt string 16 SimpleXMLElement 26 gt string 12 DOMException 27 gt string 13 DOMStringList 28 gt string 11 DOMNamelist 29 gt string 21 DOMImplementationList 30 gt string 23 DOMImplementat
386. ird in Kapitel 2 1 4 vorgestellt m Resource ID Dabei handelt es sich um einen Zeiger auf eine ge ffnete Datenquelle beispiels weise auf eine Datei oder eine Datenbankverbindung Solche Zeiger werden auch als Handles bezeichnet Der Wertebereich ist eine Untermenge des Integer Wertebereichs m Object Eine Objektreferenz ist ein Zeiger auf ein Objekt das eine Menge von Daten besitzt die man auch Attribute oder Eigenschaften nennt Zus tzlich besitzt ein Objekt eine Menge von eigenen Funktionen Die M glichkeiten von Objekten wurden in PHP5 stark erweitert Die theore tischen Grundlagen der Objektorientierung werden im dritten Kapitel die Umset zung in PHP im vierten Kapitel besprochen m NULL gt Seit PHP4 gibt es den speziellen Datentyp NULL den man am Besten mit nichts bersetzen kann Eine Variable ist dann NULL wenn ihr noch kein Wert zugewiesen wurde wenn sie gel scht wurde oder wenn ihr direkt NULL zugewiesen wurde z B x NULL Bei einer Zuweisung oder einer Abfrage auf NULL d rfen keine Anf hrungszei chen verwendet werden da PHP sonst eine Zeichenkette NULL erzeugt Ausgabe von Variablen Bei der Ausgabe der Variablen g und h in Listing 2 4 ist f r einen Programmierer unge w hnlich dass gar keine Ausgabe erscheint Aus anderen Sprachen h tte man ein FALSE oder zumindest 0 erwartet Die einfache Ausgabe einer Variablen durch lt php echo g gt oder lt php echo g gt kan
387. ird innerhalb der Klasse ber eine Klassenmethode aufgerufen die zun chst pr ft ob instance noch null ist Ist dies der Fall so wird einmalig der Konstruk tor aufgerufen Andernfalls wird die Instanz auf das bereits bestehende Objekt zur ck gegeben Singleton instance Singleton __construct getInstance Singleton Abbildung 5 41 Das Design Pattern Singleton als UML Diagramm Abbildung 5 41 zeigt das UML Diagramm eines Singletons wobei die Bezeichner eben falls genormt sind So k nnen andere Programmierer das Singleton leichter identifizie ren Da es sich dabei um das einfachste Design Pattern handelt wird in Listing 5 27 eine Implementierung in PHP vorgestellt lt php class Singleton private static instance NULL privater Konstruktor private function __construct die statische Methode gibt die Instanz zurueck public static function getInstance if self instance NULL self instance new self return self instance das Klonen von au en muss verboten werden Listing 5 27 Implementierung des Singletons in PHP PHP Endlich objektorientiert 403 5 Projektpraxis private function __clone Aufruf der Instanz singleton Singleton getInstance Listing 5 27 Implementierung des Singletons in PHP Forts Zwei Schnittstellen zusammenbringen mit einem Adapter Ihnen ist es bestimmt bereits passiert dass Sie ein elektronisches Ger
388. ise bei der Softwareentwicklung Profitipp Die Wiederverwendbarkeit von Quellcode spielt in der Softwareentwicklung eine immer gr ere Rolle um Kosten und Zeit f r die Erstellung einer individuellen Anwendung einzusparen Daher wird die Wiederverwendbarkeit in der Objektori entierung Kap 3 4 und Kap 4 st rker ber cksichtigt Programmieren Sie also in jedem Fall so dass m glichst viel Ihres Quellcodes problemlos durch Kopieren in zuk nftigen Projekten anwendbar ist Gerade bei den ersten eigenst ndigen Projekten haben viele Entwickler Schwierigkeiten Wie man von den Vorstellungen Ihres potenziellen Kunden zu einer Softwarel sung gelangt ist in der Informatik eine eigene Wissenschaft geworden die als Software Engineering bezeichnet wird was man im Deutschen meist mit Softwaretechnik ber setzt Diese Wissenschaft hat ber die Jahre eine Reihe von Modellen und Vorgehens weise hervorgebracht die jeder PHP Entwickler kennen sollte In der kontinuierlichen Weiterentwicklung der Modelle wurde insbesondere die zuneh mende Anzahl an Projektbeteiligten aus verschiedenen Fachbereichen die zunehmende Projektgr e und komplexit t ber cksichtigt W hrend im weiteren Verlauf dieses Kapitels traditionellere Vorgehensweisen vorgestellt werden die bei bestimmten Projek ten immer noch ihre Berechtigung haben widmet sich Kapitel 3 2 der Objektorientierung mit den aktuellen agilen Methoden der Softwareentwicklung die den
389. ist Sie bekommt die ID des Bestands in der Liste der Aktienbest nde in PHP Endlich objektorientiert 375 5 Projektpraxis in der Variable w bergeben Die Zeile lt a href uebersicht php w i gt w hlen lt a gt setzt bei einem Klick auf den Link das HTTP Get Kommando ab Je nachdem ob der Bestand bereits verkauft wurde oder noch nicht wird die Ausgabe der Bilanz also leicht ange passt Wenn der Einkaufspreis zuz glich aller angefallenen Kosten gr er ist als der aktuelle Wert des Bestands bzw der Verkaufswert jeweils zuz glich erhaltener Dividenden und abz glich der Verkaufsgeb hr haben Sie Verlust erwirtschaftet In diesem Fall gilt bilanz ekSummel gt bilanz aktSumme und eine Variable farbe erh lt den Hex Wert FF0000 als Zeichenkette Sie haben also rote Zahlen geschrieben Im anderen Fall wird die Farbe auf den RGB Wert Rot Gr n Blauanteile 00FF00 gesetzt und es ist alles im gr nen Bereich Jede Bilanz wird dann in einer eigenen HTML Tabelle ausgegeben die ausschnittsweise dargestellt wird Die Gleitkommawerte werden auf zwei Nachkommastellen ber den Befehl number_format wert 2 gerundet Die CSS Angaben zur Style Formatierung sind in diesem Beispiel noch fest in die HTML Tabelle integriert Gerade bei gr eren Projek ten sollten die Style Angaben in externe CSS Dateien ausgelagert werden Die HTML Tabellen verweisen dann lediglich auf einen bestimmten CSS Stil Abbildung 5 22 zeigt die b
390. it PHP als function deklariert die eine Menge von Variablen zur Eingabe ben tigt eine Verarbeitung vor nimmt und eine Ergebnismenge als Ausgabe liefert Dieses Vorgehen der Eingabe Verar beitung Ausgabe wird als EVA Prinzip bezeichnet Die Teilung kann mehrfach erfol gen da Funktionen wieder andere Funktionen aufrufen k nnen Auf der untersten Ebene werden nur PHP eigene Funktionen und Anweisungen abgearbeitet Der Unterschied zwischen einer Prozedur und einem Modul besteht lediglich im Umfang der Funktionalit t und damit in der Abstraktion zwischen der Maschinen denkweise und der Denkweise des Anwenders der mit der PHP Anwendung umgeht Typische Aufgaben f r Prozeduren sind beispielsweise m Datenbankverbindung ffnen m Datei schreiben m Eingaben pr fen Dies spielt sich auf einer technischen Ebene ab und ist daher von einem Programmierer leicht zu verstehen Bei kleinen Problemen ist ein Programmierer in der Lage eine Auf gabenstellung direkt auf diese Ebene herunterzubrechen Die Bezeichnungen f r Softwaremodule abstrahieren vom PHP Quellcode in Richtung des Anwenders Wenn Sie einen Manager danach fragen welche Funktionen denn das neue PHP Portal besitzen soll so kann er unter anderem antworten mit Artikel verwalten Kunden verwalten m Bestellungen verwalten Diese Funktionen sind so komplex dass sie nicht direkt in einer einzigen PHP Funktion abgearbeitet werden k nnen Die Artikel Kunden und Be
391. ittelt die h chstm gliche Zahl die durch die Funktion szanderzeugt werden kann srand var legt ber vareinen internen Startwert f r den Zufallsgenerator fest erg rand min max gibt eine Zufallszahl zwischen minund Smax zur ck Tabelle 2 22 Funktionen f r Zufallszahlen 68 entwickler press Erweiterte Funktionen Mit srand initialisieren Sie den Zufallsgenerator Wichtig ist dabei dass der Parameter von srand bereits m glichst zuf llig gew hlt wird Ein gleicher Initialwert f hrt n mlich zu einer gleichen Folge von Zufallszahlen Mit rand erzeugen Sie nun eine Zufallszahl als Ganzzahl in den angegebenen Grenzwerten Listing 2 58 zeigt die Initialisierung des Zufallszahlengenerators sowie die Erzeugung und Ausgabe von drei Zufallszahlen lt html lt body gt lt php zeit microtime zeitfeld explode zeit data zeitfeld LA zeitfeld 1 srand data Initialisierung zufall rand 0 1000 echo zufall lt br gt 2 zufall rand 0 1000 echo zufall lt br2 zufall rand 0 1000 echo zufall lt br2 lt body gt lt html gt Listing 2 58 Erzeugung von Zufallszahlen 2 2 Erweiterte Funktionen Nachdem in Kapitel 2 1 grundlegende Funktionen der Sprache PHP vorgestellt wurden ist dieses Kapitel auf die Anwendung dieser Funktionalit t in typischen kleineren Prob lemstellungen fokussiert Die L sungen dieser Problemstellungen finden oft Verwen dung in An
392. ivate daten null private tn array function start p name atts this daten null switch name case TEILNEHMER this gt aktuell atts ID this tn this gt aktuell new Teilnehmer this tn this gt aktuell gt geschlecht atts GESCHLECHT break function ende p name if this gt aktuell null return true switch name case NAME this tn this gt aktuell gt name this gt daten break case VORKENNTNIS this tn this gt aktuell gt vorkenntnisse this gt daten lt br gt 2 break case VORKENNTNISSE this gt aktuell null break Listing 4 65 Die Hilfsklasse f r den SAX Parser PHP Endlich objektorientiert 299 4 PHP objektorientiert function cData p data daten trim data if lempty daten this gt daten daten function getTN return this gt tn Listing 4 65 Die Hilfsklasse f r den SAX Parser Forts Wie funktioniert nun diese Hilfsklasse Als ffnendes XML Element wird nur lt teilneh mer gt betrachtet alle anderen ffnenden Elemente werden ignoriert Den Namen des Ele ments und dessen Attribute gelangen als Input Parameter in die Methode Der SAX Par ser bef llt die Parameter automatisch sodass Sie sich darum nicht k mmern m ssen Als Attribute des Elements Teilnehmer werden die Teilnehmer ID und das Geschlecht des Teilnehmers festgehalten Diese Attribute werden aus der XML Datei extrahiert Aus der ID
393. jekte in einer Datenbank Die Erzeugung von einfachen Objekten ist aber f r das Erlernen der Objektorientierung sehr hilfreich um deren Prinzipien kennen zu ler nen PHP Endlich objektorientiert 217 4 PHP objektorientiert 4 1 3 Objekte speichern und laden De Serialisierung Die im vorherigen Kapitel besprochene Serialisierung in einer Session kann auch manu ell durch den Befehl serialize angesto en werden Sie erhalten dadurch ein serialisiertes Objekt in einer Zeichenkette Dieses Objekt k nnen Sie dann in einem versteckten Text feld ber mehrere Formulare bertragen oder auch in einer Datei ablegen Der Quellcode aus Listing 4 6 zeigt in einer ver nderten stifterzeugung php das Serialisie ren des Stiftobjekts und das Festhalten der serialisierten Daten in der Variable ser Die serialisierte Zeichenkette des Objekts wird dann in die Datei objekt txt abgelegt lt php require_once stift inc php frmFarbe _POST LfrmFarbe einStift new Stift frmFarbe ser serialize einStift datei fopen objekt txt w fwrite datei ser fclose datei gt lt html gt lt body gt Ein Stift der Farbe lt php echo einStift gt getFarbe gt wurde erzeugt lt br gt lt a href weiter php gt Weiter gehts lt a gt lt br gt lt body gt lt htm1 gt Listing 4 6 Speicherung eines serialisierten Objekts in einer Datei Diese Datei wird in Listing 4 7 in der ver nderten weiter php wieder ausgelese
394. jektorientiert 71 2 Die Sprache PHP Prozedural echo var_dump D3 lt br gt 2 gt lt body gt lt html gt Listing 2 60 Quellcode der Auswertung des GET Formulars fachlogik_get php Forts Die zweite M glichkeit besteht darin das ausgef llte Formular ber HTTP POST an ein PHP Skript zu bergeben In diesem Fall werden die Benutzereingaben nicht ber den URL sondern direkt in HTTP Paketen weitergegeben Diese Weitergabe vom Client an den Server wird vom HTTP Protokoll selbst verwaltet und unterliegt im Gegensatz zu der GET Methode keinen L ngen oder Sonderzeichenbeschr nkungen Um ein ausge f lltes Formular per HTTP POST zu bertragen m ssen Sie lediglich den form Befehl im HTML Code um ndern zu lt form action fachlogik_post php method post gt Wie Sie sehen wird hier eine andere PHP Datei angesteuert Die Auswertung eines per POST bergebenen Formulars ist zu der GET bergabe nahezu identisch Der einzige Unter schied liegt darin dass bei der Auswertung eines POST Formulars ein anderes assoziati ves Datenfeld von PHP ausgewertet werden muss n mlich _POST Listing 2 61 zeigt das entsprechende Formular mit der Ausgabe der begebenen Parameter wie so oft unter Verwendung des Befehls var_dump lt html gt lt body gt lt php P1 _POST Param1 P2 _POSTL Param2 P3 _POSTL Param3 D1 _POSTL Dienst1 D2 _POSTL Dienst2 D3 _POSTL Dienst3 echo var_dump P1 lt br gt 2 e
395. kaufsabteilung oder um einen konkreten Tarif Tv D 12 handeln Jedes Objekt hat einen inneren Zustand ein Verhalten zur Umwelt und eine Identit t die das Objekt eindeutig identifiziert und es somit von ande ren Objekten unterscheidet Aus Sicht eines Entwicklers ist ein Objekt mehr als nur eine Zahl ein Wert oder eine Zei chenkette Es ist stets aus verschiedenen Elementen zusammengesetzt Beispiel Herr Meier hat den Beruf eines Verk ufers in dem Autohaus EuroCar Frau Schulz betritt das Autohaus und m chte sich erst einmal umsehen Herr Meier sieht das Kaufinteresse und spricht Frau Schulz an Sie interessiert sich insbesondere f r Fami lienwagen da sie verheiratet ist und 2 Kinder hat Au erdem bevorzugt sie rote Autos sie findet die Farbe sch n Herr Meier findet im Gespr ch heraus dass Frau Schulz gern an Wochenenden Familienausfl ge im Umkreis von 500km von ihrem Wohnort durchf hren will Herr Meier ber t sie zuerst auf den sportlichen Kombi Y3 mit 250PS Er hat gen gend Leistung f r Autobahnfahrten und kostet 53 000 Euro Frau Schulz lehnt nach 10 Minuten dankend ab Nun versucht Herr Meier sein Gl ck bei dem neuen i2000 der an einen kleinen Bus erinnert Dieses Auto hat 140 PS und einen Hybridantrieb der 70 weniger Benzin verbraucht als der Y3 Von der ger u migen Ausstattung ist Frau Schulz direkt berzeugt Die beiden gehen in das B ro von Herrn Meier und schlie en einen Kaufvertrag ab Frau Schulz m chte in ei
396. kenntnissen Der Teilnehmer besitzt zwei weitere Attribute die zwin gend angegeben werden m ssen n mlich eine ID und das Geschlecht ber das Schl s selwort IMPLIED k nnen Sie brigens optionale Attribute definieren Die Liste der Vorkenntnisse besteht aus Elementen vom Typ Vorkenntnis Dieses Element besteht wiederum nur aus Text der mit Zahlen vermischt sein kann lt ELEMENT seminare seminar gt lt ELEMENT seminar name dozent teilnehmerliste gt lt ATTLIST seminar id NMTOKEN REQUIRED gt lt ELEMENT name PCDATA gt lt ELEMENT dozent PCDATA gt lt ELEMENT teilnehmerliste teilnehmer gt lt ELEMENT teilnehmer name vorkenntnisse gt lt ATTLIST teilnehmer id NMTOKEN REQUIRED geschlecht NMTOKEN REQUIRED gt lt ELEMENT vorkenntnisse vorkenntnis gt lt ELEMENT vorkenntnis PCDATA gt Listing 4 71 Die passende DTD Listing 4 72 zeigt wie das Einlesen der XML Datei mit anschlie ender Pr fung vollzo gen wird Wie gew hnlich wird das XML Dokument mit dem DOM Parser aus dem Dateisystem des Servers in den Speicher geladen Dabei erfolgt das Pr fen auf Wohlge formtheit Der Dokumentbaum kann nun ber die Methode validate des DOM Objekts sehr leicht auf G ltigkeit gepr ft werden Sie m ssen also keine weitere Programmie rung vornehmen Dabei wird gegen die DTD gepr ft die in der XML Datei angegeben wurde Die validate Methode liefert TRUE zur ck bei einer erfolgreich
397. klasse die keine besonderen Merkmale aufweist Die beiden Eigenschaften x und y werden im Konstruktor bergeben und k nnen durch Get Metho den ausgelesen werden Die Daten des Punktes k nnen zus tzlich durch die implemen tierte __toString Methode ausgegeben werden Realisierung von Klassengeflechten lt php class Punkt private x private y public function __construct x y this gt x x this gt y y public function getX return this gt x public function getY return this gt y public function _toString return x this gt x y this gt y Listing 4 42 Die Punktklasse Wichtiger ist die Frage wie die Aggregation zum Dreieck realisiert wird Da ein Dreieck genau aus drei Punkten bestehen muss werden diese Punkte im Konstruktor des Drei ecks bergeben und als Eigenschaften im Dreieck festgehalten Das Dreieck besteht also aus den drei Punkten Hier ist als N chstes die Frage zu stellen ob man aus beliebigen drei Punkten ein Dreieck bilden kann Die Antwort lautet nach kurzem Nachdenken Nein Wann genau kann man aber kein Dreieck aus drei Punkten bilden m Zwei oder drei Punkte verf gen ber dieselben x und y Koordinaten sind also inhaltlich gleich Sie liegen dann bereinander Alle drei Punkte haben dieselbe x oder dieselbe y Koordinate Sie liegen dann paral lel zur x Achse oder zur y Achse Diese ersten beiden Kriterien sind relativ leicht zu
398. kmusters Dokument abstract doc erzeugeDokument CO docs gt add doc erzeugeDokument abstract doc gt ffneDokument neuesDokument Dokument return new MeinDokument ffneDokument MeinDokument A aE erzeugeDokument Abbildung 5 40 Skizze des Design Patterns Fabrik Erstellung von gutem Quellcode Nur ein Exemplar seiner Art Singleton Es kann vorkommen dass Sie eine Klasse programmieren von der Sie f r den Benutzer nur genau ein Objekt anlegen d rfen So sollten Sie beispielsweise nicht mehrere Daten bankverbindungen gleichzeitig zu einem Datenbankserver aufbauen da bei einer hohen Anzahl an Benutzer mehrere Verbindungen pro Benutzer den Datenbankserver berlas ten k nnen Werden von mehreren PHP Skripten Datenbankverbindungen ben tigt so sollten die Skripte stets dieselbe Referenz auf ein einziges Datenzugriffsobjekt besitzen Weitere Beispiele f r ein Singleton sind Klassen die Hardwarekomponenten kapseln oder Klassen zur Objektverwaltung wie eine Kunden oder eine Aktienverwaltung Da ein Objekt keine Kenntnis von der Existenz der anderen Objekte hat muss die Klasse selbst die Verwaltung bernehmen Die L sung besteht darin eine Klasseneigenschaft instance zu definieren die eine Referenz auf das einzige Objekt dieser Klasse erstellt Damit man nicht mehrere Objekte anlegen kann wird der Konstruktor der Klasse auf private gesetzt Er w
399. ktiengesellschaften Neben einer eigenen ID als Prim rschl ssel Kapitel 3 1 3 Zus tz lich werden der Tag der Wert des Kurses und die ID der Aktiengesellschaft abgelegt Wenn in einer Tabelle der Prim rschl ssel einer anderen Tabelle eingebunden wird wird dieser Schl ssel als Fremdschl ssel bezeichnet Es stellt sich die Frage wieso zwei Tabellen angelegt werden wobei eine Tabelle ledig lich aus den Namen der Aktiengesellschaft besteht Wieso wird der Name der Aktienge sellschaft nicht anstelle des Fremdschl ssels eingebunden Gibt es Regeln zur Erstellung von Datenfeldern Die Anwendung der Regeln zur Erstellung von Datenbanktabellen wird als ER Model lierung Entity Relationship bezeichnet Dazu geh rt die Anwendung der so genannten Normalisierung Um eine Datenbank bereits in die erste Normalform zu bringen muss jedes Datenfeld aus einem atomaren Wert bestehen den man nicht weiter zerlegen kann So muss der Name einer Person in den Feldern Vor und Nachname abgelegt werden Das Gleiche gilt f r Adressen die in PLZ Ort Stra e und Hausnummer abgelegt werden m s sen Dadurch werden Suchen und statistische Auswertungen der Daten erm glicht PHP Endlich objektorientiert 87 2 Die Sprache PHP Prozedural Nun zu der Frage warum berhaupt zwei Tabellen notwendig sind und nicht die Namen der Aktiengesellschaften direkt in die Tabelle kurse geschrieben werden Abbil dung 2 15 zeigt die Struktur dieser Tabelle Ne
400. ktorientiert 163 3 Vorgehensweise bei der Softwareentwicklung Seminarverwaltung X Dozent Kunde R ume verwalten Parkpl tze verwalten Shuttle verwalten System Updates Abbildung 3 30 Anwendungsfall der Seminarverwaltung aus der Wolkenperspektive Admin Die Ellipsen beinhalten je eine globale Funktionalit t Die Bezeichnung beinhaltet zumeist ein Verb Globale Perspektiven bestehen in der Regel aus Verwaltungen die ihrerseits wiederum eine Vielzahl von Funktionen anbieten Neben der Ermittlung von Funktionen sollten Sie auch die wichtigsten Akteure identifi zieren die in jeden Anwendungsfall involviert sind Akteure sind dabei meist Personen Personengruppen oder Rollen wie ein Sachbearbeiter ein Kunde oder ein Administra tor Jede Rolle hat spezifische Berechtigungen in der Anwendung und wird meist ber einen Anmeldevorgang am System identifiziert Bei einem Akteur kann es sich jedoch auch um eine Institution handeln beispielsweise um ein Kreditinstitut bei dem ein Autoh ndler eine Schufa Auskunft erbittet Es kann ebenso eine Technologie sein die selbst agiert Wenn zum Beispiel eine Alarmanlage ber das Mobilfunknetz eine SMS mit einer Einbruchsmeldung versendet tritt die Alarmanlage gegen ber dem Mobilfunk netz als Akteur auf Sowohl bei den Anwendungsf llen als auch bei den Akteuren k nnen Sie Vererbungs pfeile verwenden Die Ist ein Phrase trifft auch hier zu So ist die Verwalt
401. l definierte Variable erst einmal nicht von dem Zugriff auf eine deklarierte Eigenschaft des Objekts unterschei den Wenn Sie auf die Eigenschaft zugreifen wollen m ssen Sie daher auch die this Referenz verwenden indem Sie mit dem Befehl this gt farbe farbe der Eigenschaft des Objekts den von au en bergebenen Wert zuweisen Der Zugriff auf die private Eigen schaft ist an dieser Stelle m glich da Sie sich ja in der Klasse selbst befinden Die Objekterzeugung Nachdem die Klasse als Bauplan f r Objekte erstellt wurde k nnen Sie nun versuchen ein erstes Objekt dieser Klasse anzulegen Dies funktioniert sehr leicht indem Sie im ers ten Schritt eine zus tzliche PHP Datei erstellen und die Klassendatei ber require_once einbinden Eine m gliche mehrfache Einbindung w rde zu einer mehrfachen Klassende klaration mit demselben Namen und damit zu einem Fehler f hren Im HTML Rumpf der PHP Datei kann nun das erste Objekt angelegt werden F r die Erzeugung von neuen Objekten bietet PHP wie auch die meisten anderen objektorien tierten Sprachen das Schl sselwort new an Hinter diesem Schl sselwort m ssen Sie den Namen der Klasse angeben von der Sie ein neues Objekt anlegen wollen Wenn Sie keine Parameter angeben wird der parameterlose Default Konstruktor der Klasse aufgerufen Dieser existiert jedoch bei unserer Klasse nicht Stattdessen m ssen Sie eine Zeichenkette als Parameter bergeben der die Farbe des zu erstellenden Stif
402. l liest Konfigurationsoptionen vollst ndig aus m nl2br f gt vor allen Zeilenumbr chen einer Zeichenkette HTML Zeilenumbr che ein round rundet eine Flie kommazahl stream_context_create erzeugt einen Datenstrom m strstr findet das erste Auftreten einer Zeichenkette in einer anderen Zeichenkette Eine genauere Beschreibung der neuen M glichkeiten dieser Funktionen k nnen Sie in der Onlinereferenz unter http www php net manual en nachlesen Geben Sie dort im Suchfeld den Namen der Funktion ein Die Neuerungen werden innerhalb der Doku mentation im Changelog festgehalten Bitte beachten Sie dass die deutsche Version der Onlinereferenz nicht immer auf dem neuesten Stand ist 4 6 6 Ausblick auf PHP 6 Auch wenn der Erscheinungstermin des n chsten gro en Versionssprungs auf PHP 6 noch unbekannt ist werden bei den Entwicklern von PHP und in Foren bereits einige notwendige Erweiterungen diskutiert die in der aktuellen Version 5 3 noch nicht enthal ten sind Die erste geplante Erweiterung besteht in der Einf hrung des Unicode Zeichensatzes Dieser Zeichensatz ist bereits bei anderen objektorientierten Sprachen wie Java und dem NET Framework weit verbreitet Der zentrale Unterschied zu einem landestypischen ASCI Zeichen besteht darin dass ein Unicode Zeichen aus 2 Bytes statt aus einem Byte besteht Unicode bzw das Universal Character Set UCS ist ein international genormter Stan dard nach ISO 10646 in dem f r jedes Schriftz
403. lange den bereits erstellten Quellcode und sehen den Fehler nicht Erst wenn ein Kollege dazukommt der sich meist mit dem Problem gar nicht auskennt und Sie mit diesem Kollegen ber das Problem reden findet sich die L sung nach eini gen Minuten Dieser Vier Augen Effekt wird bei der Paarprogrammierung durch die Anwesenheit zweier Entwickler ausgenutzt und durch die st ndige Pr senz auch das grundlegende Design des Quellcodes verbessert Objektorientierte Programmierung Auch die Paarzusammenstellung soll sich regelm ig ndern damit sich die Entwickler nicht zu sehr aneinander gew hnen Dies setzt nat rlich einen gen gend gro en Ent wicklerstamm voraus bei dem Einzelne nicht zu spezialisiert auf ein Fachgebiet sind Wenn dies der Fall ist wird durch die Teamwechsel das Wissen ber den Quellcode im Unternehmen verbreitet und der Effekt der unverzichtbaren single Heads of Know legde bzw der Key Entwickler verringert Key Entwickler sorgen daf r dass der Projektfortschritt stillsteht bzw das Wissen aus dem Unternehmen verschwindet wenn sie in Urlaub oder krank sind oder gek ndigt haben Neben der Erh hung sozialer Kompetenz der verbesserten G te des Quellcodedesigns einer spannenderen Zusammenarbeit als das einsame Kodieren vor einem PC ist noch das so genannte Collective Code Ownership zu nennen Sind Einzelne f r ihren Quellcode verantwortlich so neigen sie dazu resistent gegen ber ver nderten Anforder
404. lanzierung darstellen m Die Integration mehrerer Depots f r einen Benutzer Somit k nnten Aktienbest nde gruppiert werden Die Funktion auch Teile eines Bestands zu verkaufen Die dabei erzielten Gewinne bzw Verluste w rden dann separat in der Bilanz verwaltet m Eine grafische Statistik die eine Historie des Depotwerts anzeigt ber einen Tag eine Woche einen Monat und ein Jahr Die Verwaltung laufender Depotkosten Manche Depotanbieter verlangen zus tzlich zu den Transaktionsgeb hren j hrliche Geb hren f r die Verwaltung eines Depots Diese Geb hren reduzieren nat rlich den Gewinn und sollten in die Bilanz mit einge pflegt werden k nnen m Die M glichkeit einzelne Best nde in die Datenbank zu laden und zu speichern Bis lang istnur ein Laden und Speichern der gesamten Best nde m glich Hinweis Als bung k nnen Sie den bislang vorgestellten Prototyp realisieren und sich im Anschluss daran eine oder mehrere der oben skizzierten Funktionen vornehmen Sch tzen Sie den Aufwand f r die Realisierung der Funktionen und binden Sie die Funktionalit t in die Anwendung mit ein Wie pr zise k nnen Sie die Aufwand sch tzungen vornehmen Wie nahe liegen Sie an den ben tigten Ressourcen der rea len Umsetzung 5 2 Erstellung von gutem Quellcode Abschlie end werden in diesem Buch Regeln und Werkzeuge vorgestellt die bei der Entwicklung einer PHP Anwendung behilflich sind und zu einer Verbesserung der Qua lit
405. ld umgewandelt und zur ckgegeben Der Aufrufer der Methode kann dann dieses Datenfeld weiterverwenden lt php class Rechnungf private id private datum private kunde private rabatt in private bezahlt FALSE private positionen Array private anzPositionen 0 public function __construct id datum kunde rabattGesamt artikel menge rabattPos1 this id id this gt datum datum this gt kunde kunde this gt rabatt rabattGesamt this gt positionen d new Rechnungsposition artikel menge rabattPos1 this gt anzPositionen 1 kunde gt addRechnung this Listing 4 40 Die neue Rechnungsklasse Realisierung von Klassengeflechten public function getID return this id public function getDatum return this datum public function getKunde return this gt kunde public function getRabatt return this gt rabatt public function getBezahlt return this bezahlt public function getGesamtsumme summe 0 0 foreach this gt positionen as index gt wert summe wert gt getGesamtpreis summe summe 1 this gt rabatt 100 return summe public function getPositionen i 0 position Array foreach this gt positionen as index gt p position i L p gt getArtikel position i L1 p gt getMenge position ilL2 p gt getRabatt position i L3 p gt getEP position i L4 p gt getGesamtpreis
406. ld zur ck die Konfigurationsangaben m s sen in einem Format vorliegen wie es in der php iniverwendet wird nach der Notation Parametername Wert Icfirst wandelt den ersten Buchstaben einer Zeichenkette in einen Kleinbuchstaben um die Funktion zum Gro schreiben des ersten Buchstabens ycfirst exis tiert bereits in vorherigen PHP Versionen array_replace ersetzt Elemente in einem Datenfeld durch andere Elemente die von au en bergeben werden array_replace_recursive wie array_replace funktioniert jedoch auch f r Felder die wiederum Felder enthalten Tabelle 4 4 Neue Funktionen in PHP 5 3 Au erdem wurden einige bestehende Funktionen in PHP 5 3 um weitere Parameter erg nzt die eine verbesserte Handhabung der Funktionen erm glichen Die Parameter sind alle optional und wurden so eingef gt dass Skriptquellcodes f r ltere PHP Ver sionen unver ndert ausgef hrt werden k nnen Die Erweiterungen betreffen die Funk tionen array_reduce wendet eine bergebene Funktion iterativ bei den Elementen eines Fel des an sodass das Feld auf einen einzigen Wert reduziert wird m clearstatcache l scht den Status Cache des Skripts copy kopiert eine Datei PHP Endlich objektorientiert 325 4 PHP objektorientiert m fgetcsv liest eine Zeile von der Position des Dateizeigers aus und pr ft auf Daten im CSV Format Comma Separated Values getimagesize ermittelt die Gr e einer Bilddatei ini_get_al
407. le Kreise Ellipsen und Vierecke gezeichnet und mit Text versehen werden k nnen alle UML Dia gramme in ihren Notationen umgesetzt werden Es handelt sich um eine kostenpflichtige Lizenz die sich auf einen Arbeitsplatz bezieht Unternehmen die ohnehin einen Lizenzvertrag mit Microsoft besitzen Stichwort MSDN Microsoft Developer Network k nnen in der Regel verg nstigt auf eine Visio Lizenz zugreifen Andererseits widerspricht der Open Source Gedanke von PHP und beispielsweise von dem XAMPP Paket dem lizenzpflichtigen Modell Erstellung von gutem Quellcode F r Visio spricht jedoch die einfache Handhabung eines komplexen vektororientierten Zeichenprogramms aus Anwendersicht sowie die Integration in das weit verbreitete Office Paket von Microsoft Eine Visio Zeichnung VSD Visio Drawing besteht aus mehreren Zeichenbl ttern die eine nahezu beliebige Gr e einnehmen k nnen Die Anwendung verf gt ber alle not wendigen Zeichenfunktionen sowie die M glichkeit eigene Symbolbibliotheken anzule gen VSS Visio ShapeSheet Die erstellten Zeichnungen k nnen in Pixelformate JPG GIF exportiert oder auch direkt ber OLE Object Linking and Embedding mit anderen Office Anwendungen ausgetauscht werden Eine Vollversion von Microsoft Visio 2007 Standard kostet derzeit ca 329 ein Upgrade ca 159 E uml vsd Microsoft Visio BAX de Datei Bearbeiten Ansicht Einf gen Format Extras Shape Fenst
408. left width 50 gt lt input type text name verkaufgeb hr size 10 gt lt td gt lt tr gt lt tr gt lt td align right width 50 gt lt input type submit name eingabe value OK SS lt td gt lt td align left width 50 gt lt input type submit name eingabe value Abbrechen gt lt td gt lt tr gt lt table gt lt form gt lt p gt Die Geb hren die zu erheben w ren wenn man den Aktienbestand jetzt verkaufen w rde lt p gt lt php require_once footer inc php gt Listing 5 15 neu php View Forts Wie in jedem anderen Anwendungsfall werden auch hier der Header und der Footer ein gebunden Die Datei selbst besteht aus einer HTML Tabelle in der alle Parameter einge geben werden die zur Erstellung eines neuen Aktienbestands notwendig sind Sie k nn ten zus tzlich dazu clientseitige G ltigkeitspr fungen beispielsweise in einem Java Skript vornehmen um den Benutzer fr hzeitig auf Fehleingaben hinzuweisen Das HTML Formular der View verweist auf neu2 php die eine Controller Datei darstellt Die eingegebenen Daten werden per HTTP POST Protokoll bergeben Abbildung 5 20 zeigt zun chst die Eingabemaske der Datei neu php Wenn Sie in Abbildung 5 20 nun auf OK oder Abbrechen klicken werden alle eingegebe nen Daten per HTTP POST an die Datei neu2 php bertragen Deren Quellcode ist in Lis ting 5 16 dargestellt Dort wird zun chst gepr ft ob Sie die Abbrechen Scha
409. leich zu PHP 5 wahrscheinlich nicht so umfangreich sein werden wie der Umstieg von PHP 4 auf PHP5 mit dem ja durch die Objektorientierung ein v llig neues Programmierparadigma in die Sprache aufgenommen wurde Bei jeder neuen Version ist zu erkennen dass die Kompa tibilit t zu bereits erstellten PHP Skripten nach M glichkeit ber mehrere Versionen gewahrt bleiben soll um den Erfolg der Sprache auch in Zukunft zu sichern 5 Projektpraxis Im dritten Kapitel dieses Buches haben Sie etwas ber die Vorgehensweise der Abwick lung von gr eren Projekten in einem iterativ inkrementellen agilen Prozess erfahren Die UML als gemeinsame Sprache aller Projektbeteiligten spielt dabei sowohl als Nota tion als auch als Richtschnur von der Projektidee bis zur Implementierung und Doku mentation eine zentrale Rolle Das vierte Kapitel hat gezeigt wie die Konzepte der Objektorientierung mit PHP 5 umgesetzt werden k nnen indem jedes einzelne Konzept in einem kurzen unabh ngi gen Beispiel mit UML skizziert und dann in PHP 5 implementiert wurde Die Inhalte in Kapitel 5 1 verbinden nun die beiden vorherigen Kapitel indem ein einziges Projekt von seiner Analyse bis hin zu den ersten implementierten Prototypen verfolgt wird Im Anschluss daran werden noch Regeln f r guten PHP Quellcode vorgestellt sowie eine Reihe von Tools die bei der allt glichen Arbeit mit PHP Projekten behilflich sind und auch die Qualit t der erstellten PHP Anwendung p
410. len sind Das Fallbeispiel der Depotverwaltung Die notwendigen Daten erzeugen ein neues Aktienbestandsobjekt nachdem die einge gebenen Daten auf G ltigkeit gepr ft worden sind Dieses Objekt wird dann in der Depotverwaltung festgehalten wor ber der Benutzer abschlie end informiert wird Profitipp Definieren Sie stets zun chst das Prim rszenario das der Beschreibung der textuel len Schablone entspricht Ihnen mag dies zun chst zu trivial erscheinen aber bei der Besprechung mit dem Auftraggeber und den Benutzern ergeben sich dadurch viele neue Erkenntnisse Bedenken Sie Die Diagramme dienen in erster Linie nicht dem Selbstzweck sondern als Diskussionsgrundlage Benutzer Depotverwaltung neuen Bestand anlegen Eingabemaske senden Daten pr fen Bestand speichern Daten eingeben Name und ISIN der Aktie Daten des ersten Kaufs Erfolgsmeldung Abbildung 5 4 Aktivit tsdiagramm neuer Aktienbestand anlegen Wenn mehrere Best nde angelegt worden sind soll der Benutzer einen Bestand zur wei teren Verarbeitung ausw hlen k nnen Dieser Vorgang ist in Abbildung 5 5 dargestellt Nach der Aufforderung des Benutzers zur Auswahl eines Bestands wird zun chst eine Liste des Gesamtbestands angezeigt Zus tzlich soll an dieser Stelle zu jedem Bestand seine aktuelle Bilanz erscheinen PHP Endlich objektorientiert 335 5 Projektpraxis Mit dem Begriff der Bilanz ist
411. lerbehandlung durchgef hrt Von besonderem Interesse ist die letzte Methode der Klasse addKauforder value die eine weitere Kauforder in den Aktienbestand integriert Beim ersten Kauf wird lediglich der Kaufpreis und das Kaufdatum aus der Order bernommen Kommt ein weiterer Kauf hinzu wird aus dem bisherigen Kaufpreis bzw Kaufdatum und dem neuen Kaufpreis bzw Kaufdatum der gewichtete arithmetische Mittelwert gem den Formeln aus der Analyse gebildet und in den Eigenschaften des Objekts unter kaufPreisMW bzw kauf DatumMW abgelegt Abschlie end werden noch die Anzahl der Aktien im Bestand und die Kaufgeb hren um die in der Kauforder enthaltenen Werte erh ht lt php class Aktienbestand private aktie private aktBestand aktuelle Anzahl an Aktien private kaufDatumMW FALSE private kaufPreisMW 9 0 Kurs der Aktie beim Kauf private kaufGeb hren private dividenden 0 0 zus tzlich erhaltene Dividenden private verkaufGeb hren 0 0 private verkauft FALSE Bestand komplett verkauft public function __construct aktie kauforder verkaufGeb hren if aktie instanceof Aktie FALSE throw new Exception __construct Sie m ssen ein Aktien Objekt bergeben this setAktie aktie this gt addKauforder kauforder this gt setVerkaufGeb hren verkaufGeb hren public function getAktie return this aktie private function setAktie value Listing 5 8 Implementierung des Aktie
412. lex ist und daher im Voraus weder in gro e abgeschlossene Phasen noch in einzelne Arbeitsschritte unterteilbar Scrum lehnt also generell die Planung der Softwareentwicklung im Vorfeld ab Stattdes sen sollen die Teammitglieder ihre Arbeit weitgehend selbst organisieren Dies geht soweit dass die Entwickler auch die eingesetzten Entwicklungswerkzeuge und metho den selbst w hlen k nnen was in gr eren Projekten umstritten ist Das zentrale Element bei Scrum ist der Sprint Dabei handelt es sich um die Umsetzung einer Iteration die ca 30 Tage dauern soll Vor dem Sprint werden die Produktanforde rungen des Kunden in einem Produkt Backlog gesammelt Diese Liste beinhaltet alle Funktionalit ten die der Kunde w nscht inklusive einer Priorisierung der Funktionen wie sie aus einer Risk Value Analyse stammen kann Hoch priorisierte Features werden im Aufwand gesch tzt und in das so genannte Sprint Backlog bernehmen Diese Liste enth lt alle Aufgaben um das Ziel des Sprints zu erf l len Eine Aufgabe soll dabei in nicht mehr als 16 Stunden realisierbar sein L ngere Auf gaben sollten in Teilaufgaben zerlegt werden W hrend eines Sprints findet ein t gliches kurzes Scrum Meeting statt bei dem sich das Team gegenseitig die folgenden Fragen stellt m Bist du gestern mit dem fertig geworden was du dir vorgenommen hast m Welche Aufgaben wirst du bis zum n chsten Meeting bearbeiten m Gibtesein Problem das dich blockiert Nach
413. lg des Projekts auch eigene Interessen verfolgen Im Folgenden werden die typischen Interessen der Stakeholder auf der Seite Ihres Kun den kurz skizziert Geldgeber Gesch ftsleitung Einhaltung von unternehmensweiten Standards Zuschnitt der neuen Anwendung auf die Bed rfnisse des eigenen Unternehmens lange Gew hrleistung und Verf gbarkeit der Entwickler bei Problemen m Einkauf gt Erhalt einer preisg nstigen L sung Objektorientierte Programmierung m Anwender gt unkomplizierte Handhabung der Anwendung gt alle gew nschten Funktionen sind vorhanden gt Anpassung der Anwendung an die Abl ufe im Arbeitsalltag m EDV Abteilung Integration der neuen Anwendung in die Systemlandschaft Stabilit t der Anwendung leichte zentrale Wartung gt langfristige Anpassung an neue Gegebenheiten Alle diese Benutzergruppen sollen durch Ihre Anwendung zufriedengestellt werden Einige der Zielsetzungen sind sogar kontr r zueinander unter anderem da die W nsche der Gesch ftsleitung Anwender und der EDV Abteilung meist nicht in einer preisg ns tigen L sung realisierbar sind Die in Kapitel 3 2 3 vorgestellten agilen Methoden sollen Ihnen dabei helfen die W nsche der einzelnen Zielgruppen zu erfassen Gro e Projekte mit Objektorientierung W hrend das Wasserfallmodell in der strikten Form mit Lasten und Pflichtenheft sowie mit den im Vorfeld geplanten Abgaben in der Praxis nur bei kleinen Projekten bis zu 2
414. lig mit ihrer Personalnummer im System registriert sein sollen und ein Angestellter gleichzeitig Chef und Mitarbeiter sein kann macht eine Aufspaltung der Klasse in die Klassen Chef und Mitarbeiter keinen Sinn Angestellter name gehalt ist Vorgesetzter von v mitarbeiter Abbildung 3 61 Beispiel einer reflexiven Assoziation Wie w rden Sie eine solche Beziehung realisieren Im Quellcode bedeutet dies dass die Klasse Angestellter zwei Datenfelder als Eigenschaften verwaltet In dem ersten Feld ist ChefVon werden die Referenzen auf andere Angestellte gespeichert von denen dieser Angestellte der Vorgesetzte ist Das zweite Feld istMitarbeiterVon beinhaltet Referenzen auf Angestellte denen dieser Angestellte weisungsbefugt ist Generell kann eine refle xive Assoziation stets mit zwei Datenfeldern realisiert werden PHP Endlich objektorientiert 189 3 Vorgehensweise bei der Softwareentwicklung Profitipp Versuchen Sie nicht zwingend n re Assoziationen oder reflexive Assoziationen bei einer objektorientierten Analyse zu finden Nur wenn diese besonderen F lle wirk lich von Bedeutung sind sollten Sie sie auch verwenden Ansonsten laufen Sie Gefahr Ihre Problemstellung auf die UML zurechtzubiegen anstatt die UML Nota tion auf Ihr Problem anzuwenden Als abschlie endes Beispiel der Analysephase wird nochmals das Beispiel der Seminar verwaltung aufgegriffen Abbildung 3 62 zeigt zun chst ein Objektdiagramm
415. llt Unser Auftraggeber kann dann selbst Eingaben t tigen ein Gef hl f r die Anwendung entwickeln und Feedback f r die weitere Entwicklung geben In der letzten und dritten Phase m ssen die Objekte ber die Datenzugriffsschicht in der Datenbank persistent gehalten werden Damit k nnen Aktienbest nde gespeichert und wieder geladen werden Im Anschluss daran m sste die n chste Iteration der Analyse und des Designs stattfin den um die n chsten Schritte im Projektablauf zu planen Dieser Zeitpunkt nach der dritten Phase ist auch geeignet f r ein erstes Res mee der eingesetzten Ressourcen und ggf f r eine erste Teilrechnung f r den Auftraggeber Anwenden der testgetriebenen Entwicklung In diesem Beispielprojekt werden die ersten drei Phasen noch in dem gew hnlichen Texteditor UltraEdit 9 00c implementiert da die Einf hrung einer professionellen Ent wicklungsumgebung eine individuelle Entscheidung ist Eine bersicht ber die aktuell verbreiteten Entwicklungsumgebungen wird in Kapitel 5 3 gegeben Bei den ersten Schritten der Implementierung der Depotverwaltung kommt das Prinzip der testgetriebenen Entwicklung zum Einsatz Auch hier wird noch auf hilfreiche unter st tzende Werkzeuge wie PHPUnit http www phpunit de verzichtet das auch in Kapi tel 5 2 4 beschrieben wird An dieser Stelle soll stattdessen die Denkweise der testgetriebenen Entwicklung einge bt werden die eine andere Vorgehensweise der Entwickler erf
416. lsch eingegeben so erscheint eine Fehlermeldung mit dem Verweis auf die login php Der richtige Benutzername und das richtige Kennwort sind in diesem Beispiel fest in PHP codiert In der Realit t w rde man nach dem eingegebenen Benutzernamen in einer Datenbank suchen Wenn er existiert liest man das richtige Kennwort aus der Daten bank aus und vergleicht es mit dem eingegebenen Kennwort Sind beide identisch so ist der Benutzer authentifiziert in allen anderen F llen nicht lt php session_start if isset _SESSIONLUser isset _SESSION Pass header Location login php Listing 2 63 Die login_server php pr ft den Login und leitet entsprechend weiter 74 entwickler press Erweiterte Funktionen frmUser _POSTLfrmUser frmPass _POST frmPass if strtolower frmUser frank amp amp frmPass geheim _SESSION User frmUser _SESSION Auth 1 header Location portal php elsef lt html gt lt body gt lt center gt Ihre Eingabe war leider falsch lt br gt lt a href login php gt Zur ck um Login lt a gt lt center gt lt body gt lt htm1 gt lt php Listing 2 63 Die login_server php pr ft den Login und leitet entsprechend weiter Forts Listing 2 64 beschreibt die Datei portal php Dort muss man zun chst pr fen ob serversei tig eine Authentifizierungsvariable existiert und falls ja ob diese den Wert 1 hat Nur in diesem Fall handelt es sich um eine
417. lso dauer haft gespeichert werden PHP Endlich objektorientiert 221 4 PHP objektorientiert Aufrufen nichtdeklarierter Methoden und Identifikation von Objekten hnlich wie der Zugriff auf Eigenschaften k nnen sogar Methodenaufrufe von einer besonderen PHP Funktion manipuliert werden Diese Funktion nennt sich __call Sie ist insbesondere daf r geeignet einen Nachteil der Sprache PHP in der Objektorientierung auszugleichen Wie Sie wissen m ssen in PHP Variablen nicht mit Datentypen deklariert werden Sie sagen also nicht vor der Verwendung von x dass x eine Ganzzahl oder eine Zeichen kette sein muss PHP verwaltet die Datentypen bei der Zuweisung eines Wertes dyna misch So kann sich der Datentyp einer Variablen sogar w hrend ihrer Lebenszeit ndern In der Praxis des prozeduralen Programmierens wird diese F higkeit des PHP Interpreters gerade von Programmieranf ngern gesch tzt Man muss sich keine Gedan ken um Datentypen machen In der Objektorientierung ist diese F higkeit der Sprache jedoch erst einmal nachteilig In Abbildung 3 65 wurde bereits ein Klassendiagramm einer Bruchklasse dargestellt das an dieser Stelle nochmals in Abbildung 4 2 aufgegriffen wird z hler int 0 nenner int 1 anzahl int 0 Bruchf int int add int add double add Bruch isNull boolean getAnzahl int Abbildung 4 2 UML Klassendiagramm der Bruchklasse Dieses Klassendiagramm ist zun chst
418. lt html gt lt body gt lt php a2 new Artikel 2 Butter gute Butter 0 50 0 70 7 pos l new Rechnungsposition a2 5 0 echo Name pos l gt getArtikel gt getName lt br gt echo Beschreibung pos l gt getArtikel gt getBeschreibung lt br gt 2 echo Menge posQl gt getMenge lt br gt echo Einzelpreis number_format pos l gt getEP 2 EUR lt br gt echo Gesamtpreis number_format pos l gt getGesamtpreis 2 EUR lt br gt lt body gt lt html gt Listing 4 35 Test einer Rechnungsposition und eines Artikels Somit lautet die Ausgabe des Testprogramms wie folgt Name Butter Beschreibung gute Butter Menge 5 Einzelpreis 0 70 EUR Gesamtpreis 3 75 EUR 4 2 3 Wechselseitige Bekanntschaften Schwieriger zu realisieren ist die wechselseitige Assoziation zweier Klassen Als Beispiel wird die Beziehung zwischen Studenten und Praktika realisiert Da ein Student eine spe zielle Person ist kann die implementierte Personenklasse aus Listing 4 24 weiterverwen det werden Realisierung von Klassengeflechten Profitipp Sie erkennen hier dass eine sinnvoll durchdachte abstrakte Klasse auch in verschie denem Kontext in Listing 4 24 war der Kontext die Ableitung von Kunden und Mit arbeitern weiterverwendet werden und damit langfristig Ressourcen der Imple mentierung einsparen kann Im Gegensatz zu einer Person besitzt ein Student zus tzlich eine Matrikelnummer und e
419. lten durch verschachtelte for Schleife Zeile 1 Spalte 1 Zeile 1 Spalte 2 Zeile 1 Spalte 3 Zeile 1 Spalte 4 Zeile 1 Spalte 5 Zeile 1 Spalte 6 Zeile 1 Spalte 7 Zeile 1 Spalte 8 Zeile 2 Spalte 1 Zeile 2 Spalte 2 Zeile 2 Spalte 3 Zeile 2 Spalte 4 Zeile 2 Spalte 5 Zeile 2 Spalte 6 Zeile 2 Spalte 7 Zeile 2 Spalte 8 Zeile 3 Spalte 1 Zeile 3 Spalte 2 Zeile 3 Spalte 3 Zeile 3 Spalte 4 Zeile 3 Spalte 5 Zeile 3 Spalte 6 Zeile 3 Spalte 7 Zeile 3 Spalte 8 Zeile 4 Spalte 1 Zeile 4 Spalte 2 Zeile 4 Spalte 3 Zeile 4 Spalte 4 Zeile 4 Spalte 5 Zeile 4 Spalte 6 Zeile 4 Spalte 7 Zeile 4 Spalte 8 Zeile 5 Spalte 1 Zeile 5 Spalte 2 Zeile 5 Spalte 3 Zeile 5 Spalte 4 Zeile 5 Spalte 5 Zeile 5 Spalte 6 Zeile 5 Spalte 7 Zeile 5 Spalte 8 Zeile 6 Spalte 1 Zeile 6 Spalte 2 Zeile 6 Spalte 3 Zeile 6 Spalte 4 Zeile 6 Spalte 5 Zeile 6 Spalte 6 Zeile 6 Spalte 7 Zeile 6 Spalte 8 Zeile 7 Spalte 1 Zeile 7 Spalte 2 Zeile 7 Spalte 3 Zeile 7 Spalte 4 Zeile 7 Spalte 5 Zeile 7 Spalte 6 Zeile 7 Spalte 7 Zeile 7 Spalte 8 Zeile 8 Spalte 1 Zeile 8 Spalte 2 Zeile 8 Spalte 3 Zeile 8 Spalte 4 Zeile 8 Spalte 5 Zeile 8 Spalte 6 Zeile 8 Spalte 7 Zeile 8 Spalte 8 Zeile 9 Spalte 1 Zeile 9 Spalte 2 Zeile 9 Spalte 3 Zeile 9 Spalte 4 Zeile 9 Spalte 5 Zeile 9 Spalte 6 Zeile 9 Spalte 7 Zeile 9 Spalte 8 Zeile 10 Spalte 1 Zeile 10 Spalte 2 Zeile 10 Spalte 3 Zeile 10 Spalte
420. ltfl che bet tigt hatten Dies ist noch vor der Einbindung der header inc php notwendig da dort bereits die Ausgabe des HTML Codes zum Client beginnt In dem Fall dass Sie den Vorgang abbrechen wollen werden Sie n mlich ber das direkte HTTP Kommando Location start php an start php weitergeleitet Wenn die Ausgabe der HTML Seite bereits begonnen hat ist eine solche Weiterleitung nicht mehr m glich PHP Endlich objektorientiert 371 5 Projektpraxis http localhost Aktienverwaltung 004 neu php Windows Internet Explorer BAX 6 Nje E localhost vi4 ix 23 P Datei Bearbeiten Ansicht Favoriten Extras yr Favoriten kttp localhost Aktienverwaltung 004 neu php Depotverwaltungsprogramm Gew hlter Bestand Name der Aktie E ON ISIN der Aktie DE000ENAG999 URL der Aktiendaten http www boerse ISIN DEO0OOEN Anzahl gekaufter Aktien 90 St ck Kurs beim Kauf 20 Kauf Datum 24 04 2009 Kauf Geb hren 9 9 Verkauf Geb hren 9 9 Die Geb hren die zu erheben w ren wenn man den Aktienbestand jetzt verkaufen w rde Copyright by Dr Frank Dopatka v Fertig 3 Lokales Intranet Ar R 0 vr Abbildung 5 20 Anlegen eines neuen Aktienbestands Im Anschluss an die Einbindung der header inc php wird aus den eingegebenen Daten des Benutzers die sich im PHP Datenfeld _POST befinden zun chst ein neues Aktien objekt angelegt vgl dazu den ersten Test in Listing
421. lung der Bilanz wird dieser URL abgefragt und die Daten aus der Homepage ausgelesen Dann werden eine Kaufor der erstellt und ein Bestand angelegt Dieser Bestand wird dann gewinnbringend ver kauft indem eine neue Verkaufsorder ber den gesamten Bestand angelegt wird Es wurden 300 Aktien zu einem Kurs von 6 29 St ck eingekauft und nach ca 6 Monaten f r 8 00 St ck verkauft Dabei fallen 2x9 90 Geb hren an Dabei ist f r den Anleger interessant m wie hoch seine Kosten beim Einkauf waren m f r welchen Preis er die Aktien letztlich verkauft hat wie viel Gewinn er in Euro incl Dividenden und Kosten gemacht hat m wie hoch sein prozentualer Gewinn incl Dividenden und Kosten ist wie viel Prozent Gewinn er durchschnittlich pro Jahr erwirtschaftet hat incl Dividen den und Kosten Wurde die Aktie weniger als ein Jahr angelegt soll der bislang erhaltene Gewinn bzw Verlust linear interpoliert werden Abb 5 8 Dieser Wert ist ein guter Vergleich zu einer Festgeldanlage die blicherweise zwischen 1 5 Jahr und 4 0 Jahr verzinst wird Bei einer Festgeldanlage ist nat rlich auch das Risiko wesentlich geringer Der zweite Bestand wurde von der Metro AG gekauft Dabei wurden 100 Aktien am 01 01 2009 zu je 20 00 erworben und es fielen zus tzlich 9 90 Kaufgeb hren an Der aktuelle Kurs Stand 19 10 2009 soll aus dem Internet ermittelt und f r die aktuelle Berechnung des Wertes des Aktienbestands verwendet werden
422. luss auf den Zustand eines Objekts haben kann erh lt das Objekt einY eine andere Historie in Abh ngigkeit der Bedingung B Dies wird durch eine ver zweigte Lebenslinie dargestellt Die alternativen Lebenslinien k nnen wiederum alter native Methodenaufrufe auf anderen Objekten nach sich ziehen Objektorientierte Programmierung Abbildung 3 77 Verzweigung mit alternativen Lebenslinien Eine weitere Besonderheit der Sequenzdiagramme besteht darin synchrone von asyn chronen Aufrufen zu unterscheiden indem diese beiden Arten von Aufrufen mit unter schiedlichen Pfeilen dargestellt werden Abbildung 3 78 zeigt drei Methodenaufrufe Der erste Aufruf ist synchron ben tigt jedoch kaum Rechenzeit Es existiert kein R ckgabewert der f r das ausl sende Objekt einX von Bedeutung ist Der zweite Aufruf ist asynchron was man durch die anders geformte Pfeilspitze erken nen kann In den Versionen 1 x der UML wurde der Aufruf durch eine offene halbe Pfeil spitze nach oben dargestellt seit der Version 2 durch eine vollst ndige offene Pfeilspitze Dieser asynchrone Aufruf besitzt ebenfalls keinen R ckgabewert und ist daher einfach zu implementieren Was jedoch macht einen asynchronen Aufruf aus Bei einem asyn chronen Methodenaufruf blockiert das aufrufende Objekt nicht w hrend die aufgeru fene Methode l ngere Zeit abgearbeitet wird Die aufrufende Methode wird also quasi parallel zu der aufrufenden Methode abgearbeitet Dies l ss
423. m Testen wird die Verbindung zum Daten bankserver ge ffnet der Name einer Aktiengesellschaft aktualisiert anschlie end die gesamte Tabelle ausgelesen und im letzten Schritt wird die Verbindung wieder geschlos sen Im Gegensatz zum zweiten Kapitel wird die Datenbankverbindung hier innerhalb des Verbindungsobjekts db verwaltet Dieses Objekt verf gt durch die Implementierung des zuvor definierten Interfaces ber die Methoden ffnen m schreiben m lesen m schlie en F r die Parametrierung werden beim ffnen Schreiben und Lesen eigene Parameterob jekte definiert die beim ffnen ber die Parameter host user pass und db sowie beim Sch reiben und Lesen ber den Parameter sql verf gen Erkennen Sie den Mehrwert gegen ber der Realisierung im zweiten Kapitel Der Pro grammierer der ein mysqlDZ Objekt verwendet muss nichts ber die MySQL Befehle von PHP wissen Er muss lediglich die zum ffnen notwendigen Parameter kennen und die SQL Sprache beherrschen ber dasselbe Interface k nnten Sie auch Implementie rungen f r eine Oracle MS SQL oder eine DB2 Datenbank schreiben Die Verwendung w re identisch Gegebenenfalls m ssten die Parameter etwas ver ndert werden Mit hnlichen Parametern lassen sich auf die gleiche Art und Weise auch Zugriffe auf Dateien realisieren Die Eingabe der Parameter erfolgt jedoch blicherweise ber eine Konfigurationseinga bemaske die einem eingeloggten Administrator zur Verf gung st
424. m eines Getr nkeautomaten Wechselgeld lt 0 do Wechselgeld ausgeben Objektorientierte Programmierung Meinung Zustandsdiagramme k nnen in einer kompakten Darstellung sehr viele Informatio nen enthalten und sehr aussagekr ftig sein Der Informationsgehalt von grafischen Anwendungsfalldiagrammen ist dagegen wesentlich geringer Die Ursache liegt unter anderem darin dass man sich erst langsam an die Anforderungen herantastet Das letzte Beispiel eines Zustandsdiagramms in Abbildung 3 73 modelliert einen Server des Onlinebankings auf Fischebene Diese Darstellung geht also schon etwas tiefer ins Detail als ein gew hnlicher Nutzer dies wahrnimmt Der Server ist zun chst in einem betriebsbereiten Zustand in dem er auf Verbindungen vom Client wartet Wenn sich ein Rechner mit dem Server verbindet so ist dies nur m glich wenn man sich auf ein verschl sseltes SSL Protokoll einigt Danach ist der Client mit dem Bankserver verbunden Die Abbildung zeigt die M glichkeit innerhalb des globaleren Zustands verbunden Unter Zust nde zu definieren die innerhalb dieses Zustands durchlaufen werden Im n chsten Schritt sieht der Benutzer ein HTML Formular bei dem er seine Kontonum mer und seine PIN eingeben muss Die Daten werden dann vom PHP Server gepr ft Waren die Daten korrekt gilt der Benutzer f r den Server als authentifiziert und darf Banktransaktionen durchf hren Ansonsten wird die Verbindung abge
425. man kaufen kann 51 2 Die objektorientierte Analyse Nach dem ersten Gespr ch mit unserem Auftraggeber werden nun die gew nschten Funktionen erstmals definiert und genauer beleuchtet Dies geschieht unter Verwen dung einzelner grafischer Anwendungsfalldiagramme von denen einzelne Funktionen in einer textuellen Schablone genauer beschrieben werden Typische Abl ufe die sich unser Auftraggeber im System vorstellt werden im Anschluss daran mit Aktivit tsdiagrammen festgehalten Diese Abl ufe beschreiben Interaktionen des zuk nftigen Benutzers mit der zu erstellenden Anwendung Gew nschte Funktionen mit Anwendungsfalldiagrammen Im ersten Schritt der Analyse wird der Auftraggeber der RAUB Bank darum gebeten darzustellen welche Hauptfunktionen er in der zu erstellenden Anwendung sieht Wel che Funktionen st nden gro auf der Verpackung wenn man das Produkt in einer Schachtel kaufen k nnte Seine Antworten werden in Abbildung 5 1 als erster grafischer Anwendungsfall zusam mengefasst Der Auftraggeber will m Aktienbest nde verwalten m Aktienbest nde archivieren die aktuellen Kurse automatisch ermitteln Das Fallbeispiel der Depotverwaltung Damit jeder Benutzer dies kann muss er sich zun chst am System anmelden In den ers ten Phasen der Umsetzung soll das Anmeldesystem mit der Benutzerverwaltung jedoch nicht im Vordergrund stehen Depotverwaltung 2 Benutzer Aktienbest nde archivieren Kurse auto
426. matisch aktualisieren Abbildung 5 1 Grafischer Anwendungsfall auf Drachenebene Im n chsten Schritt werden die Funktionen genauer hinterfragt Konzentrieren Sie sich als Systemanalytiker dabei vor allem auf weich formulierte Oberbegriffe Dies sind in unserem Fall verwalten und archivieren Was ist damit genau gemeint Als Antwort auf diese Frage m ssen Sie Ihren Auftraggeber dazu bringen die Funktio nen detaillierter zu beschreiben Oft ist es auch hilfreich einen zuk nftigen Benutzer der Anwendung zu befragen was er sich unter dem Dienst vorstellt und erhofft Dadurch gelangt man von der Wolken bzw Drachenebene hin zu der Ebene des Meeres spiegels die einzelne Funktionen beschreibt die man sp ter als Men eintr ge in der Anwendung wiederfinden sollte In unserem Fall bedeutet das Archivieren das Laden und Speichern der aktuellen Akti enbest nde in einer Datenbank Diese Datenbank soll nachtr glich austauschbar sein die Anwendung darf sich also nicht auf einen Datenbankhersteller so fokussieren dass ein Wechsel der Datenbank nur mit hohem Aufwand verbunden w re Unser Auftraggeber sieht die Verwaltung der Aktienbest nde als Kernfunktion der Anwendung Der Benutzer soll einen neuen Aktienbestand anlegen indem er Informati onen zur Aktie und zum ersten Kauf Anzahl der gekauften Aktien Kaufdatum und Kurs der Aktie in die Anwendung eingibt Zus tzlich soll der Benutzer zu einem sp teren Zeitpunkt Aktien
427. men aufzuzei gen wie sie behoben werden k nnen Die richtige Anwendung von Design Patterns kann dazu beitragen In der Regel entstehen Anti Pattern wider besseres Wissen oder durch mangelnde Erfahrung im Verlauf der objektorientierten Softwareentwicklung Da sich die Anti Pattern nicht nur auf die Programmierung beschr nken wurden typi sche Fehler klassifiziert in Anti Pattern der Programmierung Anti Pattern der Systemarchitektur Anti Pattern des Projektmanagements Anti Pattern des Managements Die bekanntesten Vertreter aus diesen Kategorien werden im Folgenden kurz vorgestellt Auch wenn die Darstellung teilweise bertrieben ist k nnen Sie wahrscheinlich Muster erkennen die Ihnen in Ihrem Alltag als Programmierer Systemanalytiker oder freibe ruflicher Projektleiter bereits begegnet sind Erstellung von gutem Quellcode Copy Paste Programmierung Da viele Klassen eine hnliche Struktur insbesondere bei den Get und Set Methoden besitzen neigen viele Entwickler dazu bestehenden Quellcode zu kopieren Dies gilt auch f r bestehende Algorithmen Dabei besteht jedoch die Gefahr Fehler mitzukopie ren oder dass die Kopie f r den neuen Bereich nicht optimal einsetzbar ist Oft denkt der Entwickler nicht mehr ber den genauen Sinn des Quellcodes nach Werden gleichf rmige Strukturen in mehreren Abl ufen erkannt so k nnte das Schablo nen Design Pattern der Copy Paste Programmierung vorbeugen und doppelten schlecht war
428. men der hochzuladenden Datei auf dem Client m den Pfad und den Namen der Datei wie sie auf dem Server gespeichert werden soll Diese Parameter k nnen alle oder teilweise in einem HTML Formular eingegeben wer den Wenn Sie nicht alle Parameter eingeben wollen k nnen Sie im PHP Skript auch 80 entwickler press Erweiterte Funktionen feste Werte vergeben Wenn Sie beispielsweise den Benutzernamen und das Kennwort als Konstanten im PHP Code festlegen authentifiziert sich lediglich das PHP Skript gegen den FTP Server Jeder Anwender der das Skript ausf hren kann kann somit auch Dateien hochladen Listing 2 66 skizziert das PHP Skript f r einen FTP Zugriff In die sem Beispiel sind alle Parameter direkt im PHP Code gesetzt und k nnen vom Benutzer nicht ge ndert werden lt php Notwendige Parameter f r den FTP Zugriff server 212 227 89 9 user benutzername pass kennwort quelle C test txt ziel httpdocs test txt fh ftp_connect server login ftp_login fh user pass gt lt html gt lt body gt lt php if 1 fh 1ogin gt lt h1 gt Ftp Verbindung nicht hergestellt lt h1 gt lt p gt Verbindung mit dem Server als Benutzer lt php echo user gt nicht m glich lt php die else gt lt p gt Sie sind verbunden mit dem Server als Benutzer lt php echo user gt lt p gt lt php upload ftp_put fh ziel quelle FTP_ASCIT if upload gt lt p gt Upload fehlge
429. min Explore Svc MySql SCM Svc Filezilla Refresh Svc Tomcat ie XAMPP Control Panel Version 2 5 8 2009 07 28 XAMPP for Windows Version 1 7 2 Windows 5 1 Build 2600 Platform 2 Service Pack 3 Current Directory C Programme xanpp Status Check OR Busy Apache started lt Abbildung 2 1 Das XAMPP Control Panel mit gestartetem Apache Webserver ffnen Sie nun Ihren Internetbrowser und geben Sie http localhost hallo html ein Sie sehen jetzt ein Hallo im Titel des Browsers sowie als Homepage Damit haben Sie aber noch nicht den PHP Interpreter verwendet da es sich um eine HTML Datei handelt Wird eine HTTP Anfrage auf eine HTML Datei von einem Client auf einen Webserver gestellt so wird diese Datei vom Webserver ge ffnet der Inhalt ausgelesen in das HTTIP Protokoll verpackt und unmittelbar an den Client zur ck gesendet Abb 2 2 14 entwickler press Grundlegende Syntax 1 GET hallo html Internet 4 hallo html Client Web Server Apache A 2 OPEN 3 READ y l hallo html Abbildung 2 2 Aufruf einer HTML Datei Um Ihre erste PHP Datei zu erstellen erzeugen Sie in dem htdocs Verzeichnis mit Ihrem Texteditor eine Datei mit dem Namen hallo php lt php wert Hallo gt lt html gt lt head gt lt title gt lt php echo wert gt lt title gt lt head gt lt body gt lt h1 gt lt php echo wert gt lt h1 gt lt body gt
430. mit schriftlicher Genehmigung des Verlags Jegliche Haftung f r die Richtigkeit des gesamten Werks kann trotz sorgf ltiger Pr fung durch Autor und Verlag nicht bernommen werden Die im Buch genannten Produkte Warenzeichen und Firmennamen sind in der Regel durch deren Inhaber gesch tzt Inhaltsverzeichnis 1 Eine Sprache wird erwachsen 1 1 Prozedurale Programmierung versus Objektorientierung 1 2 Zielgruppe dieses Buchs 1 3 Gliederung und Vorgehensweise 1 4 Verwendete Software Die Sprache PHP Prozedural 2 1 Grundlegende Syntax 2 1 1 Von Kommentaren Variablen und Operanden 2 1 2 Datenfelder Arrays 2 1 3 Verzweigungen 2 1 4 Schleifen 2 1 5 Funktionen 2 2 Erweiterte Funktionen Vorgehensweise bei der Softwareentwicklung 3 1 Prozedurale und modulare Programmierung 3 1 1 Typische Projektstruktur 3 1 2 Ablauf eines Projekts 3 1 3 Erstellung der 3 Schichten Architektur 3 2 Objektorientierte Programmierung 3 2 1 Typische Projektgr e und Projektdefinition 3 2 2 Begriffe der Objektorientierung 3 2 3 Vom Gesch ftsprozess zur objektorientierten Analyse 3 2 4 Von der Analyse zum objektorientierten Design 3 2 5 Objektorientierte Programmierung 3 2 6 Die Bedeutung der Unified Modeling Language UML PHP objektorientiert 4 1 Umsetzung objektorientierter Grundlagen 4 1 1 Die erste PHP Klasse 4 1 2 Objekte in einer Session bergeben 4 1 3 Objekte speichern und laden De Serialisierung 4 1 4 PHP eigene Methoden der Objektorien
431. mittelfristig zu einer h heren Softwarequalit t Um die Verantwortung des Reviewers deutlich zu machen sollte sein Name nachweislich neben dem Entwickler als zweiter Ver antwortlicher f r diese Klasse eingetragen werden Dadurch wird zus tzlich das Wissen ber den Quellcode verbreitet wenn auch nicht so stark wie bei der Paarprogrammierung Das Prinzip des Model View Controllers MVC In Kapitel 3 1 3 wurde bereits der Aufbau einer 3 Schichten Architektur mit einer Daten zugriffsschicht einer Fachlogik und einer Pr sentationsschicht vorgestellt Kapitel 2 2 zeigte die PHP Funktionen die f r den Zugriff auf eine MySQL Datenbank notwendig sind Eine zu der 3 Schichten Architektur verwandte Systemarchitektur ist das Prinzip des Model View Controllers Diese Architektur ist gerade in Verbindung mit objektori entierten Ans tzen zur Strukturierung komplexer Anwendungen weit verbreitet Das Ziel ist es einen Rahmen f r einen flexiblen Programmentwurf vorzugeben der eine sp tere Erweiterung der zu erstellenden Anwendung erleichtert und eine Wiederver wendbarkeit der einzelnen Komponenten erm glicht PHP Endlich objektorientiert 159 3 Vorgehensweise bei der Softwareentwicklung Das Modell enth lt die darzustellenden Daten zumeist in Form einer relationalen Datenbank Zum Datenmodell geh ren auch die PHP Funktionen die auf diese Daten zugreifen sollen Die Pr sentation ist sowohl f r die Darstellung der ben tigten Date
432. mmierung Kunde 2 Seminarverwaltung 2 Seminar aus Bookmark Liste ausw hlen Seminar pers Daten eingeben status ausgebucht AnzTN MaxTN Buchung abschicken Fehler bereits ausgebucht senden auf n chsten Termin verweisen und Kontaktdaten senden Abbildung 3 47 Buchungsversuch auf ein bereits ausgebuchtes Seminar Meinung Eine gute bung ist es wenn Sie im Internet nach bereits fertigen Aktivit tsdiagram men suchen und diese kritisch beurteilen Verstehen Sie den Ablauf Ist er eindeutig spezifiziert Was k nnte man besser machen Wenn Sie eine Vielzahl von Diagram men gesehen und am besten mit anderen Personen diskutiert haben werden Sie zu einem besseren Analytiker f r objektorientierte Anwendungen Objekte und Klassen in der Analyse In der Praxis begehen Entwickler oft den Fehler Klassendiagramme zu fr h zu erstellen da sie ja m glichst bald entwickeln wollen und die Sachverhalte bereits sehr klar erschei nen Dies istjedoch eine tr gerische Annahme In der UML existiert ein weiterer Diagrammtyp der zu wenig Beachtung findet Die Objektdiagramme sind an die Notation der Klassendiagramme angelehnt Da ein Objekt eine Instanz also ein Exemplar oder ein Beispiel einer Klasse darstellt ist es sinnvoll zun chst diese Beispiele zu betrachten bevor man die abstrakteren Klassen modelliert siehe dazu auch Abbildung 3 12 in der die Realit t ber die Objekte zu den Klassen abs
433. n das Objekt mit dem Befehl unserialize wieder hergestellt und eine Methode des Objekts auf gerufen Die Daten des Objekts werden in der objekt txt in der gleichen Form gespeichert wie in der Session Beim Speichern in eine Session und dem Laden aus einer Session wird also automatisch eine Serialisierung bzw Deserialisierung durchgef hrt lt php require_once stift inc php datei fopen objekt txt r deser unserialize fgets datei fclose datei lt html gt lt body gt Sie besitzen einen Stift der Farbe lt php echo deser gt getFarbe gt lt br gt lt body gt lt html gt Listing 4 7 Laden und Deserialisieren des Objekts aus der Datei Umsetzung objektorientierter Grundlagen 4 1 4 PHP eigene Methoden der Objektorientierung Auf Grund der historischen Entwicklung der Sprache PHP von den Personal Home page Tools hin zu einer objektorientierten Programmiersprache sind einige besondere Funktionen entstanden die f r andere objektorientierte Programmiersprachen eher un blich sind Diese Funktionen werden verst rkt in diesem Kapitel behandelt und ihre Bedeutung f r die Umsetzung der Konzepte der Objektorientierung wird herausgestellt Automatisches Nachladen von Klassen Wenn Sie ein Objekt einer Klasse erzeugen wollen muss der PHP Datei in der das Objekt erzeugt werden soll die Definition der Klasse bekannt sein Nach diesem Bau plan wird das Objekt dann angelegt So sehen Sie unter a
434. n diesem Zustand befindet Wenn Sie Zustandsdiagramme erstellen sollten Sie einmalig zu Beginn textuell definie ren was geschehen soll wenn ein Methodenaufruf also ein Stimulus eintritt der im aktuellen Zustand nicht definiert ist In der Regel definieren Sie f r diesen Fall eine Feh lerausgabe und verbleiben in diesem Zustand Die Notation des Starts sowie des regul ren und irregul ren Endes wurde von den Akti vit tsdiagrammen bernommen Es ist blich bei Zustandsdiagrammen den ersten Zustand initialisiert oder idle zu erzeugen der direkt nach der Erzeugung des Objekts eintritt und das sinnvoll initialisierte Objekt beschreibt Start regul res Ende amp irregul res Ende Abbildung 3 69 Start regul res und irregul res Ende des Zustandsautomaten Im ersten Beispiel wird das Zustandsdiagramm eines Interfaces beschrieben das das Protokoll einer sinnvollen Realisierung dieses Interfaces angibt Das Interface definiert die Methoden einer Flugreservierung Jemand der dieses Interface implementiert muss die folgenden Methoden ausprogrammieren reservieren stornieren m buchen PHP Endlich objektorientiert 197 3 Vorgehensweise bei der Softwareentwicklung Das Zustandsdiagramm beschreibt nun in welcher Reihenfolge diese Methoden aufge rufen werden d rfen und in welchem internen Zustand sich die Flugreservierung dann jeweils befindet Diese Dynamik kann in einem Klassendiagramm nicht dargestellt wer
435. n n mlich jeweils genau eine Zeile Als Text innerhalb einer Tabellenzelle wird einfach der aktuelle Wert der Z hlvariablen mit lt php echo i gt ausgegeben Die Definition der Tabelle selbst also lt table gt und lt table gt liegt au erhalb der Schleife da diese Definition nur einmalig erfolgt Der 11 zeilige PHP Quelltext erzeugt bereits 24 Zeilen HTML Code in der Ausgabe 46 entwickler press Grundlegende Syntax lt html lt body gt lt table border 1 lt php for i 1 i lt 10 i lt tr gt lt td align right gt lt php echo i gt lt td gt lt tr gt lt php lt table gt lt body lt html Listing 2 33 Eine for Schleife erzeugt eine HTML Tabelle TIypischerweise besitzt eine Tabelle nicht nur eine einzige Spalte sondern mehrere Schleifen k nnen n mlich genauso wie Verzweigungen verschachtelt werden Dadurch kann ein Z hler i ber die Zeilen und ein zweiter Z hler j ber die Spalten der Tabelle laufen Listing 2 34 zeigt eine Tabelle mit 10 Zeilen und 8 Spalten Die Ausgabe der Tabelle ist in Abbildung 2 9 dargestellt lt html lt body gt lt table border 1 gt lt php for i 1 i lt 10 i echo lt tr gt neue Zeile for j 1 j lt 8 j gt lt td align right gt Zeile lt php echo i gt Spalte lt php echo j gt lt td gt lt php echo lt tr gt lt table gt lt body lt html gt Listing 2 34 Eine Tabelle mit 8 Spa
436. n yvon der Variablen x x y Multiplikation von y mit der Variablen x x y Division von xmit y x y Rest der Ganzzahldivision von Sxund y x y Hinzuf gen der Zeichenkette yzu der Zeichenkette x Tabelle 2 2 Kombinierte Zuweisungsoperatoren PHP Endlich objektorientiert 25 2 Die Sprache PHP Prozedural Ebenso k nnen Sie die Ergebnisse von mathematischen Berechnungen in separaten Vari ablen ablegen Interessant in beiden F llen ist der Punktoperator zum Verbinden von Zeichenketten da eine gro e Aufgabe von PHP in der Verarbeitung von Zeichenketten besteht In diesen Zeichenketten werden Teile von HTML JavaScript und oder CSS Code verwaltet die dann zum Client gesendet werden Dort werden sie in einem Inter netbrowser interpretiert Operation Bedeutung z x y Addition von xund Syin die Variable z z x y Subtraktion von xund yund Speicherung in die Variable z z x y Multiplikation von Sxund yund Speicherung in die Variable z z x y Division von xmit yund Speicherung in die Variable z z x y Rest der Ganzzahldivision von xund yund Speicherung in die Variable z z x y Aneinanderreihen der Zeichenketten xund Syund Speicherung in die Variable z Tabelle 2 3 Zuweisungsoperatoren Zus tzlich existieren einige Operatoren um Variablen zu vergleichen Diese Operatoren liefern entweder TRUE oder FALSE zur ck und werden insbesondere bei Verzwei
437. n Aktienbestand anlegen so sind dazu einige Eingabeparameter n tig Diese Parameter sollen im Inhaltsteil in einem HTML Formular eingegeben werden Genau dies ist die Aufgabe der View im MVC Paradigma Abb 3 28 Die Weiterleitung des ausgef llten HTML Formulars erfolgt dann an eine PHP Datei die den Controller des MVC darstellt Dort werden die eingege benen Daten ggf auf G ltigkeit gepr ft und an das Datenmodell bergeben Der Erfolg dieser Aktion wird dann wiederum an den Benutzer weitergegeben Die footer inc php enth lt dann lediglich einen einheitlichen Abschluss f r die HTML Darstellung wie eine Copyright Information und das eigentliche Ende der HTML Datei PHP Endlich objektorientiert 365 5 Projektpraxis Die Realisierung des Konzepts erfolgt dadurch dass jede PHP Inhaltsdatei den Header und den Footer inkludiert und diese beiden Dateien nur einmalig vorhanden sind Dies ist der erste Ansatz f r eine zentrale Verwaltung des Layouts und der Men f hrung Bei gr eren Projekten wird ein solches Konzept weiter ausgebaut indem die HTML Dar stellung von einem Objekt einer Template Klasse bernommen wird Das Darstellungs Template enth lt dann unter anderem Eigenschaften f r die Farbdarstellung und den gesamten Stil der Pr sentation Dies kann beispielsweise ber die Parametrierung des Objekts mit CSS Dateien erfolgen Damit unser Auftraggeber die bislang nur exemplarisch getestete Funktionalit t der PHP Anwen
438. n Angestellter Stu dent und Hilfskraft mit einigen Eigenschaften und Methoden bereits ermittelt Die Namen der Methoden werden separiert unter die Eigenschaften geschrieben An dem Beispiel der Abbildung 3 56 f llt eine gro e Schnittmenge der Eigenschaften und der Methoden auf Da eine doppelte Implementierung von identischem Quellcode zur besseren Wart barkeit zu vermeiden ist sollte in einem solchen Fall eine Vererbung genutzt werden Angestellter Student Hilfskraft personalnr matrikelnr l matrikelnr lanschrift anschrift anschrift igeburtsdatum geburtsdatum geburtsdatum immatrikulation immatrikulation besch ftigungen druckeAnschrift berweiseGehalt druckeAusweis druckeAusweis druckeArbeitszeiten Abbildung 3 56 Klassen vor Einf hrung einer Vererbungshierarchie Objektorientierte Programmierung Offensichtlich beinhalten alle Klassen die Eigenschaften name anschrift und geburtsda tum was auf eine Vererbungsstruktur deutet Zus tzlich ist berall die Methode drucke Anschrift vorhanden Sowohl die Studenten als auch die Hilfskr fte besitzen die Eigen schaften matrikelnr immatrikulation und die Methode druckeAusweis Der Unterschied zwischen diesen beiden Klassen besteht nur darin dass eine Hilfskraft zus tzlich Besch ftigungen hat und eine Liste ihrer Arbeitszeiten drucken kann Eine Hilfskraft ist also ein spezieller Student sodass
439. n Befehls var_dump das Objekt ausgeben Sie erhalten dann eine detaillierte Ausgabe der internen Eigenschaften und deren aktueller Auspr gung Dies entspricht genau den Daten eines Objektdiagramms Die erste Zeile ist die Ausgabe des Konstruktors in der letzten Zeile wird der Stift durch den Destruktor Aufruf zerst rt Das Objekt lebt also nur w hrend des Aufrufs der PHP Datei aus Listing 4 2 Die Ausgabe des Listings lautet Ein Stift der Farbe schwarz wird erzeugt Farbe schwarz Farbe blau object Stift 1 1 farbe private gt string 4 blau Der Stift der Farbe blau ist jetzt zerst rt 4 1 2 Objekte in einer Session bergeben Die ganze Theorie der Objektorientierung und der Aufwand der Implementierung w r den sich nicht lohnen wenn die Objekte und deren Beziehungen nur w hrend eines PHP Aufrufs bestehen w rden Sie m ssen also daf r sorgen dass die Objekte ber einen l ngeren Zeitraum bestehen k nnen Das erste Ziel besteht darin Objekte in einer Session abzulegen um die Referenzen im n chsten Aufruf einer PHP Seite weiterver wenden zu k nnen Um das Speichern eines Objekts in einer Session zu testen muss der Anwender zun chst in einem Eingabeformular die Farbe eines Stifts in einem Textfeld eingeben In diesem Formular wird auch die Session gestartet Der Quellcode des Formulars ist in Listing 4 3 dargestellt lt php session_start gt lt html gt lt body gt lt h1 gt Willkommen
440. n Kunden mit seinen Anforderungen an die zu erstellende Anwendung als bei einer prozeduralen oder modularen Vorgehensweise Die technischen Details interessieren den Kunden in Wirk lichkeit wenig sogar ob PHP zum Einsatz kommt oder eine andere Sprache Ein kleiner H ndler der nebenbei einen Online Shop mit 10 Artikeln verwalten will besitzt meist nicht die Kenntnis von einer 3 Tier Infrastruktur oder von einem PHP Interpreter Von einem guten Programmierer wird diese Selbstverst ndlichkeit meist nicht wahrgenommen Stattdessen will er oft seinem Kunden stolz die Funktion seiner neuen Anwendung detailliert erkl ren Dies interessiert den Kunden jedoch nicht Er m chte lediglich seinen Shop mit den gew nschten Funktionen m glichst leicht hand habbar online stellen Die Projektbeteiligten Die Methoden der Objektorientierung und der UML sind vor allem dann sinnvoll anwendbar wenn an dem Projekt der Softwareerstellung eine Vielzahl von Personen beteiligt ist Nur bei kleinen Projekten haben Sie als Entwickler direkt und ausschlie lich Kontakt zu einem einzelnen Verantwortlichen auf der Seite des Kunden Bei gr eren PHP Projekten spielen jedoch viel mehr Personen eine Rolle im positiven wie im nega tiven Sinne Alle Personen die direkt oder indirekt Einfluss auf ein Softwareprojekt haben werden als Projektbeteiligte oder Stakeholder bezeichnet Dabei kann es sich um nat rliche Per sonen eine Personengruppe oder auch um Institu
441. n PHP eine Vielzahl von Klassen enthalten sodass sich eine gro e Sammlung von Dateien ergibt Selbst bei einer Unterteilung in verschiedenen Ordnern wird das Projekt dadurch un bersichtlich Aus diesem Grund lassen sich mehrere Klassen in Java zu einem Archiv zusammenfas sen das die Dateiendung jar erh lt als Abk rzung f r Java Archive Ein solches Archiv beinhaltet eine Vielzahl von kleinen kompilierten class Dateien in einer Verzeichnis struktur die im ZIP Format komprimiert wurden Zus tzlich wird in einem Unterordner META INF eine Textdatei manifest mf erstellt die Metainformationen zu dem Archiv ent h lt wie Inhalte Versionsnummer oder auch Hersteller des Archivs In der Version 5 3 hat PHP analog dazu das phar Format eingef hrt was PHP Archiv bedeutet Dabei stellt sich zun chst die Frage wie Sie eine solche phar Datei anlegen In Listing 4 85 wird aus allen Dateien der Kundenverwaltung aus Abbildung 4 18 ein PHP Archiv angelegt lt html gt lt body gt lt php phar new Phar kv phar phar gt buildFromDirectory myERP kv gt lt body gt lt html gt Listing 4 85 Erstellung eines PHP Archivs Es ist jedoch wahrscheinlich dass der Aufruf des Skripts in der Fehlermeldung Fatal error Uncaught exception UnexpectedValueException with message creating archive ku phar disabled by INI setting in endet Dies liegt daran dass Sie das Schreiben in ein Archiv zun chst in der Konfigurationsdatei
442. n PHP ist der server seitige Zugriff auf eine Datenbank mit deren Inhalten dynamisch HTML Tabellen aufgebaut beispielsweise zu kaufende Artikel und Eingaben von Benutzern als Daten in einer anderen Tabelle abge legt werden k nnen Das k nnen unter anderem Kundendaten oder Bestellungen sein Die Kombination der Skriptsprache PHP mit der leicht administrierbaren internettaug lichen Open Source Datenbank MySQL http www mysgql org hat seit dem Jahr 2000 zu der erheblichen Verbreitung und damit zum Siegeszug von PHP beigetragen Diese Kombination erm glicht den Aufbau einer so genannten 3 Tier Architektur auch 3 Schichten Architektur die im Gegensatz zu statischen Webseiten eine datenbankab h ngige Gestaltung von Inhalten erlaubt Der Client bildet dabei das Frontend mit der Pr sentationsschicht das auch als GUI Graphical User Interface bezeichnet wird Im Frontend k nnen HTML JavaScript Java Applets und oder Flash Animationen zum Einsatz kommen Die Anwendungsschicht die oft auch als Fachlogik oder Businesslogik bezeichnet wird bildet die Intelligenz der Anwendung und wird von den PHP Skrip ten auf dem Webserver realisiert Die dritte Schicht wird als Datenschicht Datenzugriffs schicht oder Persistenzschicht bezeichnet Hier werden abrufbare Daten organisiert abgelegt und es k nnen neue Daten durch Eingabe in der Pr sentationsschicht und Pr fung bzw Aufbereitung in der Anwendungsschicht hinzugef gt werden Die Daten
443. n Pattern bietet Zus tzlich werden UML Diagramme gezeigt die den L sungsansatz genauer beschreiben Da Sie im dritten Kapitel die UML Syntax kennengelernt haben und im vierten Kapitel dieses Buches erfahren haben wie man die PHP Endlich objektorientiert 401 5 Projektpraxis UML Syntax mit PHP 5 umsetzt sollten Sie in der Lage sein diese Muster mit PHP zu Entwurfsmuster realisieren Anwendungsbereich klassen basiert objekt basiert Strukturmuster Verhaltensmuster Strukturmuster Verhaltensmuster klassen basiert Adapter Schablone objekt basiert Singleton Beobachter Abbildung 5 39 Gliederung der Design Patterns und exemplarische Vorstellung Eine Fabrik zur Produktion von Objekten H ufig haben Sie die Aufgabenstellung ein Framework f r Anwendungen zu program mieren die mehrere Dokumente gleichzeitig anzeigen bzw verwalten k nnen So k n nen Sie beispielsweise in Microsoft Word neben doc Dateien auch html oder txt Dateien laden die v llig anders aufgebaut sind In der Zukunft k nnen weitere heute noch unbekannte Protokolle hinzukommen Das Framework verwendet dabei eine abstrakte Klasse f r die Dokumente Die Erzeu gung der Objekte erfolgt durch eine abstrakte Fabrikmethode die von einer konkreten Unterklasse berschrieben wird Die Unterklasse hier MeinDokument kennt ja ihren Aufbau Abbildung 5 40 skizziert die notwendige Klassenstruktur zur Realisierung des Fabri
444. n Quelltext der dann noch brig bleibt und der sich auf den eigentlichen Content der Webseite beschr nkt PHP Endlich objektorientiert 59 2 Die Sprache PHP Prozedural lt php include_once header inc php gt lt h2 gt Herzlich Willkommen lt h2 gt lt p Dies ist der Content dieser Web Seite Ist der HTML Code nicht sehr bersichtlich gehalten Das kann doch jeder editieren oder lt p gt lt php include_once footer inc php gt Listing 2 50 Content Datei mit Einbindung eines Headers und eines Footers Um eine vollst ndige HTML Seite zu erhalten m ssen Sie jetzt noch die Datei header inc php in dasselbe Verzeichnis schreiben lt php wert 100 auch alle Initialisierungen gt lt html gt lt head gt lt meta name author content Frank Dopatka gt lt meta name copyright content Frank Dopatka gt lt meta name language content de gt lt title gt Dr Ds Homepage lt title gt lt head gt lt body gt Listing 2 51 Die header inc php Alle Tags die im Header ge ffnet werden und noch nicht geschlossen sind sollten im Footer geschlossen werden Dadurch wird Konsistenz f r den Entwickler des Content Teils erreicht der dann nur die Tags schlie en muss die er auch selbst ffnet In diesem Header bleiben die Tags lt html gt und lt body gt ge ffnet Diese werden vom Footer in Lis ting 2 52 geschlossen Zus tzlich wird der Copyrighthinweis hinzugef gt lt center gt
445. n Schichten viele Bereiche neu entwickelt werden Begegnen kann man der Sumo Hochzeit mit einer klaren Trennung der Schichten in eine Datenzu griffsschicht die alle SQL Anweisungen kapselt und konsequenter Verwendung von Standardbefehlen der SQL einer separaten Fachlogik und einer ebenfalls separaten Schicht f r die Benutzerinteraktion PHP Endlich objektorientiert 411 5 Projektpraxis Blendwerk des Projektmanagements Eine Gefahr bei GUI Prototypen besteht darin dass nicht fertige Funktionen als fertig vorget uscht werden Wenn Ihr Kunde sich bereits durch die gesamte Anwendung kli cken kann so kann er die Frage stellen wozu die restlichen 70 der Gelder notwendig sind die noch bezahlt werden sollen Erfahrungsgem haben Anwender gew hnlich nur wenig Kenntnis von dem Backend hinter der Benutzeroberfl che Gegen das Blendwerk hilft es neben horizontalen GUI Prototypen auch in einer fr hen Phase des Projekts vertikale Prototypen zu implemen tieren die eine Funktion durchg ngig durch alle Schichten implementiert An dieser Ent wicklung sollte der Kunde beteiligt sein um gemeinsam eine genauere Aufwandsab sch tzung f r jede zu realisierende Funktionalit t vornehmen zu k nnen Erschleichung von Funktionalit t Der Umfang der zu entwickelnden Funktionalit t wird gew hnlich in einem Projektplan festgehalten Die Erschleichung von Funktionalit t besteht dann wenn Ihr Kunde nach der Erstellung des Projektplans
446. n __construct id name beschreibung ek vk mwst this id id this gt name name this beschreibung beschreibung this ek ek this gt vk vk this gt mwst mwst public function getId return this id public function getMwSt return this gt mwst Listing 4 34 Die Klasse Artikel Abbildung 4 7 zeigt nun ein Objektdiagramm des kleinen Testprogramms das in Listing 4 33 vorgestellt wird Da das Objektdiagramm ein konkretes Beispiel aus der objektorien tierten Analyse bildet aus dem die Klassendiagramme erst abgeleitet werden Kap 3 muss dieses Beispiel jetzt nachgebildet werden k nnen PHP Endlich objektorientiert 247 4 PHP objektorientiert pos01 Rechnungsposition a2 Artikel Menge 5 ID 2 Einzelpreis 0 70 Name Butter Rabatt 0 Beschreibung gute Butter Einkaufspreis 0 50 Verkaufspreis 0 70 MwSt Satz 7 Abbildung 4 7 Objektdiagramm einer Rechnungsposition mit einem Artikel Zun chst wird der Artikel erstellt und danach die Rechnungsposition Diese erh lt beim Konstruktoraufruf die Referenz auf den Artikel Interessant ist auch die M glichkeit ber die Rechnungsposition den Artikel zu ermitteln und dann eine Methode dieses Artikels in diesem Fall getBeschreibung aufzurufen Dieser Aufruf kann ber pos01 gt getArtikel gt getBeschreibung in einer Zeile erfolgen lt php require_once classloader inc php gt
447. n aus dem Modell als auch f r die Entgegennahme von Benutzerinteraktionen zust ndig Darzustellende Daten werden zumeist in HTML Tabellen unter Verwendung von Style Sheets aufberei tet w hrend Benutzereingaben zum gr ten Teil aus HTML Formularen bestehen die ausgef llt und zu einer PHP Seite zur Auswertung weitergeleitet werden Diese PHP Seite wird als Steuerung bezeichnet und verwaltet die R ckgaben von einer oder mehreren Pr sentationen Die eingegebenen Daten des Anwenders werden entge gengenommen auf G ltigkeit gepr ft und ausgewertet Dabei greift die Steuerung auf das Modell zu und leitet zu der entsprechenden Pr sentation f r den Anwender weiter In der Steuerung befinden sich auch die modellierten PHP Klassen Abbildung 3 28 zeigt die Trennung der Schichten nach dem MVC Prinzip unter Verwen dung von PHP Die Dateien login html bzw login php sowie ok html bzw ok php bilden die Pr sentationsschicht auf Basis von clientseitigem Quellcode wie HIML JavaScript AJAX CSS usw Die auswertung php enth lt den Kern der PHP Fachlogik und bildet die Steuerung der Login Funktion Sie verwaltet auch den Zugriff auf das Datenmodell Die zugriff php verwaltet intern den Zugriff auf den Datenbankserver setzt SQL Abfragen ab und gibt die Antworten an die Steuerung weiter 1 Anfrage 2 5a Antwort 5b Antwort Client l 3 HTTP Post des ausgef llten Formulars DS N u VA o login html php 9
448. n authentifizierten Anwender in den anderen F llen erfolgt eine Weiterleitung zu der Loginmaske Eine Umgehung der Loginmaske ist selbst wenn ein Angreifer Kenntnis von der Existenz der Datei portal php hat nicht m g lich Wenn alles in Ordnung ist erfolgt eine personalisierte Willkommensnachricht da der Name des Anwenders in der Session gespeichert wurde lt php session_start if lisset _SESSIONLAuth header Location login php if _SESSIONLAuth 1 header Location portal php lt html lt body gt lt hl gt Hallo lt php echo _SESSIONLUser gt Herzlich Willkommen im Portal lt h1 gt lt body gt lt html gt Listing 2 64 Beim erfolgreichen Login gelangt man auf die portal php PHP Endlich objektorientiert 75 2 Die Sprache PHP Prozedural Zum Abschluss dieses Kapitels werden in Tabelle 2 23 die wichtigsten Befehle zur Ver waltung von Sessions vorgestellt Interessant ist dabei dass in einer Session registrierte Variablen auch wieder gel scht werden k nnen Funktion Bedeutung session_start startet eine neue Session oder bernimmt eine bereits vorhandene erg session_id gibt den eindeutigen Identifier der eigenen aktuellen Session zur ck erg session_encode liefert eine Liste mit allen abgespeicherten Variablen der aktuellen Session session_unregister name entfernt eine Variable mit dem Namen same aus der Liste der Variablen einer Session session_unset
449. n den Zustand durchgef hrt wenn es nicht ausgefallen ist Sowohl durchgef hrte als auch stornierte Seminartermine werden zur Rechnungsstel lung und f r statistische Zwecke archiviert os Verbesserung aktualisieren gel scht Kunde meldet sich an letzter TN sagt ab after Seminarende buchend TN sagt ab abmelden Kunde meldet sich an anmelden f llt aus Seminar voll TN sagt ab ausgebucht archiviert after Seminarende durchgef hrt storniert entry stornieren Abbildung 3 71 Zustandsdiagramm eines Seminartermins PHP Endlich objektorientiert 199 3 Vorgehensweise bei der Softwareentwicklung Meinung Ein pr zise und vollst ndig ausformuliertes Zustandsdiagramm ist f r den Entwick ler eine gro e Hilfe das erstellte technische Modell zu implementieren Im Gegen satz zu Systemanalytikern die mit dem Kunden aus dem Gesch ftsprozess weichere Formulierungen zur Beschreibung der zu erstellenden Anwendung ausarbeiten k nnen Zustandsdiagramme mit klaren Formulierungen und berg ngen versehen werden die sich leicht in einer Programmiersprache umsetzen lassen Das n chste Beispiel eines Zustandsdiagramms zeigt das Modell eines Getr nkeautoma ten auf Meeresspiegelebene wie ein Anwender den Automat typischerweise bedient Nach dem Einschalten initialisiert sich der Automat mit seiner Getr nkek hlung seinem F llstand der e
450. n der Analyse erreichen sp ter jedoch eine Entt uschung bei der Vorstellung des Prototyps erleben Eine sprachliche Pr zision der Anforderungen zu erreichen ist nicht mal eben zwi schendurch erledigt sondern ein Prozess der eine hohe Kompetenz und Konzentration von allen Beteiligten erfordert Sie m ssen also eine Beschreibung finden die auf Microsoft Word zutrifft aber auf keine Tabellenkalkulation oder Pr sentationssoftware Objektorientierte Programmierung Ein Unterscheidungsmerkmal ist sicherlich die Bearbeitung von DIN A4 Seiten zum Ausdruck inklusive Formatierung der Seitenr nder Kopf und Fu zeilen Ein weiteres besonderes Merkmal einer Textverarbeitung ist die Verwaltung von Abs tzen Tabulato ren und berschriften unter Verwendung von Formatvorlagen Auch die Kontrolle von Rechtschreibung und Grammatik ist in einer Textverarbeitung sicherlich wichtiger als in anderen Anwendungen Der Informationsgehalt eines grafischen Use Cases ist gerade bei komplexen Anwen dungen gering Die Akteure und die gew nschten Funktionen k nnten auch in eine Tabelle kompakter dargestellt werden Deshalb kann man in einem zweiten Schritt jeden Anwendungsfall nochmals genauer betrachten Die textuellen Schablonen die man beispielsweise als Vorlage in einer Text verarbeitung hinterlegen kann sind zwar nicht in der UML standardisiert werden jedoch h ufig mit folgender Struktur bef llt m Name der gew nschten Funktion identis
451. n die Wirklichkeit sp ter in der objektorientierten Anwendung abgebildet werden Wie kann im Beispiel des Autohauses eine Abbildung der Objekte auf Klassen aussehen m Herr Meier gt Verk ufer gt Mitarbeiter gt Person m Autohaus EuroCar gt Autohaus m Frau Schulz gt Kunde gt Person m Kombi Y3 gt PKW gt Fahrzeug gt Artikel m Bus i2000 gt PKW gt Fahrzeug gt Artikel gt Hybrid Antrieb gt Antrieb gt Ausstattung gt konkrete Ausstattung gt Ausstattung m B ro von Herrn Meier gt Raum m Kaufvertrag zwischen Herrn Meier und Frau Schulz gt Kaufvertrag gt Vertrag PHP Endlich objektorientiert 131 3 Vorgehensweise bei der Softwareentwicklung Auch immaterielle Objekte m ssen zu Klassen zusammengefasst werden m Verkaufsgespr ch zwischen Herrn Meier und Frau Schulz gt Verkaufsgespr ch gt Gespr chsprotokoll m Kaufinteresse von Frau Schulz gt Kaufinteresse Treten Personen wie Herr Meier oder Frau Schulz als Objekte auf so schl pfen sie meist in so genannte Rollen die im System von Interesse sind Herr Meier bernimmt die Rolle des Verk ufers und Frau Schulz die eines Kunden Diese Rollen bilden dann die Klassen EuroCar ist ein konkretes Autohaus bei dem Herr Meier angestellt ist Die zu erstellende Anwendung soll jedoch auch auf andere Autoh user bertragen werden k nnen und ggf sogar mehrere Autoh user verwalten Somit existiert auch eine Klasse Autohaus
452. n die login_server php zur ck Lis ting 2 63 skizziert ein Skript das die eingegebenen Formulardaten pr ft und einen Anwender authentifiziert Dabei wird zun chst die Session wieder initialisiert sodass der Zugriff auf die Session daten erm glicht wird Zun chst wird gepr ft ob die Variablen User und Pass in der Ses sion existieren Das ist dann nicht der Fall wenn der Anwender die login_server php direkt aufruft ohne vorher die login php aufgerufen zu haben In diesem Fall leitet PHP die Ausgabe direkt ber das HTTP Protokoll an die login php weiter indem der Header des HTTP Protokolls modifiziert wird Profitipp Wenn Sie bereits HTML Code an den Client gesendet haben beispielsweise lt HTML gt dann k nnen Sie den HTTP Header nicht mehr modifizieren da er bereits zum Client gesendet wurde Die Pr fungen m ssen also erfolgen bevor die erste Ausgabe an den Client erfolgt Im Anschluss daran werden die ausgef llten Formulardaten mit dem Benutzernamen und dem Kennwort ausgelesen Entspricht der Benutzername der Zeichenkette frank und das Passwort der Zeichenkette geheim so ist der Benutzer als Frank authentifiziert und wird in das interne Portal weiter geleitet Der eingegebene Benutzername wird dabei zun chst mit strtolower in Kleinbuchstaben konvertiert und dann mit verglichen Dadurch ist die Eingabe des Benutzernamens frank unabh ngig von der Gro und Kleinschreibung Wurde der Benutzername und oder das Kennwort fa
453. n diesem Fall ist der Wert 0 Listing 4 16 zeigt den Zugriff auf die Klassenmethode Dies geschieht genauso wie im Konstruktor ber die Klasse selbst Nachdem der erste Bruch erzeugt und ausgegeben wurde wird die Anzahl nochmals ausgegeben Dies wird f r einen zweiten Bruch wie derholt Da der Destruktor der Br che erst hinter der letzten Zeile des PHP Skripts ausgef hrt wird kann das Dekrementieren der Anzahl nicht dargestellt werden lt php require_once classloader inc php gt lt html gt lt body gt lt php echo Anzahl Bruch getAnzahl lt br gt a new Bruch 1 2 echo a a lt br echo Anzahl Bruch getAnzahl lt br gt 2 b new Bruch 3 2 echo b b lt br Listing 4 16 Zugriff auf die statische Klassenmethode von au en PHP Endlich objektorientiert 227 4 PHP objektorientiert echo Anzahl Bruch getAnzahl lt br gt 2 0 lt body gt lt html gt Listing 4 16 Zugriff auf die statische Klassenmethode von au en Forts Die Ausgabe erfolgt unter Verwendung der __toString Methode aus dem vorherigen Kapitel und sieht folgenderma en aus Anzahl 0 a 1 2 Anzahl 1 b 3 2 Anzahl 2 Aus Sicht von gutem objektorientiertem Design ist von der Verwendung statischer Eigenschaften und Methoden abzuraten Wenn Sie eine Vielzahl von statistischen Infor mationen verwalten wollen sollten Sie eine eigene Verwaltungsklasse schreiben Diese Klasse ist
454. n f r einen Programmierer irref hrend sein und beim Debug ging sogar zu falschen Annahmen f hren Profitipp Ein erfahrener Programmierer verwendet statt einer direkten Ausgabe eines Variab leninhalts zum Debugging den PHP Befehl var_dump Dieser Befehl gibt sowohl den Datentyp als auch den Inhalt der Variablen zur ck So erh lt man mit lt php echo var_dump g gt in Listing 2 4 die erwartete Ausgabe im Internetbrowser mit bool FALSE Wenn Sie nur der Datentyp einer Variablen interessiert so k nnen Sie den Befehl lt php echo gettype g gt verwenden Im Beispiel wird dann boo lean zur ckgegeben Wie bereits erw hnt ist PHP eine untypisierte Sprache F r erfahrene Programmierer einer anderen Sprache ist oft auch das Verhalten einer PHP Variablen im Laufe ihrer 20 entwickler press Grundlegende Syntax Existenz berraschend Man kann denken dass eine Variable bei ihrer ersten Wertzuwei sung einen Datentyp erh lt und dieser Datentyp dann f r die restliche G ltigkeit der Variablen gleich bleibt Das ist bei PHP jedoch nicht der Fall wie der Quellcode in Listing 2 6 zeigt In diesem Listing wird auch gezeigt dass PHP Anweisungen mit einem Semikolon abgeschlossen werden Das ist immer dann notwendig wenn mehrere Anweisungen in einem PHP Block ausgef hrt werden Eine einzelne Anweisung kann auch ohne Semi kolon in einem PHP Skript verwendet werden lt html gt lt body gt lt php a 4 echo var_dump a
455. n in Grenzen hal ten wird muss die Methode der CRC Karten nicht angewendet werden In diesem Fall sollen die Klassen ber die Formulierung von typischen Beispielen gefun den werden Bereits in den Aktivit tsdiagrammen wurde der Aktienbestand erw hnt der als Ausgangspunkt der Betrachtung dienen kann Aktie E ON DEOOOENAG999 Aktienbestand k Bilanz 90 St ck 168 Tage im Besitz 24 04 2009 gekauft 4 12 bzw 17 50 Gewinn Aktie 23 54 St ck Kaufpreis pro Aktie 486 00 bzw 22 83 Gewinn incl Dividenden und Kosten 135 00 Dividenden 49 64 hochgerechnete Zinsen Jahr 9 90 w ren die Verkaufgeb hren Bestand noch nicht verkauft Abbildung 5 9 Objektdiagramm einer Aktie die in einem Bestand vorliegt Ein Aktienbestand besteht aus Aktien eines Typs Im Beispiel aus Abbildung 5 9 wird ein Bestand der Aktie von E ON vorgestellt Der Bestand besteht aus 90 Aktien die am Das Fallbeispiel der Depotverwaltung 24 04 2009 f r je 23 54 pro St ck gekauft wurden Beim Kauf sind 9 90 zus tzliche Geb hren angefallen F r diesen Bestand hat E ON nach seiner Hauptversammlung eine Dividende von 135 00 ausgezahlt Der Bestand ist bislang nicht verkauft worden Die Bilanz des Aktienbestands nach aktuellen 168 Tagen ist ein Gewinn von 4 12 Aktie bzw ein Gewinn von 17 5 Rechnet man die erhaltenen Dividenden hinzu und zieht die Depotgeb hren f r diesen Aktienbestan
456. n noch zwei besondere PHP Befehle in Verbin dung mit Schleifen erw hnt werden Bereits in Verbindung mit der switch Verzweigung wurde das break Kommando verwendet um einen behandelten Fall abzuschlie en Die sen Befehl k nnen Sie auch innerhalb eines Schleifenrumpfes verwenden Wird er ausge f hrt so wird das Durchlaufen der Schleife sofort beendet und die erste Anweisung hin ter dem Schleifenrumpf ausgef hrt Auf den ersten Blick stellt sich die Frage welchen Sinn eine Schleife noch macht wenn man sie mit einem anderen Befehl abbricht Die Antwort liegt in der Verbindung des break Kommandos mit einer Verzweigung Ein sinnvolles Beispiel daf r ist die Suche in einem Datenfeld Die Schleife durchsucht ein Datenfeld nach einem bestimmten Ele ment Wurde das Element gefunden muss das Feld nicht weiter durchsucht werden da es unter Umst nden sehr viele Elemente enthalten kann lt html gt lt body gt lt php data Array datal Hugo datal Uli datal Frank datal Olga suche Frank gefunden FALSE foreach data as index gt wert if wert suche echo wert gefunden lt br gefunden TRUE break Listing 2 42 Eine Suchfunktion in einem Datenfeld und das break Kommando PHP Endlich objektorientiert 53 2 Die Sprache PHP Prozedural else echo Der Name wert ist NICHT der Suchbegriff lt br gt if gefunden echo Suche war erfolgreich lt br gt gt
457. n ohne eine zugeh rige Rechnung keinen Sinn Ebenso ist eine Rechnungsposition nicht gleichzeitig mehreren Rechnungen zugeordnet Man kann hier also von einer Komposition sprechen Ein Artikel kann aber auch existieren ohne dass er zu einer Rechnungsposition geh rt Wenn mehrere Kunden denselben Artikel erwerben so erscheint er in mehreren Rech nungspositionen Hier sollte also eine Aggregation gew hlt werden Abstrakte Klassen und Interfaces Bereits im Beispiel des Autohauses wurde eine Oberklasse Person definiert von der sich ber mehrere Stufen der Vererbung die Klasse Verk ufer und Kunde abgeleitet haben Auf eine hnliche Art wurden von der Oberklasse Tier die Klassen Hund und Katze abgeleitet Zus tzlich wurde gesagt dass man Objekte aus Klassen mit dem Befehl new erstellen kann Es stellt sich aber die Frage warum man Personen in der Anwendung anlegen kann die weder Kunden noch Lieferanten oder Mitarbeiter sind Weitere Personen machen im PHP Endlich objektorientiert 143 3 Vorgehensweise bei der Softwareentwicklung System keinen Sinn Ebenso m chten Sie verschiedene Tiere in Ihrer Anwendung abspei chern Wenn Sie jedoch ein Objekt der Klasse Tier anlegen ist dies zwar ein Tier aber weder ein Hund noch eine Katze Es wurde auch bereits eine Methode gibLaut definiert die jedes Tier haben soll Was ist jedoch der Default Laut eines Tiers Es ist nicht sehr praktikabel einen solchen Standardlaut zu verwenden F
458. n werden durch die Aus sage festgelegt dass f r jeden Studenten Name Matrikelnummer und E Mail Adresse erfasst werden ber die Anmeldung kann eine Assoziation zwischen einem Studenten und einer bungs gruppe entstehen Da jede bungsgruppe ihren Raum kennt kennt sich auch die darin gespeicherte maximale Anzahl an Pl tzen Wenn sich ein Student zu einer Gruppe anmel den will so kann die bung ber die Raumreferenz pr fen ob noch ein Platz frei ist Verben k nnen Hinweise auf Methoden geben In diesem Text sind jedoch nur wenige Hinweise auf Methoden zu finden Die Erfassung eines Studenten mit dessen Namen Matrikelnummer und E Mail Adresse deutet auf die Parameter des Konstruktors die bei der Objekterzeugung notwendig sind Zus tzlich ist das Anmelden an eine bungsgruppe zu nennen In der Modellierung besitzt eine bungsgruppe dann eine Methode anmelden bei der als Parameter ein Stu dentobjekt bergeben wird Objektorientierte Programmierung Die Methode der CRC Karten Auch die CRC Karte Class Responsibility Collaboration Karte ist ein Hilfsmittel f r das objektorientierte Design Das Prinzip besteht darin f r jede Klasse eine Karteikarte zu erstellen und auf ihr deren Eigenschaften zu notieren Eine allgemeine Notation besteht aus den folgenden Bereichen m Oben steht der Name der Klasse und ggf deren Oberklasse m Auf der linken Seite schreibt man die Aufgaben die die Klasse erf llen soll in kurz
459. nan der getrennt werden Au erdem k nnen weitere Verzweigungen platziert werden So k nnen Sie erreichen dass beispielsweise zun chst gepr ft wird ob eine Verbindung zur Datenbank erfolgreich aufgebaut wurde Ist das der Fall wird das richtige Kennwort aus der Datenbank geholt und mit dem eingegebenen Kennwort verglichen Dieser Vergleich liefert wiederum einen Wahrheitswert Wenn dieser TRUE ist hat der Anwender Zugang zum Portal F r den Fall dass eine Bedingung FALSE ergibt k nnen Sie ebenso Anweisungen plat zieren die ausschlie lich in diesem Fall ausgef hrt werden Eine Skizze dazu sehen Sie in Listing 2 23 lt php echo Anweisungl lt br gt 2 echo Anweisung2 lt br gt if bedingung TRUE echo Anweisung 3 Bedingung erf llt lt br gt Listing 2 23 Skizze einer Wenn Dann Ansonsten Verzweigung 36 entwickler press Grundlegende Syntax elsef echo Anweisung A Bedingung NICHT erf llt lt br gt echo Anweisung5 lt br gt echo Anweisung6 lt br gt Listing 2 23 Skizze einer Wenn Dann Ansonsten Verzweigung Forts Hier wird entweder Anweisung3 ausgegeben in dem Fall dass bedingung erf llt ist oder Anweisung4 falls die bedingung nicht erf llt ist Ansonsten wird der Quellcode wie gewohnt linear abgearbeitet Abbildung 2 6 stellt die beiden bislang vorgestellten Arten der Verzweigung anhand von Programmablaufpl nen gegen ber und bezieht sich dabei auf die Quellcodes der
460. nars sowohl von unserem Kunden als auch von den Entwicklern als bedeutend und aufw ndig zu realisieren eingesch tzt wurde Interessant ist auch die Rechnungsverwaltung die momentan kaum relevant ist jedoch schwierig zu realisieren Die Rechnungsverwaltung wurde in diesem Beispiel in ein externes zugekauftes Waren wirtschaftssystem ausgelagert Dies ist leicht bedienbar und w re nur mit hohem Kos tenaufwand selbst zu implementieren gewesen Eine Frage besteht darin wie feingranular die Aufspaltung der ben tigten Funktionen erfolgen soll Eine Aussage besteht darin eine Aufteilung bis zu einer Scrum Aufgabe n chstes Kapitel vorzunehmen deren L sung ca 16 Mannstunden in Anspruch neh men soll Dies ist ggf eine zu feine Gliederung in der blichen Praxis kann eine Auftei lung in eine Mannwoche also ca 40 Mannstunden erfolgen Werden die Priorit ten von dem Kunden und von den Entwicklern als hoch einge stuft so ist die ben tigte Funktionalit t f r die Gesamtanwendung wertvoll Schwierige Funktionen implizieren ein hohes Risiko f r die erfolgreiche Implementierung Abbil dung 3 23 stellt den Wert und das Risiko in einer Matrix gegen ber Risiko hohes Risiko hoher Wert Abbildung 3 23 Risk Value Priorisierung Auf den ersten Blick kann man denken dass es sinnvoll ist zun chst Funktionen mit niedrigem Risiko und hohem Wert zu implementieren denn dadurch kann man in fr hen Prototypen den Kunden zufrieden
461. nbestands ohne Verkauf und ohne Bilanz PHP Endlich objektorientiert 353 5 Projektpraxis this gt aktie value public function getVerkaufGeb hren return this gt verkaufGeb hren private function setVerkaufGeb hren value if this gt isVerkauft throw new Exception setVerkaufGeb hren Bestand ist bereits geschlossen this gt verkaufGeb hren value public function addDividende value if this gt isVerkauft throw new Exception addDividende Bestand ist bereits geschlossen this gt dividendent value public function getDividenden return this gt dividenden public function getEkDatum return this gt kaufDatumMW public function getEkEinzelpreis return this gt kaufPreisMW public function getKaufGeb hren return this gt kaufGeb hren public function isVerkauft return this verkauft Listing 5 8 Implementierung des Aktienbestands ohne Verkauf und ohne Bilanz Forts Das Fallbeispiel der Depotverwaltung public function addKauforder value f if this isVerkauft throw new Exception addVerkauforder Bestand ist bereits geschlossen arithm gewichteter Mittelwert des EK Preises berechnen if this gt kaufPreisMW 0 0 1 1 Kauf this gt kaufPreisMW value gt getEinzelpreis this gt kaufDatumMW value gt getDatum else n Kauf anzl this gt aktBestand epl this gt kaufPreisMW dl this
462. nd f hrt zu folgender Ausgabe letueL ella na ollaH hallo an alle leute HALLO AN ALLE LEUTE 70 W Hallo an alle Leute lt html gt lt body gt lt php str Hallo an alle Leute echo strrev str lt br gt echo strtolower str lt br gt echo strtoupper str lt br gt echo ord F lt br gt echo chr 87 lt br gt arr explode str foreach arr as index gt wert echo wert Listing 2 55 Test der Umwandlung von Zeichenketten PHP Endlich objektorientiert 63 2 Die Sprache PHP Prozedural gt lt body gt lt htm1 gt Listing 2 55 Test der Umwandlung von Zeichenketten Forts Abschlie end sind noch einige besondere Funktionen zur Verwendung von Zeichenket ten in Internetanwendungen zu nennen So wandelt z B die Funktion nl2br die von einer Datei eingelesenen Zeilenumbr che in lt br gt Tags um sodass die Zeilenumbr che auch bei einer Interpretation des entstehenden HITML Codes erhalten bleiben Eine hnliche Transformation f hrt der Befehl htmlentities durch Hier werden Sonder zeichen so umgeformt dass sie bei der HIML Interpretation identisch auf dem Browser dargestellt werden Beispielsweise f hrt der Befehl echo htmlentities Hall chen lt Freunde gt zur folgenden HTML Ausgabe Hall amp ouml chen amp lt Freunde amp sgt Funktion Bedeutung erg nl2br str wandelt Zeilenumbr che in lt br gt um erg htmle
463. ndChild seminare daten dom saveXML gt lt html gt lt body gt lt php fh fopen neu xml wb if fwrite fh daten false echo Konnte XML Datei nicht schreiben else echo XML Datei erfolgreich geschrieben Listing 4 68 Mit DOM eine XML Datei schreiben PHP und XML fclose fh lt body gt lt html gt Listing 4 68 Mit DOM eine XML Datei schreiben Forts Die geschriebene XML Datei ist ein vereinfachtes Beispiel der Seminardatei und wird in Listing 4 69 dargestellt lt xml version 1 0 encoding iso 8859 1 gt lt seminare gt lt seminar id S1120 gt lt name PHP5 objektorientiert lt name gt lt dozent Dr Frank Dopatka lt dozent gt lt teilnehmerliste gt lt seminar gt lt seminare gt Listing 4 69 Die geschriebene XML Datei Gepr ftes XML DTD und Schema Wie Sie in den letzten Beispielen bereits gesehen haben k nnen Sie die Namen der Ele mente frei vergeben In diesem Kapitel werden Sie nun sehen wie Sie anhand einer Dokumenttypdefinition oder anhand eines XML Schemas Regeln f r diese Elemente vergeben k nnen Diese Regeln werden meist in einer separaten Datei mit der Endung dtd bzw xsd abgelegt PHP bietet Ihnen die M glichkeit durch das Parsen nicht nur die Wohlgeformtheit der XML Datei sicherzustellen sondern auch die G ltigkeit in Bezug auf einen solchen Satz von Regeln Um die Beispieldatei nach einer DTD mit PHP 5 pr fen zu lass
464. nde Syntax Anweisung Anweisung2 Anweisung3 Anweisung4 Anweisung5 Anweisung Abbildung 2 7 Die switch Verzweigung Im ersten Beispiel erhalten Sie eine Schulnote aus einer Datenbank die in der Variablen note gespeichert wird Sie m chten nun f r die Ausgabe den Text der Note ermitteln Die F lle 4 bis 6 wurden ausgelassen Wie Sie sehen erzeugt die switch Anweisung sehr bersichtlichen Quellcode lt php note 2 switch note case 1 noteText Sehr gut break case 2 noteText Gut break case 3 noteText Befriedigend Listing 2 31 Eine Note per switch Anweisung PHP Endlich objektorientiert 43 2 Die Sprache PHP Prozedural break F lle 4 bis 6 default noteText ERROR break gt lt html gt lt body gt Sie haben mit der Note lt php echo noteText gt abgeschlossen lt body lt html gt Listing 2 31 Eine Note per switch Anweisung Forts hnlich wie das letzte else in der elseif Struktur existiert bei dem switch Block bei Bedarf ein abschlie ender default Block Damit k nnen alle F lle abgefangen werden die vorher nicht behandelt wurden Ob die Verwendung der switch Verzweigung bersichtlicher ist als die elseif Konstruktion ist Geschmacksache Die Urlaubsregelung aus Listing 2 29 kann jedenfalls nicht mit einer switch Verzweigung gel st werden da die Urlaubsregelung Wertebereiche des Alters abfragt beispielsweise
465. nderem in Listing 4 7 des letzten Kapitels die Einbindung der Klassenbeschreibung f r Stifte durch den Befehl require_ once stift inc php Da die Objektorientierung sich gerade f r gro e Projekte mit komplexen Objektgeflech ten eignet ist diese Deklaration jeder einzelnen Klasse zu Beginn jeder PHP Datei sehr wartungsaufw ndig Um diesen Aufwand zu minimieren bietet PHP die __autoload Methode Wie der Konst ruktor und der Destruktor sind die Spezialmethoden der Objektorientierung bei PHP durch den Beginn mit zwei Unterstrichen gekennzeichnet Die __autoload Methode wird dann aufgerufen wenn ein Objekt einer Klasse erzeugt werden soll die Definition der Klasse aber noch nicht bekannt ist Wenn Sie diese Methode einmalig programmieren k nnen Sie das Einbinden von Klassendefinitionen durch den Aufruf von require_once automatisieren Dabei k nnen Sie auch Ihren Stan dardpfad angeben in dem Sie alle Klassendefinitionen verwalten So zeigt Listing 4 8 einen einfachen Klassenlader der beim Fehlen der im Eingabepara meter bergebenen Klasse klasse automatisch die entsprechende inc php Datei nach l dt die sich in diesem Fall im selben Verzeichnis befinden muss lt php function __autoload klasse require_once klasse inc php Listing 4 8 Ein einfacher Klassenlader classloader inc php Diesen kleinen Klassenlader k nnen Sie nun in jede PHP Datei einbauen die Objekte Ihrer eigenen Klassen anlegt Listing 4
466. nem Klick auf den Link der weiter php sehen Sie nun dass man immer noch auf das entstandene Objekt zugreifen kann Listing 4 5 zeigt den Quellcode dieser Datei lt php session_start require_once stift inc php einContainerStift _SESSION LStiftContainer lt html gt lt body gt Sie besitzen einen Stift der Farbe lt php echo einContainerStift gt getFarbe gt lt br gt lt body lt html gt Listing 4 5 Objekterzeugung und Speicherung in der Session In dieser Datei wird zun chst wieder die Klassendefinition eingebunden Im Anschluss daran wird die Session wieder gestartet und das Stiftobjekt aus der Session heraus in den Arbeitsspeicher kopiert Man spricht in diesem Zusammenhang von einer Deserialisie rung Im Folgenden sehen Sie die Ausgabe der PHP Datei Sie besitzen einen Stift der Farbe rot Der Stift der Farbe rot ist jetzt zerst rt Da der Stift bereits existierte und nur noch vom Dateisystem in den Arbeitsspeicher gela den wird erfolgt kein erneuter Aufruf des Konstruktors Die zweite Ausgabe zeigt wie derum den Aufruf des Destruktors des Objekts im Arbeitsspeicher des Servers Die seri alisierte Kopie existiert jedoch solange wie die Session existiert Beim L schen der Session wird jedoch der Destruktor nicht aufgerufen da das Objekt im Dateisystem lediglich in Textform vorliegt und nicht aktiv ist Hinweis In der Realit t werden nat rlich keine Stifte gespeichert sondern Warenk rbe oder Ob
467. nen Entwicklung liegt darin dass Sie hier den Test im Vorfeld program PHP Endlich objektorientiert 155 3 Vorgehensweise bei der Softwareentwicklung mieren also die zu testende Anwendung noch gar nicht realisiert haben Bei einem Whitebox Test pr fen Sie alle m glichen Pfade durch ihre programmierten Anweisun gen Hier liegt die Gemeinsamkeit darin dass Sie sowohl die erfolgreichen Ausgaben als auch typische Fehlerf lle ber cksichtigen sollen Mittlerweile existieren Werkzeuge die Sie bei der testgetriebenen Entwicklung unter st tzen So sammelt PHPUnit separat alle bisherigen Test und f hrt sie mit einem Maus klick aus Die ben tigte Ausf hrungszeit der Unit Tests sollte einige Sekunden nicht berschreiten um nicht von der Entwicklung abzulenken Der erstellte Bestand an Unit Tests ist gleichzeitig eine Dokumentation der Anwendung auf Quellcodeebene Sie erzeugen w hrend der Entwicklung eine ausf hrbare Spezifi kation indem automatisch definiert wird was Ihre entwickelten Methoden leisten und in welchen F llen Fehler ausgegeben werden Wenn Sie sich die testgetriebene Denkweise aneignen wollen ist Abbildung 3 26 hilf reich Zu testen sind die Methoden der Objekterzeugung f r ein neues Seminar und das Anmelden f r ein Seminar Zu Beginn k nnen Sie sich noch vor der Erstellung eines Tests Gedanken dar ber machen welche Bedingungen erf llt sein m ssen damit der Testfall eintritt Im n chsten Schritt m
468. nen lediglich vereinheitlicht und in ihre eigene Sprache integriert Ein Klassendiagramm im Design stellt alle Eigenschaften Methodenaufrufe und Bekanntschaften von Klassen untereinander dar Zu Beginn dieses Kapitels wurde bereits gezeigt dass die Modellierung der Klassendiagramme mit der Entity Relation ship Modellierung aus der Datenbankentwicklung verglichen werden kann Klassendia gramme beschreiben also in erster Linie statische Datenstrukturen und Komponenten der zur erstellenden Anwendung Jede Methode einer Klasse au er die Konstruktoren kann prinzipiell zu jedem Zeit punkt nach der Erstellung eines Objekts aufgerufen werden Dies ist jedoch nicht immer sinnvoll Wenn Sie beispielsweise einen Warenkorb modellieren k nnen Sie nur dann zur Kasse gehen wenn auch Artikel im Korb enthalten sind Au erdem k nnen Sie nur dann Artikel entfernen wenn sich etwas im Korb befindet Ein Zustandsdiagramm bezieht sich also immer nur auf genau eine Klasse Profitipp F r ein gutes objektorientiertes Design ist es sinnvoll f r gr ere Klassen deren Objekte in ihrer Lebenszeit mehrere Zust nde durchlaufen k nnen Zustandsdia gramme anzufertigen Dies gilt auch dann wenn nicht in jedem Zustand jede Methode einer Klasse aufgerufen werden darf Die Zust nde in einem Zustandsdiagramm werden durch Rechtecke mit abgerundeten Ecken in anderen Diagrammformen au erhalb von UML h ufig auch Kreise Ellipsen oder einfache Rechtecke darge
469. ner Woche die 42 000 Euro bar bezahlen und das Auto aus der Ausstellung dann auch sofort mitnehmen Zus tzliche Ausstattung w nscht sie nicht Der Besitzer des Autohauses dieses ersten Beispiels hat Ihnen das oben beschriebene rea lit tsnahe Szenario m ndlich geschildert Er hat den Wunsch dieses gesamte Szenario in einer Software zu protokollieren die Sie erstellen sollen Herr Meier soll sobald Frau PHP Endlich objektorientiert 129 3 Vorgehensweise bei der Softwareentwicklung Schulz das Autohaus verlassen hat den gesamten Ablauf ber eine PHP Anwendung dokumentieren Sein PC hat einen entsprechenden Internetbrowser installiert Profitipp Versuchen Sie als Entwickler bzw als Analytiker Ihrem Kunden solche Szenarien zu entlocken und protokollieren Sie diese Die geschilderten Abl ufe bieten einen idea len Einstieg in die Fachdom ne Ihres zuk nftigen Kunden Nach diesem ersten Ausschnitt aus der Realit t ist es nun Ihre Aufgabe die vorhandenen Objekte zu identifizieren Eine sinnvolle Identifikation ist ma geblich f r eine gute Modellierung jedoch kann kein Algorithmus angegeben werden der ein Objekt identifi ziert Es gibt lediglich Methoden wie die Verb Substantiv Analyse oder die Methode der CRC Karten die im weiteren Verlauf dieses Kapitels erl utert werden Diese Methoden sollen bei der Ermittlung der Objekte und Klassen helfen Im Wesentlichen ist jedoch Ihr Geschick bzw Gef hl als Systemanalytiker gefra
470. ner Probleml sung Die gewonnenen Erkenntnisse k nnen anschlie end f r das richtige Produkt weiterverwertet werden indem Sie mit den Erkenntnissen eine umfangreiche Problemanalyse und Systemspezifikation durchf h ren Der Quellcode des Prototyps wird jedoch nicht selbst zum Produkt ausgebaut Man spricht hier von einem Wegwerf Prototypen Bei einem evolution ren Prototyping ist dies anders Hier werden die Funktionalit t und damit der Quellcode des Prototyps schrittweise erweitert bis sich daraus das endg ltige Produkt formt Die Erweiterungen werden anhand des Feedbacks der zuk nftigen Anwender bzw des Auftraggebers vorgenommen Der Prototyp wird dabei stets lauff hig gehalten und bis zur Produktreife weiterentwickelt Auf den ersten Blick scheint das Objektorientierte Programmierung evolution re Prototyping aufgrund der zus tzlichen Wiederverwendung des Codes wirtschaftlicher zu sein als das Rapid Prototyping Neue Erkenntnisse gewinnt man ja in beiden F llen Falls Sie jedoch schon einmal Software entwickelt und erfolgreich fertiggestellt haben haben Sie sich sicherlich Folgendes gesagt Ich bin froh dass es funktioniert aber beim n chsten Mal w rde ich alles anders besser machen Beim evolution ren Prototyping neigt man n mlich dazu funktionierenden schlechten Quellcode beizubehalten da die nderung Zeit kostet und neue Probleme mit sich bringen kann Um das Gesamtdesign der evolution ren Anwendun
471. ner ergonomischen Bedienung So sollten alle Steu erelemente wie Eingabe Felder und Schaltfl chen ber die gesamte Anwendung einheit lich positioniert sein bei mehr als 100 Masken kann dies problematisch sein Abbildung 3 6 stellt die Aufteilung der drei Schichten nochmals grafisch dar HTML1 HTML1 HTML3 Kunde suchen getKunde Dt i Zugriff X atenzugri getBest K Abbildung 3 6 3 Schichten Architektur der Anwendungsentwicklung PHP Endlich objektorientiert 113 3 Vorgehensweise bei der Softwareentwicklung F r Sie als PHP Entwickler stellt sich die Frage wie Sie die drei Schichten realisieren k nnen da Sie ja nur PHP Dateien schreiben Die Antwort liegt in der sinnvollen Strukturierung Ihrer Anwendung Datenhaltung und Datenzugriff So besitzen alle Dateien die zum Datenzugriff geh ren keine aktive Funktionalit t zum Benutzer hin Sie werden ausschlie lich von der Fachlogik aufgerufen Daher k nnen Sie in dz_xxx inc php umbenannt werden z B in dz_kunde inc php oder in dz_bestel lung inc php Diese Dateien werden also ausschlie lich von anderen PHP Dateien inklu diert und kapseln die Zugriffe auf die Datenbank inklusive alle SQL Anweisungen Dies hat den weiteren Vorteil dass die Sprache SQL auf eine kleine Menge von Dateien beschr nkt bleibt was f r bersicht sorgt Au erdem w rde es einen Webdesigner ver wirren wenn er bei der Anpassung des Designs auf SOL Statements st
472. net werden mysqlDZ ffnen FALSE else throw new Fehler 4 Verbindung zum Server konnte nicht aufgebaut werden mysqlDZ ffnen FALSE public function schliessen p mysql_close public function lesen p if lisset p throw new Fehler 5 Das Parameter Objekt ist ung ltig mysqIDZ lesen FALSE if p gt isParam sql throw new Fehler 6 Das Parameter Objekt ist unvollst ndig mysqlDZ lesen FALSE sql p gt get sql if this gt startswith sql SELECT FALSE throw new Fehler 7 Das SQL Statement muss mit SELECT beginnen mysqlDZ lesen FALSE data mysql_query sql if data FALSE throw new Fehler 8 Ergebnis Menge ist ung ltig oder leer mysqlDZ lesen FALSE Listing 4 55 Datenbankzugriff mit objektorientiertem Fehlermanagement Forts Objektorientierte Fehlerbehandlung ausgabe Array x 0 while row mysql_fetch_row data datensatz Array for i 0 i lt count row it datensatz i row i ausgabe x datensatz x return ausgabe public function schreiben p if lisset p throw new Fehler 9 Das Parameter Objekt ist ung ltig mysqIDZ schreiben FALSE if p gt isParam sql throw new Fehler 10 Das Parameter Objekt ist unvollst ndig mysqlDZ schreiben FALSE sal p gt get sql if this gt startswith sql UPDATE TRUE this gt startswith sql INSERT TRUE UPDATE oder INS
473. nfeld Ebenso k nnen Sie auch bei einem mehrdimensionalen Datenfeld die Indizes frei w h len Das Beispiel in Listing 2 18 zeigt eine freie Definition der Indizes PHP Endlich objektorientiert 31 2 Die Sprache PHP Prozedural lt html gt lt body gt lt php kunden array K1 gt array VN gt Frank N gt Dopatka K2 Jarray VN gt U1i N gt M ller K3 gt array VN gt Max N gt Mustermann Je echo kunden K1 VN kunden K1 N lt br gt echo kunden K2 VN kunden K2 N lt br gt echo kunden K3 VN kunden K3 N lt br gt lt body gt lt html gt Listing 2 18 Ein mehrdimensionales Datenfeld mit eigenen Indizes Wie auch bei einem eindimensionalen Array muss ein mehrdimensionales Array nicht bei seiner Initialisierung mit Werten gef llt werden Die zweite Dimensionierung kann ebenso dynamisch durchgef hrt werden wie Listing 2 19 zeigt lt html gt lt body gt lt php kunden Array kunden Array kunden L0 Frank kunden 1 Dopatka kunden 1 Array kunden 22 0 Vli kunden 22 1 M ller echo kunden 01 0 kunden 1 lt br gt echo kunden 22 0 kunden 22 1 lt br gt lt body gt lt html gt Listing 2 19 Ein dynamisch initialisiertes mehrdimensionales Datenfeld PHP Funktionen zur Bearbeitung von Datenfeldern Die Sprache PHP verf gt ber m chtige Funktionen zur B
474. nfinitelterator 68 gt string 13 RegexIterator 69 gt string 22 RecursiveRegexIterator 70 gt string 13 EmptyIterator 71 gt string 11 ArrayObject 72 gt string 13 Arraylterator 73 gt string 22 RecursiveArraylterator 74 gt string 11 SplFilelnfo 75 gt string 17 Directorylterator 76 gt string 26 RecursiveDirectorylterator 77 gt string 13 SplFileobject 78 gt string 17 SplTempFileObject 79 gt string 17 SimpleXMLIterator 80 gt string 14 LogicException 81 gt string 24 BadFunctionCallException 82 gt string 22 BadMethodCallException 83 gt string 15 DomainException 84 gt string 24 InvalidArgumentException 85 gt string 15 LengthException 86 gt string 19 OutOfRangeException 87 gt string 16 RuntimeException 88 gt string 20 OutOfBoundsException 89 gt string 17 OverflowException 90 gt string 14 RangeException 91 gt string 18 UnderflowException 92 gt string 24 UnexpectedValueException 93 gt string 16 SplObjectStorage 94 gt string 9 XMLReader 95 gt string 9 XMLWriter 96 gt string 8 SWFShape 97 gt string 7 SWFFilI 98 gt string 11 SWFGradient 99 gt string 9 SWFBitmap 100 gt string 7 SWFText 101 gt string 12 SWFTextField 102 gt string 7 SWFFont 103 gt string 14 SWFDisplayItem 104 gt string 8 SWFMovie 105 gt string 9 SWFBu
475. ng 5 29 Eingabemaske zur Erfassung der Verkaufsdaten Entscheidet sich der Anwender zum Verkauf wird der gew hlte Bestand aus der PHP Session deserialisiert und aus den eingegebenen Daten eine Verkaufsorder erzeugt die wiederum dem Bestand hinzugef gt wird Dadurch wird der Bestand automatisch in der Fachlogik als verkauft markiert was zur Kontrolle abgefragt wird Dementsprechend wird die Ausgabe f r den Benutzer aufbereitet Im Erfolgsfall wird zus tzlich der ver kaufte Bestand wieder in der Session serverseitig serialisiert lt php if _POST eingabe Abbrechen header Location start php require_once header inc php bestand unserialize _SESSION Bestand _SESSION BestandGew hlt aktie bestand gt getAktie gt lt center gt lt h3 gt lt php verkauf new Verkauforder aktie bestand gt getAnzahl _POST verkaufdatum _POST verkaufkurs _POST verkaufgeb hr bestand gt addVerkauforder verkauf if bestand gt isVerkauft TRUE _SESSION Bestand _SESSION BestandGew hlt serialize bestand Listing 5 23 verkaufen2 php Controller Das Fallbeispiel der Depotverwaltung echo Der Bestand wurde erfolgreich verkauft else echo FEHLER beim Verkaufen des Bestands lt h3 gt lt form action uebersicht php method post gt lt input type submit value 0K gt lt form gt lt center gt lt php require_once footer inc php gt Listing 5 2
476. ng in Phasen die zu zuvor bestimmten Zeiten enden nicht realistisch ist Die Erstellung von Prototypen ist ebenso PHP Endlich objektorientiert 145 3 Vorgehensweise bei der Softwareentwicklung immer st rker in den Vordergrund ger ckt wie die Einbeziehung der Kunden und der zuk nftigen Anwender Auf dieser Basis sind die agilen Methoden im Gegensatz zu den dokumentenlastigen und b rokratischen Vorgehensmodellen entstanden die man als schwergewichtig bezeichnet Agile Methoden Ein entscheidender Kritikpunkt an den traditionellen Verfahren zur Softwareentwick lung ist die fehlende Flexibilit t Die Praxis zeigt dass selbst die Anforderungen einem st ndigen Wandel unterworfen sind Im Jahre 2001 wurde das Agile Manifest mit grundlegenden Leits tzen zur Softwareentwicklung formuliert Agile Methoden sind konkrete Verfahrensweisen w hrend der Softwareentwicklung die sich auf die festge legten Werte und Prinzipien st tzen Die Leits tze besagen dass die Menschen und deren Kommunikation eine funktionierende Software und die Reaktion auf nderun gen wichtiger sind als Werkzeuge Dokumentation Vertragsverhandlungen und Verfol gung eines wohl ausgearbeiteten Plans Agile Projekte sind also schwerer im Vorfeld kal kulierbar Die Entwicklung funktionierender Software erfolgt in mehreren kurzen aufeinanderfol genden Iterationen in die die gesamte Konstruktionsphase aufgeteilt ist Die klassischen Phasen in der So
477. ngegeben Ist die Bedingung erf llt wird der Rumpf der Schleife genau einmal durchlaufen Danach wird die Bedingung nochmals gepr ft Innerhalb der Schleife muss nach einem x ten Durchlauf die Bedingung so ver ndert worden sein dass sie FALSE zur ck gibt Dann wird die Schleife verlassen Listing 2 39 zeigt eine while Schleife die eine Variable a bis zu einer Obergrenze die in einer zweiten Variablen b gespeichert ist hochz hlt Das l sst sich nat rlich auch mit einer for Schleife realisieren Generell l sst sich jede while Schleife in eine for Schleife umwandeln und umgekehrt Es handelt sich lediglich um eine andere Syntax Eine while Schleife wird jedoch erfahrungsgem eher eingesetzt wenn die Grenzen nicht im Vorfeld bekannt sind oder wenn die Bedingung der Schleife komplex ist lt html gt lt body gt lt php a 12 b 23 while a lt b echo Der Wert a ist kleiner als b lt br gt 2 att 2 gt lt body gt lt htm1 gt Listing 2 39 Beispiel einer while Schleife Im zweiten Beispiel wird ein Datenfeld mit einem Index von 0 bis 99 ber eine while Schleife mit einer mathematischen Formel bef llt Mithilfe einer zweiten while Schleife wird das Feld dann solange ausgelesen solange der Feldinhalt kleiner als 200 ist Die ausgegebenen Werte lauten 0 6 26 60 108 und 170 Wenn Sie in einem Fall die Inkre mentoperation i vergessen erhalten Sie eine Endlosschleife lt html gt lt body gt
478. nketten k nnen durch einfache oder doppelte Anf hrungszeichen definiert werden Die Variablen f g und h werden mit Wahrheitswerten Boolean belegt Eine Ausgabe mittels lt php echo f gt liefert 1 eine Ausgabe von g und h liefert keine R ckgabe Ein gro er Anwendungsbereich von PHP liegt darin Teile des HTML Codes in Zeichen kettenvariablen auszulagern Das ist bei i exemplarisch geschehen Wird i ausgegeben wird an der Stelle der Ausgabe eine HTML Tabelle dynamisch in den HTML Quelltext hinzugef gt Auf diese Weise l sst sich die Erzeugung von HTML Ausgabe serverseitig steuern Profitipp Zeichenkettenoperationen mit einfachen Anf hrungszeichen werden um ca 15 schneller vom PHP Interpreter bearbeitet Bei hoher Last auf dem Webserver ist bei deren Verwendung ein Performancegewinn zu erreichen Eine h ufige Fehlerquelle beim Debugging liegt darin dass PHP zwischen Gro und Kleinschreibung unterscheidet Zus tzlich dazu kann man eine Variable abfragen die zuvor keinen Wert erhalten hat Der Quellcode in Listing 2 5 ergibt f r viele PHP Anf n ger berraschend keine sichtbare Ausgabe im Browser Das ist auf die fehlerhafte Gro Kleinschreibung zur ckzuf hren lt php Wert 4 gt lt html gt lt body gt lt php echo wert gt lt br gt lt body gt lt html gt Listing 2 5 Verwendung einer nicht deklarierten Variable Datentypen Im Gegensatz zu anderen Sprachen verf gt PHP ber eine
479. nkorbs in den der Benutzer mehrere Artikel hinzuf gt dann zur Kasse navigiert dort seine Zah lungsweise und Lieferadresse eingibt um den Bestellvorgang abzuschlie en F r all diese F lle wurde ein Sessionmanagement in PHP integriert Im Gegensatz zu dem zustandslosen HTTP Protokoll kann sich PHP ber eine Session die dem aktuell ge ffneten Internetbrowser des Clients zugeordnet wird Daten des Anwenders merken Die Zuordnung erfolgt meist ber ein HTTP Cookie das vom Webserver an den Client gespeichert und vom Browser gemerkt wird In diesem Cookie befindet sich ein eindeu tiger Identifier die Session ID Erfolgt ein Zugriff von diesem Browser auf eine PHP Seite so kann der Webserver die Session ID vom Browser erfragen und damit auf die tempor r gespeicherten Informationen dieses Clients zugreifen Bei diesen Informatio nen handelt es sich um Namen und Werte von PHP Variablen die der Server in ein spe zielles Verzeichnis in einer Datei seines Dateisystems ablegt Dabei wird der Dateiname identisch zur Session ID gew hlt In der Konfiguration von PHP wird hinterlegt wie lange eine Session leben kann wie lange man also diese tempor ren Informationen zwischenspeichert bevor sie aufger umt werden Die gesamte Verwaltung der Sessions im Dateisystem erfolgt automatisch durch PHP Sie als Programmierer m ssen sich darum also nicht k mmern Eine Session wird mit dem PHP Befehl session_start initialisiert Damit wird beim ers
480. nnen direkt in einer Zeichenkette platziert werden n entspricht einem Zeilenvorschub ASCIH Wert 10 r entspricht einem Wagenr cklauf ASCII Wert 13 t entspricht einem horizontalen Tabulator ASCI Wert 9 v entspricht einem vertikalen Tabulator seit PHP 5 2 5 ASCIH Wert 11 fentspricht einem Seitenvorschub seit PHP 5 2 5 ASCH Wert 12 entspricht einem Backslash entspricht dem Dollar Zeichen entspricht einem doppelten Anf hrungszeichen m Boolean gt Ein Boolean Ausdruck ist ein Wahrheitswert der entweder TRUE wahr oder FALSE falsch sein kann gt Bei der Konvertierung eines anderen Datentyps zum Typ Boolean gelten die fol genden Werte als FALSE Ein Integer der 0 beinhaltet Ein Double der 0 0 beinhaltet Eine leere Zeichenkette sowie die Zeichenkette 0 Ein Array ohne Elemente Der spezielle Datentyp NULL Array Ein Array ist ein Datenfeld das andere Variablen auch andere Arrays enthalten kann Einzelne Elemente in einem PHP Array k nnen entweder ber einen numeri schen Index oder einen Suchschl ssel angesprochen werden Ein solcher Such schl ssel wird key genannt PHP Endlich objektorientiert 19 2 Die Sprache PHP Prozedural Ein Array wird zumeist ber Schleifen verwaltet blich sind dabei Anweisungen zum Bef llen zur Suche und zur Ausgabe eines Arrays Weitere Informationen zu Arrays finden Sie im folgenden Kapitel Die Syntax von Schleifen in PHP w
481. nsatz der Rechnung gespeichert man arbeitet also wieder mit einem Fremdschl ssel m n m Beziehung Ein Lehrer kann verschiedene F cher unterrichten und ein Fach kann von verschiedenen Lehrern unterrichtet werden Eine solche Beziehung wird ber eine Hilfstabelle realisiert die nur die beiden Prim rschl ssel hier Lehrer ID und Fach ID enth lt Wie bereits in Kapitel 2 2 erw hnt wurde sollten Datenbanktabellen in Normalformen gebracht werden Dabei muss jedes Datenfeld aus einem atomaren Wert bestehen den man nicht weiter zerlegen kann Au erdem sollten keine Informationen mehrfach also redundant vorkommen da man ansonsten Probleme mit der Aktualisierung und L schung von Daten bekommt Wird eine Aktualisierung nicht vollst ndig ausgef hrt weil beispielsweise die Netzwerkverbindung gest rt ist ist die Datenbank in einem inkonsistenten Zustand Der gesamte Datenstamm kann dadurch unbrauchbar werden Prozedurale und modulare Programmierung da der richtige Zustand einer inkonsistenten Datenbank meist nicht mehr ermittelt werden kann Um dies zu vermeiden muss neben einer korrekten ER Modellierung das in Kapitel 2 2 vorgestellte Prinzip der Transaktionen zum Einsatz kommen Bereits 1976 stellte Peter Chen eine Notation vor mit der man die ER Modellierung durchf hren kann Solche Modelle m ssen Sie als Datenbank Entwickler in Koopera tion mit dem Kunden erstellen Die so genannte Chen Notation bildet dabei die Gesp
482. nsdatei Sie enth lt neben dem darzustellen den HTML Rumpf von den Elementen lt html gt bis lt html gt zus tzliche Anweisungen wie die Daten aus der XML Datei in die HTML Ausgabe eingepflegt werden sollen Eine solche Anweisung lautet beispielsweise lt xsl value of select seminare seminar name gt Dadurch wird in dem Name des ersten Seminars in der XML Datei extrahiert und an diese Stelle platziert Auf Attribute eines XML Elements k nnen Sie durch ein vorange stelltes zugreifen So gibt lt xsl value of select seminare seminar id gt die ID des Seminars zur ck PHP Endlich objektorientiert 311 4 PHP objektorientiert lt xml version 1 0 gt lt seminare gt lt seminar id S1120 gt lt name gt PHPS5 objektorientiert lt name gt lt dozent gt Dr Frank Dopatkas dozent gt XLST HTML Aus g abe Transformator XSL Beschreibung lt xsi stylesheet version 1 0 lt html gt lt head gt lt html gt lt head gt lt p align left style font family Tahoma font size 14px gt Name des Seminars PHP5 objektorientiert lt br gt lt p align left style font family Tahoma font size 14px gt Name des Seminars lt xsl value of select seminare seminar name gt Abbildung 4 17 Prinzip einer XSL Transformation in ein HTML Dokument Hinweis Die XSL Iransformationsdatei aus Listing 4 75 ist nur f r ein einzelnes Seminar gedacht um die
483. nstamm manipulieren So kann ein Betrag mehrfach von einem Konto abgebucht werden mit der Wirkung dass jedes Skript f r sich zwar lokal gesehen korrekt funktioniert der Kontostand letztlich jedoch negativ ist PHP Endlich objektorientiert 93 2 Die Sprache PHP Prozedural Der Ausschnitt in Listing 2 69 zeigt wie Sie mehrere SOL Abfragen zu einer Transaktion b ndeln Dazu m ssen Sie die SQL Befehle START TRANSACTION und BEGIN abset zen Alle folgenden Kommandos an die Datenbank k nnen nicht durch andere Zugriffe auf dieselben Daten unterbrochen werden Die Folge der Kommandos wird entweder mit COMMIT vollst ndig oder mit ROLLBACK gar nicht ausgef hrt So verhindern Sie dass Ihr Datenstamm inkonsistent wird Damit Transaktionen funktionieren m ssen Sie Tabellen vom Typ InnoDB oder BDB verwenden Der standardm ig eingestellte Tabel lentyp MyISAM unterst tzt bei MySQL keine Transaktionen Daf r sind die Zugriffe auf diese Tabellen jedoch schneller da kein aufwendiges Transaktionsmanagement ber ck sichtigt werden muss mysql_query START TRANSACTION mysql_query BEGIN mysql_query UPDATE konto SET stand stand 100 WHERE nummer 4711 mysql_query UPDATE konto SET stand stand 190 WHERE nummer 4712 das SELECT wird hier auf Daten angewendet die sich noch nicht endg ltig in der Datenbank befinden res mysql_query SELECT stand FROM konto WHERE nummer 4711 stand mysql_result res Q 0 f stand lt 0
484. ntieren will m ssen alle 6 Methoden implementiert werden F r Kunden die weniger Wert auf eine verschl sselte bertra gung legen und f r Altkunden steht das alte Interface Datenzugriff mit seinen Implemen tierungen weiterhin unver ndert zur Verf gung PHP Endlich objektorientiert 195 3 Vorgehensweise bei der Softwareentwicklung Hinweis Eine gute bung besteht darin aus dem Objekt und Klassendiagramm der Analyse phase aus der Seminarverwaltung ein Klassendiagramm der Designphase zu erstel len Zust nde in einem Objekt Zustandsdiagramme Zustandsdiagramme stellen endliche Automaten in einer UML Sonderform grafisch dar Ein Zustandsdiagramm zeigt eine Folge von Zust nden die ein Objekt im Laufe seines Lebens einnehmen kann Au erdem gibt es an aufgrund welcher Stimuli Zustands nde rungen stattfinden Stimuli sind Ereignisse von au en die das Objekt zu einer Aktion anregen Da ein Objekt ausschlie lich ber Methodenaufrufe angesprochen wird sind diese Ereignisse Methodenaufrufe von anderen Objekten oder von einem Anwender der beispielsweise eine Schaltfl che bet tigt Damit beschreibt ein Zustandsdiagramm eine hypothetische Maschine endlicher Auto mat die sich zu jedem Zeitpunkt in einer Menge endlicher Zust nde befindet Die Auto matentheorie ist eine eigene Mathematik Diagramme zur Darstellung von so genannten Moore und Mealy Automaten existieren bereits seit 1950 Die UML hat auch diese Nota tio
485. ntiert 419 5 Projektpraxis m im Windows Helpfile Format CHM m als Docbook XML Die HTML Versionen der Dokumentation sind dabei am weitesten verbreitet Der Vorteil liegt darin dass auf Verweise zu anderen Klassen und deren Methoden ber Hyperlinks zugegriffen werden kann Dadurch entsteht ein Mehrwert im Vergleich zu einer rein tex tuellen Dokumentation I phpDocumentor Manual Windows Internet Explorer BAX gt je phpdac org x tr x 23 Pir Datei Bearbeiten Ansicht Favoriten Extras Sr Favoriten E phpDocumentor Manual phpDocumentor README ChangeLog INSTALL FAQ phpDocumentor Converters Cpdf HTML_TreeMenu Smarty tests XML_Beautifier PhpD entor m rs abstract Document an abstract class class variable or method Gregory Beaver Tag Documentation written by cellog php net Copyright 2002 Gregory Beaver phpDocumentor 1 1 abstract v Description Ka W A v Internet fa Rio Abbildung 5 49 Eine mit PHPDocumentator erstellte HTML Dokumentation Fehler finden mit XDebug Beim Erstellen Ihrer ersten PHP Klassen ist Ihnen wahrscheinlich bereits aufgefallen dass Fehler im Quellcode oft nur schwer erkannt werden k nnen Der Befehl var_ dump x ist zwar hilfreich die Ausgabe eines einzelnen komplexen Objekts x kann jedoch bereits sehr un bersichtlich sein Tritt ein Fehler auf so erh lt man im Internetbrowser des Cl
486. ntierte Funktion ist das ffnen der Datenquelle MySQL verlangt dabei vier Parameter n mlich m die IP Adresse des Hosts auf dem der MySQL Datenbankserver installiert ist m den Benutzernamen und das Passwort zur Authentifikation am Datenbankserver die zu ffnende Datenbank Der erste Schritt pr ft das bergebene Parameterobjekt auf G ltigkeit Im Anschluss daran wird die Verbindung zum Datenbankserver aufgebaut und versucht die angege bene Datenbank zu ffnen Die Referenz auf die ge ffnete Verbindung wird in der Eigen schaft conn festgehalten Je nach Erfolg gibt die ffnen Methode TRUE oder FALSE zur ck PHP Endlich objektorientiert 267 4 PHP objektorientiert Die schlie en Methode aus dem Interface ist durch den Befehl mysql_close leicht zu implementieren Die Pr fung der Eingabeparameter erfolgt auch von der lesen und schreiben Methode Beide Methoden verlangen einen SQL Befehl im Parameter sql des Parameterobjekts Beim Lesen aus der Datenquelle gibt der Befehl mysql_query sql ein Resultset in Form einer Tabelle in der Variablen data zur ck Diese Tabelle wird umgewandelt in ein Datenfeld das aus Datens tzen besteht Jeder Datensatz ist selbst ein Datenfeld das die Daten aus der Datenquelle enth lt Die Tabelle wird also in ein zweidimensionales Datenfeld umgewandelt dessen Referenz ausgabe zur ckgegeben wird Die Methode schreiben funktioniert auf hnliche Weise Hier gibt der Befehl mysql_ q
487. ntierten Grundlagen wurde der Sinn von Inter faces begr ndet Sie stellen das Prinzip der Datenkapselung der Objektorientierung im h chsten Ma e dar Abbildung 3 67 zeigt ein in UML definiertes Interface eines Datenzu griffs jeglicher Art Dabei kann lesend und schreibend zugegriffen werden aufeine Datei m auf eine Datenbank m auf eine Netzwerkverbindung Es stellt sich die Frage welche Funktionalit t also welche Methoden f r einen allgemei nen Datenzugriff notwendig ist Dies ist m das ffnen der Datenquelle unter Angabe von Parametern wie der Pfad zur Daten quelle und oder Daten zur Authentifizierung an der Datenquelle m das Schlie en einer ge ffneten Datenquelle das Schreiben in die Datenquelle unter Angabe der zu schreibenden Daten und ggf unter Angabe der Parameter die f r den Schreibvorgang notwendig sind m das Lesen aus einer Datenquelle unter Angabe der Parameter f r den Lesezugriff wobei die ausgelesenen Daten zur ckgegeben werden Listing 4 45 zeigt die Definition des Interfaces in PHP5 Von Interesse sind insbesondere die bergebenen Parameter param Wie l sst sich eine allgemeine Definition finden wie man Parameter bergibt Diese Definition muss sowohl f r Dateien und Datenbanken als auch f r Netzwerkzugriffe g ltig sein lt php interface iDZ public function ffnen param public function schliessen public function lesen param public function schreiben param gt Listing 4
488. ntities str konvertiert HTML Zeichen Umlaute und andere Sonderzeichen um die Interpretation durch den Internetbrowser zu verhindern erg rawurlencode str konvertiert Umlaute und Sonderzeichen einer Zeichenkette in Prozentzei chen und hexadezimalen ASCII Wert zur Verwendung in einem URL erg rawurldecode str macht die Konvertierung von zawurlencode r ckg ngig Tabelle 2 15 Funktionen zur HTML Bearbeitung von Zeichenketten Die rawurl Befehle wandeln die eingegebenen Zeichenketten so um dass sie als Parame ter in einem URL bertragen werden k nnen Dort existiert z B das Problem wie ein Leerzeichen in einem Text dargestellt wird Eine genormte URL Darstellung lautet in diesem Fall 20 Diese Konvertierungen werden automatisch von rawurlencode vorge nommen und von rawurldecode wieder auf Empf ngerseite r ckg ngig gemacht Datum Zeitfunktionen Genauso wie f r die Zeichenketten bietet PHP einige Funktionen zur Bearbeitung von Datums und Uhrzeitwerten an Die checkdate Funktion pr ft beispielsweise die Eingabe eines Monats Tages und Jahres auf ein g ltiges Datum Diese Daten k nnen von einer Benutzereingabe stammen Funktion Bedeutung erg checkdate monat tag jahr berpr ft eine Zeitangabe auf G ltigkeit unter Ber cksichtung der Schaltjahre und gibt einen Wahrheitswert zur ck str date args gibt das Datum in dem durch die Argumente gew nschten Format zur ck arr getdate zeitstempel gi
489. ntwort und skiz ziert folgendes Beispiel Nehmen Sie an Sie haben zum Zeitpunkt D1 01 01 2010 Anz1 200 Aktien vom Typ A f r Kurs1 1 00 St ck gekauft Dann kauften Sie zum Zeitpunkt D2 01 03 2010 noch mals Anz2 100 Aktien Kurs2 2 00 St ck Nun ist der Zeitpunkt D3 01 06 2010 und Sie wollen wissen wie viel Euro bzw wie viel Prozent Zinsen Sie bis heute erwirtschaftet haben Der Kurs der Aktie liegt jetzt bei Kurs3 3 8 St ck Geb hren sollen nicht ber cksichtigt werden Zum Zeitpunkt D1 haben Sie 2 von 3 Anteilen an Ihrem heutigen Bestand gekauft und zum Zeitpunkt D2 einen weiteren Anteil Sie haben also 2 3 Ihres heutigen Bestandes zu je 1 00 St ck und 1 3 zu je 2 00 St ck Grafisch w rden Sie dabei vorgehen wie in Abbildung 5 8 dargestellt Das Fallbeispiel der Depotverwaltung Kurs Kursverkauf von A DT D2 D3 Sen 2 3 gekauft 1 3 gekauft heute Dx delta D Abbildung 5 8 Berechnung eines virtuellen Aktienkaufs Sie bilden den Mittelwert zwischen den beiden Datumswerten und auch zwischen den beiden Kursen unter Ber cksichtigung der gekauften Anzahl an Aktien Dies wird in der Mathematik als gewichteter arithmetischer Mittelwert bezeichnet Der Mittelwert f r das Datum Dx kann somit berechnet werden indem man von D1 aus den beim zweiten Kaufvorgang gekauften Anteil am jetzigen Bestand also das Gewicht g addiert Das zu addierende Gewicht k nnen Sie ermitteln mit der
490. nzelne Zugangspunkte hier die Verwaltungsklassen f r den Benutzer dieser Komponenten bereitgestellt wer den Da die Hilfsklassen in verschiedenen Ordnern im Dateisystem gespeichert sind die ber die Namensr ume gezielt angesprochen und aufgel st werden k nnen werden Namenskollisionen vermieden lt php namespace myERP av class Artikelverwaltung private artikelliste null public function __construct echo Eine Artikelverwaltung wird erzeugt lt br gt Listing 4 84 Hauptklasse der Artikelverwaltung im Unterverzeichnis myERP av PHP Endlich objektorientiert 321 4 PHP objektorientiert Da die Verwaltungsklassen lediglich skizziert wurden um sich auf die Funktionsweise der Namensr ume zu konzentrieren lautet die Testausgabe schlicht Eine Kundenverwaltung wird erzeugt Eine Artikelverwaltung wird erzeugt Weitere Informationen zu den Namensr umen k nnen Sie in der Onlinedokumentation von PHP unter http www php net manual de language namespaces php einsehen 4 6 2 Softwaremodule in PHP Pakete b ndeln Phar Eine weitere Neuerung in PHP 5 3 wurde aus dem Java Umfeld bernommen Bereits im vorherigen Kapitel wurde begr ndet dass gro e Softwaremodule in Pakete aufgeteilt werden sollten die sich in verschiedenen Ordnern befinden und ber die Namensr ume angesprochen werden k nnen Genau diese Unterteilung existiert auch in Java Genauso wie in Java kann ein einzelnes Paket auch i
491. nzupassen Die zweite Gruppe umfasst Strukturmuster die eine Vereinfachung der Struktur zwischen Klassen erm gli chen sollen Komplexe Beziehungen k nnen unter anderem ber vermittelnde Klassen oder Schnittstellen vereinfacht werden Die dritte Gruppe der Verhaltensmuster betrifft das Verhalten der Klassen die sich auf die Zusammenarbeit und den Nachrichtenaus tausch von Klassen beziehen Nach ihrem Anwendungsbereich lassen sich Muster in zwei Gruppen einteilen So beschreiben klassenbasierte Muster Beziehungen zwischen Klassen und bauen beispiels weise Vererbungsstrukturen auf Im Gegensatz dazu nutzen objektbasierte Muster zumeist Assoziationen und Aggregationen zur Beschreibung von Beziehungen zwi schen Objekten Abbildung 5 39 verdeutlicht die Unterteilung der Design Patterns Seit ihrer Entdeckung wurden unz hlige Design Patterns gem dieser Unterteilung von Softwaretechnikern erfunden und ver ffentlicht und es wurden einige B cher zu dieser Thematik geschrie ben Die urspr nglichen Muster der Viererbande haben jedoch als Einzige weltweit Ver breitung und Anerkennung gefunden Da es sich bei diesem Buch nicht um ein reines Buch zu Design Patterns handelt die Design Patterns jedoch in der objektorientierten Entwicklung eine gro e Bedeutung haben werden die bekanntesten Vertreter jeder Kategorie im Folgenden vorgestellt Dabei wird die Problemstellung und der L sungsansatz jeweils kurz beschrieben den das entsprechende Desig
492. o lt i Position i 1l lt i gt lt br2 echo p L gt getName p 1 St ck p 2 Rabatt lt br gt echo number_format p 3 2 EUR pro St ck number_format p 4 2 EUR gesamt incl echo p 0 gt getMwSt MwSt lt br gt i Listing 4 49 Quellcodeausschnitt aus Listing 4 41 Zun chst wird ber den Frontend Quellcode den man als Akteur gegen ber den ande ren Objekten sehen kann die Methode getRechnungen des Kunden Dopatka aufgerufen Daraufhin erh lt der Aufrufer eine Liste der Rechnungen als R ckgabe Von dieser Liste wird das erste Element rechnungen 0 betrachtet Dies ist ein Objekt der Klasse Rech nung Von dieser Rechnung werden nun Eigenschaften ausgelesen n mlich m die Rechnungsnummer ID m das Rechnungsdatum m der Name des Kunden der Rechnung m der Rabatt auf die Gesamtrechnung die Anzahl der Rechnungspositionen Genau dieses Auslesen erkennen Sie im Sequenzdiagramm der Abbildung 4 12 Im Anschluss daran wird jede Rechnungsposition in einer Schleife durchgegangen Die Schleife kann in einem Sequenzdiagramm nur schwer abgebildet werden und wird in PHP Endlich objektorientiert 273 4 PHP objektorientiert dem gepunkteten Kasten mit der Beschriftung positionen hei t f r alle Positionen dar gestellt F r jede Rechnungsposition werden nun ausgegeben m der Name des Artikels m die bestellte Menge m der Rabatt dieser einzelnen Position der Einzelprei
493. o seinerseits den Anmeldevorgang des Praktikums auf Dabei muss ein Studentenobjekt bergeben wer den also das eigene Objekt Dies ist m glich durch die bergabe der this Referenz die ja eine Referenz auf das Objekt selbst darstellt Wenn diese Anmeldung fehlschl gt wird die eigene Anmeldung r ckg ngig gemacht und der Vorgang ist fehlgeschlagen Andernfalls ist die Anmeldung erfolgreich verlaufen Realisierung von Klassengeflechten Hinweis Vergleichen Sie das Aktivit tsdiagramm aus Abbildung 4 9 mit der anmelden Methode aus Listing 4 36 Erkennen Sie die bereinstimmung Im Anschluss daran wird in Listing 4 37 die Praktikumsklasse vorgestellt mit ihren Eigenschaften des Namens sowie des Zeitraums in dem das Praktikum stattfindet Die Implementierung ist identisch zur Studentenklasse lt php class Praktikum private name private von private bis private studs Array private anzStuds 0 const MAX_STUDS 20 public function __construct name von bis t this gt name name this gt von von this bis bis publ return thi pub publ publ return thi ic funct ic functi return thi ic functi return thi ic funct ion GetName s gt name on getVon s gt von on getBis s gt bis ion getStudenten s gt studs public function anmelden stud if stud instanceof Student FALSE return FALSE foreach this gt studs as elem
494. ok html php Pr sentation Un DY Pr sentation HTML Forumular HTML Ausgabe CSS CSS JavaScript Ajax auswertung php JavaScript Ajax Steuerung PHP Code N C A Fachlogik T Session zugriff php Modell PHP Code DB Zugriff Abbildung 3 28 Das MVC Prinzip in einer PHP Realisierung Objektorientierte Programmierung 3 2 6 Die Bedeutung der Unified Modeling Language UML Das Ziel einer objektorientierten Analyse Design und Programmierung ist es ein kom plexes Softwaresystem zu beschreiben wie die Verwaltung eines Autohauses m eine Hotelverwaltung ein Buchungs und Bestellsystem Wenn Sie vom Kunden die geforderte Funktionalit t in Erfahrung gebracht haben die Klassen mit deren Eigenschaften und Methoden kennen sowie die gesch ftlichen Abl ufe die in der Anwendung abgebildet werden sollen dann k nnen Sie mit der Implementierung beginnen Es wurden bereits agile Methoden und Techniken vorge stellt wie Sie an diese Informationen kommen Es gibt bislang jedoch noch kein Mittel um diese Erkenntnisse festzuhalten zu dokumentieren und als schriftliche Diskussions grundlage zu verwenden Die UML Unified Modeling Language ist eine standardisierte berwiegend grafische Sprache zur objektorientierten Modellierung von Systemen Dabei muss es sich nicht unbedingt um eine Softwareanwendung handeln Diese Sprache zieht sich von der Ana lyse ber das Design bis zur Implementierung begleitet Sie also durch den g
495. on Klassen und eigener Benutzeroberfl che beste hen k nnen PHP Endlich objektorientiert 319 4 PHP objektorientiert Aus Sicht der Modellierung k nnte aus der Kundenverwaltung noch eine Rechnungs verwaltung extrahiert werden sodass drei Komponenten der Anwendung entstehen w rden Zur Vereinfachung des Beispiels beschr nken wir uns jedoch auf diese beiden Namensr ume In diesem Beispiel wird die Testklasse ausnahmsweise zuerst verfasst Listing 4 81 zeigt zun chst die Einbindung der beiden Verwaltungsklassen f r die der Klassenlader aus Listing 4 8 weiterverwendet werden kann Im Anschluss daran wird jeweils ein Objekt der Kunden und der Artikelverwaltung erzeugt Die PHP Klassen befinden sich in den Unterverzeichnissen myERP kv bzw myERP av lt html gt lt body gt lt php require_once classloader inc php Verwendung einer Klasse aus unterliegendem Namensraum kv new myERP kv Kundenverwaltung av new myERP av Artikelverwaltung gt lt body gt lt html gt Listing 4 81 Testklasse start php Da sich die Baumtiefe der Namensr ume ber mehrere Ebenen erstrecken kann k nnen Sie Aliasbezeichnungen f r die Verwendung von Pfaden verwenden In Listing 4 82 wird dazu der neue PHP Befehl use verwendet in Kombination mit den Aliasnamen die in diesem Beispiel x und y lauten So k nnen die Verwaltungsobjekte immer noch pr zise angesprochen werden lt html gt lt body gt lt php require_
496. on and Application Repository der die Verwaltung von PHP Zusatzmodulen ber nimmt steht PHPUnit als Kommandozeilenwerkzeug zur Verf gung Dadurch kann es in Batch Routinen eingebunden werden und somit ein automatisiertes Testen erm gli chen bevor ein neues Release der PHP Anwendung erstellt wird Das Schreiben der Tests erfolgt durch Einbinden des Frameworks sowie durch die Erstel lung einer Testklasse die von PHPUnit_Framework_TestCase abgeleitet wird ber die Vererbung steht dem Tester nun eine Reihe von Assert Methoden zur Verf gung mit denen er Soll und Ist Ausgaben vergleichen kann Entspricht eine Soll Ausgabe nicht der entsprechenden Ist Ausgabe so ist der Test fehlgeschlagen lt php require_once PHPUnit Framework php class StackTest extends PHPUnit_Framework_TestCasef public function test l metro new Aktie METRO AG Stammaktien o N DE0007257503 http www boerse ISIN DE0007257503 this gt assertEquals METRO AG Stammaktien o N metro gt getName gt Listing 5 28 Der Test aus Listing 5 1 als PHPUnit Test Die wichtigsten Pr fmethoden lauten m assertTrue m assertFalse m assertNull m assertSame zur Pr fung auf gleiche Objektreferenzen m assertNotSame m assertEquals zur Pr fung auf gleiche Inhalte m assertNotEquals m assertContains zur Pr fung ob ein Element zu einem Feld geh rt m assertNotContains m assertRegExp zur Pr fung ob eine Zeichenkette einem regul ren A
497. once myERP kv kundenverwaltung inc php require_once myERP av artikelverwaltung inc php Alias Definition use myERP kv as x use myERP av as y Vewendung mit Alias kv new x Kundenverwaltung rv new y Artikelverwaltung gt lt body gt lt htm1 gt Listing 4 82 Testklasse start php mit verk rzten Namensr umen Neuerungen in PHP 5 3 und Ausblick Es fehlen noch die Implementierungen der Verwaltungsklassen die in den Listings 4 85 und 4 86 skizziert werden Wichtig ist dabei dass diese Klassen als erste Anweisung stets den Bezug zur Wurzel im Namensraum ber den Befehl namespace besitzen Diese und hnliche Notationen sind auch in anderen objektorientierten Programmier sprachen gel ufig In Java lautet sie package myERP kv und in C namespace myERP kv lt php namespace myERP kv class Kundenverwaltungf private kundenliste null public function __construct echo Eine Kundenverwaltung wird erzeugt lt br gt Listing 4 83 Hauptklasse der Kundenverwaltung im Unterverzeichnis myERP kv Eine Kunden oder Artikelverwaltung besteht nat rlich nicht nur aus jeweils einer Klasse Vielmehr k nnen hinter den Verwaltungsklassen ganze Klassengeflechte mit vie len Zeilen Quellcode verborgen sein die f r den Anwender der Verwaltungsklasse jedoch nur m ig interessant sind Die Namensr ume sorgen also gleichzeitig f r eine bessere Strukturierung der Softwarekomponenten bei denen ei
498. onen Wurml cher Kontroll und Objektfl sse Ein Aktivit tsdiagramm beginnt stets mit einem schwarzen Startpunkt und endet mit einem wei en Punkt mit teilweiser schwarzer F llung In der UML2 ist noch ein irregu l rer Endpunkt hinzugekommen der dann erreicht wird wenn der Gesch ftsprozess nicht erfolgreich beendet werden kann vgl dazu auch das Feld Nachbedingung Fehlschlag in einem textuellen Anwendungsfall Generell geben die textuellen Felder Beschrei bung Erweiterung und Alternativen eines Anwendungsfalldiagramms die gleichen PHP Endlich objektorientiert 171 3 Vorgehensweise bei der Softwareentwicklung Informationen wieder wie ein Aktivit tsdiagramm In einem Aktivit tsdiagramm sind sie lediglich grafisch aufbereitet Auf Grund der hohen Redundanz ist zu berlegen ob sowohl die textuellen Anwendungsf lle als auch die Aktivit tsdiagramme in einem Pro jekt vollst ndig ausgearbeitet werden Start regul res Ende amp irregul res Ende Abbildung 3 35 Anfang und Ende eines Aktivit tsdiagramms Abbildung 3 36 zeigt die Darstellung einer Verzweigung einer Verzweigung mit gleich zeitiger Zusammenf gung sowie eine reine Zusammenf gung hinter einer Verzwei gung Bei einer Verzweigung muss stets an allen Ausg ngen der Raute eine Bedingung angegeben werden bei deren Eintreffen dieser Pfad gew hlt wird Bedingungen in einem Aktivit tsdiagramm werden stets in eckigen Klammern angegeben Bei den Pro gramma
499. open Befehl FALSE zur ckgibt Wenn die Datei existiert wird in der Variablen datei in Listing 2 65 eine Referenz auf die offene Datei abgelegt Diese Referenz nennt man auch Resource oder Handle Wenn die Datei existiert liest der Befehl fgets bis zum n chsten Zeilenumbruch bis zum Ende der Datei oder 10 Zeichen in dieser Reihenfolge aus Die ausgelesenen Daten wer den dann in counter gespeichert In dem Fall dass die Datei noch nicht existierte ist counter Dann setzt PHP den Wert auf 0 In jedem Fall wird der Z hler erh ht und die ge ffnete Datei wieder geschlossen Danach wird die Datei wieder ge ffnet diesmal mit Schreibzugriff Mit dem Befehl fwrite wird der erh hte Wert des Counters in der Datei serverseitig gespeichert und die Datei abschlie end wieder geschlossen Im HTML Teil des Skripts wird dann nur noch der Z hlerstand ausgegeben lt php datei fopen counter txt r counter fgets datei 10 if counter counter counter fclose datei datei fopen counter txt w fwrite datei counter fclose datei lt html lt body gt lt php echo counter gt Mal wurde bereits Ihre Seite angezeigt lt body gt lt html gt Listing 2 65 Ein einfacher PHP Counter Beim Testen des Skripts ist zun chst erfreulich dass es korrekt funktioniert Es gibt bei dieser Art des Dateizugriffs jedoch einige Probleme Zun chst muss man darauf hinweisen dass der Z hle
500. ordert Die Testf lle m s sen konsequent vor den zu testenden Komponenten erstellt werden Sie schreiben also den Quellcode zur Erzeugung von Objekten noch bevor die entspre chenden Klassen existieren Wie die Methoden zur Erzeugung von Objekten und die Methoden zu deren Kommunikation untereinander auszusehen haben ist im Klassen diagramm auf Muschelebene in Abbildung 5 14 skizziert Damit verhindern Sie dass der entstehende Quellcode letztlich nichts mehr mit den Gedanken und Definitionen der Analyse und des Designs zu tun hat Sie m ssen also auch in der Implementierung dienstorientiert denken indem Sie abgeschlossene Funkti onalit t f r die anderen Schichten zur Verf gung stellen Die Alternative w re eine monolithische Implementierung deren Objekte man nachtr glich nicht weiter verwen den k nnte Das Fallbeispiel der Depotverwaltung Die erste Phase Implementierung der Fachlogik Es wurde also entschieden mit der Implementierung der Fachlogik zu beginnen und eine testgetriebene Entwicklung anzuwenden Doch womit f ngt man am besten an Es ist sinnvoll mit einem Objekt zu beginnen dessen Existenz nicht von anderen Objek ten abh ngt sozusagen ein Basisobjekt Abbildung 5 14 zeigt dass es sich bei der Aktie um ein solches Objekt handelt Andere Objekte k nnen zwar Aktien kennen die Aktie selbst kann jedoch ohne Kenntnis von anderen Objekten existieren Eine Aktie besteht aus einem Namen und einer ISIN Zus tzlic
501. ordert dies zumeist eine umfassende nderung der Anforderungen bis hin zu der entwickelten Anwendung Abbildung 3 5 zeigt die Abh ngigkeit der entstehenden Zusatzkosten von der Phase des Softwareprojekts Je sp ter ein Fehler erkannt wird desto h her werden die Kosten um ihn zu beheben In laufenden Anwendungen sind sogar rechtliche Schritte Ihres Kunden gegen Sie m glich falls beispielsweise ein Produktionsausfall entsteht weil Ihr Kunde zwei Tage lang keine Bestellungen ber sein B2B Portal entgegennehmen kann c c 5 gt g a 9 D 8g 2 2 gt v 82 Fr F hy Q E o zZ S Q m AS m D lt c pej O E m C lt Abbildung 3 5 Abh ngigkeit des Auffindens eines Fehlers von den resultierenden Kosten zu seiner Behebung Prozedurale und modulare Programmierung 31 3 Erstellung der 3 Schichten Architektur Eine weit verbreitete Strukturierung einer zu erstellenden Anwendung besteht in der Auftei lung in drei Schichten Die Datenzugriffsschicht kapselt den Zugriff auf die Datenbank der die Verwaltung der Verbindung zum Datenbankserver die SQL Abfragen und die Auswer tung der Resultsets beinhaltet Die PHP Dateien die den Datenzugriff realisieren bieten ele mentare Dienste an wie das Auslesen von Kundendaten das Anlegen eines Neukunden die Suche nach einem Kunden oder die R ckgabe aller Bestellungen eines Kunden K Solche Dienste sind sofern sie unabh ngig voneinander programmiert wurden wiederverwend b
502. orfeld festlegt muss man zuerst pr fen ob es sich bei der Eingabe um ein Praktikum handelt Im zweiten Schritt wird gepr ft ob der Student bereits an diesem Praktikum angemeldet ist Wenn dies der Fall ist ist der Anmeldevorgang bereits erfolgreich beendet Da sich ein Student gleichzeitig f r maximal 5 Praktika anmelden kann wird bei der dritten Pr fung ermittelt ob die Obergrenze schon im Vorfeld erreicht ist Ist dies nicht Realisierung von Klassengeflechten der Fall hat der Student noch freie Kapazit ten und kann sich die Referenz auf das Prak tikum merken Dann wird die Anzahl der belegten Praktika erh ht Bis zu diesem Zeitpunkt wei das Praktikum unter Umst nden noch nichts von der Anmeldung Daher versucht der Student nun sich beim Praktikum anzumelden Wenn dies erfolgreich ist wurde der gesamte Anmeldevorgang erfolgreich abgeschlossen Andernfalls ist die Anzahl der belegten Praktika wieder zu verringern das Praktikum wieder aus der Liste der besuchten Praktika zu entfernen und der Anmeldevorgang ist fehlgeschlagen Es stellt sich die Frage warum der Student sich zuerst die Praktikumsreferenz merkt und dann bei einem Fehlschlag bei der Anmeldung am Praktikum die Referenz wieder l scht Dies ist notwendig da bei der Anmeldung am Praktikum intern wieder die eigene anmelden Methode aufgerufen wird und die Gefahr der endlosen Rekursion besteht Bei dieser L sung gibt die Anmeldung des Studenten beim zweiten Aufruf
503. orting 0 komplett abzuschalten ist jedoch auch keine L sung In diesem Fall erzeugt das Skript n mlich gar keine Ausgabe auch wenn andere PHP Anweisungen vor der fehlerhaften Zeichen kette eine Anweisung hervorbringen w rden Das Behandeln des Fehlers ist hier also sehr umst ndlich Der korrekte Ansatz besteht darin Parser Fehler durchaus auch in einer laufenden Anwendung zuzulassen da sie auf einen Programmierfehler deuten der zu beheben ist Objektorientierte Fehlerbehandlung In der php ini k nnen Sie stattdessen die Bildschirmausgabe durch die Anweisung display_errors Off abschalten Um dennoch Fehler sehen zu k nnen sollten diese in eine Logdatei umgeleitet werden Dazu k nnen Sie den Parameter log_errors On der ini Datei setzen Nun m ssen Sie noch die Ausgabe der Logdatei benennen Dies geschieht durch den Parameter error_log und einer Dateiangabe beispielsweise error_log C php_error log Auf einem MS Win dows Server k nnen Sie das Logging durch error_log syslog auch in die Ereignisanzeige des Betriebssystems umleiten Nun stellt sich noch die Frage wie Sie einen benutzerdefinierten Fehler erzeugen k n nen Dies ist in Listing 4 60 dargestellt und funktioniert nat rlich auch objektorientiert beim Aufruf von Methoden Dort ist nat rlich das Exception Handling der Vorgehens weise aus Listing 4 60 vorzuziehen Das Skript liefert die Ausgabe Fatal error Kann nicht durch 0 teilen in on line 4 lt
504. ositiv beeinflussen 51 Das Fallbeispiel der Depotverwaltung Dieses Fallbeispiel zeigt die ersten Iterationen eines Softwareprojekts bei dem ein virtu eller Auftraggeber die RAUB Bank einen Onlinedienst zur Verwaltung der Aktiende pots seiner Anleger plant Die ersten Gespr che mit dem II Manager der Bank werden in Kapitel 5 1 1 skizziert Dem folgt eine fachliche objektorientierte Analyse der Problemstellung mit dem Ziel einer ersten fachlichen Modellierung in Kapitel 5 1 2 Das Kapitel 5 1 3 dargestellte objek torientierte Design f hrt dann zu einem technischen Modell das die Grundlage f r die Implementierung der ersten Prototypen bildet Das Prototyping in PHP 5 3 erfolgt dann iterativ inkrementell wobei das Konzept der testgetriebenen Entwicklung Kap 3 2 5 angewendet wird Nachdem die ersten Prototypen umgesetzt wurden werden zum Abschluss des Fallbei spiels die n chsten Schritte in Kooperation mit dem Auftraggeber besprochen 5 1 1 Die Idee des Auftraggebers Gerade in Zeiten der Wirtschaftskrise mit niedrigen Zinsen auf Konten m chte die IT Abteilung der RAUB Bank ihren Kunden einen neuen Dienst kostenlos zur Verf gung stellen Da die Aktienkurse sehr stark gefallen sind m chte unser Auftraggeber m g lichst schnell ein System bereitstellen mit dem ein Kunde der Bank sein Aktiendpot ver PHP Endlich objektorientiert 329 5 Projektpraxis walten kann Ein Depot besteht dabei aus Best nden von vers
505. ototyp 119 HTML auslesen 362 HTML Formulare 69 HTML Tabelle 376 HTTP Anfrage 14 I if elseif 40 if then else 36 IIS 324 include 59 include Beziehung 165 Indizierung 29 ini_set 290 innere Plattform 411 instanceof 231 Integer 18 Interessen 124 Interface 143 195 266 Interfaceimplementierung 266 Iteration 346 K Klasse 129 340 Klassenattribut 144 226 Klassendiagramm 213 222 341 Klassendiagramm Analyse 181 191 Klassendiagramm Design 191 Klassendiagramm des Designs 344 Klassengeflecht 194 Klasseninformationen 234 Klassenmethode 144 226 klonen 230 Kommentar 16 Komposition 143 186 256 Kompositum 405 Konstante 17 228 Konstruktor 140 212 Kontrollfluss 171 kopfgesteuert 45 L LAMP 7 Late Static Binding 324 Lavafluss 409 entwickler press Stichwortverzeichnis M mail 98 mathematische Funktionen 67 mehrdimensionales Feld 31 Mercury Mail Server 98 Methode 134 193 MIME 328 Model View Controller 159 Multiplizit t 185 MVC 159 365 388 MySQL Datentypen 86 MySQL Funktionen 83 MySQL Zugriff 388 N n m Beziehung 114 Namensraum 318 n re Assoziation 189 Navigierbarkeit 184 neue Funktionen 325 new 214 NULL 20 0 Object 20 Objekt 8 129 Objektdiagramm 181 190 340 Objektinformationen 233 Objektmengenverarbeitung 176 objektorientierte fachliche Analyse 145 objektorientierte Implementierung 145 objektorientiertes technisches Design 145 Objektorientierung 8 OMG
506. page bietet den kostenlosen Dienst an stets aktuelle B rsenkurse bereitzustellen Abbildung 5 16 zeigt die Darstellung der Daten in der HTML Ausgabe Interessant ist dabei neben dem Preis auch das Datum und die Uhrzeit der Ermittlung des Kurses Es sollen die Daten des Handelsplatzes Frankfurt verwendet werden da unser Auftraggeber der RAUB Bank ebenso den Handel an der Frankfurter B rse f r seine Kunden anbietet PHP Endlich objektorientiert 361 5 Projektpraxis Xetra Frankfurt Letzter Preis 8 420 8 45 Datum Zeit 19 10 2009 19 10 2009 17 35 19 53 Abbildung 5 16 Aktuelle Kursdaten der HTML Datei Der entsprechende HTML Quellcode kann im Internetbrowser des Clients ausgelesen werden Er ist im Folgenden dargestellt wobei einige zus tzliche Zeilenumbr che zur bersichtlichkeit eingef gt wurden lt th class column datacaption first gt lt th gt lt th class column datavaluel strong gt Xetra lt th gt lt th class column datavalue2 strong last gt Frankfurt lt th gt lt tr gt lt tr gt lt td class column datacaption first strong gt Letzter Preis lt td gt lt td class column datavaluel strong gt 8 420 lt td gt lt td class column datavalue2 last strong gt 8 45 lt td gt lt tr gt lt tr class odd gt lt td class column datacaption first gt Datum Zeit lt td gt lt td class column datavaluel gt 19 10 2009 17 35 lt td gt lt td class column datavalue2 last gt 19 10 2009 19 5
507. php ini erlauben m ssen die sich im PHP Ordner der Installation befindet Dazu m ssen Sie den Kommentar im Eintrag phar read only entfernen und phar readonly Off setzen Nach einem Neustart des Apache Webser vers k nnen Sie dann das Skript erneut ausf hren Das Skript erzeugt nun eine neue Datei kv phar im Ordner der Datei aus Listing 4 85 die nicht ZIP komprimiert ist Sie Neuerungen in PHP 5 3 und Ausblick beinhaltet alle Dateien des Zielordners im hinteren Teil der PHAR Datei der mit zus tz lichen PHP Funktionen im vorderen Teil zusammengef gt wurde Listing 4 86 zeigt wie Sie die Dateien des PHAR Archivs textuell wieder auslesen k n nen Die Referenz item zeigt dabei auf ein Dateiobjekt im Archiv dessen Name Sie ber den Methodenaufruf getFilename auslesen k nnen Der Name my phar ist dabei ein Alias f r das Archiv damit Sie unabh ngig vom eigentlichen Namen des Archivs auf dessen Inhalte zugreifen k nnen lt html gt lt body gt lt php phar new Phar kv phar my phar foreach phar as item var_dump item gt getFilename lt body gt lt html gt Listing 4 86 Auslesen der Archivinhalte Abschlie end m ssen Sie noch wissen wie Sie auf die Kundenverwaltungsklasse inner halb des Archivs zugreifen k nnen Dazu m ssen Sie zun chst wieder einen Alias defi nieren mit dessen Hilfe Sie dann ber eine besondere Pfaddefinition die Datei aus dem Archiv inkludieren Dann k nnen Sie
508. r new SoapServer NULL array uri gt http localhost webservice server gt addFunction addiere server gt handle Listing 4 77 Der erste Web Service in PHP Nun fehlt noch der Aufrufer der den bereitgestellten Dienst verwendet In Listing 4 78 wird ein Clientobjekt erstellt das sich mit dem Server verbindet Dann werden die Ein gabeparameter f r den aufzurufenden Dienst definiert Diese Parameter werden als SoapParam bezeichnet Die Ursache f r diese Deklaration liegt darin dass die aufgeru fene Methode nicht unbedingt in PHP implementiert sein muss Sie k nnen von dem PHP Client aus auch prinzipiell auf einen in Java oder C implementierten Web Service zugreifen Der SoapParam ist ein Datentyp der in SOAP definiert und daher ein von einer speziellen Programmiersprache unabh ngiger Datentyp ist Im dritten Schritt wird die addiere Methode vom Client aus aufgerufen und damit ein SOAP Request an den PHP Server gesendet Der verarbeitet die Anfrage und gibt das Ergebnis zur ck das in der Variablen result gespeichert und letztlich ausgegeben wird lt php client new SoapClient NULL array location gt http localhost webservice server php uri gt urn xmethodsTestServer style gt SOAP_RPC use gt SOAP_ENCODED DE parameters array new SoapParam 10 s1 new SoapParam 20 s2 result client gt _call addiere parameters array Listing 4 78 Der ers
509. r auch als statisches Attribut bezeichnet Objektorientierte Programmierung Bei jedem Aufruf des Konstruktors kann die Anzahl der erzeugten Objekte inkremen tiert und bei jedem Aufruf des Destruktors dekrementiert werden F r Klassenattribute gelten dieselben Regeln zur Sichtbarkeit wie f r normale Attribute Sie sollten nach M glichkeit private deklariert sein Um auf das Attribut zugreifen zu k nnen ben tigen Sie eine entsprechende Klassenmethode die ebenfalls statisch dekla riert wird Diese Methode k nnen Sie auf der Klasse selbst anwenden selbst dann wenn noch kein Objekt dieser Klasse erzeugt worden ist Profitipp Eine gute objektorientierte Modellierung verzichtet auf eine gro e Anzahl von Klas senattributen und Klassenmethoden und setzt stattdessen Verwaltungsklassen ein Dies ist besonders bei gr eren statistischen Auswertungen sinnvoll und bietet einen zentralen Zugangspunkt f r die Objekte So kann f r die Klasse Kunden eine separate Klasse Kundenverwaltung erzeugt werden die eine Liste aller erzeugten Kunden ver waltet Diese kann dann beispielsweise auch Suchfunktionen anbieten 3 2 3 Vom Gesch ftsprozess zur objektorientierten Analyse Wenn die Klassen deren Eigenschaften und Methoden sowie die Abl ufe in der Anwen dung bekannt sind ist die objektorientierte Implementierung relativ leicht durchf hrbar Bis dahin ist jedoch ein weiter Weg zu gehen insbesondere bei sehr gro en Projekten Alle bislan
510. r chsgrundlage in der Phase der Anforderungsanalyse die letztlich eine korrekte Modellierung erm glichen soll Abbildung 3 7 skizziert ein ER Diagramm das aus drei Entit ten Datenbanktabellen besteht n mlich Autor Buch und Verlag Diese Entit ten stehen in Relation zueinander die zun chst textuell beschrieben wird Jede Relation beinhaltet eine Kardinalit t 1 1 1 n oder n m wobei die mehrfachen Bez ge n und m durch ausgedr ckt werden Im Bei spiel kann ein Autor mehrere B cher schreiben an einem Buch k nnen auch mehrere Autoren beteiligt sein Es handelt sich also um eine n m Beziehung Ein Verlag vertreibt mehrere B cher ein Buch wird jedoch immer genau von einem Verlag verbreitet Hier handelt es sich also um eine 1 n Beziehung Zus tzlich sind noch die wichtigsten Felder jeder Tabelle dargestellt So besitzt ein Buch beispielsweise eine ISBN Nummer und einen Titel Geb Datum Abbildung 3 7 Skizze eines ER Modells Wenn Sie diese Tabellen ber PHPMyAdmin auf dem MySQL Server angelegt haben k nnen Sie ber die in Kapitel 2 2 beschriebenen PHP Befehle Funktionen zum lesenden und schreibenden Zugriff auf diese Daten erstellen und als einzubindende inc php Dateien f r die Fachlogik anbieten Die Fachlogik Die Fachlogik wird in enger Abstimmung mit dem Kunden erstellt da sie seinen Gesch ftsprozess repr sentiert der in Zukunft mit der PHP Anwendung realisiert werden soll Im Wasserfallmodell sind
511. r Benutzerver waltung wird die Anbindung eines Mikro Controllers ber das PHP Portal beschrieben Die Master Thesis mit dem Titel Konzeption und Realisierung eines Mitarbeiterportals mit Arbeitszeiterfassung und dezentralem Datenbankabgleich aus dem Jahre 2003 http www frankdopatka de studium koeln 2003_master pdf 9 MB zeigt die Wiederverwen dung des Logins und die Erweiterung auf verschiedene Benutzergruppen Hierbei han delt es sich um ein klassisches B2C Portal Weiterhin typisch f r kleine Projekte ist es dass Sie zur Realisierung lediglich einfache Werkzeuge ben tigen Dies sind ein Texteditor f r die Erstellung der PHP Dateien sowie ein XAMPP Server der auf jedem g ngigen PC oder Laptop lauff hig ist 31 2 Ablauf eines Projekts W hrend sich der theoretische Teil der Informatik wie die formalen Sprachen aus der Mathematik ableiten stammt ein anderer Teil der Informatik aus den Ingenieurwissen schaften Der Fokus eines Ingenieurs liegt im Gegensatz zu einem Theoretiker auf der Anwendung von Wissen in Projekten Die Sprache PHP Kap 2 kann man sich privat aneignen und damit kleine Problemstel lungen l sen Wenn Sie als Freiberufler f r einzelne andere Personen eine kleine PHP Anwendung schreiben gehen Sie vermutlich nur mit gesundem Menschenverstand und intuitiv vor Aus diesem Grunde wurde die Erstellung eines Programms fr her als Ingenieurskunst bezeichnet Sie sind in der Lage aus einer Problemstellung
512. r Werte und oder Datentypen Ebenso wie Vergleichsoperatoren liefern auch logische Operatoren Wahrheitswerte als Ergebnis sodass sie sich f r Verzweigungen und Schleifen eignen Der Sinn von logi schen Operatoren liegt in ihrer Verkn pfung zu komplexen Bedingungen die den Ablauf des Quellcodes beeinflussen Ein Beispiel ist ergebnis x gt 20 and y lt 0 or z Tabelle 2 5 liefert eine bersicht ber logische Operatoren Operation Bedeutung x and y bzw liefert 7RUE wenn sowohl der Wert Ausdruck von Sxals auch der Wert Ausdruck x amp amp y von y TRUEist x or y bzw liefert 7RUE wenn sowohl der Wert Ausdruck von xals auch der Wert Ausdruck x y von y TRUEist oder nur einer der beiden Werte Ausdr cke 7RUEist x xor y liefert ZAVE wenn der Wert Ausdruck von x oder der von y 7RUEist aber nicht beide x liefert 7RUE wenn der Wert Ausdruck von x ALSEist Tabelle 2 5 Logische Operatoren Wie andere Programmiersprachen bietet auch PHP den Zugriff auf einzelne Bits von Variablen Operation Bedeutung x amp y bin re UND Verkn pfung x amp y bin re ODER Verkn pfung x y bin re X0R Verkn pfung liefert 7RUE wenn xoder ywahr ist aber nicht beide x Komplement Darstellung x lt lt y verschiebt die Bits von Saum Schritte nach links jeder Schritt nach links bedeutet eine Multiplikation mit 2 x gt y verschiebt die Bits von Saum Schritte nach rec
513. r auf einen Wert ungleich 0 setzt um einen g ltigen Bruch zu erzeugen Ein anderes Beispiel ist die Erzeugung eines Kunden im System Es macht keinen Sinn einen Kunden zu erzeugen der keinen Namen und oder keine Anschrift hat Stellen Sie sich vor Sie w rden diesem existierenden Kunden im Anschluss an dessen Erzeugung eine Rechnung zuweisen Sie m ssen sich also Gedanken machen welche Eigenschaften zwingen gesetzt werden m ssen Das Beispiel des Kunden k nnen Sie wieder mit der Modellierung einer Datenbanktabelle vergleichen Dort haben Sie bei der Erstellung einer Tabelle die M glichkeit Feldern einen Initialwert zuzuweisen oder zumindest zu sagen dass eine Spalte nicht NULL enthalten darf Mit einem Konstruktor haben Sie noch weitaus mehr M glichkeiten da sie den gesamten Funktionsumfang von PHP nutzen k nnen Sie k nnen beispielsweise innerhalb eines Konstruktors weitere Objekte anle gen die f r die Existenz des eigenen Objekts unabdingbar sind Wie bereits erw hnt wurde kann ein Objekt nicht nur elementare Datentypen wie Zei chenketten oder Zahlen als Eigenschaften haben sondern auch andere Objekte So besteht der Bus i2000 des Autohausbeispiels aus einem Hybridantrieb und einer speziel len Ausstattung Wenn der konkrete Bus i2000 aus dem Bestand des Autohauses entfernt werden sollte so k nnen auch die Daten zu seinem Antrieb und seiner Ausstattung ent fernt werden Ein hnlicher Fall ergibt sich wenn Sie ein Datenver
514. r bei jedem Reload der Seite hoch gez hlt wird In der Realit t handelt es sich jedoch um denselben Besucher Abhilfe schafft hier die Einrichtung einer Session wie es bereits im vorletzten Kapitel vorgestellt wurde Nur beim Start der Session wird der Wert einmalig aus der Datei gelesen erh ht PHP Endlich objektorientiert 77 2 Die Sprache PHP Prozedural und wieder gespeichert Ist der Wert bereits in der Session vorhanden muss er bei einem Reload der Seite lediglich aus der Session geholt werden Ein weiteres Problem kann bei der Zugriffsberechtigung im Dateisystem des Servers auf treten Wenn die Datei noch nicht existiert versucht der fwrite Befehl sie anzulegen Es kann jedoch sein dass das PHP Skript nicht die Berechtigung hat in das Dateisystem des Servers zu schreiben In diesem Fall schl gt der Schreibzugriff fehl Ein L sungsan satz kann darin bestehen die Textdatei zun chst clientseitig anzulegen auf dem Server per FTP File Transfer Protocol hochzuladen und die Zugriffsrechte per FTP zu erh hen Ein weiteres Problem tritt auf wenn mehrere Benutzer gleichzeitig auf diese Datei zugreifen Das Skript l uft vereinfacht in dieser Reihenfolge ab 1 Lesender Dateizugriff um den Counter Wert zu holen 2 Counter Wert erh hen 3 Erh hten Counter Wert schreiben Nehmen wir an dass zwei Benutzer fast gleichzeitig auf das Skript zugreifen Benutzer A f hrt Schritt 1 aus Dann f hrt Benutzer B den Schritt 1
515. r die Methode des eigentlichen Objekts aufge rufen wird Konstruktor und Destruktor Es wurde bereits gesagt dass die Klasse eine Beschreibung darstellt um Objekte zu erzeugen Ein Objekt hat dann einen inneren Zustand und Methoden ber die es ange sprochen werden kann In jeder objektorientierten Programmiersprache existiert nun ein Befehl um ein neues Objekt zu erzeugen Dieser Befehl hei t in PHP wie auch in Java new Als R ckgabe des Befehls erh lt man eine Referenz also ein Zeiger auf das gerade Objektorientierte Programmierung erstellte Objekt Es ist Pflicht in der Objektorientierung dass jedes Objekt zu jedem Zeit punkt also auch direkt nach seiner Erzeugung in einem g ltigen Zustand ist Um diesen g ltigen Zustand zu erreichen k nnen Sie Vorschriften zur Erzeugung von neuen Objekten Ihrer eigenen Klasse definieren Diese Vorschriften nennen sich Konst ruktoren Ein Konstruktor kann eine Liste von Eingabeparametern erhalten die f r die Erstellung eines Objekts dieser Klasse zwingend notwendig sind Gegebenenfalls existie ren mehrere M glichkeiten zur Erzeugung eines Objekts Daher k nnen auch mehrere Konstruktoren existieren Ein Beispiel ist die Klasse Bruch mit den Eigenschaften Z hler und Nenner Wenn Sie ein fach einen Bruch erzeugen ist sowohl der Z hler als auch der Nenner 0 Dies ist jedoch laut Definition kein g ltiger Bruch Sie m ssen also zumindest einen Konstruktor defi nieren der den Nenne
516. rale in C entwickelte Skriptsprache entwickelt die sogar ihren Namen weiterentwickelt hat der nun Hypertext Preprocessor lautet Dieser Name entstand da der PHP Interpreter den geschriebenen Quellcode in Form von herk mmlichen Textdateien vorverarbeitet bevor der Datenstrom zum Webserver weitergeleitet wird W hrend PHP 4 nun ab dem Jahr 2000 bis heute seinen Siegeszug antritt wurde bereits 2004 die f nfte Version von PHP ver ffentlicht Mit dieser Version wurden objektorien tierte Ans tze in die Sprache integriert sowie eine Unterst tzung der Verarbeitung von XML Daten Die neue PHP Version wurde ber einen l ngeren Zeitraum kaum wahrge nommen Aus welchen Gr nden soll man sich kompliziertere objektorientierte Kon zepte aneignen Entwickler von vorwiegend kleinen PHP Skripten f r die eigene Home page waren sehr zufrieden mit der herk mmlichen Art in PHP zu programmieren Interessanterweise wird in den Stellengesuchen der letzten Monate verst rkt die Anfor derung an Entwickler gestellt objektorientiert in PHP programmieren zu k nnen Au erdem werden die Begriffe der Gesch ftsproze analyse der objektorientierten Ana lyse und des objektorientierten Designs GPA OOA und OOD mit PHP in Verbindung gebracht Ebenso ist die Nachfrage nach Schulungen im Bereich der service und objekto rientierten Konzepten seit einem Jahr stark gestiegen Der Fokus der Entscheider wird seit einiger Zeit auf PHP 5 gelegt Hier ist z
517. rd die gesamte Anwendung wiederum vom Management und den sp teren Benutzern getestet Der rechte Teil des V Modells beschreibt also die Tests der Software sowohl auf der Ebene der einzelnen Komponenten als auch auf Systemebene Die Tests der einzelnen Komponenten werden auch als Unit Tests bezeichnet und sind heutzutage ebenso automatisierbar wie die Integrationstests bei denen die Komponenten zu dem Gesamt system zusammengebaut werden Im Umfeld der Integrationstests ist das Schlagwort Continuous Integration zu nennen Der Trend geht dahin in Verbindung mit einer Versionsverwaltung in festen Zeitabst nden den aktuellen Stand der Anwendung zu erzeugen Dieser kann dann bereits als Prototyp von zuk nftigen Benutzern eingesehen und kommentiert werden F r die Unit Tests empfiehlt sich das Tool PHPUnit f r das Management der kontinuierlichen Integration eines gr eren PHP Projekts das Server tool Xinc Stets testet man gegen die entsprechende Spezifikation den Quellcode gegen die Anforderungen an den Quellcode das ausf hrbare System gegen die Anforderungs beschreibung an die Entwickler sowie bei der Abnahme des fertigen Produkts gegen die Funktionen die von den Benutzern und dem Management gefordert wurden Auff llig ist bereits dass die Tests als Validation und die R ckschritte in der Spezifika tion im linken Teil des Modells als Verifikation bezeichnet werden Wo liegen die Unterschiede zwischen den beiden B
518. rden muss Stattdessen k nnten dem Kunden alternative Termine angeboten werden Sie k nnen sich also im Aktivit tsdiagramm berlegen wie Sie mit einem solchen Fehler umgehen wollen Anmeldung Anmeldung zum Seminar Fehler Objekt Abbildung 3 41 Regul re und fehlerhafte Abarbeitung Abbildung 3 39 zeigte bereits die parallele Abarbeitung von zwei oder mehreren Vorg n gen Zus tzlich existiert in der Notation der Aktivit tsdiagramme seit UML2 die M g lichkeit eine Verarbeitung von Objektmengen zu beschreiben Das linke Symbol der Abbildung 3 42 beschreibt als Aktion eine Mengenverarbeitung die eine Eingangs und eine Ausgangsmenge von Objekten behandelt Diese Verarbeitung l sst sich durch Unteraktivit ten genauer beschreiben In dem rechten Teil der Abbildung ist zu erkennen dass mit jeweils einem Objekt der Menge eine Aktion durchgef hrt wird Zus tzlich k nnen Sie die Art der Verarbeitung angeben In den Abbildungen k nnen die Objekte der Eingangsmenge parallel verarbeitet werden Die Objekte k nnen also voneinander unabh ngig abgearbeitet werden Alternativ dazu w re auch eine iterative Verarbeitung nach einem FIFO Prinzip first in first out denkbar Sie k nnen jetzt vielleicht vermuten dass es sich bei der Mengenverarbeitung um einen sehr seltenen Spezialfall handelt Selbstverst ndlich sollten Sie es vermeiden in jeden Vorgang eine Mengenverarbeitung hineinzuinterpretieren Andererseits ist das Erkenn
519. rekt in ihren Quellcode Denken Sie also wie jemand der Ihre Funktion sp ter anwenden wird und von der internen Rea lisierung keine Ahnung hat Eine Mikroiteration der Programmierung unter Ber cksichtigung der testgetriebenen Entwicklung hat vier Hauptteile 1 Schreiben Sie einen Test f r das erw nschte fehlerfreie Verhalten der geplanten Methode Wenn Sie bereits F lle kennen bei denen Ihre Methode fehlschlagen soll so geben diese ebenfalls g ltige Iestf lle Ein Beispiel ist das Anmelden eines Studenten an einer bereits gef llten bungsgruppe Der Quellcode um diese Tests erfolgreich auszuf hren existiert jedoch noch nicht 2 Implementieren Sie den notwendigen Quellcode mit m glichst wenig Aufwand bis alle bisher erstellten Tests bestanden werden 3 F hren Sie ein Refactoring durch um die Qualit t des Quellcodes und des Gesamtde signs zu verbessern Entfernen Sie insbesondere Codeduplikate Debug Ausgaben und abstrahieren Sie das bereits bestehende Design wo es notwendig ist 4 F hren Sie nochmals alle bisher erstellten Tests aus Werden sie weiterhin erfolgreich ausgef hrt k nnen Sie den ersten Schritt mit der n chsten Funktionalit t ausf hren Die dazu erstellten Unit Tests werden als Grey Box Iests bezeichnet als Kompromiss zwischen einem Blackbox Test und einem Whitebox Test Bei einem Blackbox Test ken nen Sie die interne Realisierung der zu testenden Anwendung nicht Die Gemeinsamkeit zur testgetriebe
520. ren zu lassen werden System Use Cases meist vermieden und spielen nur bei ganz speziellen Sachverhalten oder in hoch komplexen und un bersichtlichen Anwendungen eine Rolle Profitipp Beachten Sie dass in grafischen Anwendungsf llen keinerlei Reihenfolge der Funkti onen existiert Die Ellipsen von zusammengeh rigen Funktionen werden jedoch oft nahe beieinander gezeichnet Genauso werden hnliche oder abgeleitete Akteure r umlich nah angeordnet blicherweise werden externe Akteure auf der linken Seite des Systems und interne Firmen Mitarbeiter auf der rechten Seite unterge bracht Das Anlegen und ndern von Seminaren wird stets in Absprache mit den Dozenten durchgef hrt Die Mitarbeiter suchen sich anhand der Raumplanung m gliche Termine f r die Seminare aus die dann dem Dozenten mitgeteilt werden Hat ein Dozent Zeit so wird er diesem Termin zugeordnet Die lt lt include gt gt Beziehung besagt dass der inklu dierte Anwendungsfall hier das Zuordnen des Dozenten nie allein ausgef hrt wird Der eingebundene Anwendungsfall ist also immer in einem gr eren Kontext zu sehen In diesem Fall ist dieser Kontext die Terminzuordnung In der Implementierung wird ein solcher eingebundener Anwendungsfall als interne Hilfsmethode gehandhabt die nicht direkt vom Benutzer angesprochen werden kann Sowohl der Kunde als auch der Mitarbeiter kann ber eine Suchfunktion nach Semina ren suchen Ein Kunde kann sich dann zu einem Seminar
521. rientiert 111 3 Vorgehensweise bei der Softwareentwicklung Anforderungen mit der Zeit ndern Dies gibt dem Modell eine weitaus gr ere Dyna mik als dem formalen und idealisierten Wasserfallmodell Gleichzeitig werden die ben tigten Ressourcen wesentlich schwieriger kontrollierbar Wie k nnen das Ende des Projekts und die Kosten im Vorfeld bestimmt werden wenn die Anforderungen noch gar nicht bekannt sind und sich sogar ndern k nnen Um die sen Problemen zu entgegnen beinhaltet der Kern des V Modells vier Vorgehensbau steine die heutzutage als Managementaktivit ten gesehen werden Dabei handelt es sich um 1 das Projektmanagement das den berblick ber Kosten und Termine beh lt 2 die Qualit tssicherung um die Stufen der Validation und Verifikation zu garantieren 3 das Konfigurationsmanagement das Regeln auf den Produktlebenslauf anwendet und 4 das Problem und nderungsmanagement zur Umsetzung neuer Strukturen Pro zesse oder Verhaltensweisen in der zu erstellenden Anwendung Hier wird insbeson dere auch unterschieden ob es sich bei Unzul nglichkeiten der bisher erstellten Anwendung um Fehler handelt die in der Regel innerhalb des bestehenden Budgets behoben werden m ssen oder um neue Anforderungen f r die normalerweise neue Budgets freigegeben werden m ssen Am V Modell wird meist kritisiert dass die Testphasen erst sp t beginnen Werden Unzul nglichkeiten erst beim Abnahmetest bekannt so erf
522. riff Eine Implementierung des Interfaces wurde f r eine MySQL Datenbank bereits in Lis ting 4 47 vorgestellt sodass Sie eine Datenbankverbindung ffnen und schlie en sowie lesende und schreibende Zugriffe ber SOL Kommandos durchf hren k nnen Um die notwendigen Parameter f r die Zugriffe zu bergeben wurde in Listing 4 46 die Hilfsklasse ParameterListe vorgestellt und getestet Diese Klassen wurden zusammen mit dem Interface auf Wiederverwendbarkeit und auf Unabh ngigkeit von einer konkreten Problemstellung ausgelegt Daher k nnen Sie auch f r die Persistenzschicht der Depot verwaltung herangezogen werden PHP Endlich objektorientiert 389 5 Projektpraxis http localhost Aktienverwaltung 004 uebersicht php Windows Internet Explorer Jog O gt jg localhost x 4x Ar Datei Bearbeiten Ansicht Favoriten Extras vr Favoriten 188 localhost localhost boerse http flocalhost ktienve X Depotverwaltungsprogramm Gew hlter Bestand E ON l laden l speichern bersicht w hlen l neu l hinzukaufen neue Dividende l verkaufen E ON DEO00ENAG999 w hlen 90 St ck am 24 04 2009 gekauft vor 194 Tagen Stand vom 04 11 2009 18 36Uhr EK akt Wert gesamt incl Kosten EK akt Kurs pro Aktie Differenz pro Aktie Dividenden Ges Diff incl Einnahmen amp Kosten Zinsen Jahr Copyright by Dr Frank Dopatka v S3 Lokales Intranet fa R 00
523. ripte k nnen Sie dann auf diese Daten zugreifen Abbildung 2 16 zeigt die mit Testdaten gef llte Tabelle kurse AG_ID day value ID PR 1 J Aa L X 1 2 a 2 PX 1 T ae a YAS 1 4 10659 4 X 1 5 1979 5 X 1 6 9 03 6 PA 1 TE E A i NR 1 8 639 8 Abbildung 2 16 Tabelle kurse Der Zugriff auf eine Datenbank ist mit dem Zugriff auf eine Datei oder auf einen FTP Server zu vergleichen Er verl uft grunds tzlich in drei Schritten 1 Verbindung zur Datenbank aufbauen 2 Interaktion mit der Datenbank durchf hren 3 Verbindung mit der Datenbank abbauen Die Dienste des gesamten Datenbankzugriffs werden in eigene Funktionen gekapselt Dadurch k nnen die Funktionen wie PHP eigene Befehle verwendet werden Alle Funk tionen werden im Beispiel in einer einzigen Datei der DBzugriff inc php gespeichert Diese Datei wird von den Skripten hinzugef gt die Datenbankfunktionalit t verwen den Das Aufbauen der Verbindung in der Funktion DB_open erfolgt in zwei Schritten Im ersten Schritt verbinden Sie das Skript mit dem Datenbankserver Dabei m ssen Sie die IP Adresse des Servers bei XAMPP k nnen Sie f r lokale Tests localhost verwenden Ihren Benutzernamen und Ihr Kennwort eingeben mit denen sich das Skript gegen den Server authentifiziert In MySQL k nnen verschiedene Benutzer verschiedene Zugriffs rechte auf eine Datenbank besitzen Der Zugriff auf den Server wird dann mit dem Befehl m
524. rit t Abbildung 3 31 Extends Beziehung der UML an einem Beispiel PHP Endlich objektorientiert 165 3 Vorgehensweise bei der Softwareentwicklung Nachdem Abbildung 3 30 die gew nschten Funktionen der Anwendung auf Wolken ebene beschrieben hat sollten Sie die Betrachtung noch etwas detaillierter durchf hren Dabei wird jeder einzelne Anwendungsfall der Wolkenperspektive genauer betrachtet und es wird jeweils ein neues Diagramm erstellt Profitipp Vermeiden Sie es zu versuchen jeweils ein globales Diagramm zu erstellen das alle Funktionen enth lt Schon bei einer etwas komplexeren Anwendung werden Sie scheitern Abbildung 3 32 beschreibt die Funktion Seminare zu verwalten genauer Man wechselt zur Drachenperspektive Bei Bedarf kann man auch direkt den Meeresspiegel betrach ten Die Meeresspiegelperspektive enth lt dann die Funktionen die unmittelbar ber die Anwendung erreichbar sind beispielsweise ber Schaltfl chen in dem jeweiligen Ver waltungssystem Typischerweise werden Anwendungsf lle bis auf Meeresspiegelebene betrachtet Diese Anwendungsf lle werden als Business Use Cases bezeichnet die sich eher an den betrieblichen Gesch ftsprozessen orientieren Wirft man einen Blick unter das Wasser so erstellt man System Use Cases die interne Funktionen der Anwendung beschreiben die ein Anwender nicht wahrnimmt und die nur f r die Entwickler von Bedeutung sind Um die Anzahl der erzeugten Diagramme nicht explodie
525. rite fh var erg is_file var erg file_exists var erg filectime var erg filesize var ffnet die in Svarangegebene Datei oder den URL und gibt eine Referenz auf das ge ffnete Objekt zur ck m gliche Werte f r die Operation Sop sind a ffnen zum Schreiben Referenz zeigt auf das Ende der Datei eine nicht existierende Datei wird angelegt a ffnen zum Lesen und Schreiben Referenz zeigt auf das Ende der Datei eine nicht existierende Datei wird angelegt r ffnen zum Lesen Referenz zeigt auf den Anfang der Datei r ffnen zum Lesen und Schreiben Referenz zeigt auf den Anfang der Datei w ffnen zum Schreiben Referenz zeigt auf den Anfang der Datei existierende Datei wird auf 0 Byte gesetzt eine nicht existierende Datei wird angelegt w ffnen zum Lesen und Schreiben Referenz zeigt auf den Anfang der Datei eine nicht existierende Datei wird angelegt schlie t eine zuvor mit open ge ffnete Datei bei Erfolg wird TRUE sonst ALSEzur ckgeliefert liest Daten aus der Dateireferenz Sfhein entweder bis Zeilenumbruch Dateiende oder bis zur Anzahl an Zeichen die in varangegeben wurde liest eine Zeile aus der ge ffneten CSV Datei Comma Separated Values fhaus der Parameter var beinhaltet die Anzahl der zu lesenden Zei chen und muss gr er sein als die l ngste Zeile in der Datei da sonst das Ende der Zeile nicht gefunden wird in Sfrennerwird das Trennzeichen der CSV Da
526. rklasse ersetzt wird Das Schl sselwort this d rfen Sie hier nicht verwenden da es sich auf eine Objektreferenz bezieht und bei der Abfrage der Klasseneigenschaft ja noch gar kein Objekt dieser Klasse existieren muss Neuerungen in PHP 5 3 und Ausblick Seit PHP 5 3 k nnen Sie nun den R ckgabewert durch den Aufruf return self x ermit teln Das neue Schl sselwort static sorgt daf r dass erst zur Laufzeit der Name der Klasse ermittelt wird die die Klasseneigenschaft ausliest Analog dazu wurde die Methode _ call Kap 4 1 4 f r den Zugriff auf Eigenschaften um eine weitere Methode erg nzt die __callStatic genannt wird Diese Methode wird dann ausgef hrt wenn Sie eine nicht existierende statische Methode aufgerufen haben 4 6 5 Neue und verbesserte Funktionen Mit der neuen Version 5 3 wurden auch einige neue nichtobjektorientierte Einzelfunkti onen erg nzt die in Tabelle 4 4 aufgef hrt werden Name Funktion quoted_printable_encode konvertiert einen so genannten quoted printable String nach RFC2045 in einen 8 Bit String z B sch n in sch C3 B6n die entsprechende decode Methode quoted printable_decode existierte bereits in lteren PHP Versionen preg _filter f hrt ein Suchen und Ersetzen in einem Datenstamm unter Verwendung eines regul ren Ausdrucks durch parse_ini_string liest eine Zeichenkette mit Konfigurationsangaben ein und gibt die Konfigu rationsdaten als assoziatives Fe
527. rodukten und Dienstleistungen f r die Entwicklung Implementierung und Verwal tung von PHP Anwendungen Zend beschreibt seine Entwicklungsumgebung Zend Studio in der aktuellen Version 7 0 als ein Integrated Development Environment IDE f r professionelle Entwickler in der alle Entwicklungskomponenten enthalten sind die f r den gesamten Lebenszyklus von PHP Anwendungen ben tigt werden Ebenso wie Eclipse integriert auch Zend Studio die Eclipse PDT bietet jedoch im Ver gleich zu Eclipse for PHP Developers eine tiefere Integration der Sprache PHP Eine Ursache liegt darin dass sich die Eclipse Foundation in erster Linie auf die Sprache Java konzentriert w hrend Zend Studio ausschlie lich f r PHP ausgelegt ist Ein weiterer 424 Erstellung von gutem Quellcode Grund liegt darin dass es sich bei dem Zend Studio nicht um ein Open Source Projekt handelt und die Weiterentwicklung der Entwicklungsumgebung aus Lizenzeinnahmen m glich ist Eine Einzellizenz kostet ca 400 und umfasst auch ein 1 Jahres Abonnement f r Updates und Support Der Download einer Testversion von der Homepage http www zend com en products studio ist m glich um ein erstes Gef hl f r die Entwicklungs umgebung zu erhalten Wie auch Eclipse ist Zend Studio sowohl auf Microsoft Windows als auch auf Linux und Macintosh Betriebssystemen funktionsf hig Auf der Homepage http www zend com en products studio comparison finden Sie eine Gegen berstellung von
528. rojekten ist es blich dass die Interfaces in einer fr hen Projektphase defi niert und dann vom Projektmanagement verwaltet werden Auf diese Weise kann ein Entwicklertam den Datenzugriff implementieren w hrend ein anderes Team bereits mit einer Dummy Klasse auf Basis des Interfaces arbeitet und die Fachlogik darauf auf bauen Au erdem kann die Fachlogik Referenzen auf dieses Interface besitzen und so die Implementierungen leicht auswechseln Dadurch ist die Datenbank leicht austauschbar und ein weiterer Schritt in eine komponentenbasierte Anwendung erfolgt lt lt interface gt gt lt lt uses gt gt Fachloaik Datenzugriff ee ffnen String schlie en lesen Object Object schreiben Object Object A lt lt interface gt gt DatenzugriffCrypted lesenCrypt Object Key Object schreibenCrypt Object Key Object DZ MySQL Abbildung 3 67 Klassen und Interfaces Profitipp Bei kleinen Projekten kann die Verwendung von zu vielen Interfaces zu einem Over Design f hren und den Quellcode unn tig vergr ern Bestehende bereits in Projekten verwendete Interfaces sollten nicht ver ndert werden Stattdessen besteht die M glichkeit auch Interfaces voneinander vererben zu lassen So erweitert das Interface DatenzugriffCrypted das Interface Datenzugriff um die Option zum Verschl sselten Lesen und Schreiben wobei jeweils Schl sselobjekte bergeben werden Wenn eine Klasse das neue Interface impleme
529. rrent kunden lt br gt lt body lt html gt Listing 2 21 Durchlaufen eines Datenfelds Kapitel 2 1 5 3 Kapitel 2 1 4 34 entwickler press Grundlegende Syntax Abschlie end werden weitere Funktionen zur Behandlung von Datenfeldern vorgestellt die sich im Alltag als sinnvoll erweisen Diese betreffen unter anderem die Verwaltung mehrerer Felder Ebenso ist die Funktion in_array hervorzuheben die eine automatische Suche nach einem Element durchf hrt Aus eigener Erfahrung wird diese Funktion selten verwen det und stattdessen eine kompliziertere und inperformante Schleifenkonstruktion Funktion Bedeutung array_diff arrl arr2 ermittelt Unterschiede in Datenfeldern und gibt diese als neues Datenfeld zur ck array_merge arrl arr2 verbindet zwei Datenfelder zu einem neuen Feld array_pad arr len wert verk rzt bei S en O oder verl ngert ein nummerisches Feld um en Ele mente und ersetzt leere Elemente in_array wert arr gibt 7RUF zur ck wenn ein Wert in einem Datenfeld vorhanden ist array_shift arr liefert den Wert des ersten Elements eines Datenfelds und l scht das Ele ment dann im Feld array_pop arr gibt den Wert des ersten Elements eines Datenfelds und l scht das Element dann im Feld array_sum arr summiert die Werte aller Ganz und Flie kommazahlen aus einem Feld array_unique arr entfernt mehrfache Eintr ge aus einem Datenfeld Tabelle 2 11 Weitere n
530. rs konfiguriert sein Au erdem k nnen sich Backslashses vermehren wenn Daten fter zwischen Server und Client hin und her PHP Endlich objektorientiert 327 4 PHP objektorientiert versendet werden Au erdem bieten einige Datenbankfunktionen eigene Escaping Methoden was zu doppeltem Escapen und damit zu ung ltigen Anweisungen f r die Datenbank f hren kann Au erdem darf beim Schreiben in Dateien und bei Ausgaben zum Internetbrowser generell kein Escapen vorgenommen werden da auch dies zu feh lerhaften Darstellungen f hren w rde Ebenso kann die Einstellung des safe_mode in zuk nftigen PHP Versionen nicht mehr ver ndert werden wodurch der Safe Mode von PHP stets aktiviert bleibt Der Safe Mode verhindert beispielsweise dass ein Kunde eines Shared Hosters auf die Dateien eines anderen Kunden ber ein PHP Skript zugreifen kann Schlie lich soll noch eine PHP Erweiterung mit Namen mime_magic entfallen Mit den Multipurpose Internet Mail Extensions MIME wird der Aufbau von Internetnachrich ten festlegt Ferner findet MIME Anwendung bei der Deklaration von Inhalten in ver schiedenen Internetprotokollen wie HTTP und erm glicht den Austausch von Informa tionen ber den Typ der bermittelten Daten zwischen Sender und Empf nger Im Gegenzug zu mime_magic soll die bereits jetzt existierende PHP Bibliothek fileinfo mit MIME Support ausgebaut werden Zusammenfassend ist zu sagen dass die Neuerungen in PHP 6 im Verg
531. rst tzt wurde kann man mit PHP5 die Konzepte der Objektorientierung vollst ndig umsetzen In diesem Kapitel wird nun die objektorientierte Denkweise mit ihren Ideen und Techni ken zun chst unabh ngig von der Sprache PHP vorgestellt Die Umsetzung in PHP wird im vierten Kapitel dieses Buches pr sentiert 3 2 1 Typische Projektgr e und Projektdefinition Zun chst einmal ist die Frage zu stellen warum es sich bei der Objektorientierung um ein neues Paradigma also um ein grundlegend neues Prinzip der Anwendungsent wicklung handelt Die Objektorientierung erhebt den Anspruch menschliche Organisa tionsmethoden aus der realen Welt besser nachzubilden als die bislang vorgestellten Konzepte der prozeduralen und modularen Programmierung W hrend diese Konzepte die Denkweise der Maschinen mit sequenziellen Anweisungen Unterprogrammaufru fen R ckspr ngen zu aufrufenden Methoden einer Teilung von GUI Fachlogik und PHP Endlich objektorientiert 121 3 Vorgehensweise bei der Softwareentwicklung Datenzugriff mit unterliegender zumeist relationaler Datenbankstruktur in den Vorder grund stellten liegt der Fokus der Objektorientierung zun chst auf den Fragestellungen 1 Was soll die Anwendung leisten welche Funktionalit t soll sie besitzen 2 Wie ist der Ablauf der Gesch ftsprozesse die abgebildet werden sollen 3 Was soll berhaupt modelliert werden Die objektorientierte Denkweise richtet sich also st rker an de
532. rstanden als ltere Modelle der Softwareentwicklung und versuchen die Realit t genauer abzubilden Sie k nnen also davon ausgehen dass die in diesem Kapitel vorgestellten Modelle in Bezug zur Realit t vereinfacht und auch ideali siert sind Sie eignen sich jedoch hervorragend als Einstieg in das Projektmanagement der Anwendungsentwicklung mit PHP Das Wasserfallmodell Das Wasserfallmodell ist das erste bekannte lineare Modell das Ihnen eine Anleitung f r die Realisierung eines PHP Projekts liefert Es beschreibt eine Vorgehensweise wie Sie von der Idee einer Anwendung bis hin zur Abgabe und der Betreuung des fertigen Pro dukts gelangen Anforderungs Erhebung BR Zn Implementierung t Betrieb Abbildung 3 1 Das Wasserfallmodell aus dem Jahre 1970 Prozedurale und modulare Programmierung Der erste Schritt besteht in der Anforderungserhebung also dem Wunsch nach einer neuen Software Diese Idee kommt in der Regel vom Kunden oder wird von Ihnen durch geschicktes Marketing erzeugt indem Sie den Bedarf beim Kunden wecken Wenn Sie m glichst fr h an der Anforderungserhebung teilhaben k nnen Sie den Verlauf des Pro jektes aus Sicht des Entwicklers bereits in die von Ihnen gew nschte Richtung lenken Ziel der Anforderungserhebung ist es die Anforderungen des Auftraggebers an das zu entwickelnde System zu ermitteln In der Analyse der Anforderungen formalisieren Sie die W nsche Ihres Kunden Sie hal
533. rstellung von Aufgaben und erzielten Ergebnissen von Zeit Kosten und Personal aufwand sowie gegebenenfalls von Hinweisen auf m gliche Anschlussprojekte enth lt Ab und zu kommt es vor dass einige kleine Fehler erst sp ter gesehen werden Diese beheben Sie dann Oder der Kunde m chte einige Erweiterungen an Ihrem PHP Shop wie eine zus tzliche Artikelansicht oder ein neues Design nach zwei Jahren Solche nderungsanforderungen Change Requests rechnen Sie separat ab Wenn Sie bereits etwas Erfahrung mit Auftr gen in der freien Wirtschaft haben werden Sie jetzt vielleicht denken Sch n wenn es immer so w re Oft stellt man erst sp ter fest dass die Annahmen in der vorherigen Phase die ggf ja sogar unterschrieben wurde so nicht oder nicht ganz zutreffen Das Wasserfallmodell l sst es zu dass man jeweils eine Phase also einen Schritt zur ckgehen die nderungen einpflegen und neu kalku lieren kann Bei schwierigen Kunden kann nat rlich die Aussage kommen Wie mehr Geld Nein das haben Sie so unterschrieben Unsere Anforderungen waren von Anfang an klar Sie haben es falsch verstanden oder nicht gefragt Sie sind doch der Experte Dies endet oft mit einem unzufriedenen Kunden und einem Rechtsstreit Das Wasserfallmodell wird in der Softwaretechnik oft kritisiert da der Kunde erst sehr sp t eine Anwendung sieht und seine W nsche nur zu Beginn des Projekts einflie en las sen kann Es hat sich seit seiner Ver
534. rt Bekannter gt Hans echo personen ich lt br gt personen Vater lt br gt echo personen Bekannter lt br gt gt lt body gt lt htm1 gt Listing 2 14 Ein Index aus Zeichenketten Bei ihrer Verwendung m ssen die Indizes nicht in einzelnen oder doppelten Anf h rungszeichen gesetzt werden Das erh ht die Lesbarkeit des Quellcodes Dynamische Inhalte Wie bereits erw hnt m ssen auch die Datentypen in einem Array nicht einheitlich sein Das wird in Listing 2 15 verdeutlicht Somit sind Arrays in PHP sehr dynamische Daten felder die mit Collections in Java vergleichbar sind lt html gt lt body gt lt php data Array datal2 0 datal 5 0 0 datal8 Hallo echo var_dump data lt body gt lt html gt Listing 2 15 Ein Array mit dynamischen Datentypen und Indizes Die Ausgabe dieses Arrays lautet array 3 2 gt int 0 5 gt float 0 8 gt string 5 Hallo L schen von Feldern PHP bietet Ihnen die M glichkeit ganze Arrays zu l schen oder zu leeren Zus tzlich k nnen Sie einzelne Elemente aus einem Array entfernen Listing 2 16 zeigt wie Sie zun chst das Element mit dem Index 8 aus Listing 2 15 l schen dann das Datenfeld data leeren und abschlie end die Referenz data selbst entfernen Wenn Sie ein ganzes Array nicht mehr ben tigen so k nnen Sie direkt die Referenz entfernen PHP organisiert dabei das gesamte Speichermanagement lt html gt
535. ruf von miauen bzw bellen So kann ein Datenfeld von Tieren erstellt werden in das man sowohl Katzen als auch Hunde ablegen kann Auf jedem Tier in dem Feld kann man dann gibLaut aufru fen und man h rt entweder ein Miauen oder ein Bellen Abb 3 18 Dies entspricht der Anwendung der Polymorphie Jedem Hund kann man zus tzlich einen Stock geben Der Hund kennt dann seinen Stock Der Stock selbst ist dumm und hat weder eigene Eigenschaften noch Methoden Ein Stock kann auch ohne Hund existieren wenn er im Wald herumliegt Au erdem existiert auch ein Hund ohne einen Stock zu besitzen Wie Sie sehen l sst sich mit der UML die gesamte reale Welt abbilden PHP Endlich objektorientiert 193 3 Vorgehensweise bei der Softwareentwicklung Tier name String Tier String getName String gibLaut String Katze String gibLaut String miauen String Hund String gibLaut String bellen String nimmStock Stock gibStock Stock Dogge String beissen Abbildung 3 66 Klassengeflecht in Designform mit Vererbungshierarchie Da ein Hund auch ein Tier ist kann er folgende Methoden ausf hren m Hund String als Default Konstruktor der wiederum Tier String aufruft um den Namen des Tieres zu speichern m getName aus der Klasse Tier gibLaut aus der Klasse Hund bellen aus der Klasse Hund m nimmStock Stock aus der Klasse Hund wob
536. rufen Objektorientierte Fehlerbehandlung lt php require_once classloader inc php gt lt html lt body gt lt php tryt FDairline new AirlineReservierung echo FDairline gt getZustand lt br gt 2 FDairline gt reservieren echo FDairline gt getZustand lt br gt 2 FDairline gt reservieren echo FDairline gt getZustand lt br gt 2 catch Fehler f echo f lt body lt html gt Listing 4 58 Test der Flugreservierung mit irregul ren Methodenaufrufen Beim Erzeugen des Reservierungsobjekts wechselt dies in den Zustand initialisiert Nach dem ersten regul ren Aufruf der Methode reservieren wechselt das Objekt in den Zustand reserviert Wird das Reservieren dann nochmals aufgerufen ist dies kein g lti ger Pfad im Zustandsautomaten nach Abbildung 4 13 Daher wird der Aufruf mit einer Fehlermeldung quittiert initialisiert reserviert Fehler Nr 20 in Methode Reservierung Reservieren im Zustand reserviert nicht erlaubt Andere Fehler php ini und eigene Error Handler Im Gegensatz zu anderen objektorientierten Programmiersprachen wie Java oder NET ist das try catch Konzept von PHP 5 noch nicht vollst ndig implementiert So bieten andere Sprachen zus tzlich einen finally Block an f r Befehle die auf jeden Fall auszu f hren sind und zwar unabh ngig davon ob ein Fehler aufgetreten ist oder nicht Fehlt dieses Konzept in einer Sprache so werden in einem F
537. s m der Gesamtpreis dieser Position m der Mehrwertsteuersatz Der Name des Artikels wird ber die Artikelreferenz ausgelesen die jede Rechnungspo sition besitzt Im Sequenzdiagramm der Abbildung 4 12 werden nur die ersten beiden Lesevorg nge aus jeder Rechnungsposition also Artikelname und Menge dargestellt Frontend Dopatka Kunde rechnungen 0 Rechnungsposition Artikel F F Rechnung F position getName Abbildung 4 12 Sequenzdiagramm des PHP Codes aus Listing 4 49 4 2 7 Umsetzung von Zustandsautomaten Auch die Implementierung eines in UML definierten Zustandsdiagramms ist in PHP 5 m glich Die folgende Abbildung 4 13 wurde bereits im dritten Kapitel zur Beschreibung des Zustandsdiagramms der UML verwendet Es beschreibt das Interface einer Flugre servierung mit den Methoden Realisierung von Klassengeflechten reservieren stornieren m buchen Dies ist zun chst Bestandteil eines Klassendiagramms Zus tzlich wird jedoch ein Proto koll in Form eines Zustandsdiagramms dargestellt Dieses Protokoll zeigt in welcher Reihenfolge die Methoden einer Klasse abgearbeitet werden m ssen die das Interface und das Protokoll implementieren soll Hinweis Sie erkennen daran dass jedes UML Diagramm der Designphase direkten Einfluss auf den entstehenden Quellcode haben kann Dies gilt insbesondere f r die Fisch und Muschelebene
538. s die Reihenfolge der Definitionen beliebig ist Sie k nnen beispielsweise die Teilneh merliste einsetzen bevor das Element der Teilnehmerliste definiert wurde lt xml version 1 0 encoding UTF 8 gt lt xs schema xmIns xs http www w3 org 2001 XMLSchema gt lt xs element name dozent gt lt xs element name name gt lt xs element name vorkenntnis gt Listing 4 73 Schemadatei zur Pr fung des XML Dokuments PHP und XML lt xs element name seminar gt lt xs complexType mixed true gt lt xs sequence gt lt xs element ref name gt lt xs element ref dozent gt lt xs element ref teilnehmerliste gt lt xs sequence gt lt xs attribute name id type xs string use required gt lt xs complexType gt lt xs element gt lt xs element name seminare gt lt xs complexType gt lt xs sequence gt lt xs element ref seminar gt lt xs sequence gt lt xs complexType gt lt xs element gt lt xs element name teilnehmer gt lt xs complexType gt lt xs sequence lt xs element ref name gt lt xs element ref vorkenntnisse minOccurs 0 gt lt xs sequence gt lt xs attribute name geschlecht type gesch use required gt lt xs attribute name id type xs integer use required gt lt xs complexType gt lt xs element gt lt xs simpleType name gesch gt lt xs restriction base xs string gt xs pattern value m w gt lt xs restriction lt
539. schlagen lt p lt php else gt lt p Datei lt php echo quelle gt erfolgreich geschrieben lt p gt lt php ftp_quit fh gt Verbindung wurde wieder getrennt lt p gt lt php lt body gt lt html gt Listing 2 66 Ein FTP Upload ber PHP Mit dem Befehl ftp_connect verbinden Sie sich unter Angabe der IP Adresse auf TCP IP Ebene mit dem Server Auf diese Verbindung k nnen Sie wie auf eine ge ffnete Datei mit einem Handler fh zugreifen Um die Zugriffsrechte zu ermitteln m ssen Sie sich nun mit ftp_login unter Angabe des Benutzernamens und des Kennworts authentifizieren PHP Endlich objektorientiert 81 2 Die Sprache PHP Prozedural Wenn die Verbindung und oder der Login nicht erfolgreich waren k nnen Sie nichts hochladen und das Skript bricht ab Mit ftp_put wird nun versucht die Datei von der Festplatte des Clients in das Dateisystem des Servers hochzuladen Dabei m ssen Sie in der folgenden Konstante angeben ob Sie diese Datei als Text FTP_ASCI oder bin r FTP_ BINARY hochladen wollen Anhand der R ckgabe der PUT Funktion k nnen Sie ermit teln ob das Hochladen erfolgreich war In allen F llen wird die Verbindung zum Server nach dem Hochladeversuch wieder geschlossen Wenn alle Parameter korrekt angegeben wurden erhalten Sie folgende Ausgabe Sie sind verbunden mit dem Server als Benutzer benutzername Datei C test txt erfolgreich geschrieben Verbindung wurde wieder getrennt
540. se Methoden ben tigen kein angelegtes Objekt Diese Informati onen k nnen vor allem zur Fehlersuche hilfreich sein Funktion Bedeutung erg class_exists klasse pr ft ob eine Klasse momentan geladen ist oder nicht erg get_class_methods klasse gibt die Namen der ffentlich zug nglichen Klassenmethoden in einem Datenfeld zur ck erg get_declared_classes gibt die Namen aller Klassen in einem Datenfeld zur ck die der PHP Interpreter geladen hat erg get_class_vars klasse gibt die Namen der ffentlich zug nglichen Klassenattribute in einem Datenfeld zur ck Tabelle 4 2 Informationen ber Klassen zur Laufzeit Umsetzung objektorientierter Grundlagen Auch in diesem Fall werden die Methoden anhand der Rechnungsklasse getestet Auf den dynamischen Klassenlader wird hier verzichtet da kein Objekt angelegt wird Die Klasse wird stattdessen manuell in der ersten Zeile des PHP Skripts geladen lt php require_once rechnung inc php gt lt html gt lt body gt lt php klasse Rechnung echo lt br gt class_exists lt br gt echo var_dump class_exists klasse echo lt br gt get_class_methods lt br gt 2 echo var_dump get_class_methods klasse echo lt br get_declared_classes lt br gt 2 echo var_dump get_declared_classes echo lt br gt get_class_vars lt br gt echo var_dump get_class_vars klasse gt lt body gt lt html gt Listing 4 23 Testen der Metainformat
541. seiner W nsche ist Sie als freibe ruflicher Entwickler k nnen also im Vergleich zum Wasserfallmodell nicht zu einem fr hen Zeitpunkt ein verbindliches Angebot abgeben Dies ist aber auch andererseits fast nie m glich L sst sich der Kunde auf dieses Vorgehen ein so wird er das Projekt dann been den wenn ihm die Ressourcen Zeit und Budget ausgehen Im Idealfall geben Sie dem Kun den eine Planung f r den n chsten Zyklus an und lassen ihn selbst entscheiden Das V Modell Nahezu zeitgleich mit dem Spiralmodell wurde 1986 in Deutschland das V Modell zun chst insbesondere im milit rischen Umfeld entwickelt Neben der Kostenoptimie rung steht beim V Modell die Softwarequalit t im Vordergrund mit der Forderung eine Software vor ihrer Inbetriebnahme ordentlich zu testen Das V Modell hat noch heutzu tage eine besondere Bedeutung da viele ffentliche Ausschreibungen ein Vorgehen nach diesem Modell verlangen In einem solchen Fall sollten Sie beispielsweise bei der Bewer bung auf ein PHP Portal f r eine staatliche Institution Ihre Vorgehensweise entspre chend beschreiben Im Gegensatz zum Wasserfallmodell werden im V Modell nur Aktivit ten und Ergeb nisse definiert und keine strikte zeitliche Abfolge gefordert Insbesondere fehlen die Abnahmen die ein Phasenende definieren Die linke H lfte der V Darstellung erinnert an das Wasserfallmodell wobei eine Kleinig keit leicht bersehen wird Die X Achse des V Modells stellt den
542. set var l schen Sie erh lt dann den Datentyp bzw den Wert NULL Das Beispiel in Listing 2 8 erzeugt als Ausgabe in der ersten Zeile float 4 8 gefolgt von NULL 22 entwickler press Grundlegende Syntax lt html gt lt body gt lt php a 4 8 echo var_dump a echo lt br gt 2 unset a echo var_dump a lt body gt lt html gt Listing 2 8 L schen einer Variablen mit unset Umwandlung von Datentypen Oft kommt es vor dass ein Anwender ber ein Textfeld in einem HTML Formular Zah len eingeben muss Da ein Textfeld jedoch beliebige Eingaben zul sst werden die Einga ben zun chst als Zeichenkette gespeichert Mit den Funktionen aus Tabelle 2 1 kann man nun mit einer zus tzlichen Verzweigung pr fen ob eine Variable in eine Zahl umgewan delt werden kann Wenn das machbar ist fehlt noch eine PHP Funktion die die Umwandlung wirklich vornimmt Man spricht hier von einem Casting in einen ande ren Datentyp Der Quellcode in Listing 2 9 testet das Casting lt html gt lt body gt lt php x 3 8 a int x b double x c string b d bool b echo var_dump a echo lt br gt echo var_dump b echo lt br gt echo var_dump c echo lt br gt echo var_dump d echo lt br gt D lt body gt lt html gt Listing 2 9 Umwandeln von Datentypen Die Eingabe x ist eine Zeichenkette die weiterverarbeitet werden soll Zun chst erfolgt ein Cast in eine Ganzzahl in
543. sind seit der Idee der prozeduralen und modularen Programmie rung viele neue Erkenntnisse und Methoden entstanden Dazu z hlen insbesondere agile Techniken die gerade im Umfeld der Medien und Internetplattformen eine starke Verbreitung finden Auf dieser Basis ist das Konzept der objektorientierten Softwareentwicklung entstanden das sich von der Analyse eines Gesch ftsprozesses der objektorientierten Modellierung der gesch ftlichen Abl ufe ber den Entwurf eines technischen Modells bis hin zur objektorientierten Implementierung und Wartung der Anwendung erstreckt Die dazu geh renden Begrifflichkeiten und die Vorgehensweise werden in Kapitel 3 2 erl utert PHP Endlich objektorientiert 101 3 Vorgehensweise bei der Softwareentwicklung Besonders wichtig f r einen Softwareentwickler sind die in Kapitel 3 2 2 eingef hrten Definitionen Denn zus tzlich zu den in Kapitel 2 dargestellten Funktionen von PHP muss die Sprache auch die Definitionen der Objektorientierung erf llen Wie PHP die in Kapitel 3 2 2 vorgestellten Konzepte umsetzt wird dann im vierten Kapitel dieses Buches erl utert 31 Prozedurale und modulare Programmierung Im ersten Schritt wird auf die Vorgehensweise bei der Programmierung im Kleinen eingegangen wie sie bis PHP4 blich und auch erfolgreich war Der Kern der prozeduralen Programmierung besteht darin eine Aufgabe in kleinere Teilprobleme aufzuteilen Jeder Teil bildet eine Prozedur die man m
544. sind viele Anforderungen selbst dem Kunden noch nicht genau klar Es kann daher nicht sofort eine fertige Spezifikation ausgearbeitet werden Auch muss man bedenken dass das Management des Kunden das sich zu dem Projekt ent schlie t aufgrund seiner Position im Unternehmen aber auch aufgrund seiner Ausbil dung ein v llig anderes Bild von der zuk nftigen Anwendung hat als der zuk nftiger Anwender der ja ebenso bei Ihrem Kunden angestellt ist Diese Sichtweise auf die Anwendung ist wiederum eine andere als die Sicht eines Entwicklers der den Quellcode programmiert und eine pr zise Beschreibung der Klassen Methoden und Datentypen verlangt Das Besondere an der UML liegt darin dass sie dieses weite Spektrum abdecken kann Jedes einzelne Diagramm kann in einem festgelegten Detailgrad erstellt werden f r das Management den Anwender oder f r den Entwickler Nicht jeder Beteiligte muss auch jedes Diagramm kennen Es geht vielmehr darum das komplexe Problem der Soft wareentwicklung in seiner Gesamtheit nach und nach zu erfassen Dies ist auch nur in einem iterativ inkrementellen Prozess m glich Gerade bei dem Feststellen der Anforderungen an eine Anwendung gehen Sie zun chst von der Wolken und oder von der Meeresspiegel Perspektive aus je nachdem mit wel cher Personengruppe Sie kommunizieren Um die Funktionen der zuk nftigen Anwen dung zu ermitteln eignen sich Anwendungsfalldiagramme besonders gut die im Sprachgebrauch auch meist
545. smodellierung Anforderungsanalyse der objektorientierten Ana lyse und dem Design der Implementierung der Anwendung mit darauf folgenden Test sowie der letztlichen Auslieferung bestehen Die dargestellten Fl chen zeigen den Auf wand der in der jeweiligen Phase in die Kernarbeitsschritte gesteckt werden muss So erfolgt ein Gro teil der Gesch ftsprozessmodellierung beim Projektstart und in der Ent wurfsphase die Implementierung findet haupts chlich beim Entwurf und bei der Kons truktion statt Neben der Tatsache dass ein Kernarbeitsschritt im RUP nie abrupt endet beispielsweise durch eine Abnahme l sst sich noch eine zweite Aussage treffen Vergleichen Sie bitte den Aufwand der Implementierung mit der Summe der restlichen Fl chen Hier ist fest zustellen dass die Implementierung nicht mehr als 20 des Gesamtaufwands aus macht w hrend das Coding beim Wasserfallmodell noch 80 der Ressourcen in Anspruch genommen hat Der Aufwand hat sich also von der objektorientierten Pro grammierung OOP hin zu der Gesch ftsprozessmodellierung der Anforderungsana lyse der fachlichen objektorientierten Analyse OOA sowie hin zu dem formalen tech nischen Design der Anwendung OOD verlagert Von Bedeutung ist weiterhin dass die Phase des Testens nicht hinter die Implementie rung f llt sondern zum Gro teil bereits w hrend der Startphase angesiedelt ist Wie PHP Endlich objektorientiert 127 3 Vorgehensweise bei der Softwareentw
546. sse Forts Die __call Funktion besitzt zwei Eingabeparameter Im ersten Parameter wird der Name der aufgerufenen Methode bergeben Der zweite Parameter enth lt eine Liste der ber gebenen Parameter an diese aufgerufene Funktion Die Abfrage in der Klasse pr ft zuerst ob der Name der Methode add lautet In diesem Fall wird der erste Parameter der in data 0 enthalten ist auf seinen Datentyp gepr ft Ist es eine Ganzzahl so wird die private Hilfsmethode add_int aufgerufen und der bergebene Parameter an diese Methode weitergereicht Die Klassenzugeh rigkeit eines Objekts k nnen Sie mit dem Befehl instanceof pr fen Achten Sie hier auf die Syntax Der Name der abgefragten Klasse wird nicht in Klam mern gesetzt Wenn der bergebene Parameter ein Objekt der Klasse Bruch ist so ist die Bedingung der zweiten if Verzweigung wahr In diesem Fall wird die privat deklarierte Hilfsmethode add_bruch aufgerufen und die Objektreferenz weitergegeben Die Hilfsmethoden addieren nun gem den Regeln der Bruchrechnung die ganze Zahl bzw den anderen Bruch zum eigenen Bruchobjekt Um den aktuellen Wert des Bruchs auszugeben wurde zus tzlich die Methode ausgeben definiert die den Z hler und Nenner durch einen Schr gstrich getrennt als Zeichenkette zur ckgibt Eine elegantere Methode dazu finden Sie im n chsten Unterkapitel Interessant ist die Frage wie der Aufruf einer solchen add Methode ber die __call Kons truktion funktioniert
547. sse Forts Im Fehlerfall findet in der ausliefern Methode des Lagers noch keine Reaktion statt Wie Sie in einer objektorientierten Sprache sinnvoll auf fehlerhafte Eingaben reagieren k n nen wird in Kapitel 4 3 beschrieben Listing 4 21 zeigt den Test der Rechnung und des Lagers wobei die Referenz bergabe und das Klonen von Objekten am Beispiel der Rechnung durchgef hrt werden lt php require_once classloader inc php gt lt html gt lt body gt lt php lager new Lager r1 new Rechnung 100 0 r2 r1 r3 clone rl lager gt ausliefern r2 echo r1 lt br gt echo r2 lt br gt echo r3 lt br gt gt lt body gt lt htm1 gt Listing 4 21 Testen der Referenz und der Kopie Zun chst wird eine Rechnung r1 angelegt Die Variable r2 zeigt auf dieselbe Rechnung wie r1 die beiden Referenzen Zeiger haben also dasselbe Ziel Nun wird eine weitere Referenz r3 angelegt Deren Ziel ist ein Klon der Rechnung auf die r1 und auch r2 zeigt Der Klon ist jedoch ein eigenes neues Objekt Bei der Verwendung des Befehls clone wird dabei die Methode __clone in r2 ausgef hrt die die Eigenschaft istKopie im Klon auf TRUE setzt Abbildung 4 3 verdeutlicht den Sachverhalt zum Ende des PHP Skripts nochmals eineRechnung Summe 100 ausgeliefert nein istKopie ja r3 r1 eineRechnung Summe 100 ausgeliefert ja istKopie nein Abbildung 4 3 Objektreferenzen auf dass
548. sselwort static Eine Klassenmethode kann auch dann aufgerufen werden wenn noch gar kein Objekt der Klasse existiert die Methode geh rt schlie lich zur Klasse selbst Dies ist gerade bei der Anfrage nach der Anzahl der erstellten Objekte sinnvoll Immer wenn ein neues Objekt angelegt wird wird der Z hler inkrementiert Wird ein Destruktor aufgerufen wird die Anzahl der existierenden Objekte heruntergesetzt lt php class Bruch private z 0 private n 1 private static anzahl 0 Listing 4 15 Erweiterung um ein Klassenattribut und um eine Klassenmethode Umsetzung objektorientierter Grundlagen public function __construct z n this gt setZ hler z this gt setNenner n Bruch anzahl public function __destruct Bruch anzahl public static function getAnzahl return Bruch anzahl Listing 4 15 Erweiterung um ein Klassenattribut und um eine Klassenmethode Forts Ihnen f llt sicherlich der au ergew hnliche Zugriff auf das Klassenattribut ber den Operator auf Diesen Operator verwenden Sie immer dann wenn Sie auf ein Klassen attribut oder auf eine Klassenmethode zugreifen Der Zugriff erfolgt indem Sie den Namen der Klasse selbst dem Operator voranstellen Die this Variable steht Ihnen in diesen F llen nicht zur Verf gung da sie ja eine Refe renz auf ein existierendes Objekt darstellt Die Anzahl kann jedoch auch ohne die Exis tenz eines Objekts zur ckgegeben werden I
549. stand gt getAktie gt getURL if url ret Kurs FALSE ret Datum FALSE ret Zeit FALSE return ret Listing 5 11 Die neue Klasse Bilanz PHP Endlich objektorientiert 359 5 Projektpraxis handle fopen url r data while feof handle data fgets handle 4096 fclose handle Kurs auslesen search lt td class column datavalue2 last strong gt searchE lt td2 pos1 strpos data search 1 if pos1 gt 0 poslE strpos data searchE posl strlen search Aktkurs str_replace substr data posi strlen search pos1E pos1 strlen search else ret Kurs FALSE Datum und Zeit auslesen search lt td class column datavalue2 last gt pos2 0 pos2 strpos data search pos1 1 if pos2 gt 0 ret Datum substr data pos2 strlen search 10 ret Zeit substr data pos2 strlen search 11 5 else ret Datum FALSE ret Zeit FALSE return ret public function getDaten data array datalaktienname this gt bestand gt getAktie gt getName datalaktienISIN this gt bestand gt getAktie gt getISIN datalaktienURL this gt bestand gt getAktie gt getURL datalanzahl this gt bestand gt getAnzahl dataldividenden this gt bestand gt getDividenden datalekDatum this gt bestand gt getEkDatum Listing 5 11 Die neue Klasse Bilanz Forts 360
550. stellen Bei gr eren Projekten besteht hier jedoch die Gefahr dass man relativ fr h viele problemlose Module implementiert und im Anschluss daran wichtige Funktionen mit hohem Risiko implementieren muss W h renddessen ist eine nderung am Systemdesign wahrscheinlich sodass die bestehenden Funktionen unter Umst nden angepasst werden m ssen Man sollte also zu Projektbeginn die Funktionen implementieren die hohes Risiko und einen hohen Wert auf sich vereinigen Im Anschluss daran sie die Funktionen mit niedri gem Risiko leicht realisierbar und zwar so weit wie Zeit und Budget f r das Projekt vor PHP Endlich objektorientiert 149 3 Vorgehensweise bei der Softwareentwicklung handen ist Es macht keinen Sinn Funktionen mit hohem Risiko und niedrigen Wert zu implementieren Die Risk Value Priorisierung wird nicht einmalig sondern nach jeder Projektiteration durchgef hrt Die Priorit ten k nnen sich dabei mit der Zeit verlagern und es k nnen neue Funktionen hinzukommen Die Absch tzung und die Entscheidung welche Funktionen in der n chsten Iteration realisiert werden werden zusammen mit den Stakeholdern getroffen Dieses Meeting wird als Planning Game oder Planning Poker bezeichnet Scrum Bei Scrum engl das Gedr nge handelt es sich um ein agiles Vorgehensmodell das dem Prinzip der schlanken Produktion Lean Production folgt Die Begr ndung f r Scrum liegt darin dass die Softwareentwicklung sehr komp
551. stellt Die m glichen Zustands berg nge werden durch Pfeile zwischen den Zust nden symbolisiert Die Pfeile sind mit den Ereignissen beschriftet die zu dem jeweiligen Zustands bergang f hren k nnen Objektorientierte Programmierung In der zweiten Version der UML wurden die Zustandsdiagramme in ihrer Notation erweitert So kann bei jedem Zustandswechsel durch einen Methodenaufruf eine Bedin gung angegeben werden die f r diesen Aufruf erf llt sein muss So kann man die Bedin gung sp ter im Quellcode der Methode direkt pr fen bevor mit dem Zustandswechsel fortgefahren wird Hier erkennen Sie bereits dass sich detaillierte Zustandsdiagramme bereits dem zu erstellenden Quellcode n hern Zus tzlich kann bei Bedarf eine Aktion definiert werden die w hrend des Zustandswechsels ausgef hrt werden soll ereignis bedingung aktion Zustand entry aktion do aktion exit aktion ereignis aktion Abbildung 3 68 Zust nde und Zustandswechsel Au erdem k nnen Sie innerhalb eines Zustands definieren welche Aktion beim Eintritt on entry und beim Verlassen on exit dieses Zustands ausgef hrt werden soll Des Wei teren k nnen Sie eine oder mehrere Aktionen definieren die ausgef hrt werden w h rend Sie sich in diesem Zustand befinden do Um Schlingen im Zustandsdiagramm zu vermeiden k nnen Sie innerhalb des Zustands auch eine Liste von Ereignissen definieren die Aktionen ausl sen w hrend man sich i
552. stellverwaltung stellen somit drei Module der neuen Anwendung dar Wie diese Module funktionieren sollen muss noch weiter hinterfragt werden Als Programmierer einer PHP4 Anwendung w rden Sie f r jedes Modul ein Verzeichnis mit einer Sammlung von PHP Dateien anlegen Die Artikelverwaltung w rde unter anderem ber Dienste verf gen wie Prozedurale und modulare Programmierung m einen neuen Artikel anlegen m nach Artikel suchen m einen Artikel anzeigen m einen vorhandenen Artikel ndern m einen Artikel aus dem Angebot entfernen F r jedes dieser Teilmodule k nnen Sie Funktionen verwenden die Sie auf prozeduraler Ebene entwickelt haben So erfordert das Anlegen eines neuen Artikels die Darstellung einer Eingabemaske f r einen neuen Artikel die anschlie ende Pr fung der Eingaben des Benutzers das ffnen einer Verbindung zur Datenbank das bertragen der einge gebenen Daten zur Datenbank und abschlie end die Darstellung einer HTML Seite f r den Benutzer ob das Anlegen nun erfolgreich war oder nicht Damit haben Sie eine Funktionalit t der Artikelverwaltung realisiert Das Herunterbrechen von Anforderungen an eine Software auf Quellcodeebene wird als Top Down Vorgehensweise bezeichnet die heutzutage am weitesten verbreitet ist Eine andere Bezeichnung daf r ist das Grundprinzip des Divide And Conquer teile und herr sche als Methode der Algorithmik in der Informatik Es beschreibt das Prinzip eine Aufgabe bzw eine geford
553. sten Order auf diesem Depot ber ein Web Frontend beschrieben Die Aktionen gehen von einem Benutzer aus den in diesem Fall ein Mensch darstellt Der Akteur kann stets aktiv wer den und ist nie blockiert Hinweis Bitte lassen Sie einen menschlichen Akteur nicht durch ein abschlie endes Kreuz an der Lebenslinie sterben Viele Analytiker und Entwickler w rden sich ber Ihr UML Diagramm lustig machen Im ersten Schritt klickt der angemeldete Benutzer des Bankportals auf die Schaltfl che anlegen und l st so einen Methodenaufruf im Web Frontends aus Diese Aktion legt im Backend des Portals ein neues Depot an Es stellt sich die Frage wo die Berechtigung des Benutzers zum Anlegen eines neuen Depots abgeleitet werden kann Dies kann in der Vorbedingung des zuvor entsprechend formulierten textuellen Anwendungsfalldiagramms Depot anlegen oder auch im entspre chenden Sequenzdiagramm eingesehen werden Hinweis Auch hier erkennen Sie nochmals die Verzahnung der einzelnen Diagramme In der Praxis ergibt sich jedoch h ufig die Schwierigkeit bei gr eren Projekten diese Viel zahl von Beschreibungen konsistent zu halten Daf r sind oft separate Mitarbeiter erforderlich Objektorientierte Programmierung Das Ordern ist ein zweiter gesch ftlicher Anwendungsfall dessen Abbildung im tech nischen System durch das Sequenzdiagramm dargestellt wird Dabei wird der entspre chende Betrag der f r den Aktienkauf verwendet werden soll
554. stieren Elemente ohne Inhalt k nnen auch in sich geschlossen werden indem die Endkennung vor der schlie enden spitzen Klam mer eingef gt wird So ist der HTML Zeilenumbruch lt br gt in XML nur dann g ltig wenn er lt br gt geschrieben wird m ein Tag nicht mehrere Attribute mit demselben Namen besitzen darf Wenn eine bestehende XML Datei eingelesen wird und deren Daten interpretiert wer den bezeichnet man dies als Parsen Ist eine XML Datei nicht wohlgeformt so bricht das einlesende Programm der Parser zumeist mit einer Fehlermeldung ab Es wurde bereits erw hnt dass die Namen und Attribute der Elemente einer XML Datei frei gew hlt werden k nnen In der Realit t schreibt eine Anwendung die eine XML Datei importiert jedoch Regeln vor die von der Datei eingehalten m ssen F r diese Regeln existieren zwei verschiedene Sprachen die beide weit verbreitet sind Die DTD Dokumenttypdefinition soll langfristig von den XML Schemata abgel st wer den die eine wesentlich genauere Definition der Inhalte einer XML Datei zulassen Ein weiterer Vorteil eines XML Schemas besteht darin dass es selbst im XML Format ver fasst ist Die entsprechenden Elemente sind jedoch vordefiniert Sie k nnen nun eine XML Datei gegen solch ein Regelwerk automatisch pr fen lassen Entweder entspricht diese Datei den Regeln so ist diese XML Datei gem dem entspre chenden Regelwerk g ltig ansonsten nicht Die Regelwerke werden meist als
555. sting 4 17 Eine Kreisklasse mit der Konstanten WertPI Umsetzung objektorientierter Grundlagen private x private y private r const wertPI 3 141592654 public function __construct x y r this gt x x this gt y y this gt r r public function getInhalt return Kreis wertPI this gt r this gt r gt Listing 4 17 Eine Kreisklasse mit der Konstanten WertPI Forts Listing 4 17 skizziert eine Klasse Kreis Jeder Kreis besteht aus einem Mittelpunkt der mit einer X Y Koordinate als Eigenschaft jedes Objekts beschrieben wird Zus tzlich ist zur Beschreibung des Kreises die Angabe des Radius notwendig Wenn Sie Berechnungen mit Kreisen durchf hren wollen werden Sie h ufig die Zahl PI verwenden m ssen Solche Zahlen werden gew hnlich als Konstanten mit in der Klasse deklariert In diesem Fall geschieht dies ber die Anweisung const wertPI 3 141592654 Der Zugriff auf die Konstante erfolgt in der Methode getInhalt die den Fl cheninhalt des Kreises berechnet Hier sehen Sie dass die Konstante genauso angesprochen wird wie ein Klassenattribut In Listing 4 18 wird die Methode getInhalt aufgerufen die den korrekten Fl cheninhalt von etwas mehr als 78 Einheiten zur ckgibt Sie k nnen auch auf die Konstante selbst so lesend zugreifen als w re sie eine statische Eigenschaft der Klasse lt php require_once classloader inc php gt lt html gt lt body gt lt php k new Kreis 1
556. strakte Klasse von der man keine Objekte anlegen kann wird einfach durch das Schl sselwort abstract vor der Klassendefinition erzeugt Im Konstruktor werden die blichen Muss Felder f r die Erzeugung einer Person aus einer abgeleiteten Klasse defi niert Zus tzlich werden die blichen Get und Set Methoden definiert ebenso die gefor derte Methode getAnschrift Profitipp Bei einer komplexeren R ckgabe ist es sinnvoll den Wert der R ckgabe ber eine Hilfsvariable hier ret zusammenzusetzen So spart man unn tig lange Codezei len Wenn Sie versuchen in einer Iestklasse ber a new Person ein Personen Objekt anzulegen werden Sie folgende Fehlermeldung erhalten Fatal error Cannot instantiate abstract class Person in Hinweis W hrend man durch final die weitere Vererbung verbietet zwingt man durch abstract den Programmierer zu einer Vererbungshierarchie Nun sollten Sie eine Klasse ableiten von der man konkrete Objekte erzeugen kann Das Schl sselwort dazu lautet extends gefolgt von der Klasse von der man ableiten will Im Konstruktor der Unterklasse kann man den Konstruktor der Oberklasse bzw der Eltern klasse ber parent __construct hnlich wie eine Klassenmethode aufrufen Dort wer den dann erst einmal die Daten gespeichert die zu jeder Person geh ren Der neu erzeugte Kunde merkt sich im Anschluss daran noch seine Kunden ID die ber die pas sende Get Methode ausgelesen werden kann l
557. szug ber unsere Anwendung soll dieser Betrag nun zum Bestand hinzugef gt werden Die Fachlogik sieht den Betrag als zus tzlichen Gewinn Das Fallbeispiel der Depotverwaltung http localhost Aktienverwaltung 004 uebersicht php Windows Internet Explorer BAX OO gt En Neecahostiasenveman s u SIRZIESIE _ a Datei Bearbeiten Ansicht Favoriten Extras v7 Favoriten http localhost Aktienverwaltung 004 uebersicht php Depotverwaltungsprogramm Gew hlter Bestand E ON laden speichern l Ubersicht w hlen neu hinzukaufen neue Dividende l verkaufen E ON DE000QENAG999 w hlen 180 St ck am 25 05 2009 gekauft vor 151 Tagen Stand vom 23 10 2009 19 57Uhr EK akt Wert gesamt incl Kosten 5 419 80 4 852 80 EK akt Kurs pro Aktie 30 00 26 96 Differenz pro Aktie 3 04 10 13 Dividenden 0 00 Ges Diff incl Einnahmen amp Kosten 567 00 10 46 Zinsen Jahr 0 00 Copyright by Dr Frank Dopatka Fertig Lokales Intranet fa R1 v Abbildung 5 25 Neue Bilanz nach dem zweiten Kauf Listing 5 20 zeigt den HTML Quellcode f r das Formular um eine neue Dividende ein zugeben Erkennen Sie die Struktur des Quellcodes Er ist sehr hnlich dem Quellcode zum Hinzukaufen eines Bestands Listing 5 18 besteht jedoch vereinfacht nur aus einem Textfeld namens dividende bei dem der Benutzer den Betrag eingeben kann lt php require_on
558. t Ein Datenstamm wird also ber das XML Format von einem Datenmodell in ein anderes Datenmodell berf hrt Dies ist meist deshalb n tig weil die verschiedenen Applikatio nen verschiedene ER Modelle ihrer Datenbanken hinterlegt haben Um eine Konvertierung zwischen XML Formaten vorzunehmen wurde eine eigene Konvertierungssprache entworfen die XLST Extensible Stylesheet Language Transfor mation Die XSL ist eine in XML definierte Familie von Transformationssprachen zur Definition von Layouts f r XML Dokumente Man trennt also den reinen Datenstamm in der XML Datei von dessen Darstellung in einer XSL Datei XLST ist eine Transforma tionssprache wie auch XSL FO Extensible Stylesheet Language Formating Objects Mit einer XSL FO Beschreibung k nnen Sie beispielsweise eine XML Datei in eine PDF Datei zum Druck aufbereiten Wie die Daten aus der XML Datei dargestellt werden sol len bestimmen Sie in der separaten XSL FO Beschreibung hnlich wie Sie in einem separaten Schema die G ltigkeit der Daten definieren Zum Einstieg wird in diesem Kapitel eine Transformation in ein anderes XML Format vorgenommen Da der Befehlssatz der HTML Sprache als Untermenge von XML aufge fasst werden kann k nnen Sie die gegebene XML Datei aus Listing 4 63 unter Verwen dung einer XLST Transformationsdatei direkt in eine HTML Datei umwandeln Das Prinzip der Transformation wird in Abbildung 4 17 verdeutlicht Listing 4 75 zeigt eine solche Transformatio
559. t php class Kunde extends Person private id Listing 4 25 Die abgeleitete konkrete Klasse Kunde PHP Endlich objektorientiert 239 4 PHP objektorientiert public function __construct id name vorname strasse plz ort parent __construct name vorname strasse plz ort this gt id id public function getID return this gt id Listing 4 25 Die abgeleitete konkrete Klasse Kunde Forts Die zweite Klasse die von der Person abgeleitet werden soll ist die Klasse der Mitarbei ter Dabei wird in gleicher Weise wie bei der Kundenklasse vorgegangen Nur die f r einen Mitarbeiter typischen Eigenschaften werden auch in der Mitarbeiterklasse festge halten Sie erkennen auch dass alle Eigenschaften die Mitarbeiter und Kunden gemeinsam haben ausschlie lich in der Personenklasse gespeichert und verwaltet werden Auf diese Weise wird doppelter Quellcode verhindert und die Wartbarkeit der Anwendung verbessert lt php class Mitarbeiter extends Person private id private tarifGruppe private firmenEintritt public function __construct id name vorname strasse plz ort tarifGruppe firmenEintritt parent __construct name vorname strasse plz ort this gt id id this gt tarifGruppe tarifGruppe this gt firmenEintritt firmenEintritt public function getID return this gt id Listing 4 26 Die abgeleitete konkrete Klasse Mitarbeiter Sowohl
560. t TRUE zur ck wenn Svareine Zahl ist oder eine Zeichenkette die man in eine Zahl umwandeln kann Gibt 7RUF zur ck wenn Svarein Wahrheitswert ist Gibt 7RUF zur ck wenn Svareine Zeichenkette ist Gibt 7RUF zur ck wenn Svarein Datenfeld ist Gibt 7RUF zur ck wenn Svareine Referenz auf ein Objekt ist Tabelle 2 1 Befehle zur Pr fung von Datentypen Um zu pr fen ob eine Variable var berhaupt existiert bietet PHP den Befehl isset var an So liefert der Quellcode in Listing 2 7 die Ausgabe bool TRUE und in der n chsten Zeile bool FALSE lt html gt lt body gt lt php a 4 echo var_dump isset a echo lt br gt echo var_dump isset A lt body gt lt html gt Listing 2 7 Pr fung mit isset W hrend isset var pr ft ob eine Variable var existiert pr ft der Befehl empty var ob eine Variable leer ist Das ist je nach Datentyp unterschiedlich definiert Bei folgenden Gegebenheiten liefert empty var den Wert TRUE zur ck m Eine Zeichenkette a ist leer a m Eine Zeichenkette a enth lt den Wert 0 a 0 Ein Wahrheitswert ist FALSE Eine Variable ist NULL Eine Zahl ist 0 Ein Datenfeld Array enth lt keine Elemente Eine einmal definierte Variable var ist normalerweise im gesamten PHP Skript g ltig Wenn Sie jedoch eine Variable nicht mehr ben tigen und einen weiteren Zugriff auf deren Inhalt verhindern wollen so k nnen Sie die Variable mit un
561. t einen einzelnen Aktienkurs der einzugebenden Aktienge sellschaft an einem bestimmten Tag aus Alle drei Dienste verwenden den PHP Befehl mysql_query der eine Zeichenkette als Parameter erh lt Diese Zeichenkette enth lt einen SOL Abfragebefehl der mit SELECT beginnt Im Anschluss daran werden die Spalten aus der Datenbank angegeben die man in der Ausgabe verwenden m chte Das teilweise eingesetzte Schl sselwort DISTINCT sorgt daf r dass keine Datens tze im Ergebnis doppelt vorhanden sind Der FROM Teil eines SQL Befehls gibt den Namen der Datenbanktabelle an aus der man Daten auslesen will Durch Angabe eines WHERE Teils kann das Ergebnis eingeschr nkt werden So gibt der Befehl SELECT ID FROM ag WHERE name AG nur die ID einer Aktiengesell schaft zur ck deren Name gleich dem Namen des Parameters AG ist Da die Namen als Zeichenkette abgespeichert werden muss der Parameter im SQL Befehl in Hochkom mata gesetzt werden Mit dem Zusatz ORDER BY sortieren Sie das Ergebnis nach einer oder mehreren Spalten im Fall der Funktion DB_AGs nach der ID und zwar in aufstei gender Reihenfolge Die aufsteigende Reihenfolge wird mit ASC engl ascending fest gelegt Eine absteigende Reihenfolge k nnten Sie mit DESC engl descending angeben Die Funktion DB_MW AG zeigt dass Sie mehrere SQL Befehle schachteln k nnen Mit dem inneren SELECT Befehl holen Sie sich die ID zu einem gegebenen Namen einer Aktiengesellschaft Diese
562. t man drei Arten von Schleifen m Kopfgesteuerte Schleifen Dabei wird die Bedingung abgefragt bevor die Schleife das erste Mal durchlaufen wird Nach einem einmaligen Durchlauf wird die Bedingung dann nochmals gepr ft Wenn die Bedingung vor dem ersten Durchlauf nicht erf llt ist wird die Schleife nicht ausgef hrt Fu gesteuerte Schleifen Z hlschleifen Bei den Z hlschleifen handelt es sich um eine besondere Form der kopfgesteuerten Schleifen Eine Z hlschleife z hlt eine Variable von einem unteren Grenzwert bis zu einem oberen Grenzwert durch Der Z hler wird dann meist f r den Zugriff auf eine Datenstruktur beispielsweise auf ein Feld verwendet Abbildung 2 8 stellt den Ablauf einer kopf und fu gesteuerten Schleife gegen ber Nach Abarbeitung der Anweisung 1 wird die Bedingung der kopfgesteuerten Schleife gepr ft Ist sie erf llt werden Anweisung 2 und 3 aus dem Schleifenrumpf einmalig ausgef hrt Danach erfolgt die erneute Pr fung Bei der fu gesteuerten Schleife werden hingegen die Anweisungen 1 bis 3 auf jeden Fall einmalig ausgef hrt Die Pr fung erfolgt stets nach der Ausf hrung der Anweisungen im Schleifenrumpf Hinweis Pr fen Sie bei der Programmierung genau ob die Anweisungen im Schleifenrumpf tats chlich daf r sorgen dass die Bedingung irgendwann nicht mehr erf llt ist Ist das nicht der Fall so erzeugen Sie eine Endlosschleife PHP bricht bei einer Verarbei tungszeit ber 30 Sekunden standardm
563. t sich mit Multi Threading oder Multi Processing realisieren ist also technisch aufw ndig Ein Standardbeispiel f r einen asynchronen Vorgang ist die Arbeit in einem Textverar beitungsprogramm wenn Sie sich f r das Drucken Ihres gro en Dokuments entschei den Der Druckvorgang wird gestartet und gleichzeitig k nnen Sie an Ihrem Text weiter arbeiten Bei einem Dokument von beispielsweise 100 Seiten ist es heutzutage nicht akzeptabel wenn Sie Ihre Anwendung 2 Minuten lang nicht bedienen k nnen Der dritte Aufruf aus Abbildung 3 78 zeigt einen blockierenden synchronen Aufruf der auf einen R ckgabewert wartet Das Objekt einX hat zu diesem Zeitpunkt zwar den Focus of Control wartet aber auf die R ckgabe von einY Diese inaktive Wartezeit wird durch einen gestrichelten Balken dargestellt Beachten Sie auch die Darstellung des Pfeils der den R ckgabewert symbolisiert Profitipp Seien Sie pr zise und konsequent bei der Erstellung der UML Diagramme In diesem Fall k nnen Sie erkennen welche technischen Unterschiede aus einer anders gezeichneten Pfeilspitze resultieren k nnen PHP Endlich objektorientiert 205 3 Vorgehensweise bei der Softwareentwicklung X x Abbildung 3 78 Synchrone und asynchrone Kommunikation Nachdem die formale Syntax der Sequenzdiagramme nun erkl rt wurde folgen drei Bei spiele aus der Anwendung dieser Diagramme Zun chst wird das Anlegen eines Aktiendepots und das Ausf hren der er
564. t und bezahlt mit ihren Get und Set Methoden sind ebenso unkritisch wie die Referenz auf das Kundenobjekt das der Rechnung in ihrem Konstruktor bergeben und in kunde festgehalten wird Die interessante Frage ist wie die Komposition zwischen der Rechnung und ihren Positi onen realisiert wird Eine Rechnung ben tigt mindestens eine Rechnungsposition um existieren zu k nnen Die Daten f r diese erste Position wird daher im Konstruktor der Rechnung bergeben die erste Rechnungsposition im Konstruktor erzeugt in der Liste der Positionen gespeichert und der Z hler der Rechnungspositionen auf 1 gesetzt Zus tzlich existiert in der Rechnungs Klasse eine Methode addPosition die aber keine zuvor erstellte Rechnungsposition erh lt sondern alle notwendigen Daten zur Erzeu gung einer neuen Rechnungsposition Denn ansonsten m sste der Aufrufer der Methode im Vorfeld eine Rechnungsposition erzeugen die noch nicht zu einer Rech nung geh rt Dies widerspricht streng betrachtet der Komposition bei der das Teil die Position nicht ohne ihr Ganzes die Rechnung existieren kann Auch in der Methode getPositionen sollte man bei der Komposition nicht einfach ber return this gt positionen das Datenfeld mit den Referenzen auf die Positionsobjekte ber geben Denn nach einem Destruktor Aufruf der Rechnung k nnten die Positionen oder Kopien via clone Befehl weiter existieren Die Daten der Rechnungspositionen werden daher in ein Datenfe
565. t und ist im Java Umfeld sehr weit verbreitet Die Entwicklungsumgebung selbst unterst tzt jedoch nicht nur eine einzige Programmiersprache Das unter Windows Linux und Mac einsetzbare Werkzeug kann auf der Homepage http www eclipse org im Down loadbereich auch in einer C C Version und eben auch f r PHP Entwickler herunterge laden werden Die Version Eclipse for PHP Developers ist 139MB gro Die Integration der Sprache PHP ist in der Community bislang noch nicht so weit ausge pr gt wie im Java Umfeld Dennoch lassen sich die meisten Hilfsprogramme wie Unit Testing Debugging oder Versionierung als zus tzliche Plug ins in die Entwicklungsum gebung integrieren Eclipse for PHP Developers integriert die so genannten Eclipse PHP Development Tools PDT die Syntax Highlighting und weitere grafische Hilfsmittel f r den Entwickler mit PHP Endlich objektorientiert 423 5 Projektpraxis bringen So existiert beispielsweise eine grafische Symbolik f r private und ffentliche Eigenschaften bzw Methoden und ein weiteres Symbol das das berschreiben einer Methode von einer Oberklasse kennzeichnet PHP actions class ohp Ele Edit Source Refactor Navigate Search Project Run Window Help ri PHP Expl 5 Navigator 32 B E w3counter H 6 cache H settings S amp apps D 6 frontend S S config amp 8n 5 S lib 5 modules d stats 3 actions P actions c EB ws FTP amp config
566. taillierter die gew nschte Funktionalit t der Anwendung als Anwendungsfall auf der Ebene des Meeresspiegels Da die Anzahl der Funktionen noch berschaubar ist werden die Verwaltung und Archivierung in einem einzigen Dia gramm dargestellt Depotverwaltung Benutzer Dividende hinzuf gen bersicht ber den Bestand Abbildung 5 2 Grafischer Anwendungsfall auf Ebene des Meeresspiegels Benutzersicht Bei einer gr eren Anzahl von Funktionen versuchen Sie bitte diese weiter zu gruppie ren und die Gruppierung auf der Drachenebene darzustellen Die jetzige Drachenebene w rde dann als reine Managementsicht auf die Wolkenebene bef rdert Der Meeresspie Das Fallbeispiel der Depotverwaltung gel w rde dann aus einer Vielzahl von Anwendungsfalldiagrammen bestehen die jew eils eine Gruppe von Funktionen realisieren Die in Abbildung 5 2 dargestellten Funktionen werden nun weiter hinterfragt und spezi fiziert Wie stellt sich der Auftraggeber das Anlegen eines neuen Aktienbestands vor Was ist dazu alles an Daten notwendig Wie soll das Anlegen aus Sicht des Benutzers ablaufen Zu jedem Anwendungsfall sollte man als n chsten Schritt eine textuelle Anwendungsfallschablone Abb 3 33 und oder ein Aktivit tsdiagramm erstellen Die Inhalte der textuellen Anwendungsfallschablone und des Aktivit tsdiagramms berlappen sich leicht sodass Sie berlegen k nnen auf eines der beiden Verfahren zu verzichten Zur bung w
567. tand angelegt wurde Auch hier wurde aus Gr nden der Ubersicht auf eine Fehlerbehandlung verzich tet Zun chst wird wieder ein HTTP Redirekt durchgef hrt falls der Benutzer sich doch dazu entschieden hat keinen zus tzlichen Kauf einzugeben Ansonsten wird wie blich die Header Datei nachgeladen in der die Session initialisiert wird Der gew hlte Aktienbe stand wird dann aus der Session deserialisiert Das Fallbeispiel der Depotverwaltung Aus der Aktie im gew hlten Bestand sowie aus den im HTML Formular eingegebenen Parametern die sich nun im PHP Datenfeld _POST befinden wird ein neues Kauforde robjekt angelegt und dem Aktienbestand ber die Methode addKauforder hinzugef gt Sowohl vor als auch nach dem Hinzuf gen wird die Anzahl der Aktien im Bestand abge fragt Ist die Differenz identisch mit der Anzahl der hinzugekauften Aktien so kann man davon ausgehen dass der Kauf erfolgreich registriert wurde Sowohl im Erfolgsfall als auch im Fehlerfall wird der Benutzer durch die HTML Ausgabe informiert Im Erfolgs fall wird zus tzlich das ge nderte Aktienbestandsobjekt wieder in der Session seriali siert und damit auf dem Server persistent gehalten lt php if _POSTLeingabe Abbrechen header Location start php require_once header inc php bestand unserialize _SESSION Bestand _SESSION BestandGew hlt aktie bestand gt getAktie gt lt center gt lt h3 gt lt php kauf new Kauforder
568. tand im objektorientierten Design empfiehlt sich der Aufbau der ersten Prototypen um selbst ein Gef hl f r die Komplexit t der Aufgabenstellung zu erhalten Ein weiterer Grund besteht darin dass unser Auftraggeber m glichst schnell einen L sungsansatz sehen soll der als weitere Diskussionsgrundlage f r die n chsten Schritte dient Das Fallbeispiel der Depotverwaltung Hinweis In vielen Projekten wird die OOA und OOD vollst ndig in einem langwierigen b ro kratischen Prozess ausgearbeitet bevor die erste Zeile Quellcode erstellt wird Dies entspricht der Wasserfalldenkweise bei der Fehler in der Analyse und im Design erst zu sp t erkannt werden was zu hohen Zusatzkosten f hrt Eine agile iterativ inkrementelle Vorgehensweise schreibt vor m glichst unb rokratisch schnell zur OOP vorzusto en nachdem die OOA und OOD in kommunikationsintensiven Workshops unter Zuhilfenahme der UML skizziert wurde Arten des Prototypings und Implementierung der Schichten Bereits in Kapitel 3 1 3 wurden verschiedene Arten des Prototypings besprochen Da es in unserem Fall nicht notwendig ist dem Auftraggeber schnell etwas zum Klicken also einen horizontalen GUI Prototypen zur Verf gung zu stellen wurde sich f r die Erstellung eines vertikalen Prototypen entschieden Mit diesem Prototyp l sst sich insbe sondere eine neue Vorgehensweise wie die Objektorientierung testen Abbildung 5 15 zeigt nochmals die zu erstellenden Schich
569. tand stellt nach der bisherigen Analyse eine zentrale Klasse der zu erstellen den Anwendung dar ermitteln Aktienbestand aktueller Stand RETTET besteht aus Verkaufsorder verkaufen gr Abbildung 5 11 Erstes Klassendiagramm der Analyse f r die Depotverwaltung PHP Endlich objektorientiert 341 5 Projektpraxis Der Zustand eines Aktienbestands Bevor man sich dem Design der Anwendung widmet kann es sinnvoll sein von den Hauptklassen ein erstes Zustandsdiagramm anzufertigen Der Aktienbestand kann zwei wichtige Zust nde einnehmen Entweder ist er noch im Besitz des Aktion rs oder er ist bereits verkauft Im ersten Fall kann der Aktion r noch Dividenden hinzuf gen oder weitere Aktien nachkaufen der Gewinn ist jedoch bis auf die Zahlungen der Dividenden noch nicht gesichert Die Bilanz zeigt in diesem Fall die aktuellen Kursdaten der Aktie wie sie an der B rse gehandelt wird Im zweiten Fall ist der Bestand bereits verkauft und die angezeigte Bilanz ist mitsamt ihren Gewinnen bzw Verlusten endg ltig Vereinfachend soll zun chst nur ein gesamter Bestand verkauft werden k nnen und nicht Teile eines Bestands Somit f hrt eine Ver kaufsorder wie in Abbildung 5 12 pr sentiert automatisch zum Verkauf des gesamten Bestands ad nn im Besitz verkauft addVerkauforder gesamten Bestand verkaufen addKauforder Bestand erh hen getBilanz Bilanz ausgeben addDividende erhaltene
570. tar 04 12 bersicht erledigt Gro teil der Funktionen schon im Visual Basic Programm ta enthalten Abbildung 3 21 Exemplarische Story Card Risk Value Priorisierung und Planning Poker Bereits auf der Story Card erscheinen Felder f r die Risk Value Priorisierung Bei der Bewertung einer geforderten Funktionalit t kann man folgenderma en vorgehen Zun chst beurteilt Ihr Kunde oder ein zuk nftiger Anwender die Wichtigkeit dieser Funktion auf einer Skala von 1 unwichtig bis 10 unbedingt f r den Betrieb notwendig PHP Endlich objektorientiert 147 3 Vorgehensweise bei der Softwareentwicklung Die Entwickler beurteilen im zweiten Schritt die Integration der Funktionalit t im Kon text der Gesamtanwendung Handelt es sich um eine Kernfunktion von der viele andere Komponenten abh ngen Vergabe von 10 Punkten oder ist dies lediglich eine Rand funktionalit t die an die Anwendung beliebig an und abgekoppelt werden kann Im zweiten Fall wird nur 1 Punkt vergeben Im dritten Schritt sind nochmals die Entwickler gefragt Sie sollen nun die Schwierigkeit der technischen Umsetzung der zu erstellenden Funktionalit t beurteilen Ist die Funkti onalit t so kritisch dass bei einer aktuellen Fehleinsch tzung das gesamte Design ber arbeitet werden muss 10 Punkte oder hat die geforderte Funktionalit t kaum Auswir kungen auf das Gesamtdesign der Anwendung 1 Punkt Abschlie end wird beurteilt wie zeit Jaufw n
571. tbaren Quellcode vorbeugen Spaghetticode Dabei handelt es sich um eine minimale Systemarchitektur deren Kontrollfluss einem Topf Spaghetti hnelt Die Gefahr besteht oft in Verbindung mit Rapid Prototyping wenn Phasen des Refactorings bzw ordentliche Klassenmodellierungen ausbleiben Zwiebel Programmierung Ein wichtiges Ziel objektorientierter Programmierung ist die Wiederverwendbarkeit Dabei wird neue Funktionalit t ber die alte Funktionalit t gelegt Dies ist h ufig zu beobachten wenn ein Entwickler ein Programm erweitern soll welches er nicht geschrieben hat Er setzt seine neue L sung einfach dar ber Dies f hrt mit einer Vielzahl von Versionen und unterschiedlichen Entwicklern ber die Jahre zu einem Zwiebelsystem Unterbinden werden kann dies durch strukturierte und gut dokumentierte Klassenbibliotheken die auch konsequent eingesetzt werden sollen Dabei ist vom Management zu unterbinden dass vorhandene Funktionen aus einer Klassenbibliothek nicht noch einmal neu geschrieben werden sollen Lavafluss Wenn ein Quellcode mehrere Versionen durchl uft kommt es vor dass immer mehr toter Quellcode herumliegt der beispielsweise zu Debug Zwecken verwendet wurde Andere Entwickler k nnen nicht nachvollziehen ob dieser Quellcode noch eine Funk tion hat oder nicht Da es ja funktionierte bauen sie ihre Erweiterungen um diesen Quell code herum statt ihn zu entfernen nach dem Motto never touch a running system
572. te nummer private meldung private methode private kritisch FALSE public function __construct nummer meldung methode kritisch this gt nummer nummer this gt meldung meldung this methode methode this gt kritisch kritisch public function getNummer return this gt nummer Listing 4 54 Die erste Fehlerklasse Objektorientierte Fehlerbehandlung public function getMeldung return this gt meldung public function getMethode return this gt methode public function istKritisch return this gt kritisch public function _toString ausgabe Fehler Nr this gt getNummer lt br gt 2 ausgabe in Methode this gt getMethode lt br gt ausgabe this gt getMeldung lt br gt return ausgabe Listing 4 54 Die erste Fehlerklasse Forts Nachdem die Fehlerklasse erstellt wurde kann sie in Verbindung mit anderen eigenen Klassen angewendet werden Im ersten Beispiel wird die MySQL Implementierung des Datenbank Interfaces iDZ auf die objektorientierte Fehlerbehandlung umgestellt Die Methoden liefern nun im Fehlerfall nicht mehr FALSE zur ck sondern NULL Wenn ein Fehler entsteht weil beispielsweise das bergebene Parameterobjekt ung ltig ist oder keine Verbindung zum Datenbankserver hergestellt werden kann wird ein neues Fehlerobjekt erzeugt und geworfen Der Befehl throw new Fehler ruft den Konstruktor der Fehlerklasse auf Im Ansc
573. te Dienstbenutzer PHP Endlich objektorientiert 315 4 PHP objektorientiert uri gt urn xmethodsTestServer soapaction gt urn xmethodsTestServer addiere DE echo result gt Listing 4 78 Der erste Dienstbenutzer Forts Um den Programmierer des Clients nicht mit der umst ndlichen Definition der SOAP Parameter zu bel stigen kann die Definition auch serverseitig erfolgen und dem Client zur Verf gung gestellt werden Die Implementierung des Servers aus Listing 4 77 wird davon nicht beeinflusst Stattdessen wird dem Server eine WSDL Datei beiseite gestellt Bei der Web Service Description Language handelt es sich um eine auf XML basierende Sprache zur platt form programmiersprachen und protokollunabh ngigen Beschreibung von Web Ser vices Eine solche Datei ist in Listing 4 79 dargestellt Die an den Testserver gestellte Anfrage zur Addition besitzt zwei Parameter deren Datentypen mit lt part name sum1 type xsd float gt als Gleitkommazahlen definiert werden Ebenso wird der R ckgabewert des Dienstes als Gleitkommazahl definiert Die Verbindung der Eingabe und Ausgabeparameter zur Methode addiere erfolgt durch die Definition der Eingangs und Ausgangsnachricht im Element lt operation name addiere gt Im n chsten Schritt werden noch Parameter f r das Nachrichtenformat und das verwen dete Kommunikationsprotokoll gesetzt So erfolgt die Kommunikation ber einen ent fernten Prozeduraufruf un
574. te automatisch auf einem Server hochladen k nnen PHPedit ist f r Windows Plattformen ausgelegt und ben tigt das Microsoft NET Framework 2 0 Von der Homepage http www phpedit com k nnen Sie eine kostenlose 30 t gige Testversion herunterladen Neben einer kostenlosen Studentenversion als Personal License zu Lernzwecken existiert eine Professional Lizenz f r Unternehmen die 89 kostet Diese Lizenz beinhaltet aber leider nur den reinen Editor F r die Nut zung von FTP SVN und PHPUnit m ssen Sie die Premium Lizenz erwerben die 179 kostet PHP Endlich objektorientiert 421 5 Projektpraxis amp PHPEdit v2 12 Untitled 3 php ee Ei Datei Bearbeiten Suchen Werkzeuge Debug eZpublish Ansicht Fenster Hilfe 8 XE IB BBdEstsrFr 2 Be he MPF Ha Untitled 3 php E3 Datei Explorer ax 1 a Ki 2 Bo RAAR E s blo p 4 B de 5 E b flvi 6 inc include incl 7 include inc config inc php m gt _ n 8 Name 9 con mysql_connect host user pass Eee 5 10 db mysql_select_db database rate php aa showanswers php EN ETS a showforen php A showthreads php F FR showthreads php LCK 16 z meh lt ia 16 lt php echo title gt T L 17 lt name gt v IP Datei Explorer 2 gt m gt PAP 3 PAP F PAPST gt mysql_connect ffnet eine Verbindung zu einem MySQL Server Beschreibung resource mysql_connect
575. technik vom Wasserfallmodell bis zum Rational Unified Process beschrieben Es wurde bereits gesagt dass die Objektorientierung mit einer iterativ inkrementellen Vorgehensweise der aktuelle Stand der Technik insbesondere bei gro en Projekten und Verwaltungssystemen ist Die Vorgehensweise besteht aus Objektorientierte Programmierung einer Gesch ftsprozessanalyse und modellierung GPA und GPM m einer objektorientierten fachlichen Modellierung OOA m einer objektorientierten technischen Modellierung OOD m einer Umsetzung in PHP Quellcode OOP Ebenso wurde erw hnt dass die Objektorientierung ein Ansatz ist der sich n her an der ben tigten Funktionalit t befindet die der Kunde w nscht und weniger nah an techni sche Details Die Objektorientierung verlangt also eine eigene Denkweise und besitzt auch einen eigenen Wortschatz der f r jede objektorientierte Programmiersprache iden tisch ist Dieser Wortschatz und der Ansatz der Objektorientierung wurde bislang jedoch noch nicht vorgestellt Dies geschieht in diesem Kapitel Objekt und Klasse Von zentraler Bedeutung der Objektorientierung sind die Begriffe Objekt und Klasse Ein Objekt ist ein Element der realen Welt das in der zu erstellenden Anwen dung abgebildet bzw repr sentiert werden soll Dabei kann es sich um einen materiellen Gegenstand ein Lebewesen aber auch um einen Vorgang oder um eine betriebliche Organisationseinheit beispielsweise um die Ver
576. tehen Obwohl er die Sprache gut beherrscht und auch Prinzipien des Soft ware Engineerings kennt werden oft Termine zur Fertigstellung der Software nicht ein gehalten und oder der Kunde hat sich die Anwendung bei der ersten Pr sentation ganz anders vorgestellt Der Kunde hat jedoch seine W nsche nie konkret ge u ert Dieser Problematik widmet sich Kapitel 3 1 Eine andere Dimension der Entwicklung ergibt sich dann wenn ganze Programmierer Teams an einem PHP Projekt arbeiten und der Umfang des Projekts in seiner Gesamtheit gar nicht mehr von einer einzelnen Person berblickt werden kann In diesen F llen f hrt das Hacken von Quellcode ohne eine weitere Organisation und Methodik unweigerlich zum Scheitern des Gesamtprojekts Ebenso wird es problematisch wenn die Software eine Gr e erlangt welche die Wiederverwendbarkeit einzelner Pro grammteile in anderen Projekten bedingt Da PHP mittlerweile eine gro e Bekanntheit und auch einen guten Ruf als performante Skriptsprache ohne gro en serverseitigen Aufwand erlangt hat wird es immer h ufiger f r solche gro en Projekte eingesetzt Man hat erkannt dass die Prinzipien der Bildung von Funktionen und Unterprogram men und der Aufspaltung von Funktionalit t in separaten Dateien allein nicht ausreicht Ebenso muss eine standardisierte Kommunikation mit den Kunden und den zuk nfti gen Anwendern der Software gefunden werden Auch in dem gesamten Prozess der Software Entwicklung
577. teht wird als komplexer Typ bezeichnet Dabei kann mit mixed true noch angegeben werden dass die in dem komplexen Typ enthaltenen Elemente in einer beliebigen Rei henfolge angeordnet werden k nnen Zus tzlich besitzt ein Seminar ein Attribut ID das stets angegeben werden muss use required Die Alternative dazu ist use optional Mit type xs string wird der Datentyp des Attributs festgelegt XML Schema besitzt hnlich wie in einer Program miersprache die vordefinierten Datentypen m xs string m xs decimal m xs integer m xs float PHP Endlich objektorientiert 307 4 PHP objektorientiert m xs boolean m xs date m xs time Sie k nnen sich jedoch auch weitere Datentypen definieren Im Fall des Seminars wurde lediglich xs string verwendet obwohl ein Seminar stets aus dem Buchstaben S gefolgt von einer Zahl besteht Die Angabe im XML Schema ist zwar korrekt k nnte aber noch pr zisiert werden da beispielsweise andere Buchstaben als S oder weitere Buchstaben nicht in der ID gestattet sind Im n chsten Schritt definieren Sie dass Seminare aus einer Liste von Elementen des Typs Seminar bestehen Nun wird beschrieben wie ein Teilnehmer auszusehen hat Er besteht aus einem Namen und Vorkenntnissen wobei Vorkenntnisse nicht zwingend erforderlich sind minOccurs 0 Sie k nnen also neben Attributen auch Elemente als optional deklarieren Zus tzlich besteht ein Teilnehmer noch aus den zwe
578. tei angegeben die R ckgabe ist ein Datenfeld schreibt die als Zeichenkette in var bergebenen Daten in die Datei fh wenn die Datei existiert und es eine regul re Datei ist gibt s_ e TRUE sonst ALSE zur ck in var wird der Pfad und der Name der Datei als Zei chenkette bergeben berpr ft ob eine in var bergebene Pfad und Dateiangabe existiert und gibt 7RUE zur ck wenn das der Fall ist und ansonsten ALSE gibt das Datum und die Uhrzeit der letzten nderung einer Datei in Svar als UNIX Zeitstempel zur ck gibt die Gr e der Datei die ggf zusammen mit Pfadangabe in Svar angegeben wird zur ck bei einem Zugriffsfehler wird ALSE zur ckge geben Tabelle 2 24 PHP Befehle zum Zugriff auf das Dateisystem des Webservers PHP Endlich objektorientiert 79 2 Die Sprache PHP Prozedural Funktion Bedeutung erg flock fh op sch tzt eine Datei hvor Operationen die in op bergeben werden Sopkann sein LOCK_ SF Verriegelung f r Lesezugriff LOCK_ EX exklusive Verriegelung f r Schreibzugriffe LOCK_UN gibt eine Verriegelung wieder frei LOCK_NB verhindert dass die Funktion w hrend der Verriegelung blo ckiert diese Konstante kann zus tzlich zu den anderen Konstanten ange geben werden erg unlink var l scht die in Svar bergebene Datei und gibt FALSE zur ck wenn die angegebene Datei nicht gel scht werden konnte Tabelle 2 24 PHP Befehle zum Zugriff auf das Dateis
579. ten der Anwendung Statt mit Kundendaten zu arbeiten kommen in diesem Fall Aktien und Aktienbest nde zum Ein satz Die Benutzeroberfl che GUI mit ihren Schaltfl chen und Eingabefeldern wird mit statischen HTML Seiten realisiert die zum Client und damit zum Benutzer gesendet werden Die Antworten des Benutzers haben Einfluss auf die Fachlogik die mit PHP 5 3 unter Anwendung der Objektorientierung umgesetzt wird Diese Fachlogik hat wiede rum Zugriff auf ein Datenzugriffsobjekt zum Laden und Speichern der Aktienbest nde R suchen Zu Zugriff X Coku N l A Datenzugriff getBest K Abbildung 5 15 Beispiel eines vertikalen Prototyps PHP Endlich objektorientiert 345 5 Projektpraxis Reihenfolge und Inhalte der Iterationen Soweit die theoretische Vorgehensweise Wie beginnt man aber nun Was sind die ersten Schritte In den Kapiteln 5 1 2 und 5 1 3 wurden in Zusammenarbeit mit dem Auftragge ber bereits ein fachliches und ein technisches Modell entwickelt Es liegt also nahe mit der Implementierung der Fachlogik in den ersten Prototypen zu beginnen und in einer Testmethode Objekte der Fachlogik anzulegen Dies ist besonders dann ratsam wenn Sie noch keine gro e Erfahrung mit der Objektorientierung besitzen nderungen im Design haben dadurch weniger Einfluss auf die gesamte Anwendung In der zweiten Phase werden die Parameter der Testmethode nicht fest implementiert sondern ber ein ausgef lltes HTML Formular bef
580. ten neue Zust ndigkeiten und Partnerklassen fest Im Lauf der Zeit ergibt sich so ein vollst ndi ges Bild Zwischendurch werden einzelne Klassen detaillierter betrachtet deren Aufgabengebiete spezifiziert sowie die wichtigsten Eigenschaften und Methoden skizziert Wichtig ist dabei dass mit der Zeit m glichst alle typischen Anwendungsf lle diskutiert werden da ansonsten Klassen bersehen werden k nnten Abbildung 3 25 zeigt exemplarisch eine CRC Karte der Klasse Seminar auf Managemen tebene Als bung k nnen Sie sich berlegen wie die CRC Karten der Klassen Termin Raum Dozent Anmeldung und Teilnehmer aussehen k nnten PHP Endlich objektorientiert 153 3 Vorgehensweise bei der Softwareentwicklung Seminar Aufgaben Erstellen und verwalten von Seminaren und deren Inhalten Man soll Seminare suchen k nnen und im Internet ver ffentlichen Man kann sich anmelden solange die max TN Tahl nicht erreicht ist Abmelden geht auch jederzeit Der Seminaranbieter kann notfalls ein Seminar auch stornieren wenn keine Anmeldung vorliegt oder der geplante Dozent krank ist und kein Ersatz gefunden werden konnte Partnerklassen Seminarverwaltung Rechnung Termin gt Raum Dozent Anmeldungen gt Teilnehmer Attribute ID Dauer Liste mit Terminen Preis Ort Kurzbeschreibung Inhalt Zielgruppe min TN max TN Liste mit Anmeldungen storniert ja nein Methoden Daten anzeigen Daten aktualisieren Da
581. ter Verwendung des HTTP Protokolls Im Anschluss daran wird der Funktionsaufruf addiere beschrieben Der Uniform Res source Name URN beschreibt einen dauerhaften ortsunabh ngigen Bezeichner f r eine Ressource Hier handelt es sich bei der Ressource um den Dienst der Addition der ber die URN eindeutig angesprochen werden kann Die Ein und Ausgabeparameter werden RPC encoded bertragen Dabei handelt es sich um eine sehr einfache Art der Kodierung die als Teil des SOAP Protokolls spezifiziert ist Abschlie end wird noch der URL des Serverdienstes spezifiziert lt xml version 1 0 encoding UTF 8 gt lt definitions name TestServer xmlns tns http localhost webservice server wsdl xmIns soap http schemas xmlsoap org wsdl soap xmIns xsd http www w3 org 2001 XMLSchema xmIns soapenc http schemas xmlsoap org soap encoding xmIns wsdl http schemas xmlsoap org wsdl xmIns http schemas xmlsoap org wsdl gt lt message name addiereAnfrage gt Listing 4 79 Die WSDL Datei f r die Funktion der Addition Ein Web Service in PHP lt part name suml type xsd float gt lt part name sum2 type xsd float gt lt message gt lt message name addiereAntwort gt lt part name Result type xsd float gt lt message gt lt portType name TestServerPortType gt lt operation name addiere gt lt input message tns addiereAnfrage gt lt output message tns addiereAntwort gt lt
582. termin an und auch wieder Objektorientierte Programmierung abmelden Wenn beispielsweise der Dozent erkrankt ist kann ein Mitarbeiter ein Semi nar stornieren Dabei sollen Nachrichten an bereits angemeldete Kunden automatisch versendet werden Zus tzlich kann ein Seminar durch einen Mitarbeiter f r eine zuk nf tige statistische Auswertung archiviert werden Seminare verwalten Dozent itarbeiter abmelden archivieren Abbildung 3 32 Anwendungsfall der Seminarverwaltung aus der Drachenperspektive Ihnen ist vielleicht aufgefallen dass die textuelle Beschreibung bereits ausreicht um den Sachverhalt des Anwendungsfalldiagramms zu beschreiben Wieso ist dann noch das Diagramm notwendig Die Antwort liegt darin dass das Diagramm lediglich die Dis kussionsgrundlage liefert Die UML ist also lediglich ein Hilfsmittel um sich einer guten Spezifikation zu n hern Die Diagramme und auch deren Iterationen und Weiterent wicklung w hrend der Analyse dienen zwar der Dokumentation sind aber nicht selbst das Ziel des Prozesses Das Ziel ist es vielmehr dass alle Projektbeteiligten eine gemein PHP Endlich objektorientiert 167 3 Vorgehensweise bei der Softwareentwicklung same Sprache finden und sich dar ber einigen welche Funktionen die zuk nftige Soft ware realisieren soll Profitipp Wenn Sie UML Diagramme ber mehrere Iterationen entwickeln berschreiben Sie bitte nicht die alten Versionen
583. tes Konstruktor public function __construct farbe echo Ein Stift der Farbe farbe wird erzeugt lt br gt this gt setFarbe farbe Destruktor public function __destruct echo Der Stift der Farbe this gt farbe ist jetzt zerst rt lt br gt 2 public function getFarbe return this farbe public function setFarbe farbe this gt farbe farbe Listing 4 1 Die erste Klasse stift inc php Was ist this Bei allen Methoden f llt eine Variable this auf die in dieser Klasse nie definiert wird Die so genannte this Referenz existiert bei jedem Objekt und ist ein Zeiger auf sich selbst Da wir uns in der Klasse Stift befinden k nnen Sie ber den Befehl this gt setFarbe farbe im PHP Endlich objektorientiert 213 4 PHP objektorientiert Konstruktor auf dem Objekt selbst einen Methodenaufruf t tigen Dieser Selbstaufruf wurde in den Sequenzdiagrammen Kap 3 2 6 Abl ufe im technischen Modell Sequenzdiagramme beschrieben Im zweiten Kapitel haben Sie bereits erfahren dass Sie Variablen in PHP nicht vor der Verwendung deklarieren m ssen Bei der prozeduralen Programmierung ist dies ein angenehmes Verhalten das Codezeilen einspart Bei der Methode setFarbe f hrt sie jedoch zu einem Problem Sie m ssen hier die Eigen schaft des Objekts die privat deklariert ist mit einem von au en bergebenen Parameter farbe berschreiben PHP kann aber eine in der Methode loka
584. tes darstellt In diesem Fall wird ein schwarzer Stift erzeugt Der new Operator gibt als Ergebnis eine Referenz auf das gerade erzeugte Objekt zur ck die man wiederum in einer Variablen abspeichern kann Diese Variable hei t hier ein Stift lt php require_once stift inc php gt lt html gt lt body gt lt php kein Default Konstruktor erlaubt einStift new Stift einStift new Stift schwarz echo Farbe einStift gt getFarbe lt br gt 2 einStift gt setFarbe blau echo Farbe einStift gt getFarbe lt br gt 2 Listing 4 2 Die erste Objekterzeugung ein Stift wird geboren Umsetzung objektorientierter Grundlagen var_dump einStift echo lt br gt lt body gt lt html gt Listing 4 2 Die erste Objekterzeugung ein Stift wird geboren Forts Das gerade erzeugte Objekt hat also seinen Konstruktoraufruf erfolgreich abgeschossen und besitzt nun eine Farbe Da die PHP Datei aus Listing 4 2 eine Referenz auf dieses Objekt besitzt kann man von hier aus auf alle ffentlich zug nglichen Methoden zugrei fen Sie k nnen das Objekt mit dem Befehl einStift gt getFarbe fragen welche Farbe es besitzt Das Ergebnis wird dann ausgegeben In der n chsten Zeile bekommt der Stift dann ber einStift gt setFarbe blau eine neue Farbe zugewiesen Auch diese neue Farbe k nnen Sie wieder abfragen Interessant ist auch wenn Sie mithilfe des aus dem zweiten Kapitel bekannte
585. tialisiert break case 1 return reserviert break case return gebucht break case 3 return storniert break default return FEHLER Ung ltiger Zustand break public function reservieren if this gt zustand 0 return FALSE this zustand 1 reserviert return TRUE public function stornieren if this gt zustand 1 return FALSE this zustand 3 storniert return TRUE public function buchen if this gt zustand 1 return FALSE es ist Zufall ob die Buchung funktioniert srand microtime 1000000 zufall rand 0 2 if zufall gt 1 this zustand 3 gebucht elsef this zustand 2 storniert return TRUE Listing 4 51 Die Interfaceimplementerung und Umsetzung des Zustandsautomaten Forts PHP Endlich objektorientiert 277 4 PHP objektorientiert D Listing 4 51 Die Interfaceimplementerung und Umsetzung des Zustandsautomaten Forts Der Test der Implementierung erfolgt indem ein Objekt der AirlineReservierung ange lehnt wird Im Anschluss daran wird ein Pfad im Zustandsdiagramm durchgegangen und nach jedem Schritt der aktuelle Zustand des Objekts ausgegeben lt php require_once classloader inc php gt lt html gt lt body gt lt php FDairline new AirlineReservierung echo FDairline gt getZustand lt br gt FDairline gt reservieren echo FDairline gt getZustand lt br gt FDairline gt buchen
586. tierung 4 1 5 Einzigartige Eigenschaften und Methoden 4 1 6 Konstanten in Klassen und Verhinderung von Vererbung PHP Endlich objektorientiert 10 11 13 16 28 35 45 55 69 101 102 104 105 113 121 121 128 145 151 154 161 211 211 211 215 218 219 226 228 Inhaltsverzeichnis 4 2 4 3 4 4 4 5 4 6 4 1 7 Referenz bergabe von Objekten und Kopien 4 1 8 Informationen ber Objekte und Klassen zur Laufzeit Realisierung von Klassengeflechten 4 2 1 Vererbung in PHP 4 2 2 Aufbau von Bekanntschaften Assoziationen 4 2 3 Wechselseitige Bekanntschaften 4 2 4 Komposition und Aggregation 4 2 5 Interfaces und deren Implementierung 4 2 6 Umsetzung von Sequenzdiagrammen 4 2 7 Umsetzung von Zustandsautomaten Objektorientierte Fehlerbehandlung PHP und XML Ein Web Service in PHP Neuerungen in PHP 5 3 und Ausblick 4 6 1 Namensr ume f r gr ere Softwaremodule 4 6 2 Softwaremodule in PHP Pakete b ndeln Phar 4 6 3 PHP in Verbindung mit Windows Servern 4 6 4 nderung im Late Static Binding 4 6 5 Neue und verbesserte Funktionen 4 6 6 Ausblick auf PHP 6 Projektpraxis 5 1 5 2 Das Fallbeispiel der Depotverwaltung 5 1 1 Die Idee des Auftraggebers 5 1 2 Die objektorientierte Analyse 5 1 3 Das objektorientierte Design 5 1 4 Die objektorientierte Programmierung 5 1 5 Die n chsten Schritte Erstellung von gutem Quellcode 5 2 1 Ein Styleguide f r guten Quellcode 5 2 2 Erfolgreiche Codestruk
587. til geh rt au erdem dass man einerseits Daten in einer Datenbank besitzt und andererseits Funktionen die mit diesen Daten arbeiten Die Funktionalit t des Programms wird bei der prozeduralen Programmierung von den Daten getrennt Die Daten durchlaufen die Funktionen und werden von ihnen interpre tiert und verarbeitet Die Denkweise der prozeduralen Programmierung wird von den Anh ngern der Objekt orientierung oft als veraltet angesehen Man programmiert heutzutage nicht mehr auf diese Art Dieser Aussage widerspricht jedoch der Erfolg der bisherigen Vorgehensweise bei der Erstellung von PHP Programmen In der aktuellen PHP 5 Version sind beide Vorgehensweisen erlaubt Einem Einsteiger in die PHP Programmierung wird dadurch nicht gerade geholfen dass er noch zwischen zwei verschiedenen Denkweisen unterscheiden muss Doch wodurch unterscheidet sich die Objektorientierung in ihrer Denkweise In der Objektorientierung werden die zu verarbeitenden Daten anhand ihrer Eigenschaften und der m glichen Operationen klassifiziert Man hat also das Objekt Kunde Ein Kunde besitzt seine eigenen Daten wie Name Vorname usw und zus tzlich dazu einen Satz von Funktionen Man kann einen Kunden beispielsweise nach seinem Namen oder nach sei nen Rechnungen fragen Im Vergleich zu den anderen Denkweisen wird von der Objektorientierung gesagt dass sie menschliche Organisationsmethoden aus der realen Welt besser nachbilden kann Die Entwicklung der So
588. ting 2 53 Test der Funktionen zum Suchen und Vergleichen von Zeichenketten Forts Die zweite Sammlung von Funktionen manipuliert und ersetzt Zeichenketten Die trim Funktionen werden besonders bei der Auswertung von Benutzereingaben oder beim Auslesen aus Werten einer Datenbank verwendet um berfl ssige Leerzeichen zu elimi nieren die ansonsten auch eine Pr fung auf Gleichheit zweier Zeichenketten erschwe ren Funktion Bedeutung erg addcslashes str charlist setzt C typische Escape Zeichen vor jedem Sonderzeichen dass in Scharlistangegeben ist und gibt den erg stripcslashes str charlist entfernt C typische Escape Zeichen vor jedem Sonderzeichen dass in Scharlistangegeben ist erg addslashes str setzt einen Backslash vor speziellen Sonderzeichen erg stripslashes str entfernt den gesetzten Backslash vor speziellen Sonderzeichen erg Itrim str entfernt f hrende Leerzeichen erg rtrim str entfernt nachfolgende Leerzeichen erg trim str entfernt alle Leerzeichen am Anfang und Ende von str erg str_replace such ers str ersetzt in Ss rjedes Vorkommen von such durch Sers Tabelle 2 13 Funktionen zum Ersetzen von Zeichen in Zeichenketten Listing 2 54 testet einige dieser Funktionen und f hrt zu folgender Ausgabe Hall 366chen an 326si 374ber den Bergpa 337 Hall chen an si ber den Bergpa Hall chen an Frank ber den Bergpa lt html gt lt body gt lt php
589. tionen handeln Es werden drei Arten von Stakeholdern unterschieden die nach ihrem Einfluss und Wirkungsgrad abgestuft sind Der Begriff des Wirkungsgrads stammt urspr nglich aus der Physik und beschreibt das Verh ltnis von abgegebener Leistung bzw Nutzen zu dem zugef hrten Aufwand Diese Definition l sst sich unbedenklich auf Projekte bertragen Man unterscheidet prim re Stakeholder die einen hohen Einflussgrad auf das Projekt haben jedoch nur einen geringen Wirkungsgrad besitzen Sie sind in die Hauptinteraktion mit dem Produkt involviert wie Entwickler oder Anwender sekund re Stakeholder die einen niedrigen Einflussgrad und gleichzeitig einen geringen Wirkungsgrad auf das Projekt besitzen Sie sind nicht direkt beteiligt haben aber ein Interesse an dem Produkt oder besitzen eine vermittelnde Rolle bei den Ent wicklungsaktivit ten Dies k nnen externe Berater sein m Key Stakeholder mit einem geringen oder hohen Einflussgrad jedoch auf jeden Fall einem hohen Wirkungsgrad auf das Projekt Sie haben entscheidenden Einfluss bei der Produktdefinition und sind bedeutend f r den Erfolg der Entwicklungsaktivit ten Dabei handelt es sich meist um Entwicklungsleiter Geld und oder Auftragsgeber Objektorientierte Programmierung F r einen erfolgreichen Projektverlauf ist es wichtig dass Sie die einzelnen Stakeholder Gruppen korrekt identifizieren und entsprechend mit ihnen kommunizieren Abbildung 3 10 fasst die beteiligt
590. tton 106 gt string 9 SWFAction 107 gt string 8 SWFMorph 108 gt string 9 SWFSprite 109 gt string 8 SWFSound 110 gt string 11 SWFFontChar 111 gt string 16 SWFSoundInstance 112 gt string 14 SWFVideoStream 113 gt string 15 SWFPrebuiltClip 114 gt string 29 mysqli_sql_exception 115 gt string 13 mysqli_driver 116 gt string 6 mysqli 117 gt string 14 mysqli_warning 118 gt string 13 mysqli_result 119 gt string 11 mysqli_stmt 120 gt string 15 PDFlibException 121 gt string 6 PDFlib 122 gt string 12 PDOException 123 gt string 3 PDO 124 gt string 12 PDOStatement 125 gt string 6 PDORow 126 gt string 10 SoapClient 127 gt string 7 SoapVar 128 gt string 10 SoapServer 129 gt string 9 SoapFault 130 gt string 9 SoapParam 131 gt string 10 SoapHeader 132 gt string 14 SQLiteDatabase 133 gt string 12 SQLiteResult 134 gt string 16 SQLiteUnbuffered 135 gt string 15 SQLiteException 136 gt string 13 XSLTProcessor 137 gt string 10 ZipArchive 138 gt string 10 paradox_db 139 gt string 8 Rechnung get_class_vars array 0 Se Se a Realisierung von Klassengeflechten Beeindruckend ist das PHP in der Version 5 2 9 bereits 139 Klassen geladen hat ohne dass Sie selbst eine Klasse definiert haben Auffallend sind insbeson
591. turen Design Patterns 5 2 3 Wie man es nicht machen sollte Anti Pattern 5 2 4 Entwicklungsumgebungen und Tools Stichwortverzeichnis 230 233 237 237 246 248 256 266 272 274 278 292 314 318 318 322 323 324 325 326 329 329 329 330 342 344 396 398 398 401 408 413 427 entwickler press Eine Sprache wird erwachsen Die Zeiten in denen man die von dem D nen Rasmus Lerdorf entwickelte Skriptsprache PHP als Personal Home Page Tools bezeichnete um dynamische HTML Tabellen aus einer kleinen MySQL Datenbank Kontaktformulare oder einzelne Onlineangebote zu erstellen sind vor ber Mit der Version 4 0 im Jahr 2000 bis hin zur Version 4 4 9 im Jahr 2008 wurde die Entwicklung von PHP zu einer erwachsenen Sprache mit eingebauter Datenbankunterst tzung vorangetrieben die sich weder vor Konkurrenten wie Active Server Pages ASP von Microsoft noch vor JavaServer Pages JSP von Sun Microsys tems verstecken muss PHP hat in diesen Jahren den Ruf erlangt leicht erlernbar zu sein und effiziente Internet l sungen hervorzubringen die gerade im Umfeld der Web 2 0 Euphorie und der Vernet zung der Haushalte mit schneller DSL Technologie sehr gefragt sind Viele Provider bie ten bereits LAMP Server Linux Apache MySQL PHP f r Privatkunden an Der Aufwand der Administration h lt sich im Vergleich zu den Microsoft L sungen und den Java Containern in Grenzen So hat sich mit den Jahren eine erfolgreiche prozedu
592. twen dig dass Sie alle bergebenen Parameter in PHP nochmals auf G ltigkeit pr fen Clientseitige Pr fungen sind unzureichend Andererseits besitzt die GET Methode auch einige Nachteile Die L nge der m glichen URLs ist bei einigen Webservern begrenzt sodass Sie nicht beliebig viele Parameter bergeben k nnen Zus tzlich existieren besondere Konventionen f r Sonderzeichen in einer URL 70 entwickler press Erweiterte Funktionen lt html gt lt body gt lt form action fachlogik_get php method get gt Paraml lt input name Paraml type text gt lt br gt lt br gt Param2 lt input type Checkbox name Param2 value Wert gt lt br gt lt br gt Param3 lt select name Param3 size 1 lt option Wert1 lt option gt lt option Wert2 lt option gt lt option gt Wert3 lt option lt select gt lt br gt lt br gt lt input name Dienst1 type submit value Dienst 1 gt lt input name Dienst2 type submit value Dienst 2 gt lt input name Dienst3 type submit value Dienst 3 gt lt form gt lt body gt lt html gt Listing 2 59 Quellcode des GET Formulars Listing 2 60 zeigt die serverseitige Auswertung des ausgef llten Formulars Der Schl s sel dazu ist das besondere assoziative Datenfeld _GET das vom PHP Interpreter auto matisch bef llt wird Die Namen der Felder im assoziativen Array entsprechen den Namen der Steuerelemente im HTML Formular So heift die Checkbox Param2 was dazu f
593. u MySQL ist beispiels 92 entwickler press Erweiterte Funktionen weise unter http dev mysgl com doc refman 5 1 de select html die formale Syntax der SELECT Anweisung beschrieben Daran l sst sich nachvollziehen dass allein zur Spra che SQL eigene B cher verfasst werden k nnen Bedenken Sie dabei dass es sich dabei um eine eigene Sprache handelt Der Vorteil ist dass SQL unhabh ngig von der verwen deten Programmiersprache und sogar relativ unabh ngig von der verwendeten Daten bank ist Wenn Sie also einmal den SOL Befehlssatz beherrschen sind sie auch f r andere Programmiersprachen und Datenbanken gut ger stet ID bigint 20 NOT NULL auto_increment nachname varchar 30 NOT NULL vorname varchar 30 NOT NULL P RIMARY KEY ID DROP DATABASE alt INSERT INTO kunde nachname vorname VALUES Dopatka Frank UPDATE kunde SET nachname Maier WHERE nachname Dopatka Befehl Beschreibung CREATE DATABASE shop legt eine neue Datenbank auf dem Server an CREATE TABLE kunde legt eine neue Tabelle an wobei zuvor eine Datenbank ausge w hlt werden muss in diesem Beispiel werden zwei Felder mit Datentyp varcharund 30 Zeichen angelegt die bef llt werden m ssen zus tlich existiert eine ID die automatisch vergeben wird und die den Prim rschl ssel der Tabelle darstellt l scht eine existierende Datenbank mitsamt aller Tabellen und Daten f gt einen neuen Datensatz zu einer existierenden Tabelle
594. u einer PHP Datei weitergeleitet werden Dort lesen Sie den bergebenen Parameter aus und kodieren das Diagramm unter Verwendung einer do while Schleife und einer Verzweigung die den Wert des Eingabeparameters pr ft Objektorientierte Programmierung Abbildung 3 45 L sung des Beispiels auf Muschelebene Das folgende Beispiel zeigt ein Aktivit tsdiagramm auf Meeresspiegelebene das also die Aktionen beschreibt die ein Anwender an dem System durchf hrt Die Interaktion wird durch die Verwendung von zwei Schwimmbahnen verdeutlicht In der Suchmaschine des Seminaranbieters gibt der Kunde den Begriff PHP ein Zur ck gegeben wird von dem Webserver eine Liste aller Seminare mit deren zuk nftigen Ter minen Von diesen Terminen sucht sich der Kunde einen aus und gibt in der n chsten Eingabemaske seine pers nlichen Daten wie Name und Anschrift ein Sind alle Daten eingegeben wird ein neues Buchungsobjekt erstellt und zum Server der Seminarverwal tung gesendet In diesem Szenario war noch genau ein Platz zu diesem Seminartermin frei dieses Semi nar war im Zustand buchend Der Server nimmt die neue Buchung entgegen und pr ft die vom Kunden eingegeben Daten auf G ltigkeit Da alles in Ordnung war wird die Buchung dem Seminartermin hinzugef gt Danach ist die maximale Teilnehmerzahl f r diesen Termin erreicht sodass der Termin ausgebucht ist Der Server der Seminarverwal tung sendet abschlie end eine positive Buchungsbest tigun
595. ublic function getName return this gt name die Dogge gt Listing 4 31 Die Dogge als spezieller Hund Realisierung von Klassengeflechten Der Test der Tierklassen erfolgt in Listing 4 32 Dabei wird ein Datenfeld angelegt das mit einer Katze und einer Dogge gef llt wird Beide geben ihren Namen aus dann bei t die Dogge einmal zu Da die Dogge die Methode getName neu definiert hat wird die neue Methode ausgef hrt Anschlie end soll jedes Tier im Datenfeld einen Laut von sich geben Dazu wird das Feld in einer Schleife durchlaufen Dies ist nat rlich besonders bei gro en Feldern von Inter esse Mit instanceof sollte noch eine zus tzliche Typpr fung durchgef hrt werden ob es sich bei den Elementen des Feldes wirklich um Tiere handelt Zum Abschluss wird versucht jedes Tier im Datenfeld zum Miauen zu bringen Bei der Dogge sollte dies problematisch werden lt php require_once classloader inc php gt lt html gt lt body gt lt php zoo Array zoo new Katze Nicki echo zoo gt getName lt br gt 2 zoo 1 new Dogge Hasso echo zoo 1 gt getName lt br gt 2 echo zoo 1 beissen lt br gt 2 for i 0 i lt 2 i echo zoo L i gt gibLaut lt br gt 2 for i 0 i lt 2 i echo zoo L i gt miauen lt br gt 2 lt body lt html Listing 4 32 Testklasse f r verschiedene Tiere Die Ausgabe ist auch hier erwartungsgem Interessant
596. uen Komponenten mit anschlie endem Test und der Integration in die bislang erstellte Anwendung sowie die abschlie ende Einf hrung der Software dargestellt Wichtig ist nochmals zu erw h nen dass dies nicht einmalig f r das gesamte Projekt sondern iterativ f r jede Realisie rung einer Produktstufe gilt So wird mit der Zeit aus dem Prototyp eine fertige Anwen dung die Sie in Kooperation mit dem Kunden mit dem Management erstellen akkumulierte Zeit amp Kosten Bewertung von Alternativen 2 Identifizierung amp Beseitigung F Risiko pes Bestimmung von Zielen Analyse von Risiken Alternativen amp y Beschr nkungen Risiko Analyse Risiko 23 Analyse Z Rx s 7 Ox RZ Og RR Start Prototyp1 05 0 A N Lebenszyklus betr g S S plan Konzept SL e g Cg OR w E NES FIR S Ntwicki DO S S lungs Pr fung der E Plan Anforderungen ESS Megragn co n S Testp Entwicklungs Komp T Planung der AR an pr fung saton n chsten Phase Sserungs Fr ee Pl inf an Einf hrung Entwicklung amp Pr fung der n chsten Produkt Stufe Abbildung 3 2 Das Spiralmodell aus dem Jahre 1988 PHP Endlich objektorientiert 109 3 Vorgehensweise bei der Softwareentwicklung Als Nachteil des Spiralmodells gilt dass es nicht endet Mit jedem Durchlauf erh hen sich f r Ihren Kunden die Kosten und es vergeht nat rlich auch eine Menge Zeit Der Kunde erf hrt nicht im Vorfeld wie teuer denn die Realisierung
597. uer Preis Ort Kurzbeschreibung Inhalt Zielgruppe min TN max TN Termin hinzuf gen ndern l schen anmelden Termin T Teilnehmer TN abmelden Termin T Teilnehmer TN stornieren Termin T wenn kein Dozent verf gbar oder min TN nicht erreicht entfallen Termin T wenn keine TN vorhanden Abbildung 3 25 Exemplarische CRC Karte der Seminarverwaltung Vorder und R ckseite 3 2 5 Objektorientierte Programmierung Wie bereits bei der objektorientierten Analyse und Design ziehen sich die agilen Metho den auch in die objektorientierte Programmierung hinein in der das technische Konzept der Klassenstrukturen in PHP Quellcode umgesetzt werden soll Testgetriebene Entwicklung Als erstes Konzept das immer gr ere Verbreitung findet ist die testgetriebene Entwick lung TDD Test driven Development zu nennen Bei der testgetriebenen Entwicklung erstellen Sie die Softwaretests konsequent vor den zu testenden Komponenten Zumeist werden die Tests unabh ngig von der zu testenden Anwendung entwickelt oder sogar nachdem die Anwendung entwickelt wurde Dies f hrt oft dazu dass nicht die erforderliche Testabdeckung erzielt wird Oft werden die Tests auch nur halbherzig durchgef hrt und die Anwendung durchl uft beim Kunden zun chst eine Betaphase weil ein Auslieferungstermin eingehalten werden musste Wie aber k nnen Sie die Tests vor den zu testenden Komponenten erstellen wenn Sie nicht genau wiss
598. uery sql jedoch entweder TRUE oder FALSE zur ck je nachdem ob der SOL Befehl erfolgreich ausgef hrt wurde oder nicht Diese Ausgabe wird direkt als Ausgabe der Methode zur ckgegeben Die interne Hilfsmethode starts_with gibt zur ck ob ein Text mit einer bestimmten Zei chenfolge beginnt wobei nicht zwischen Gro und Kleinschreibung unterschieden wird So werden die Befehle der bergebenen SQOL Anweisung gepr ft die in Form einer Zeichenkette bergeben wird lt php class mysqlDZ implements iDZ private conn public function ffnen p if lisset p return FALSE if C p gt isParam host p gt isParam user C p gt isParam pass p gt isParam db return FALSE host p gt get host user p gt get user pass p gt get pass db p gt get db conn mysql_connect host user pass if conn if mysql_select_db db conn 1 return TRUE else return FALSE else Listing 4 47 Die Implementierung des Interfaces f r einen MySQL Zugriff Realisierung von Klassengeflechten return FALSE public function schliessen mysql_close public function lesen p if lisset p return FALSE if p gt isParam sql return FALSE sal p gt get sql if this gt starts_with sql SELECT FALSE return FALSE data mysql_query sql if data FALSE return FALSE ausgabe Array x 0 while row mysql_fetch_row data dat
599. uf Neuerungen der PHP Version 6 0 deren Erscheinungstermin bislang jedoch noch unbekannt ist 4 6 1 Namensr ume f r gr ere Softwaremodule Ein Name identifiziert eine Klasse wie einen Kunden oder ein Auto Um in gr e ren Softwarekomponenten eine eindeutige Zuordnung beibehalten zu k nnen ist neben dem Namen einer Klasse der entsprechende Kontext zu beachten Dieser Kontext wird als Namensraum bezeichnet Die Beschreibung geschieht in PHP durch die Notation Auch ein Dateisystem ist ein Namensraum in dem Sie Dateien anordnen sortieren und wiederfinden k nnen Wie auch Ordner in einem Dateisystem Unterordner enthalten k nnen kann jeder Namensraum auch wiederum Namensr ume enthalten So einsteht eine hierarchische baumf rmige Struktur mit einer Wurzel als Ausgangspunkt Knoten und Bl ttern Namensr ume werden auch dazu verwendet Konflikte bei der Namens vergabe zu verhindern Beim Erstellen einer gro en Anwendung k nnen Programmierteams unter der Benut zung von Namensr umen gro e Programmpakete schreiben ohne dass die neu einge f hrten Namen in Konflikt zu anderen Namen stehen Im Unterschied zu einer Anwen Neuerungen in PHP 5 3 und Ausblick dung ohne Namensr ume wird dabei nicht der ganze Name einer Klasse neu eingef hrt sondern nur ein neues Blatt im gesamten Pfad des Namensraums eingef gt Damit ist es seit PHP 5 3 m glich einen Namen in unterschiedlichen Namensr umen konfliktfrei zu
600. un chst die Frage zu stellen wie dieser Sin neswandel zu erkl ren ist PHP Endlich objektorientiert 7 1 Eine Sprache wird erwachsen 1 1 Prozedurale Programmierung versus Objektorientierung Die bis zu PHP 4 vorherrschende prozedurale Programmierweise besteht darin eine Problemstellung in kleinere Unterprobleme nach dem Motto Teile und Herrsche Divide and Conquer aufzuteilen Die Idee besteht darin dass die einzelnen Teilprob leme unabh ngig betrachtet werden k nnen und leichter l sbar sind F r jedes Unter problem wurde dann eine Funktion geschrieben die intern wiederum andere Funktio nen aufrufen kann um ihren Zweck zu erf llen Zus tzlich kann jede Funktion den Sprachumfang also einzelne Befehle von PHP benutzen um zur L sung zu gelangen Eine Funktion k nnte beispielsweise Login lauten und als Parameter den Benutzernamen und das Kennwort erhalten Diese Daten wurden zuvor in ein HTML Formular eingege ben und an ein PHP Skript weitergeleitet Diese Funktion Login wird die Unterfunktio nen DBconnect und DBlesen enthalten um serverseitig eine Verbindung zur Datenbank herzustellen und zu pr fen ob ein Benutzer mit diesem Benutzernamen berhaupt exis tiert Ist das der Fall so wird das richtige Kennwort aus der Datenbank ausgelesen und mit dem Kennwort aus dem HIML Formular mittels PHP Befehlen verglichen Sind beide gleich so gibt die Funktion Login den Wert OK zur ck Zu dem prozeduralen Programmiers
601. und der aktuelle Kurs mit dessen Datum ausgelesen werden Der Benutzer verwendet ausschlie lich Dienste die aus der Klasse des Aktienbestands stammen Dabei handelt es sich um eine zentrale Verwaltungsklasse die ihre Dienste f r den Benutzer bereitstellt PHP Endlich objektorientiert 343 5 Projektpraxis Aktienbestand Bilanz 1 0 1 anzahl tagelmBesitz kaufDatumMW gewinnAktieEur kaufPreisMW gewinnAktieProz kaufGeb hren gewinnGesamtEur dividenden gewinnGesamtProz verkauft gewinnProzProJahr verkaufGeb hren __construct bestand verkauf __construct aktie kauforder verkaufGeb hren ermittelnAktuelleDaten addKauforder kauforder getDaten addVerkauforder verkauforder 1 S __construct name isin url 1 1 2 anzahl 0 1 datum gt ka Kauforder einzelpreis geb hr __construct aktie anzahl ekDatum ekEinzelpreis ekKosten Verkauforder geil _construct aktie anzahl vkDatum vkEinzelpreis vkKosten Abbildung 5 14 Das Klassendiagramm f r die Depotverwaltung auf Muschelebene Die ben tigten Funktionen des Ladens und Speicherns in eine Datenbank sollen ber eine leicht modifizierte Implementierung des Datenzugriffsinterfaces erfolgen wie es bereits in Kapitel 4 2 5 dargestellt wurde Auch hier soll wieder eine MySQL Datenbank zum Einsatz kommen 5 1 4 Die objektorientierte Programmierung Bereits nach diesem S
602. ung m Objekt auf dem die Aktion ausgef hrt wird ein vorhandener Seminartermin hnlich wie die Aufgabenteilung bei Scrum sollte die Umsetzung eines Features nicht l nger als zwei Wochen ben tigen In der dritten Phase werden die Features vor allem von dem Projektleiter priorisiert Dabei sollten auch die Abh ngigkeiten zwischen den Features beachtet werden Auch der Kunde kann seine Meinung hier mit einbringen was beispielsweise ber eine Risk Value Priorisierung geschehen kann Auf Basis der Featureliste werden die Fertigstellungstermine festgelegt und den Team leitern der Entwickler zugeordnet Zus tzlich k nnen einzelnen Entwickler die Verant wortung f r bestimmte Kernklassen wie Seminar oder Anmeldung in der Seminarver waltung zugewiesen werden So ergeben sich klare Verantwortlichkeiten Von gro er Bedeutung ist dass diese ersten drei Phasen sehr unb rokratisch und prag matisch abgehandelt werden sollen In dem zeitkritischen Beispielprojekt wurden diese drei Phasen innerhalb von wenigen Tagen abgehandelt Bei dieser Vorgehensweise liegt das Verh ltnis zwischen der Analyse und dem Design zu der eigentlichen Implementie rung also nicht bei 4 1 wie es bei dem schwergewichtigen RUP geschildert wurde In der vierten Phase werden die technischen Modelle realisiert Dazu geh ren die Model lierung der einzelnen Unter Klassen mit deren Eigenschaften und Methoden sowie die Spezifikation der technischen Abl ufe Diese k
603. ung sowohl von externen als auch von internen Seminaren eine Seminarverwaltung eben nur spezi Objektorientierte Programmierung eller Ob sich aus diesen Vererbungen auch Klassenhierarchien aufbauen ist zu diesem Zeitpunkt noch v llig unklar Es geht nur darum Funktionalit t und deren Abh ngig keiten zu ermitteln Ebenso existiert bei dieser fachlichen Modellierung noch keinerlei Bezug zu irgendeiner Programmiersprache Sie k nnten die Seminarverwaltung zu die sem Zeitpunkt auch in Java ASP NET oder C realisieren Die verwendete Technologie ist erst bei der technischen Modellierung im objektorientierten Design von Bedeutung Die Vererbung bei Akteuren deutet stets auf ein Rollensystem hin bei dem einzelne Per sonengruppen spezielle Berechtigungen erwerben So hat jeder Mitarbeiter Zugriff auf die Seminar Kunden Raum Parkplatz und Shuttleverwaltung Die Buchhalter sind spezielle Mitarbeiter die auch die sp tere Rechnungsverwaltung bedienen k nnen Diese Personen sind auch im aktuellen Gesch ftsprozess die einzigen die Rechnungen verfassen d rfen Weil Buchhalter ja auch Mitarbeiter sind k nnen sie nat rlich auch alle Dienste eines gew hnlichen Mitarbeiters nutzen Ein Administrator ist eine einzige berechtigte Person die in Zukunft Systemupdates in die Anwendung einspielen kann Die Vererbungen der Akteure spiegeln also eine Klas senhierarchie der Benutzergruppen wider Neben der Vererbung existieren noch die lt
604. ungen an die Komponenten Dabei sollten auch bereits Grenz werte f r Eingaben betrachtet werden z B m gliche Rabattstufen auf einen Artikel In der Phase des Komponentenentwurfs werden die Dienste der Fachlogik dann zusam men mit den Diensten der Datenzugriffs sowie der Pr sentationsschicht entwickelt Im Anschluss daran erfolgen zun chst ein Test der einzelnen Dienste z B des Anlegens eines Neukunden und nachfolgend die Integration der Dienste in die zu testende Gesamtanwendung Die Pr sentationsschicht Die Pr sentationsschicht einer PHP Anwendung ist dominiert von der Ausgabe des PHP Interpreters die zum Internetbrowser des Clients gesendet wird Im Kontext des Webs 2 0 muss dies keine reine Ausgabe von dynamisch erzeugtem HTML Code sein Vielmehr steht einem modernen Internetbrowser wie dem Microsoft Internet Explorer 8 0 und dem Mozilla Firefox 3 x eine Vielzahl von Technologien zur Verf gung die eine Interaktion der Anwendung mit dem Benutzer erm glichen Dazu geh ren m dynamisch generierter HTML Code wie Tabellen oder HTML Formulare die vom Benutzer auszuf llen sind Die ausgef llten Formulare werden dann vom Server interpretiert Die verbesserten M glichkeiten von CSS2 Cascading Style Sheets sor gen hier f r ein optisches Erscheinungsbild das eher an eine lokale Anwendung als an ein tristes Internetformular erinnert der Versand oder die dynamische Erstellung von PDF Dateien und PDF Formularen die ebenfalls
605. ungen und Kritik an ihrem Design zu werden Dies f hrt zu einem blockierenden Verhalten bei Ver nderungen Auch wenn das Management des Unternehmens die Paarprogrammierung explizit f r dert was f r einen Erfolg dieser Methode unabdingbar ist ist die Beurteilung der Leis tung des Einzelnen schwieriger geworden Denn letztlich erh lt jeder Entwickler seine pers nliche Entlohnung Au erdem kommt es vor das manche Personen die ggf ber eine extrem hohe fachliche Kompetenz verf gen nicht in dieses agile System integriert werden k nnen Hier ist die Einzelarbeit einem Zwang zum Team auf jeden Fall vorzu ziehen da ansonsten die Gesamtmoral gef hrdet ist An dieser Stelle kann an die Stelle der Paarprogrammierung die aus wissenschaftlichen Ver ffentlichungen stammende Methode des Pair Reviews treten Dabei entwickelt und testet ein einzelner Entwickler den Code Im Anschluss daran wird die fertige Version der Softwarekomponente meist handelt es sich dabei um eine Version einer Klasse einem zweiten Entwickler zur Verf gung gestellt der bislang an der Entwicklung dieser Kompo nente nicht beteiligt war Ziel ist es dass dieser zweite Entwickler sich tief in die erstellte Komponente einarbeitet Der Reviewer verfasst eine kurze Stellungnahme zum gew hlten Design und dessen Umsetzung Bei gr beren Fehlern kann auch eine nderung veranlasst werden obwohl die Unit Tests fehlerfrei liefen Auch hier f hrt das Vier Augen Prinzip
606. urde zur weiteren Verwendung aus erg mysql_query var setzt eine SQL Abfrage auf den Datenbankserver ab das Ergebnis ist je nach SQL Statement ein Resultset z B bei einer lesenden SZZLZCFAnwei sung oder ein Wahrheitswert z B bei einer schreibenden UPDATE Anweisung arr mysql_fetch_array liest eine Zeile aus einem Resultset Sresals Datenfeld aus mit varkann res var der Aufbau des Felds gew hlt werden Svar zMYSOL_ASSOC bildet ein assoziatives Feld Svar MYSOL_NUM bildet ein nummerisches Feld arr mysql_fetch_row res liest eine Zeile aus einem Resultset Sresals nummerisch indiziertes Datenfeld erg mysql_num_rows res liefert die Anzahl der Eintr ge in einem Resultset Tabelle 2 28 PHP Befehle f r den Zugriff auf eine MySQL Datenbank Forts Die Datenzugriffsschicht der Beispielanwendung ist in der Datei DBzugriff inc php reali siert und diskutiert worden Im zweiten Schritt muss nun ein HTML Frontend erstellt werden ber das Sie die Dienste aufrufen k nnen Dieses Formular besteht aus zwei Textfeldern zur Eingabe einer Aktiengesellschaft sowie eines Tages und zus tzlich aus drei Schaltfl chen diee die drei Dienste repr sentieren die von der Datenzugriffsschicht bereitgestellt werden n mlich m das Auslesen aller Aktiengesellschaften kein Eingabeparameter notwendig m das Anzeigen eines Kurses einer gegebenen Aktiengesellschaft zwei Eingabepara meter notwendig m das Berechnen des Kursmittelw
607. urn TRUE Listing 4 36 Die Klasse Student Forts Die Eigenschaften Matrikelnummer und das Datum der Immatrikulation sind nicht die einzigen Eigenschaften die ein Student mehr besitzt als eine gew hnliche Person Zus tzlich muss auch die Beziehung zu den belegten Praktika festgehalten werden Dazu wird ein Datenfeld praks definiert as die Referenzen auf die Praktikumsobjekte enthalten soll Zus tzlich wird die Anzahl der Praktika gespeichert an denen der Stu dent aktuell teilnimmt sowie die maximal m gliche Anzahl der Praktika als Konstante Der Konstruktor und die Get Methoden enthalten keinen spannenden Quellcode Die anmelden Methode pr ft mit instanceof zun chst den Datentyp des bergebenen Ein gabeparameters Ist es kein Praktikum so ist die Anmeldung fehlgeschlagen Dann wird die Liste der Praktika in einer foreach Schleife durchgegangen die der Student bereits besucht Ist die bergebene Referenz dort bereits vorhanden war der Student bereits angemeldet und der Anmeldevorgang endet erfolgreich Dann wird gepr ft ob der Stu dent bereits seine maximale Anzahl an Praktika gespeichert hat Wenn dies der Fall ist darf er sich nicht mehr f r ein weiteres Praktikum anmelden Dann beginnt die eigentliche Anmeldung bei der der Z hler der Teilnahmen erh ht und die Referenz auf das Praktikum gespeichert wird Dann muss das Praktikum noch ber die Teilnahme dieses Studenten informiert werden Der Student ruft als
608. usdruck entspricht m assertNotRegExp m assertType zur Pr fung auf Variablentypen m assertNotType Erstellung von gutem Quellcode Zus tzlich k nnen Sie selbst in Verzweigungen Pr fungen vornehmen indem Sie f r ung ltige Pfade die Methode fail string aufrufen um den Test als fehlerhaft zu kenn zeichnen Die Ausgabe der Konsolenanwendung ist in Abbildung 5 48 dargestellt Dabei werden zwei Tests durchgef hrt die als Resultat F erzeugen Der Punkt f r den ersten Test zeigt den Erfolg das F deutet auf das Fehlschlagen des zweiten Tests Zus tzlich wird die Dauer gemessen die die Tests f r ihre Ausf hrung ben tigen parth patils computer test parth phpunit ArrayTest PHPUnit 3 2 18 by Sebastian Bergmann 6 Time 8 seconds There was 1 failure 1 testArraylontainsAnE lement ArrayTest Failed asserting that lt integer 1 gt matches expected value lt integer 2 gt Vsers parth test ArrayTest php 23 FAILURES Tests 2 Failures 1 Abbildung 5 48 Konsolenausgabe von PHPUnit Weitere Informationen zu PHPUnit finden Sie unter http www phpunit de Funktionsf hige Skripte verwalten mit SVN Versionierung Gerade bei gr eren Projekten mit mehreren Entwicklern existiert h ufig eine Vielzahl von PHP Dateien Einige Entwickler editieren gerade einige dieser Dateien und f gen neue Funktionalit t hinzu Zwischendurch m ssen funktionsf hige Prototypen f r Kun den erstellt werden Bei einem Produkt wir
609. vereinigt Im Anschluss daran folgt im Header eine HTML Tabelle mit einer Zeile und sieben Spal ten in der sich jeweils HTML Formulare befinden die auf die vom Auftraggeber defi nierten Anwendungsf lle verweisen Sie bieten die Dienste an um Aktienbest nde aus der Datenbank zu laden Best nde wieder in die Datenbank abzuspeichern eine bersicht ber alle Best nde anzuzeigen und ggf einen Bestand auszuw hlen einen neuen Bestand anzulegen Aktien zu dem gew hlten Bestand hinzuzukaufen eine Dividende zu dem gew hlten Bestand hinzuzuf gen den gew hlten Bestand zu verkaufen Wenn genau ein Bestand in der Depotverwaltung existiert soll er stets angew hlt sein Wenn mehr als ein Aktienbestand existiert muss stets genau ein Bestand angew hlt sein Zu Beginn der Anwendung existiert jedoch noch kein Bestand in der Depotverwaltung Deshalb sind nur zwei Anwendungsf lle ausf hrbar n mlich m Aktienbest nde aus der Datenbank laden m einen neuen Bestand anlegen Das Fallbeispiel der Depotverwaltung Alle anderen Anwendungsf lle k nnen deaktiviert werden indem die entsprechenden Schaltfl chen im HTML Formular ber den Text disabled grau dargestellt und inaktiv gesetzt werden Genau dies geschieht ber die Ausgabe der Variablen status die entwe der den Wert disabled enth lt oder leer ist Die Footer Datei enth lt lediglich einen textuellen Copyright Hinweis und das Ende der HIML Datei lt center gt lt hr gt
610. versucht weitere Funktionalit t in der Version mit unter zubringen Dabei wird oft angemerkt dass einige Funktionen doch selbstverst ndlich sind Ohne diese Funktionen sei die zu erstellende Anwendung nicht funktionsf hig Dies ist dann problematisch wenn die aktuelle Iteration nicht das notwendige Design aufweist Termine nicht eingehalten werden k nnen oder die Kosten explodieren Begegnen kann man der Erschleichung von Funktionalit t durch einen offenen und ehr lichen Umgang aller Beteiligten an dem gemeinsamen Projekt Gleichzeitig sollten die Ergebnisse von Meetings und die erstellten Angaben zu Spezifikation stets von allen Beteiligten festgehalten und unterzeichnet werden Fragen Sie als Analytiker oft nach wenn Ihnen ein beschriebener Gesch ftsprozess der implementiert werden soll unvoll st ndig erscheint Eine iterativ inkrementelle Entwicklung mit Teilrechnungen ist auch oft f r alle Beteiligten ein effizientes Mittel um den berblick zu behalten Death Sprint Der Death Sprint entsteht durch die bereifrige Erf llung der n chsten Iteration Die Prototypen werden iterativ bereitgestellt jedoch in zu kurzen Zeitintervallen Aus Sicht des Kunden und sogar aus Sicht Ihres eigenen Managements sieht das Projekt zun chst erfolgreich aus da immer wieder neue Versionen mit neuen Eigenschaften abgeschlos sen werden Dabei leidet jedoch die Softwarequalit t was zun chst nur von den Entwicklern wahr genommen wird Das D
611. verwenden auch wenn der gleiche Name in der gleichen bersetzungs einheit vorkommt Dadurch dass er in unterschiedlichen Namensr umen erscheint ist jeder Name eindeutig auf Grund des Pfads im Namensraum zugeordnet Namensr ume k nnen in Verbindung mit einer Unterteilung der Anwendung in Kom ponenten durch ein UML Paketdiagramm dargestellt werden das die Struktur der zu erstellenden PHP Anwendung meist auf einer h heren Ebene skizziert Bei der Analyse und Modellierung von Gesch ftsprozessen werden Pakete oft benutzt um fachlich zusammengeh rende Teile des Modells zusammenzufassen Ein Paketdia gramm stellt eine bersicht der Gesch ftsprozesse dar beispielsweise eine Auftrags oder eine Rechnungsverwaltung Abbildung 4 18 skizziert eine kleine ERP Anwendung Enterprise Ressource Planning mit einer Kunden und Artikelverwaltung wobei jedem Kunden Rechnungen zugeord net werden k nnen die wiederum aus Rechnungspositionen bestehen die ihrerseits einen Bezug zu verkauften Artikeln besitzen Kundenverwaltung De name vorname Rechnung Rpos name vorname nummer menge datum rabatt Kundenverwaltung Artikelverwaltung name vorname ID beschreibung ek vk Abbildung 4 18 UML Paketdiagramm der Kunden und Artikelverwaltung Der Kern des ERP Systems besteht also aus einer Kunden und Artikelverwaltung die ihrerseits wieder aus einer Vielzahl v
612. weitere Abarbeitung des Skripts keinen Sinn mehr machen w rde beispielsweise bei einem fehlgeschlagenen Versuch eine Datenbankverbindung herzu stellen oder eine Datei zu ffnen lt php db NULL Datenbankverbindung existiert nicht if db NULL die lt html lt body gt lt h2 gt Keine Verbindung lt h2 gt lt body gt lt html gt echo Hallo lt html gt lt body gt lt h2 gt Datenbank ge ffnet lt h2 gt lt body gt lt html gt Listing 2 49 Das Ende eines Skripts In Listing 2 49 wird von einer Datenbankverbindung ausgegangen die in der Variablen db gespeichert ist Diese Variable ist zurzeit NULL da wir noch keine Verbindung zu einer Datenbank aufbauen k nnen In diesem Fall f hrt die Verzweigung zum die Befehl Sobald der PHP Interpreter den die Befehl interpretiert wird der Inhalt des Parameters in der die Funktion an den Internetbrowser des Clients gesendet Die Verarbeitung des Skripts endet dann sodass die Meldung Hallo nicht mehr ausgegeben wird Mit objektorientierten Methoden steht Ihnen ber die try catch Konstuktion eine wesent lich komplexere Fehlerbehandlung zur Verf gung die im vierten Kapitel dieses Buchs erl utert wird Dateien einbinden mit require und include Statische HTML Seiten haben den Nachteil dass sie nicht aus anderen HTML Seiten zusammengesetzt werden k nnen Es gibt also keinen HTML Befehl der eine andere 58 entwickler press Grundlegende Syntax
613. wendungen bei denen PHP statische HTML Seiten erg nzt Dazu geh rt Fol gendes m Auswertung von ausgef llten HTML Formularen m Einf hrung von Sessions u a zur Realisierung von Warenk rben Weiterleitung auf andere Seiten m Lesen und Schreiben von Dateien Zugriff auf einen FTP Server zum Dateitransfer Zugriff auf eine MySQL Datenbank Automatischer Versand von E Mails m Auslesen und Parsen von anderen Homepages HTML Formulare auswerten Ein typischer Anwendungsfall f r PHP Skripte liegt in der Auswertung von ausgef ll ten HTML Formularen um die Daten des Formulars in eine Datenbank einzutragen Im ersten Schritt wird ein HIML Formular ben tigt das f r den Testfall aus einem Textfeld einer Checkbox einer DropDown Box und drei verschiedenen Schaltfl chen zum Sen PHP Endlich objektorientiert 69 2 Die Sprache PHP Prozedural den der Daten an ein PHP Formular besteht Abbildung 2 10 zeigt den Aufbau des HTML Formulars Param Param Param3 Wert v Dienst 1 Dienst2 Dienst 3 Abbildung 2 10 Ein HTML Formular mit Steuerelementen Das Hyptertext Iransfer Protokoll HTTP erlaubt zwei Methoden um ausgef llte For mularelemente von einem Internetbrowser des Clients auf dem Webserver zur ckzusen den Der Quellcode in Listing 2 59 zeigt den Aufbau des HTML Formulars das mit der GET Methode zum Webserver zur ck gesendet wird Die Daten werden dabei ber
614. wickler press Grundlegende Syntax Im Beispiel des Listings 2 44 wird eine Menge von Ganzzahlen in einer for Schleife durchlaufen Die Bedingung der Verzweigung innerhalb der for Schleife entscheidet dann ob eine Ausgabe stattfindet oder nicht In diesem Beispiel werden nur ungerade Zahlen ausgegeben lt html gt lt body gt lt php for i 0 i lt 50 i if i 2 0 continue echo i lt br 2 lt body lt html gt Listing 2 44 Ausgabe der Elemente eines Felds beschr nken mit continue Auch in diesem Fall l sst sich die L sung eleganter ohne den continue Befehl formulie ren indem der Schleifenkopf zu for i 0 i lt 50 i 2 ge ndert wird Auf diese Weise verhindern Sie unn tige Schleifenpr fungen von geraden Zahlen 21 5 Funktionen In den bisherigen Beispielen haben Sie bereits mehrfach Funktionen verwendet ohne dass bislang die Verwendung von Funktionen in PHP genau beschrieben wurde Ein Bei spiel ist der Aufruf gefunden in_array suche data in Listing 2 43 Wie eine mathem atische Funktion a f x y bekommt die oben genannte PHP Funktion zwei Parameter als Eingabe und liefert einen Parameter als Ausgabe der in der Variablen gefunden gespei chert wird In der Objektorientierung werden Funktionen auch als Methoden oder Ope rationen bezeichnet PHP liefert bereits eine Vielzahl an Funktionen die Sie verwenden k nnen Dazu geh ren Funktionen zum Zugriff auf Datenfelder f r mathematische B
615. wird als Driver bezeichnet er h lt das Steuer in der Hand Der zweite Entwickler der Navigator beh lt den etwas entfernteren berblick ber die Entwicklung W hrend der Paarprogrammierung herrscht jedoch keine Arbeitsteilung die Rollen zwischen Dri ver und Navigator wechseln alle 15 bis 30 Minuten Das Mobiliar des Arbeitsplatzes muss nat rlich entsprechend eingerichtet sein damit die Entwickler ihre Rollen auch angenehm wahrnehmen und ihre Unterlagen ausbreiten k nnen dass beide jederzeit Einsicht nehmen k nnen ohne dass Chaos entsteht Au er dem sollten sich maximal 2 bis 3 Paare in einem Raum befinden da die Ger uschkulisse sonst unangenehm sein k nnte Die Unterbrechungen w hrend der Programmiersession sollten minimiert werden ins besondere muss auf das Telefonieren und das Abrufen bzw Beantworten von E Mails verzichtet werden Dies erfordert nat rlich eine gewisse Selbstdisziplin Circa alle 2 Stunden oder wenn sich beide Partner an einem Problem festgefahren haben sollte eine Pause eingerichtet werden die dann nach M glichkeit nicht am Arbeitsplatz statt findet Ein traditionell orientiertes Unternehmen wird an dieser Stelle die Frage stellen warum es zwei Entwickler bezahlen muss obwohl nur einer arbeitet Die Antwort liegt darin dass das Entwickeln wesentlich mehr ist als reines Coding Kennen Sie als Entwickler das Gef hl vor einem Problem zu sitzen und absolut keine L sung zu finden Sie betrachten oft sehr
616. wird der Index des Datenfelds tn bestimmt damit der Teilnehmer eindeutig wiedergefunden werden kann Im Anschluss daran wird ein neues Teilnehmerobjekt angelegt und dem Feld zugewiesen Abschlie end wird das Geschlecht des existieren den Teilnehmers mit dem gleichnamigen Attribut aus der XML Datei belegt das ebenso wie die ID ber das Feld atts aus der XML Datei ausgelesen wurde Wenn der Parser Text zwischen einem ffnenden und einem schlie enden Element ermittelt hat entfernt die Methode cData f hrende und folgende Leerzeichen durch die trim Methode Die Daten werden dann tempor r in der Eigenschaft daten abgelegt Die Methode ende wertet die schlie enden Elemente lt name gt lt vorkenntnis gt und lt vor kenntnisse gt aus Wird das schlie ende Element lt name gt entdeckt wird die Zeichenkette aus cData die sich in der Eigenschaft daten befindet dem aktuellen Teilnehmer zuge wiesen Beim schlie enden Element lt vorkenntnis gt wird die ermittelte Vorkenntnis aus daten der Liste der Vorkenntnisse des Teilnehmers hinzugef gt Diese Liste besteht zur Vereinfachung lediglich aus einer Zeichenkette wobei die Vorkenntnisse durch einen HTML Zeilenumbruch getrennt sind In einer realen Anwendung w rde daf r nat rlich ein separates Datenfeld verwendet Ist die Liste der Vorkenntnisse in der XML Datei durch lt vorkenntnisse gt vollst ndig so ist der aktuelle Teilnehmer vollst ndig abgearbeitet Nach dem P
617. wort zum Beispiel als HTML Tabelle Die Ausgabe des PHP Skripts wird dann ber den Webserver als Antwort der Anfrage zum Client zur ckge sendet Um einen solchen Zugriff zu erm glichen m ssen zun chst Tabellen in der Datenbank vorhanden sein Das installierte XAMPP Paket beinhaltet neben dem Webserver Apache und der Skriptsprache PHP auch eine Installation der Datenbank MySQL sowie ein bekanntes Tool zur Administration der Datenbank Dieses Tool wird phpMyAdmin genannt und ist selbst in PHP programmiert worden Starten Sie ber das XAMPP Control Panel zun chst Apache und MySQL und rufen dann http localhost xampp auf Im Hauptmen auf der linken Seite finden Sie unter Tools einen Link auf phpMyAdmin Alternativ dazu k nnen Sie auch direkt http localhost phpmyadmin aufrufen ber HTML Formulare k nnen Sie nun eine neue Datenbank anlegen Als Beispielanwendung wird eine Datenbank mit dem Namen boerse angelegt Innerhalb der Datenbank k nnen Sie nun Tabellen anlegen Im Beispiel wird die Tabelle ag angelegt in der die Namen der Aktiengesellschaften hinterlegt sind Zus tzlich exis tiert eine Tabelle kurse in der die Kurse der letzten 30 Tage f r jede Aktiengesellschaft festgehalten wird Die Datenbank mit ihren beiden Tabellen wird in Abbildung 2 12 im phpMyAdmin Tool dargestellt 84 entwickler press Erweiterte Funktionen localhost 7 localhost boerse phpMyAdmin 3 1 3 1 Windows Internet Explorer Jog go
618. x html Dokumentieren mit PHPDocumentator In der Java Welt hat sich seit einigen Jahren die Erstellung von Quellcodekommentaren unter Verwendung der Java Doc etabliert Die Idee besteht darin Quellcodekommentare in einem bestimmten Stil so zu erzeugen dass sie selbst automatisch interpretiert werden k nnen Die Zeiten in denen separate Quellcodedokumentationen leidvoll in einem Textverarbeitungsprogramm erstellt wurden sind also vor ber Das ber Kommandozeile oder auch ber Webinterface bedienbare Werkzeug PHPDo cumentator ist auf der englischsprachigen Internetseite http www phpdoc org kostenfrei erh ltlich und kann ebenso wie PHPUnit unter Verwendung des PEAR Installers instal liert werden Neben einem Handbuch finden Sie auf dieser Homepage auch umfangrei che Tutorials zur Verwendung des PHPDocumentators Hinweis Eine Quellcodedokumentation ist selbstverst ndlich nicht die einzige Dokumenta tion die zu erstellen ist Die Aufgabe ggf ein Benutzerhandbuch f r die Interaktion von Anwendern mit Ihrer PHP Anwendung zu erstellen bleibt Ihnen nat rlich nicht erspart Erstellung von gutem Quellcode Um Kommentare interpretieren zu k nnen ist eine entsprechende Metasprache erfor derlich die bei PHPDocumentator eng an die Java Doc angelehnt ist Listing 5 29 zeigt beispielhaft die Kommentierung einer selbstgeschriebenen PHP Funktion foo foo liefert bar bar zur ck author Dr Frank Dopatka version
619. ysql_connect ausgef hrt Im zwei ten Schritt verbinden Sie sich dann mit einer Datenbank auf dem Server unter Verwen dung des Befehls mysql_select_db in unserem Beispiel mit der Datenbank boerse Wenn beides erfolgreich ist gibt die eigene Funktion den Wert TRUE ansonsten FALSE zur ck Das Schlie en der Verbindung zum Datenbankserver soll mit der Funktion DB_close erfolgen Diese verwendet lediglich den Befehl der eine offene Verbindung wieder schlie t PHP Endlich objektorientiert 89 2 Die Sprache PHP Prozedural Profitipp In diesem Buch wird als Benutzer stets root ohne Kennwort vergeben Das ist aus Gr nden der Sicherheit nat rlich nicht akzeptabel und darf lediglich zu Testzwecken verwendet werden Mit diesen Benutzerrechten k nnen bei einer manipulierten Ein gabe in das Skript ganze Tabellen gel scht werden unter anderem auch die Tabelle der m glichen Benutzer des MySOL Servers Auf diese Weise kann also der gesamte Datenbankserver lahmgelegt werden Oder ein Angreifer kann Zugriff auf pers nli che Daten nehmen die nach dem Datenschutzgesetz nicht zugreifbar sein d rften Die Verwendung von Administratorrechten f r diese Zugriffe stellt dann eine fahr l ssige Handlung dar bei der Sie als Programmierer unter Umst nden haftbar gemacht werden k nnen Abschlie end kapselt der erste Teil der DBzugriff inc php die Funktion DB_error die MySOQL Funktion mysql_error bei der detailliertere Angaben ber die let
620. ystem des Webservers Forts Als besondere Funktion ist fgetcsv zu betonen die eine Zeile aus einer CSV Datei ausliest und als Datenfeld im Ergebnis zur ck liefert Das CSV Format wird von einer Vielzahl von Anwendungen wie SAP und Microsoft Excel zum Datenaustausch angeboten Mit hilfe dieser Funktion k nnen Sie also unter anderem einen Datenimport aus einer Fremdanwendung realisieren FTP Funktionen Eine bliche Methode um Dateien von einem Client zu einem Server zu bertragen ist die Verwendung des FTP Protokolls File Transfer Protocol W hrend ber HTTP als Anwendungsprotokoll statischer HTML Code und HTML Formulare bertragen wer den ist FIP f r den Transfer von Dateien zust ndig Das Hochladen auf den FTP Server und das Herunterladen von Dateien vom FTP Server zum Client funktioniert hnlich wie das im letzten Kapitel vorgestellte Lesen und Schrei ben von Dateien aus PHP heraus Sie m ssen Folgendes tun 1 eine Verbindung zum FTP Server herstellen 2 eine oder mehrere Dateien hoch und oder herunterladen 3 abschlie end die ge ffnete Verbindung wieder schlie en Im Folgenden soll beispielhaft eine einzelne Datei vom Client zum Server hochgeladen werden Sie brauchen die folgenden Parameter um einen solchen Transfer durchzuf h ren m die Adresse des FTP Servers m den FTP Benutzernamen mit dem Sie sich am FTP Server anmelden m das FTP Kennwort mit dem Sie sich am FTP Server anmelden den Pfad und den Na
621. zeitlichen Ablauf dar W hrend also die Anforderungen an die Benutzer noch spezifiziert werden werden bereits die Anforderungen an die Entwickler beschrieben Auch die Problemstellung muss noch nicht vollst ndig ausgearbeitet sein Und es k nnen bereits erste kleine Teile des Systems entworfen werden Die Phasen gehen also flie end ineinander ber DE System Anforderungen K eeneeeeeonseeennssennsreonsereennsrenssrenneternnneeenn 2 nehmetest Verwendbares an die Benutzer System Anforderungen ken Systemtest 7 Ausf hrbares i an die Entwickler System t Entwurf des Y Konstruktion Zeit Detail Grad Systems Test der Anforderungen La Ausf hrbare l t SEN Komponenten Abbildung 3 3 Das deutsche V Modell aus dem Jahre 1986 l Integration J an die Komp Cam Validation Entwurf der Komponenten Die Y Achse des V Modells beschreibt wie tief man in die technische Realisierung blickt W hrend der Bedarf und die Anforderungen meist vom Management und den Benut zern in einer sehr groben und funktionsorientierten Weise beschrieben werden Was brauchen wir Was soll die Anwendung k nnen betrachtet der Entwickler die ein Prozedurale und modulare Programmierung zelnen Komponenten der zu entwickelnden Software ffnen einer Datenbankverbin dung HTML Formular ausf llen und pr fen W hrend einzelne Module noch vom Entwickler selbst getestet werden wi
622. zte Fehlermel dung beim Datenbankzugriff ausgegeben werden k nnen Sie fragen sich vielleicht aus welchem Grund eine einzelne Funktion in einer anderen Funktion mit allgemeinerem Namen verpackt wird Der Grund daf r liegt darin dass alle Funktionen die einen Bezug zum MySQL Server haben ausschlie lich in einer einzelnen Datei abgelegt sein sollen Das bildet die Datenzugriffsschicht Ihre Anwendung verwendet dann diese Datei um wiederum Funktionen der Fachlogik verwenden zu k nnen lt php function DB_open DB_Host localhost DB_Benutzername root DB_Passwort DB_Name boerse 0k mysql_connect DB_Host DB_Benutzername DB_Passwort if 0K return FALSE else if mysql_select_db DB_Name 1 return TRUE else return FALSE function DB_close mysql_close function DB_error return mysql_error Listing 2 67 Einzubindende Datei DBzugriff inc php erster Teil 9 entwickler press Erweiterte Funktionen Die f r die Fachlogik interessanten Funktionen des Datenzugriffs werden im zweiten Teil der DBzugriff inc php realisiert Dabei werden drei Dienste angeboten die Daten aus der Datenbank auslesen m DB_AGs liest alle Aktiengesellschaften aus der Datenbank und gibt die Namen als Datenfeld von Zeichenketten zur ck m DB_MW AG liefert den Mittelwert aller B rsenkurse einer Aktiengesellschaft deren Name als Parameter bergeben wird m DB_Kurs AG tag gib
623. zumeist ein Projektmanager der jedoch oft selbst kein Benutzer der Software ist In manchen F llen stammt der Projektmanager aus der EDV Abteilung des Kunden er kann jedoch auch ein F hrungsmitglied der Fachebene also der jeweiligen Fachdom ne sein blich ist auch dass bei Ihrem Kunden eine eigene EDV Infrastruktur existiert in die Ihre Anwendung einzugliedern ist Es ist nicht selbst verst ndlich dass in gr eren Unternehmen ein externer Provider Ihre PHP Anwen dung hostet Ein entsprechender WAMP oder LAMP Server kann auch vom Kunden selbst betrieben und in seine eigene Systemlandschaft beispielsweise zu einem SAP Sys tem integriert werden Existiert ein Projektmanager so d rfen die Anwender die die Software letztlich bedie nen als prim re Stakeholder auch in fr hen Projektphasen nicht vergessen werden Auf h herer Managementebene existiert beim Kunden meist noch separat ein Geldgeber dem der Projektmanager des Kunden fachlich untergeordnet ist Die Abteilung des Ein kaufs auf der Kundenseite muss von Ihrem Unternehmen davon berzeugt werden die Software in Ihrem Hause entwickeln zu lassen Eine Vielzahl an Interessen Festzuhalten ist dass sowohl auf der Seite Ihres eigenen Unternehmens als auch auf der des Kunden insbesondere bei gro en Projekten eine Vielzahl von Projektbeteiligten eine Rolle spielen die jeweils ihren eigenen fachlichen und oder technischen Hintergrund besitzen und in der Regel neben dem Erfo
624. zuspeisen m Name und Vorname m ggf Firmenname m Anschrift mit Stra e Hausnummer PLZ und Ort m ggf Telefonnummer m ggf E Mail Adresse Zwingt die Pr sentationsschicht den Bediener diese Daten in einer anderen Reihenfolge als die oben genannte einzugeben so wird der Bediener die Anwendung als st rend empfinden da die Eingabe nicht dem nat rlichen Erfassen der Daten aus dem Alltag entspricht Zus tzlich dazu muss die Pr sentationsschicht mit ihrem Design und der Farbwahl in die Corporate Identity des Unternehmens eingebunden sein Dies gilt insbesondere f r PHP Anwendungen die direkt dem Endkunden zur Verf gung gestellt werden wie es bei B2C B2B oder B2E Portalen der Fall ist Des Weiteren kann bereits in der Pr sentationsschicht eine Vorgabe f r das Format einer Eingabe festgelegt werden Diese wird dann nach der bergabe an die Fachlogik auf ihre G ltigkeit gepr ft Bei der Verwendung von Freitextfeldern hat der Entwickler der Pr sentationsschicht die wenigsten Probleme die Pr fung der Eingabe und die einheitliche Ablage in der Datenbank erfordert jedoch einen stark erh hten Aufwand Im Folgenden werden einige M glichkeiten zur Eingabe einer Telefonnummer vorgestellt 016098369800 0160 98369800 0160 98369800 49 0 160 98369800 004916098369800 Wenn verschiedene Mitarbeiter Telefonnummern anlegen k nnen werden Sie bei einer Freitexteingabe all diese Formate in der Datenbank finden Eine M

Download Pdf Manuals

image

Related Search

Related Contents

N°7 - Office International de l`Eau  Oregon Scientific BAR808HG  簡易ティーチングボックス RCA-E 取扱説明書第9版  Shark Pro.book  User`s Manual LUNA PAR - G  Manuel d`utilisation Taille haie thermique HT-260B - BC  共通取扱説明書 - トウプラスエンジニアリング  DX超合金 YF-29 デュランダルバルキリー(イサム機)取扱説明書  シャワー・ド・バス  MANUAL DO UTILIZADOR  

Copyright © All rights reserved.
Failed to retrieve file