# OOP Logik Problem



## silenz (2. Mai 2017)

Hallo Community,
Ich habe erst angefangen ein kleines klickspiel zu programmieren. Ich möchte es jetzt objektorientiert implementieren. Ich weiß jetzt in diesem Punkt nicht wo ich am besten die logik einbauen soll. Ich habe bereits folgende klasse :
GameActivity
Objekt1 und objekt2 erben von Entity 
ObjektFactory
Ich möchte jetzt folgendes erreichen:
1. Nach einer bestimmten Zeit soll ein neues Objekt1 oder Objekt2 hinzugefügt werden
2. Jedes Objekt soll sich mit einem bestimmten Muster bewegen. Mache ich die logik in der klasse Objekt1/2 oder in die Factory?
Wie überlegt man sich am besten, wo die logik reingehört?

3. Macht es Sinn in die Klasse factory die logik welches Objekt reinzupacken?

Vielen Dank für eure Hilfe. Falls noch weitere Infos fehlen, kann ich diese gerne noch schreiben.


----------



## DefconDev (2. Mai 2017)

Zu 1: nur zum Verständnis Objekt1 und Objekt2 sind Klassen? Wenn ja, kannst du keine Klassen zur Laufzeit(bei dir Zeit) erstellen. Oder meinst du Instanzen(objekte) der Klassen Objekt1/2?

Zu 2: Wie du etwas machst hängt vom Umfang des Projektes ab. Ich würde ein Interface erstellen oder ne Abstrakte Klasse mit den Bewegungsabläufen.

Factory empfinde ich meist für kleine Projekte für überdimensioniert. Bin generell kein Freund für jede kleine Methode oder ähnliches eine neue Klasse zu schreiben.


----------



## mrBrown (2. Mai 2017)

silenz hat gesagt.:


> 2. Jedes Objekt soll sich mit einem bestimmten Muster bewegen. Mache ich die logik in der klasse Objekt1/2 oder in die Factory?



In den Objekt1/2-Klassen (was btw echt schlechte Namen sind), dazu gehört sie ja.



silenz hat gesagt.:


> Wie überlegt man sich am besten, wo die logik reingehört?



Naja, die Logik gehört ja zu irgendeinem Objekt, also gehört sie auch in die entsprechenden Klasse



silenz hat gesagt.:


> 3. Macht es Sinn in die Klasse factory die logik welches Objekt reinzupacken?


Nein, die Factory macht *nichts* anderes, als Objekte zu erstellen.




Hades85 hat gesagt.:


> Bin generell kein Freund für jede kleine Methode oder ähnliches eine neue Klasse zu schreiben.


Ich schon, wenn die Methode(n) eine Klasse rechtfertigt.

Factory ist sowas, wo soll es schließlich sonst rein? 
An jeder Stelle direkt erstellen, statt die Factory nutzen? In irgendeiner anderen Klasse unterbringen?
Beides widerspricht GRASP und SOLID und sonstigen Prinzipen...


----------



## DefconDev (2. Mai 2017)

Das freut mich für dich wenn du das so handhabst.


----------



## silenz (2. Mai 2017)

Danke für eure Antworten.
Mit Objekt1 und Objekt2 habe ich Klassen wie Quadrat und Kreis gemeint, von denen ich dann zur Laufzeit Objekte erzeuge. 

Ok, dann mache ich die Logik für die Bewegung in die Klasse Quadrat/ Kreis und übergebe ihnen eine Referenz von der Zeichenfläche, richtig? Und rufe dann im Hauptprogramm nur noch die bewegeImKreis()-Methode von der Klasse Kreis auf richtig?


----------



## Meniskusschaden (2. Mai 2017)

Unter Umständen ist es auch sinnvoll, die unterschiedlichen Bewegungsalgorithmen in jeweils eigenen Klassen zu realisieren, deren Instanzen man den Objekten dann nach Bedarf zuweist. Damit lässt sich das Bewegungsverhalten einzelner Objekte dann einfach zur Laufzeit wechseln und ein Kreis kann sich beispielsweise mal eine Zeit lang wie ein Quadrat bewegen. Stichwort: Strategie-Entwurfsmuster.


----------

