Naja, in Java bekommt man es auch wesentlich kleiner hin.
Mein Prototyp bestand nur aus drei Klassen.
Ich hab hier hauptsächlich auf die Erweiterbarkeit geachtet. Jeder Befehl ist geschaltet in eine Klasse und es können von außen neue Befehle hinzugefügt werden, was bei allen anderen Programmen, die hier vorgestellt worden waren, nicht möglich war, da die Befehle mittels einer if-then-else-Anweisung abgefrühstückt worden waren. Eine Erweiterung des Funktionsumfangs ist hier schlecht möglich.
TurtleEngine und TurtleState sind auch die Hauptklassen des gesamten Programms, denn in diesen Klassen wird alles verwaltet. Getter und Setter sind unter Java so ein kleines Problem. Da lobe ich doch lieber C#. Ich wünschte ich mir manchesmal auch die #region-Direktive, auch wenn sie anscheinend von vielen verpöhnt wird ^^
Auch ist die grafische Ausgabe von der Engine getrennt, sodass man weitere Ausgabemöglichkeiten implementieren kann. In meinem Programm habe ich dazu ja zwei Beispiele entwickelt. Einmal eine Ausgabe per OpenGL und und eine per SVG.
Die Ausgabe muss lediglich nur von TurtleRendererBase erben und sich in der Engine registrieren und schon kann man über die Render() Methode seine Ausgabe implementieren. In allen anderen Programmen war die Engine ja auch fest mit der Ausgabe verdrahtet, und ließ sich auch nicht ohne weiteres auf andere Ausgabemedien übertragen.