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

11

16.08.2013, 21:28

Stell Dir vor Du legst beispielweise den Spielmodus als Ganzzahl ab, von 0 bis 5 z.B.

Hierfür benutzt man dann aber heutzutage Strongly typed enums
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

12

16.08.2013, 21:39

Hmm. Ich hatte Heute morgen geantwortet. Mein Rechner scheint zu spinnen. Ja danke für den Hinweis ich hatte heute morgen auch schon bemerkt, dass es in der Singleton Klasse deklariert wird. Danke nochmal für die Antworten.
Das vereinfacht für mich die Dinge ungemein und jzz muss ich mich nicht mehr Stundenlang rumqäulen ^^"

mint

Frischling

Beiträge: 23

Beruf: Softwareentwickler

  • Private Nachricht senden

13

17.08.2013, 08:38

Zitat von »BlueCobold«

Die aufgerufenen Methoden sorgen übrigens für den korrekten Zustand des Objekts und da ist es egal, ob dieses ein Singleton ist oder eine globale Variable.


Das ist witzig, Du folgst meiner Argumentation und kommst zum gegenteiligen Schluss :D
Es ist eben nicht egal, bei globalen Variablen gibt es keine Methoden, die für den korrekten "Zustand des Objekts" (was übertragen vergleichbar wäre zu den Werten der globalen Variablen) sorgen könnten. Das ist genau der Knackpunkt.

Zitat von »Steef«

Hierfür benutzt man dann aber heutzutage Strongly typed enums

Da hast Du völlig recht. Mir ging es aber darum, ein einfaches Beispiel zu bringen. Man könnte auch die Anzahl der im Spiel verfügbaren Einheiten, Spieleranzahl oder sonstwas nehmen :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

17.08.2013, 10:00

Es ist eben nicht egal, bei globalen Variablen gibt es keine Methoden, die für den korrekten "Zustand des Objekts" (was übertragen vergleichbar wäre zu den Werten der globalen Variablen) sorgen könnten. Das ist genau der Knackpunkt.

Wieso sollte eine globale Variable keine Methoden haben können?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (17.08.2013, 10:16)


mint

Frischling

Beiträge: 23

Beruf: Softwareentwickler

  • Private Nachricht senden

15

17.08.2013, 10:53

Globale Objekte können Methoden haben. Das heißt aber, dass die eigentlichen Informationen (also z.B. der Spielzustand um im Beispiel oben zu bleiben) als Membervariablen der Klasse dieses globalen Objekts vorliegen, und nicht selbst als globale Variablen. Das beudetet wiederum, dass die Membervariablen nicht mehr einzigartig sind. Ok?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

17.08.2013, 11:05

Globale Objekte können Methoden haben. Das heißt aber, dass die eigentlichen Informationen (also z.B. der Spielzustand um im Beispiel oben zu bleiben) als Membervariablen der Klasse dieses globalen Objekts vorliegen, und nicht selbst als globale Variablen.

Richtig; wo liegt das Problem?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

17.08.2013, 15:45

Das Problem liegt darin, dass er nicht versteht, dass eine Klassen-Instanz auch eine globale Variable sein kann. Genau wie ein Singleton eben auch.
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]

mint

Frischling

Beiträge: 23

Beruf: Softwareentwickler

  • Private Nachricht senden

18

17.08.2013, 17:17

Eigentlich unterhalten wir uns schon viel zu lange über so ein banales Problem. Ich werde es mal mit Code versuchen. Angenommen ich habe eine einzigartige (DLLs sind eine Ausnahme, da kann es gleichnamige globale Variablen mit unterschiedlichen Speicheradressen geben), globale Variable "global".

C-/C++-Quelltext

1
int global;


Diese kann ich von überall aus beschreiben. Das ist nicht gut, deshalb packe ich dies in eine Klasse und erzeuge eine globale Instanz dieser Klasse:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class globale_klasse {
public:
int get_global() { return m_global; }
void set_global(int v) { v > 0 ? m_global = v; }
private:
int m_global;
}

globale_klasse klasse;


Jetzt ist "global" aber nicht mehr einzigartig, denn ich könnte beliebig viele Instanzen von globale_klasse erzeugen (und in der Praxis, wenn viele Leute an einem Projekt arbeiten, hab ich das schon gesehen), damit wäre die ursprüngliche Eigenschaft einer globalen Variable, nämlich einzigartig zu sein, verloren! Also benutze ich das Singletonmuster und bin fertig damit. Dann vereine ich die Eigenschaften einer globalen Variable mit den Vorteilen einer Kapselung durch eine Klasse.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

19

17.08.2013, 17:32

Dein int global; ist ein Objekt vom Typ int, dein globale_klasse klasse; ist ein Objekt vom Typ globale_klasse. Sowohl die Typen als auch die Instanzen sind "einzigartig", i.e., es gibt genau einen Typ namens int, genau einen Typ namens globale_klasse, genau ein Objekt namens global und genau ein Objekt namens klasse. Du kannst in beiden Fällen allerdings beliebig viele verschiedene Objekte des jeweiligen Typs erzeugen:

C-/C++-Quelltext

1
2
int global1;
int global2;


C-/C++-Quelltext

1
2
globale_klasse klasse1;
globale_klasse klasse2;


was die, wie du es nennst, "Einzigartigkeit" betrifft, gibt es zwischen int und globale_klasse hier überhaupt keinen Unterschied...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (17.08.2013, 17:37)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

20

17.08.2013, 22:20

Und genau deswegen macht ein Singleton in diesem Zusammenhang keinen Sinn und ist eine sehr schlecht gekapselte globale Variable, die lieber gleich als solche verwendet werden sollte statt den Schein ein nicht existenten Kapselung über ein Singleton vorzugaukeln. Singleton kapselt letztlich gar nichts und dafür war es auch nie gedacht.
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