30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

276 10. Memory – e<strong>in</strong> kle<strong>in</strong>es Beispiel<br />

bekannt ist. Ansonsten würden diese sich im Design dieser Klasse und der<br />

von ihr verwalteten Displayable Klassen niederschlagen.<br />

Die Idee h<strong>in</strong>ter der Klasse SimpleOutputHandl<strong>in</strong>g ist nun, dass alle Teile<br />

des Spiels, die etwas zur Ausgabe beizutragen haben, von Displayable<br />

abgeleitet s<strong>in</strong>d und beim Handler explizit angemeldet werden. Wenn e<strong>in</strong><br />

Output generiert werden soll, so werden die angemeldeten darstellbaren Objekte<br />

genau <strong>in</strong> der Reihenfolge ihrer Anmeldung zum Schreiben desselben<br />

aufgefordert.<br />

Im Gegensatz zu den Beispielen, die <strong>in</strong> Kapitel 9 besprochen wurden, haben<br />

wir es hier mit e<strong>in</strong>er kle<strong>in</strong>en Abwandlung der Idee mit den darstellbaren<br />

Objekten zu tun: Es wird nicht mehr e<strong>in</strong>e Display Repräsentation verlangt,<br />

die dann vom Handler auf den Output geschrieben wird. Dies ist vor allem <strong>in</strong><br />

Bezug auf Conta<strong>in</strong>er, die selbst darstellbare Objekte halten, nicht besonders<br />

effizient und verleitet auch <strong>in</strong> diesen Fällen zur Implementation von Seiteneffekten.<br />

Hier wird e<strong>in</strong> anderer Weg gegangen: Das Callback, das aufgerufen<br />

wird, enthält e<strong>in</strong>e Referenz auf e<strong>in</strong>en OutputContext. Dieser enthält die<br />

notwendigen Methoden, die es e<strong>in</strong>em darstellbaren Objekt erlauben, se<strong>in</strong>en<br />

Output zu schreiben. Woh<strong>in</strong> dieser Output nun geschrieben wird, ist durch<br />

die spezielle Ausprägung des Contexts bestimmt. In unserem Fall ist dies e<strong>in</strong><br />

simpler textueller Context, der die Ausgabe auf cout weiterreicht.<br />

Noch e<strong>in</strong>e wichtige Entscheidung wurde getroffen, die sich im Displayable<br />

niederschlägt: Wenn e<strong>in</strong> Displayable beim Output Handl<strong>in</strong>g angemeldet<br />

wird, so wird es durch Aufruf e<strong>in</strong>es Callbacks von dieser Anmeldung unterrichtet.<br />

Dadurch können eventuelle Initialisierungen zum richtigen Zeitpunkt<br />

stattf<strong>in</strong>den.<br />

Diese Ideen sehen nun <strong>in</strong> e<strong>in</strong>e Klasse gegossen so aus:<br />

1 // simple output handl<strong>in</strong>g . h − simple v e r s i o n o f output handl<strong>in</strong>g<br />

2<br />

3 #ifndef s i m p l e o u t p u t h a n d l i n g h<br />

4 #def<strong>in</strong>e s i m p l e o u t p u t h a n d l i n g h<br />

5<br />

6 #<strong>in</strong>clude ” s i m p l e d i s p l a y a b l e . h”<br />

7 #<strong>in</strong>clude ” s i m p l e v e c t o r . h”<br />

8 #<strong>in</strong>clude ” c o n c r e t e o b j e c t d e l e t o r s . h”<br />

9<br />

10 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

11 /∗<br />

12 ∗ A simple output handl<strong>in</strong>g c l a s s f o r text based output . Elements<br />

13 ∗ o f c l a s s Displayable are added one by one and when an output<br />

14 ∗ operation i s t r i g g e r e d they are asked <strong>in</strong> exactly the same order<br />

15 ∗ as they have been r e g i s t e r e d to d e l i v e r t h e i r d i s p l a y<br />

16 ∗ r e p r e s e n t a t i o n . This r e p r e s e n t a t i o n i s then written to cout .<br />

17 ∗/<br />

18<br />

19 class SimpleOutputHandl<strong>in</strong>g<br />

20 {<br />

21 protected :<br />

22<br />

23 /∗ This vector has space f o r the maximum number o f d i s p l a y a b l e s<br />

24 ∗ as given <strong>in</strong> the constructor . The order <strong>in</strong> which d i s p l a y a b l e s<br />

25 ∗ are stored <strong>in</strong> t h i s vector i s the order <strong>in</strong> which they w i l l<br />

26 ∗ be c a l l e d when output i s written .

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!