Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

14.05.2019, 23:44

Schlechtes Design wenn zwei Klassen eine Referenz zur jeweils anderen haben?

Hallo Leute,

habe mal wieder eine blöde Frage.

Angenommen wir haben zwei Klassen: Klasse Menu und Klasse MenuItem.
Wenn nun Klasse Menu aus einer Sammlung von MenuItem´s besteht und die Klasse MenuItem eine Referenz/einen Pointer(welcher auch null sein kann) auf ein Menu enthält wäre das schon ein Fall von schlechtem Code Design(Circular Dependency)?
In meiner Vorstellung repräsentiert das einzelne MenuItem ein Feld welches entweder eine Aktion auslöst oder ein weiteres Sub Menü enthält. Menu hingegen repräsentiert eben diese Sammlung von MenuItems.

Dieser Code

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
      Menu m;
    Menu item2;
    Menu subItem2;

    m.add(new Item("Item1"));
    m.add(new Item("Item2", &item2));
        item2.add(new Item("SubItem1"));
        item2.add(new Item("SubItem2", &subItem2));
            subItem2.add(new Item("SubSubItem1"));
            subItem2.add(new Item("SubSubItem2"));
    m.add(new Item("Item3"));


sollte theoretisch das hier nachbilden

C-/C++-Quelltext

1
2
3
4
5
6
7
|- Item1
|- Item2
  |- SubItem1
  |- SubItem2
    |- SubSubItem1
    |- SubSubItem2
|- Item3


Für Tips oder andere Vorgehensweisen wäre ich natürlich auch dankbar.

Grüße

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

15.05.2019, 08:49

Dein Menü muss natürlich die Menuitems kennen. Aber warum sollte der Rückweg der Fall sein? Muss ein Element des Menüs das Menü selbst kennen? Wofür? Die Items sollten irgendwelche Aktionen triggern können, wofür sie ihren Container nicht kennen müssen. Wenn du eine konkrete Sache nennst, bei der du denkst dass ein Item das Menü kennen muss, dann können wir zusammen überlegen wie es vielleicht eleganter zu lösen wäre.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

3

15.05.2019, 09:04

Danke für die Antwort!

"Muss ein Element des Menüs das Menü selbst kennen? Wofür?"
In meinem Fall möchte ich eigentlich damit abbilden, das ein einzelnes Menü Element wiederum ein Menü enthalten kann.
Somit kann ich dann eine X-beliebig tiefe Hierarchie von Menü Items und Menüs erstellen (wie in meinem Beispiel).

Ich hatte die Geschichte schon so implementiert das die Menü Klasse auch Logik enthält um in seinen MenuItems zu navigieren. Wird dann beispielsweise ein MenuItem "ausgewhält" das ein Sub Menü enthält, wird dieses Sub Menü auf ein Stack gepusht. Die Logik des Navigierens/Auswählens wird immer nur auf dem obersten Stack Item ausgeführt.

Es ist noch anzumerken das alles in der Konsole stattfindet.

Grüße

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

15.05.2019, 09:46

Guck dir mal das Kompositum Entwurfsmuster(engl. Composition pattern) an. Vielleicht hilft dir das ja schon weiter.Wenn weitere Fragen sind, einfach hier schreiben.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

5

15.05.2019, 10:26

Genau das wird es sein!
Vielen dank, mal wieder unnötig über mehrere Ecken gedacht :/

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

16.05.2019, 11:45

Anders ausgedrückt: Eigentlich kann bei dir ein MenuItem weitere MenuItems als Children haben, aber kein Menu selbst.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige