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

13.10.2013, 12:29

Singletons

Hi, ich verstehe einige Sachen nicht und hoffe auf Afklaerung! Hab gestern 2 Stunden lang auf die paar Seiten im Buch geguckt. Aber hab kaum was verstanden...

Wozu braucht man Singletons?
Wie funktionieren sie?
Wie setzt man sie ein?

Bitte mit kurzegehaltenen Beispielen!

Ich blicke es einfach voll nicht...habe grad noch versucht zu schreiben, inwiefern ich mir momentan einbilde, sie verstanden zu haben aber selbst das ist zu komplex.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

13.10.2013, 12:42

Das Anti Pattern Singletons braucht man nur ganz selten. Vergiss es für den Moment einfach und benutz es nicht wahllos. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

3

13.10.2013, 13:02

Erklaers mir bitte! Man braucht das Verstaendnis fuer die naechsten Seiten.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

13.10.2013, 13:10

Das Singleton ist nichts weiter als eine Möchtern-Objekt-Orientierte Verpackung für eine globale Variable durch eine statische Methode. Jedenfalls wird sie im Buch fälschlicherweise als solche verwendet.
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]

5

13.10.2013, 13:41

Also ein singleton ist eine globale variable, bei der ich jedem programm erstmal manuell die moeglichkeiten geben muss, auf diese zugreifen zu koennen. Und das geschieht durch vererbung. So richtig?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

13.10.2013, 13:46

Nein.
1) Vererbung ist dafür da um Eigenschaften einer Oberklasse auf Unterklassen zu vererben. Das hat mit Zugriffsmöglichkeiten auf globale Variablen erstmal nichts zu tun.
2) Eine globale Variable heißt so, weil sie global ist und von jeder Stelle des Programms auf sie zugegriffen werden kann. Das Singleton verpackt diesen Zugriff aber in eine statische Methode einer Klasse, was es "viel hübscher" und "gekapselter" wirken lässt, aber eigentlich nur ein Trugschluss ist.

Ein Singleton ist eigentlich für etwas ganz anderes da, wird im Buch aber nicht zu diesem Zweck benutzt. Merk Dir einfach, dass das Buch auch gleich hätte eine globale Variable verwenden können, was irgendwie wohl sogar hübscher gewesen wäre.
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]

7

13.10.2013, 14:00

Das weiss ich. Aber ich meine durch die Vererbung von einer singletonklasse, hat eine zweite klasse doch erst zugriff auf den singleton (zumindest im buch) und damit auf eine "globale Variable" in dem Sinne. Egal ich lerne singletons dann durch ein anderes buch ...^^

Danke fuer die antworten

Ach ja noch eine frage, warum "static"? Welche eigenschaft gibt "static" einer variablen?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »pmpedoutpolak« (13.10.2013, 14:07)


8

13.10.2013, 14:23

Singletons werden, wie BlueCobold schon sagte, im Buch dazu verwendet, um auf ein Objekt einer Klasse mittels statischer Funktion von überall zugreifen zu können. Wenn jetzt eine andere Klasse von Singleton erbt, gibt man der erbenden Klasse also die Eigenschaft, überall draufzugreifen zu können.
Ich hatte auch erst Schwierigkeiten, Singletons zu verstehen und nachdem ich es dann endlich kapiert habe auch für ganz nützlich gehalten. Im nachhinein würde ich dir aber raten, sie wenns geht nicht zu verwenden, da man fast alles besser lösen. Aber mit der Zeit wirst du das selbst merken.

EDIT bezüglich static: In diesem Fall wird ja eine statische Funktion verwendet (soweit ich weiß Singleton::get()). Durch das static kannst du nun die Funktion immer und überall aufrufen, und zwar ohne vorher ein Objekt der Klasse erzeugt zu haben. Das wird im Buch meiner Meinung nach nicht richtig deutlich, weshalb ich die Funktion der Klasse auch erst nicht verstanden habe.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »michi_95« (13.10.2013, 14:29)


Swoerm

Alter Hase

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

9

13.10.2013, 19:43

Ein Singleton ist eigentlich für etwas ganz anderes da, wird im Buch aber nicht zu diesem Zweck benutzt.
Was ist dieser andere Zweck?

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

13.10.2013, 19:45

Ein Singleton (zu deutsch "Einzelstück) soll sicherstellen, dass es von der Klasse unter keinen Umständen jemals mehr als eine einzige Instanz existieren kann. Diese Anforderung ist fast in keinem Programm vorhanden.
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