30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

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.

9.4 Weitere wichtige technische Aspekte 237<br />

Designaspekte im H<strong>in</strong>terkopf haben, die sich positiv auf e<strong>in</strong> klares Design<br />

auswirken. Weiters werden solche Entwickler immer wieder überlegen, wie<br />

man e<strong>in</strong>- und denselben Sachverhalt vielleicht auch anders und damit schlüssiger<br />

und e<strong>in</strong>facher darstellen könnte. Auf diese Art f<strong>in</strong>den sie das (hoffentlich)<br />

s<strong>in</strong>nvollste aus mehreren verschiedenen möglichen Modellen für e<strong>in</strong>e Problemstellung.<br />

Unerfahrenere Entwickler (und auch schlimme Hacker) greifen gerne zum<br />

ersten Modell, das ihnen logisch ersche<strong>in</strong>t und dieses wird dann ohne Rücksicht<br />

auf Verluste bis zum bitteren Ende durchgezogen. Dadurch werden allerd<strong>in</strong>gs<br />

Programme zumeist unglaublich kompliziert und das Resultat lässt<br />

jedes logische semantische Modell vermissen. Somit ist der böse Hack perfekt,<br />

den sich niemand mehr zu ändern traut, denn jede Änderung an e<strong>in</strong>em<br />

Teil der Software wirkt sich mörderisch <strong>in</strong> anderen Teilen derselben aus.<br />

Ich weiß schon, dass hier wieder e<strong>in</strong>mal e<strong>in</strong> bisschen der Missionar <strong>in</strong><br />

puncto sauberes Design mit mir durchgegangen ist, aber die Gelegenheit war<br />

e<strong>in</strong>fach zu gut :-). Also zurück zum Thema: Nehmen wir e<strong>in</strong>fach e<strong>in</strong>mal<br />

h<strong>in</strong>, dass die <strong>in</strong> Abbildung 9.2 skizzierte Klassenhierarchie für unser Problem<br />

das schlüssigste Modell darstellt. Nach dem bisherigen Wissensstand lässt<br />

es sich allerd<strong>in</strong>gs nicht <strong>in</strong> C ++ Code umsetzen, ohne dass sich der Compiler<br />

fürchterlich beschwert und die Übersetzung verweigert! Den Grund für diese<br />

Beschwerde f<strong>in</strong>den wir im Speicherabbild, das der Compiler aus unseren<br />

e<strong>in</strong>zelnen Klassen <strong>in</strong> der Ableitungshierarchie erzeugt:<br />

• Wir wissen, dass jede Klasse beim Ableiten alle Eigenschaften der Basis<br />

vollständig erbt.<br />

• Das bedeutet, dass beim Erzeugen der Instanz e<strong>in</strong>es Objekts für alle e<strong>in</strong>zelnen<br />

Teil-Objekte, die aus den Klassen <strong>in</strong> der Hierarchie resultieren, Speicher<br />

reserviert wird. Die Speicherbereiche bei Ableitungshierarchien kommen<br />

h<strong>in</strong>tere<strong>in</strong>ander zu liegen.<br />

• Nehmen wir nur die obersten beiden Ebenen der <strong>in</strong> Abbildung 9.2 skizzierten<br />

Hierarchie, so ergibt sich folgendes Bild:<br />

– E<strong>in</strong> TextuallyDisplayable Objekt besteht aus zwei Teilobjekten. Es<br />

wird also Speicher für Displayable und weiters Speicher für alles Weitere<br />

reserviert, das TextuallyDisplayable noch an Members dazudef<strong>in</strong>iert.<br />

– Für GraphicallyDisplayable und auch für Pr<strong>in</strong>table gilt dasselbe.<br />

• Beziehen wir nun auch noch die dritte Ebene der Hierarchie <strong>in</strong> unsere Betrachtungen<br />

mit e<strong>in</strong>, dann vervollständigt sich das Bild dah<strong>in</strong>gehend, dass<br />

für e<strong>in</strong>e GameCard folgende Sub-Objekte ihren Speicherblock bekommen:<br />

– TextuallyDisplayable<br />

– GraphicallyDisplayable<br />

– Pr<strong>in</strong>table<br />

Und genau hier liegt das Problem: Zieht man <strong>in</strong> Betracht, dass jedes dieser<br />

drei Sub-Objekte selbst wieder Displayable als Sub-Objekt besitzt, dann

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!