08.12.2012 Aufrufe

2 UML-based Web Engineering - UWE - Ludwig-Maximilians ...

2 UML-based Web Engineering - UWE - Ludwig-Maximilians ...

2 UML-based Web Engineering - UWE - Ludwig-Maximilians ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

mit Werten versehen oder, noch schlimmer, in die Geschäftslogik miteinbezogen werden.<br />

Neben dieser Problematik ergab sich eine weitere Schwierigkeit bei der Abbildung der PVS-<br />

Modellschicht auf Datenbankebene, welche die Mehrfachvererbung in der Publikations-<br />

Vererbungshierarchie betrifft 69 . Ruby erlaubt zwar keine Mehrfachvererbung, unterstützt<br />

jedoch eine Konstruktion, die auf sogenannten Modulen basiert und mit der<br />

Mehrfachvererbung simuliert werden kann. Module sind im Wesentlichen<br />

Methodensammlungen, die einen eigenen Namensraum bereitstellen, jedoch im Gegensatz zu<br />

Klassen nicht instantiierbar sind. Trotzdem können in Modulen Instanzmethoden deklariert<br />

werden: Diese Methoden können zwar niemals von Instanzen des Moduls aufgerufen werden<br />

(da es diese nicht gibt); allerdings besteht die Möglichkeit, Module in gewöhnliche Klassen<br />

zu inkludieren. Damit erhält die Klasse das gesamte Methodenarsenal des integrierten<br />

Moduls, insbesondere können Instanzen der Klasse die Instanzmethoden des Moduls<br />

aufrufen. Somit verhält sich das 'eingemischte' Modul zu einem bestimmten Grad wie eine<br />

ordentliche Superklasse. Ruby erlaubt die Inkludierung beliebig vieler Module in ein und<br />

dieselbe Klasse – eine solche Klasse besitzt dann mehrere 'Pseudo'-Superklassen, was einer<br />

Mehrfachvererbung gleichkommt.<br />

Leider konnte dieser Simulationsmechanismus nicht eingesetzt werden, um die<br />

Klassenstruktur des PVS-Inhaltsmodells so zu realisieren, dass sie gleichzeitig auch<br />

angemessen auf Datenbankebene abgebildet werden kann. Die beiden Klassen, von denen<br />

mehrfach-geerbt werden soll (AuthorPublication und EditorPublication)<br />

besitzen jeweils eine Assoziation zu einer weiteren Inhaltsklasse (Person), und diese<br />

Assoziation muss genauso wie die jeweils beteiligten Klassen in der Datenbank abgebildet<br />

werden. Der Rails-spezifische Mechanismus zur Erfassung einer Assoziation auf DB-Ebene<br />

setzt allerdings voraus, dass die an der Assoziation beteiligten Klassen echte Klassen (genauer<br />

gesagt Erben der ActiveRecord-Basisklasse ActiveRecord::Base) und keine Module<br />

sind. Damit ist ausgeschlossen, AuthorPublication und EditorPublication als<br />

Module zu definieren und den gerade vorgestellten Ruby-Mechanismus zur Simulation von<br />

Mehrfachvererbung einzusetzen.<br />

Welchen Beschränkungen unterlag also die Implementierung des PVS-Inhaltsmodells?<br />

Erstens mussten alle Attribute aller Publication-Subklassen in Publication selbst<br />

definiert werden. Und zweitens war es nicht möglich, die Zugriffsrechte der konkreten<br />

Publication-Subklassen auf Person durch das Zwischenschalten zweier abstrakter<br />

Klassen AuthorPublication und EditorPublication zu regeln. Stattdessen<br />

wurden die Assoziationen zu Person eine Ebene nach oben geschoben und an die<br />

Basisklasse Publication vergeben. Damit erhalten zwar bestimmte Publikationstypen<br />

prinzipiell Zugang zu Editoren (bzw. Autoren), den man ihnen eigentlich nicht gewähren<br />

sollte (da dies das BibTeX-Format nicht vorsieht); da die erste Einschränkung jedoch sowieso<br />

schon ein unsauberes Design erzwingt, bei dem Klassen strukturelle Eigenschaften<br />

zugewiesen werden, die sie eigentlich nicht besitzen sollten, fällt dieser zusätzliche Nachteil<br />

nicht mehr allzu stark ins Gewicht. Immerhin ergibt sich dadurch ein einheitliches (wenn auch<br />

'schmutziges') Design. Und in einigen Situationen hat die Tatsache, dass alle strukturellen<br />

Merkmale der Vererbungshierarchie in der Publication-Basisklasse definiert waren, sogar<br />

zu einer Vereinfachung der Implementierung beigetragen.<br />

69 siehe Abbildung 9 in Kapitel 4.1<br />

81

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!