ebook img

Aspekt-Orientierung in PHP Diplomarbeit PDF

76 Pages·2012·0.52 MB·German
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Aspekt-Orientierung in PHP Diplomarbeit

Fachbereich4:Informatik Aspekt-Orientierung in PHP Diplomarbeit zurErlangungdesGradeseinesDiplom-Informatikers imStudiengangComputervisualistik vorgelegtvon Markus Schulte Erstgutachter: Prof.Dr.RalfLämmel InstitutfürInformatik Zweitgutachter: M.Sc.InformatikAndreiVaranovich InstitutfürInformatik Koblenz,imSeptember2012 Erklärung Ich versichere, dass ich die vorliegende Arbeit selbständig verfasst und keineanderenalsdieangegebenenQuellenundHilfsmittelbenutzthabe. Ja Nein (cid:3) (cid:3) Mit der Einstellung der Arbeit in die Bibliothek bin ich ein- verstanden. (cid:3) (cid:3) Der Veröffentlichung dieser Arbeit im Internet stimme ich zu. ................................................................................ (Ort,Datum) (Unterschrift) Inhaltsverzeichnis 1 Einleitung 1 1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 AufbauderDiplomarbeit . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Grundlagen 4 2.1 OOPundCross-CuttingConcerns . . . . . . . . . . . . . . . . . . . 4 2.2 Aspekt-OrientierteProgrammierung . . . . . . . . . . . . . . . . . . 5 2.2.1 Sprachkonstrukte . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2.2 Weben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.1 GeschichtlicheEntwicklung . . . . . . . . . . . . . . . . . . . 8 2.3.2 SpracheigenschaftenvonPHP . . . . . . . . . . . . . . . . . 8 2.3.3 PHP-Ausführung . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3.4 Opcode-Caching . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3.5 Autoloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3.6 include_path . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.3.7 stream-wrapper . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.3.8 Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.3.9 Reflexion-API . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.3.10 PHPUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3 AnforderungenaneineAOP-PHP-Lösung 21 3.1 MinimaleAnforderungen . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2 OptionaleAnforderungen . . . . . . . . . . . . . . . . . . . . . . . . 21 4 RelevanteSprachunterstützung 23 4.1 Java:AspectJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 i 4.2 Ruby:Metaprogrammierung . . . . . . . . . . . . . . . . . . . . . . 25 4.3 Context-OrientierteProgrammierung . . . . . . . . . . . . . . . . . 26 5 AlternativeninPHP 29 5.1 Reflexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.2 Traits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6 StandderDingevonAOPinPHP 33 6.1 InaktiveProjekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6.1.1 AOPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6.1.2 AspectPHP/GAP . . . . . . . . . . . . . . . . . . . . . . . . 34 6.1.3 MFAOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.1.4 WeitereProjekte . . . . . . . . . . . . . . . . . . . . . . . . . . 37 6.2 AktiveProjekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.2.1 Flow3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.2.2 AOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 7 YetanotherPHPAspectFramework(YAPAF) 44 7.1 KonzeptionellerÜberblick . . . . . . . . . . . . . . . . . . . . . . . . 44 7.2 EinbindenderUmsetzungvonAspekten . . . . . . . . . . . . . . . 45 7.3 Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 7.3.1 Aop.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 7.3.2 libs/StreamWrapper.php . . . . . . . . . . . . . . . . . . . . 47 7.3.3 libs/Weaver.php . . . . . . . . . . . . . . . . . . . . . . . . . 48 7.3.4 libs/annotations.php . . . . . . . . . . . . . . . . . . . . . . . 48 7.4 AnwendenvonAspekten . . . . . . . . . . . . . . . . . . . . . . . . 50 7.5 Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.6 Validierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.6.1 Funktionalität . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.6.2 Anforderung . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 7.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 8 ZusammenfassungundAusblick 58 Literaturverzeichnis 60 Abkürzungsverzeichnis 64 Glossar 66 Tabellenverzeichnis 69 Listings 70 Kapitel 1 Einleitung 1.1 Motivation Objekte-Orientierte Programmierung (OOP) stellt das Programmierparadigma derGegenwartdar,57%deraktuellenProgrammiersprachensindObjekt-Orien- tierte[Tio].DieweiteVerbreitungderOOPergibtsichausdenVorteilenwährend derSoftware-EntwicklungfürdieBeteiligten,wieetwaEntwicklerundSoftware- Architekten.OOPermöglichtes,sehrkomplexeSystemesoweitzuzerlegen,dass eineinfachesVerständnisdesGesamtsystemsbeigleichzeitigemVerständnisder Anwendungsdetailsmöglichist.NichtsdestotrotzbietetdasOOP-Paradigmanicht füralleAnforderungenaneinSoftware-SystemeinenLösungsansatz. Ein spezielle Art von Anforderung in der Software-Entwicklung stellen die Cross-CuttingConcerns(CCCs) dar. Dabei handelt es sich um Anforderungen, diesichinvielenbishinzusämtlicheSchichteneineransonstenmodularisierten Softwarefinden.DasOOP-ParadigmabietetfürdieseArtvonAnforderungauf- grund der Idee der Funktionalitäts-Kapselung in einer Modul-/Klassen-Hierar- chiekeinendirektenLösungsweg,sodasseinzelneCCCsinsämtlichenSchichten derSoftwaresemantischwiederholtbehandeltwerden. Die Problematik der CCCs und eine mögliche Unterstützung in Form des Aspekt-OrientierteProgrammierung(AOP)-Paradigmaswurdenbereits1997vor- gestellt[Kic+97].DasTeamumKiczaleserfasstedieseArtderAnforderungenan eine Software und erarbeitet eine mögliche Lösung in Form der Aspekt-Orien- tierten Programmierung. Als Ergänzung des OOP-Paradigmas ermöglichen es 1 1.2. AUFBAUDERDIPLOMARBEIT 2 Aspekte,dieseArtderBelangezuzentralisierenundgleichzeitigsicherzustellen, dassauchspätereSoftware-ErweiterungendieCCCsbehandeln. Die weit verbreitete Programmiersprache PHP bietet keine native Möglich- keit,CCCszuunterstützen.DienegativenAuswirkungendermangelndenCCCs- UnterstützungdurchziehensomiteineinPHPgeschriebeneSoftwareundimpli- zieren,dassdieSoftwareschwererzuverstehen,zutestenundzuwartenist. AndereProgrammiersprachennebenPHPunterstützenCCCsdurchAOPod- er andere Ansätze. Für die Sprache PHP selbst wurden Versuche unternommen, diefehlendeUnterstützungzuergänzen.DiemeistendieserVersuchesindnicht (mehr) verwendbar, auch die aktiven Projekte können nicht alle Anforderungen desAOP-Paradigmaserfüllen. Diese Diplomarbeit hat das Thema der fehlenden CCCs-Unterstützung in PHP zum Inhalt. Die Basis bilden zu definierende Anforderungen an eine AOP- Realisierung im PHP-Umfeld. Es wird analysiert, wie und ob verwandte Spra- chen und Paradigmen es gestatten, CCCs zu unterstützen. Darüber hinaus wird dieMöglichkeiterörtert,AOPinPHPohnePHP-Erweiterungzurealisieren.Wei- ter werden die bisherigen Ansätze, AOP in PHP umzusetzen, qualitativ unter- sucht. Die vorliegende Arbeit zielt darauf ab, eine eigene AOP-PHP-Lösung zu präsentieren,dienichtdieSchwächenexistierenderLösungenteilt. 1.2 Aufbau der Diplomarbeit Zu Beginn dieser Diplomarbeit werden dem Leser in Kapitel 2 die notwendigen Grundlagen präsentiert. Zunächst wird in die Herausforderung der CCCs ein- geführt.AufbauendhieraufwirddieAspekt-OrientierteProgrammierungvorge- stellt. Den Abschluss des Kapitels bildet eine Vorstellung der Programmierspra- che PHP, wobei auf Spezifika der Sprache bzw. der Sprachumgebung eingegan- genwird,dieindieserDiplomarbeitvonBelangsind. AnschließendwerdendieAnforderungenaneineAOP-PHP-LösunginKapi- tel 3 analysiert. Es wird dokumentiert, welche minimalen Anforderungen solch eine Lösung erfüllen muss, und welche Anforderungen darüber hinaus die Lö- sungerfüllensollte. Im 4. Kapitel wird das Thema der CCCs außerhalb des PHP-Kontextes be- trachtet. Mit AspectJ wird eine AOP-Implementierung in der Programmierspra- cheJavavorgestellt,welchealsReferenzimplementierunggesehenwerdenkann. 1.2. AUFBAUDERDIPLOMARBEIT 3 Die Möglichkeit der Metaprogrammierung in der Objekt-Orientierten Program- mierspracheRubybieteneinenEinblickindie(teilweise)UnterstützungvonCCCs ohne die Notwendigkeit, AOP anzuwenden. Das in diesem Kapitel vorgestellte Context-OrientierteProgrammierung(COP)-Paradigmabietetu.a.einenalterna- tivenAnsatzzuAOP,umCCCs(teilweise)zuunterstützen. ImfolgendenKapitel5wirddieMöglichkeitanalysiert,inderaktuellenPHP- Umgebung AOP ohne weitere Sprachanpassung anzuwenden. Dabei wird die UmsetzungdurchPHP-ReflexionoderTraitsbehandelt. Anschließend beschäftigt sich das Kapitel 6 mit den bisherigen Ansätzen, AOPinPHPzuunterstützen.EswerdendieinaktivenundaktivenProjektevor- gestellt und die relevanten Projekte an den definierten Anforderungen an eine AOP-PHP-LösungausKapitel3evaluiert. In Kapitel 7 wird eine im Zuge dieser Diplomarbeit entwickelte AOP-PHP- Lösung namens YAPAF beschrieben und diskutiert. Aus diesem Grund werden daszugrundeliegendeKonzeptsowiedessenUmsetzungpräsentiert.Dermögli- che Einsatz der entwickelten Lösung wird anhand der Realisierung von Depen- dencyInjection(DI)alsAnwendungsbeispielerläutert. Im abschließenden Kapitel 8 werden die Ergebnisse dieser Diplomarbeit zu- sammengefasstundanalysiert,sowieeinAusblickaufmöglicheweitereEntwick- lungengegeben. Kapitel 2 Grundlagen DiesesKapitelumfasstdasnötigeGrundlagenwissen,aufdemdiefolgendenKa- pitelaufbauen. Kapitel2.1gibteineallgemeineEinführungindasThemaCross-CuttingCon- cerns und erklärt diese im Kontext der Objekt-Orientierten Sprachen. Das an- schließende Kapitel 2.2 ist eine Einleitung in das Thema Aspekt-Orientierung. Das Kapitel 2.3 beschäftigt sich mit der Programmiersprache PHP. Nach einer Einführung in die Sprache und der Wiedergabe der geschichtlichen Entwick- lungwerdenPHP-Spezifikaanalysiert,dieindieserDiplomarbeitvonBedeutung sind. 2.1 OOP und Cross-Cutting Concerns Die Objekt-Orientierte Programmierung stellt das derzeit verbreiteste Program- mierparadigma dar (vgl. Kapitel 1.1). Eine typische OOP-Software wendet die folgendenSoftwaretechnik-Prinzipienan:Abstraktion,Hierarchisierung,Modu- larisierung, Geheimnisprinzip, Lokalisierung und Einfachheit [Som06]. So wird aus einer komplexen Anforderung nach dem „Divide-and-conquer“-Prinzip ei- ne Software bestehend aus Schichten, Paketen bzw. Modulen und zuletzt Klas- sen. Jedes Teilsystem übernimmt klar abgegrenzte Aufgabengebiete, wobei eine Aufgabegenaueinmalumgesetztwird.DieseübersichtlicheStrukturwirddurch CCCsgestört.EinConcernumfassteineAnforderung,diesichebennichtaufein TeilsystemsondernaufeineVielzahlvonTeilsystemenerstreckt[Kic+97]. 4 2.2. ASPEKT-ORIENTIERTEPROGRAMMIERUNG 5 Ein triviales Beispiel sei eine Model View Controller (MVC)-Applikation mit Zugriff auf ein Enterprise Information System (EIS). Der Zugriff auf dieses EIS kann aus sämtlichen Schichten der Applikation erfolgen. Eine Anforderung soll sein, die tatsächliche Ausführungsdauer zugehörig zu einer Anfrage ans EIS zu messen. In einem klassischen OOP-Ansatz muss an jeder EIS-aufrufenden Co- destelle ein Tracing implementiert werden. Es entstehen die Gefahren von se- mantischem Copy and Paste (C+P): Es kann beispielsweise bei neuen Modulen vergessenwerden,dasTracingzuimplementieren;oderÄnderungenamTracing werden nicht an allen nötigen Vorkommen durchgeführt. Das AOP-Paradigma beschäftigtsichmitdiesenÜberlegungenundbieteteinemöglicheLösung,CCCs in einer OOP-Software zu ermöglichen, ohne o.g. Nachteile in Kauf nehmen zu müssen. 2.2 Aspekt-Orientierte Programmierung AOP hat den Zweck, die Umsetzung eines CCCs (vgl. Kapitel 2.1) an zentra- ler Stelle zu implementieren, so dass dieser Concern nicht die gesamte Software durchzieht.DieKapselungerfolgtdabeiinsogenannten„Aspekten“.Kiczaleset al.definierenbeiihrerVorstellungvonAOP1997Aspektewiefolgt:„[Aproper- ty is] An aspect, if it can not be cleanly encapsulated in a generalized procedu- re.“[Kic+97].ImGegensatzhierzustehenKomponenten,diesichsauberkapseln lassen,beispielsweiseinKlassen. Das Ziel von AOP ist es, Komponenten und Aspekte sauber voneinander zu trennen, und so disjunkte Funktionalitäts-Bereiche zu schaffen, die den softwa- retechnischenPrinzipiengenügen(vgl.Kapitel2.1).EinAOP-Programmbesteht demnachausKomponentenalsauchAspekten,diezusammendieGesamtfunk- tionalitätergeben. 2.2.1 Sprachkonstrukte UmAspektezurealisierenführtdieAspekt-OrientierungneueSprachkonstrukte ein,welchedieOOP-SprachweltausKlassen,Methodenu.v.m.ergänzen[Kic+01]. JoinPoint EinJoinPointdefinierteinenPunktderProgrammlogikeindeutig,bei- spielsweisedasLeseneinerKlassenvariablen.JoinPointsdienendamitder KoordinationvonbestehenderProgramm-undAspektlogik.

Description:
6 Stand der Dinge von AOP in PHP. 33. 6.1 InaktiveProjekte . Context-Orientierte Programmierung (COP)-Paradigma bietet u. a. einen alterna- . die Abkürzung für „Personal Home Page/Forms Interpreter“ und in Perl ge- schrieben Ein Beispiel für eine Regel der Grammatik ist die Regel „unticked
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.