# Game of Life Klassendiagramm



## Vidar (22. Okt 2011)

Hey Leute, 

erstmal ein herzliches Hallo, ist ja mein erster Post hier. Gleich zu meinem Problem, hab beim Studium ne Aufgabe bekommen ein UML über das Game of Life zu erstellen, hier erstmal die Angabe:

http://s1.directupload.net/images/111022/rbpp5ipp.png

Da ich nun leider nicht so begabt in der UML-Modelierung bin frage ich nun euch ob ihr mir weiterhelfen könnt. Meine bisherige Lösung poste ich auch noch gleich (bisher nur das Klassendiagramm):

http://s1.directupload.net/images/111022/uxwth5ox.png

Dinge bei denen ich mir gar nicht sicher bin ist die Klasse Form, ob ich diese nicht einfach als Enum machen soll oder nicht und bei der Klasse GUI weis ich gar nicht so recht wie ich sie verknüpfen soll weil ich schließlich irgendwo einen Input brauche der an den Simulator geht, und einen Output der von der World kommt. Doch die Klasse an den Simulator und an World anzuhängen finde ich doch auch ein wenig umständlich.

Für Tipps wäre ich sehr dankbar!


----------



## Marco13 (22. Okt 2011)

Erinnerungen werden wach... :reflect: Die gleiche Aufgabe wurde hier im Forum schon mehrfach ausführlich disskutiert. Nichts gegen "Klassiker", aber ein paar Abwandlungen könnten die Profs doch einbauen - bleibt nur zu hoffen, dass die Tutoren wenigstens Komplettkopien erkennen :noe: 

Die Frage, ob die "Form" ein enum ist, ist wohl nicht soo kritisch: Es könnte ein enum sein, oder ein int, theoretisch auch ein String :autsch: oder ein boolean: "Torus ja/nein". Interessanter ist die Frage, OB man dieses "Form" überhaupt braucht, oder wie die Form angegeben wird. Im Moment steht da nur, dass die "World" eine "Form" hat, aber wie sich das äußern soll, ist nicht klar.

Das GUI sollte eigentlich weitgehend unabhängig vom Rest sein - vereinfacht gesagt: Das GUI sollte nur "lesend" auf den Rest zugreifen, und ggf. informiert werden wenn sich etwas ändert (grob im Sinne von MVC). Aber es kann hilfreich sein, sich schonmal zu überlegen, die man das GUI auf Basis der bisher skizzierten Klassen basteln _könnte_ - und das würde schwierig werden


----------



## Vidar (25. Okt 2011)

Vielen Dank für die Hilfe schon mal! 

Also die Form habe ich nun rausgeschmissen und einfach ein Enum daraus gemacht. Die Frage ist nun muss ich das überhaupt darstellen was es eig. für einen Sinn hat? Im Grunde hat es ja mit der Aktualisierung der Zellen zu tun, wie stellt man sowas in einem UML dar? 

Und das Thema mit der GUI hab ich gar nicht im Griff, echt keine Ahnung wo ich das Teil ranhängen soll. Im Grunde soll meine "Haupt-Klasse" ja der Simulator sein über den der Nutzer alles regelt, doch wie bekomme ich Inputs die eigentlich die GUI-Klasse verwalten sollte in den Simulator? Und wenn ich die Welt ausgeben will, ist das die Sache des Simulators oder der Welt dies der GUI mitzuteilen?

Vielen Dank für eure Hilfe!


----------



## Marco13 (26. Okt 2011)

Vidar hat gesagt.:


> Vielen Dank für die Hilfe schon mal!
> 
> Also die Form habe ich nun rausgeschmissen und einfach ein Enum daraus gemacht. Die Frage ist nun muss ich das überhaupt darstellen was es eig. für einen Sinn hat? Im Grunde hat es ja mit der Aktualisierung der Zellen zu tun, wie stellt man sowas in einem UML dar?



Vielleicht gar nicht. Im so einem UML-Diagramm stehen ja (im Idealfall) eigentlich nur Klassen und deren Methoden (also Interfaces ), und an den Linien ein paar Infos über "hat", "erbt von" usw. Und wenn dort in einer Klasse "Welt" eine Methode "nächsterSchritt" steht, steht eben einfach nicht dabei, was die Methode macht (und wie sie sich in Abhängigkeit von irgendeinem Enum-Wert verhält). (Ich denke, dass es zwar nicht Teil von UML, aber doch manchmal sinnvoll ist, solche Dinge stichpunktartig dazuzuschreiben, aber das gehört hier wohl nicht hin). 




> Und das Thema mit der GUI hab ich gar nicht im Griff, echt keine Ahnung wo ich das Teil ranhängen soll. Im Grunde soll meine "Haupt-Klasse" ja der Simulator sein über den der Nutzer alles regelt, doch wie bekomme ich Inputs die eigentlich die GUI-Klasse verwalten sollte in den Simulator? Und wenn ich die Welt ausgeben will, ist das die Sache des Simulators oder der Welt dies der GUI mitzuteilen?



Du könntest dir mal die Grundidee von "Model View Controller" anschauen. Das GUI (bzw. der Controller - vielleicht ein kleiner ActionListener) würde die Eingaben an das Modell (in diesem Fall die Simulation) weiterleiten. Z.B. hätte das GUI zwei JTextFields für die Höhe und Breite, und einen "Start"-Button. Wenn der Start-Button gedrück wird, bekommt ein ActionListener das mit. Dieser ActionListener würde Höhe und Breite aus den JTextFields lesen, und an die Methode simulator.createWorld(b,h) übergeben. (Das GUI hätte also eine Referenz auf den Simulator). Gleichzeitig könnte/sollte der Simulator (oder die "World") "Observable" sein, und einer der Observer wäre das GUI (bzw. ein spezielles Panel im GUI, das die Welt zeichnet). 

Die ausführlichste Diskussion zu diesem Thema kürzlich war http://www.java-forum.org/hausaufgaben/108203-spiel-lebens.html . Auch wenn die Aufgabenstellung dort im Detail ein wenig anders war, stehen da einige wichtige Punkte drin, die dir vermutlich auch helfen könnten.




> Vielen Dank für eure Hilfe!



Oh, Pluralis Majestatis ... :reflect:


----------

