\begin{slide}{Übung Muster (2)}

Iterator:
\begin{itemize}
\item
  schreiben Sie in \verb|Board|:
\begin{verbatim}
for (Cell a : this) {
  for (Cell b : this) {
    if (a.connected(b)) {
      a.addObserver(b);
    }
  }
}
\end{verbatim}
  und ergänzen Sie alles nötige (Eclipse: Control-1! oft!) 
\item
  implementieren Sie hasNext/next für die Iteratorklasse
\item
  implementieren Sie Cell.connected
  (durch Delegation an Point.connected, Implementierung dort)
\end{itemize}

Trennung Modell---View/Controller
\begin{itemize}
\item
  aus Cell alles, was Darstellung/Steuerung dient,
  in separate Klasse bewegen
\item
  für diese Klasse eine Schnittstelle definieren
  (Eclipse: Refactor $\to$ extract interface)
\item
  eine bessere Implementierung angeben
  (nicht wählbare Buttons aus Panel entfernen)
\end{itemize}

Zusatz (künstliche Intelligenz):
\begin{itemize}
\item
  wenn durch eine Auswahl in einer Zelle
  an anderer Stelle nur eine Möglichkeit übrigbleibt,
  dann diese wählen (ggf. mit weiteren Folgerungen)
\end{itemize}

Hilfe zum Testen: in Main ein Brett aufbauen
\begin{verbatim}
// http://people.csse.uwa.edu.au/gordon/sudokumin.php 
// beachte: Zahlen 0 bis 8 statt 1 bis 9)
private static Board board17() {
       Board b = new Board ();
       b.vorgabe(0,7, 0);
       b.vorgabe(1,0, 3);
       b.vorgabe(2,1, 1);
       
       b.vorgabe(3,4, 4); b.vorgabe(3,6, 3); b.vorgabe(3,8, 6);
       b.vorgabe(4,2, 7); b.vorgabe(4,6, 2); 
       b.vorgabe(5,2, 0); b.vorgabe(5,4, 8);
       
       b.vorgabe(6,0, 2); b.vorgabe(6,3, 3); b.vorgabe(6,6, 1);
       b.vorgabe(7,1, 4); b.vorgabe(7,3, 0); 
       b.vorgabe(8,3, 7); b.vorgabe(8,5, 5); 
       
       return b;
}
\end{verbatim}

\end{slide}
