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.

10.2 Das DDD 285<br />

kle<strong>in</strong>e Hilfsklasse e<strong>in</strong>zuführen, die im Klassendiagramm noch nicht enthalten<br />

ist, ist schlimm genug. In der Praxis muss nun unbed<strong>in</strong>gt e<strong>in</strong> Schritt zurück<br />

gemacht werden und das Klassendiagramm ergänzt werden.<br />

Das ist jedoch noch nicht alles: Im Normalfall wäre jetzt sogar der<br />

Zeitpunkt gekommen, zu dem man allgeme<strong>in</strong>gültig über simple darstellbare<br />

Objekte und über Conta<strong>in</strong>er von darstellbaren Objekten nachdenken muss.<br />

Das Spielbrett ist nämlich von se<strong>in</strong>er Logik her genau e<strong>in</strong> solcher Conta<strong>in</strong>er.<br />

Das würde dann e<strong>in</strong>e weitere Änderung im Klassendiagramm bedeuten:<br />

E<strong>in</strong> darstellbarer Conta<strong>in</strong>er ist abgeleitet von Displayable und das<br />

MemoryGameboard ist dann von diesem abgeleitet. Um hier nicht zur absoluten<br />

Verwirrung beizutragen, führe ich diesen allgeme<strong>in</strong>en Conta<strong>in</strong>er nicht<br />

e<strong>in</strong>. Stattdessen wird das MemoryGameboard dergestalt entworfen, dass es die<br />

Conta<strong>in</strong>erfunktionalität besitzt.<br />

Alle Leser mögen sich aber nun unbed<strong>in</strong>gt e<strong>in</strong> paar Gedanken machen,<br />

was diese Vorgangsweise, die leider auch <strong>in</strong> der Praxis sehr oft praktiziert<br />

wird, bedeutet! Hier bahnt sich bereits e<strong>in</strong> böser Hack an, denn es ist zu<br />

erwarten, dass im Lauf der Zeit das Spiel mehrere Änderungen erfährt und<br />

dass wahrsche<strong>in</strong>lich auch dann an mehreren Stellen e<strong>in</strong> allgeme<strong>in</strong>er Conta<strong>in</strong>er<br />

gebraucht würde. In jedem Fall muss dann e<strong>in</strong>e erhebliche Menge an<br />

Code umgeschrieben werden, wenn man ihn erst verspätet e<strong>in</strong>führt. Oder,<br />

noch schlimmer, alle Klassen, die ihn brauchen, implementieren die Funktionalität<br />

selbst. Dass das dann auf Kosten der Übersichtlichkeit, Wartbarkeit,<br />

Änderbarkeit und Intuitivität geht, lässt sich leicht nachvollziehen.<br />

Nach diesem Exkurs, der etwas zum Nachdenken anregen sollte, sieht das mit<br />

Vorsicht zu genießende Resultat für unser Spielbrett folgendermaßen aus:<br />

1 // memory gameboard . h − a simple gameboard f o r memory<br />

2<br />

3 #ifndef memory gameboard h<br />

4 #def<strong>in</strong>e memory gameboard 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 ” simple output handl<strong>in</strong>g . h”<br />

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

9 #<strong>in</strong>clude ”memory game card v5 . h”<br />

10 #<strong>in</strong>clude ” u s e r t y p e s . h”<br />

11<br />

12 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

13 /∗ The c l a s s f o r the gameboard . This c l a s s i s r e s p o n s i b l e f o r<br />

14 ∗ the management of the cards and has to take care f o r<br />

15 ∗ r e g i s t e r i n g them at the output handler . I t a l s o has to keep<br />

16 ∗ track of the number of cards on the board and o f the number<br />

17 ∗ o f cards with f r o n t and back s i d e s up . Turn<strong>in</strong>g cards i s<br />

18 ∗ performed via a c a l l to t h i s c l a s s .<br />

19 ∗/<br />

20<br />

21 class MemoryGameboard : public Displayable<br />

22 {<br />

23 protected :<br />

24<br />

25 /∗ Stores the number of rows of the board accord<strong>in</strong>g to the<br />

26 ∗ parameter passed to the constructor . In p r i n c i p l e t h i s

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!