Die vorgeschlagene
Musterlösung weist Mängel auf. Es soll etwa festgehalten werden,
auf welche Felder der Spieler bereits geschossen hat, aber es gibt gar
kein Objekt, zum Beispiel ein Meer, welches die Versuche des Spielers speichert.
Die Datenhaltung müsste also im GUI erfolgen, was aber der Schichtentrennung
widerspricht. Auch ist die Beschreibung der Schiffe durch Position und
Lage nicht optimal, da die Schiffevielfalt eingeschränkt wird. Ein
quadratisches Viererschiff könnte mit diesen Parametern noch charakterisiert
werden, aber bei L- und T-Schiffen wäre keine eindeutige Identifizierung
mehr möglich. Ein L-Schiff, welches im gelben Feld beginnt und die
Richtung nach unten hat, könnte auf dem violetten oder grünen Feld enden.
Im hier vorliegenden
Lösungsansatz wird ein anderer Weg beschritten. Es gibt neu Meeres-Objekte,
welche die Positionen der Schiffe und die Schüsse der Spieler festhalten,
dafür gibt es keine Schiffs- und Flotten-Objekte mehr. Die Position
der Schiffe wird zudem anders codiert, so dass mit ebenfalls nur zwei Parametern
auch L- und T-Schiffe zweifelsfrei positioniert werden können. Zusätzliche Schiffe,
welche neben den normalen gestreckten Schiffen möglich sind, sind in obenstehender
Grafik rot eingezeichnet.
Um eine klare Schichtentrennung
zu erreichen, werden ein Control- und ein FIFO-Objekt eingeführt. Das
GUI kommuniziert nur mit dem Control-Objekt und holt allenfalls Daten beim
FIFO-Objekt ab. Eine direkte Verbindung zwischen dem GUI und den Meeresobjekten
besteht nicht. Ebenso werden keine Zeiger übergeben, so dass der Geschäftsprozess
und das GUI auf zwei unterschiedlichen Computern laufen könnten.