2 UML-based Web Engineering - UWE - Ludwig-Maximilians ...
2 UML-based Web Engineering - UWE - Ludwig-Maximilians ...
2 UML-based Web Engineering - UWE - Ludwig-Maximilians ...
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