 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 20.06.2007, 14:36 Titel: |
|
|
David hat Folgendes geschrieben: | Singletons erlauben nur ein Objekt, darum ist es absolut irrelevant ob Namenskonflikte auftreten können oder nicht. |
*sfz* Du kannst in einem Programm ohne Verwendung von "Verschachtelung" mit Namespaces genau einen Singleton( "class Singleton;") haben. Der Name "Singleton" ist somit vergeben.
Du kannst in einem Programm genau einen Namespace("namespace _foo") haben. Der Name "_foo" ist somit vergeben.
Innerhalb verschiedener Singletons kannst du verschiedene Objekte mit selbem Namen haben auch wenn der Name im globalen Namespace schon vergeben ist.
Innerhalb verschiedener Namespaces kannst du verschiedene Objekte mit selbem Namen haben auch wenn der Name im globalen Namespace schon vergeben ist.
Verdeutlicht durch folgendes Beispiel:
CPP: | int bar;
class Singleton
{
//übliches blabla
public:
int bar;
};
namespace _foo
{
int bar;
} |
Du willst mir sagen, es wäre irrelevant, ob Namenskonflikte auftreten? Dann kommentiere doch mal die markierten Zeilen aus, dann siehst du, was ich meine. Mit dem Auskommentieren geht der Schutz vor Namenskonflikten flöten und es hagelt C2086-errors.
Bezüglich Namenskonflikten soll es also irrelevant sein, ob man Variablen global setzt oder in Singletons oder Namespaces versteckt?
Ist es besser, zweimal C2086 beim Kompilieren zu bekommen oder das Programm ohne Fehler linken und korrekt ausführen zu können? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 20.06.2007, 15:47 Titel: |
|
|
The Lord of Programming hat Folgendes geschrieben: | David hat Folgendes geschrieben: | Singletons erlauben nur ein Objekt, darum ist es absolut irrelevant ob Namenskonflikte auftreten können oder nicht. |
*sfz* Du kannst in einem Programm ohne Verwendung von "Verschachtelung" mit Namespaces genau einen Singleton( "class Singleton;") haben. Der Name "Singleton" ist somit vergeben. |
Deswegen heisst das Teil ja auch nicht Singleton, du nennste deine Klassen ja auch nicht class_1 etc., sondern du nennste deine Singletons LogManager etc. _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
 |
David Super JLI'ler
Alter: 40 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 20.06.2007, 16:21 Titel: |
|
|
@The Lord of Programming: Ich weiß was du meinst und das ist extremst irrelevant und überhaupt kein Argument für Singletons. Wen interessierts denn ob du in Singletons gleiche Bezeichner verwendest? Genau: Niemanden! Die Bezeichnung ist von Außen gesehen sowas von egal...  |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 20.06.2007, 16:27 Titel: |
|
|
PeaceKiller hat Folgendes geschrieben: | The Lord of Programming hat Folgendes geschrieben: | David hat Folgendes geschrieben: | Singletons erlauben nur ein Objekt, darum ist es absolut irrelevant ob Namenskonflikte auftreten können oder nicht. |
*sfz* Du kannst in einem Programm ohne Verwendung von "Verschachtelung" mit Namespaces genau einen Singleton( "class Singleton;") haben. Der Name "Singleton" ist somit vergeben. |
Deswegen heisst das Teil ja auch nicht Singleton, du nennste deine Klassen ja auch nicht class_1 etc., sondern du nennste deine Singletons LogManager etc. |
Richtig, aber (ich glaube irgendwie, ihr versteht nicht, was ich meine) was genau hat das jetzt mit meiner Argumentation zu tun?
Namenskonflikte können logischerweise nur entstehen, wenn es zwei Objekte mit selbem Namen gibt. Natürlich ist es empfehlsam, nicht alle Klassen "Singleton" zu nennen, aber darauf wollte ich nicht hinaus.
(Was du zitiert hast, sollte den Unterschied hervorheben zwischen Singletonname/Namespacename <-> Name der Variablen innerhalb von Singletons/Namespaces und dass ich mich eben auf zweiteres beziehe.)
Stell dir vor, du bindest einen Header ein, der eine globale Variable namens "foo" enthält (meinetwegen auch eine Instanz einer Klasse namens CObject - um diese C-Prefixe gibts ja auch ellenlange Diskussionen wegen möglichen Namenskonflikten...).
Angenommen, ich schmeiße ein paar Variablen in den "globalen Namespace", ich definiere/deklariere sie also "ganz oben" und außerhalb einer Funktion. Nun will ich eine Variable "foo" nennen
=> C2086
=> Lösung: Variable "foo" in einen anderen Namespace setzen oder in eine Singleton-Klasse.
=> Problem des Namenskonflikts gelöst
=> Variablen innerhalb Singletons oder Namespaces besitzen ggn. reinen globalen Variablen diesen Vorteil
Ist verständlich, worauf ich hinaus will?
Wenn ja, was stimmt eurer Meinung nach nicht innerhalb meiner Argumentationskette?
<edit>
@David: Siehe mein jetziges Beispiel. Es IST relevant, ob ich Variablen global definiere oder sie lieber in einen Namespace oder Singleton schmeiße. Dass zweiteres einen Namenskonflikt vermeidet sollte klar sein, oder?
Oder...?
Was ist so schlimm daran, Singletons denselben Vorteil (es geht mir im Moment nur diesen einen!) wie bei Namespaces nämlich Verhinderung von Namespaces zuzugestehen?
</edit>
<edit2>
SOBALD ich einen Singleton verwende, ist wie du sagst die Benennung egal. Aber nur WENN ich ihn verwende.
Spricht doch für Namespaces oder Singletons, findest du nicht?
Oder lässt du dich gerne in der Wahl der Namen der Bezeichner einschränken?
</edit2> _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
David Super JLI'ler
Alter: 40 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 20.06.2007, 17:38 Titel: |
|
|
Ein Singleton ist eben nicht als ein Ersatz für Namespaces gedacht sondern als Objekte das eine Instanz zulässt und Programmweiten Zugriff gewährt.
Gibt es Namenskonflikte verwendet man Namespaces, aber keine Singletons.
CPP: | global x;
global x; // fehler => Namespace
namespace foo
{
global x; // klappt!
}
|
CPP: | class Singleton;
class Singleton; // fehler => Namespace
namespace foo
{
class Singleton; // klappt
}
|
CPP: | class Singleton
{
int x; // Bezeichner ist so egal wie sonstwas
};
class Singleton1
{
int x; // Genauso hier
};
|
Was du beschreibst ist wohl eher ein Missbrauch vom Singletonpattern. |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 20.06.2007, 18:05 Titel: |
|
|
Boah...hörst du mir überhaupt zu?
The Lord of Programming hat Folgendes geschrieben: | Was ist so schlimm daran, Singletons denselben Vorteil (es geht mir im Moment nur diesen einen!) wie bei Namespaces nämlich Verhinderung von Namespaces zuzugestehen? |
Wenn ich irgendwo behauptet haben sollte, Singletons seien seien als Ersatz für Namespaces gedacht, dann zitiere mich bitte und es tut mir leid, dass ich das gesagt habe.
Mag sein, dass ich den Missbrauch von Singletons beschreibe. Darum ging es mir wie in meinen letzten Posts erwähnt gar nicht.
Es ging mir lediglich um den Punkt, dass Singletons einen(noch mal: es geht mir im Moment nur diesen einen!) Vorteil mit Namespaces gemeinsam haben - und das unabhängig vom Einsatzzweck.
Vielleicht habe ich mich zu unklar ausgedrückt, aber abstreiten kannst du diesen Vorteil nicht(nein, es ist mir im Moment egal, in welchen Situationen man sich für einen Namespace oder für einen Singleton entscheidet. Es ging mir nur um eine bloße unabhängige, abstrakte Erörterung der Vor- und Nachteile)... _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
David Super JLI'ler
Alter: 40 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 20.06.2007, 18:09 Titel: |
|
|
Das was du beschreibst ist kein Vorteil eines Singleton sondern einfach nur Schwachsinn (sry). Singletons haben rein garnichts mit Namenskollisionslösungen zu tun, überhaupt nichts! Ich weiß nich warum du so Standhaft an dem Unsinn festhältst... |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 20.06.2007, 18:25 Titel: |
|
|
David hat Folgendes geschrieben: | CPP: | class Singleton
{
int x; // Bezeichner ist so egal wie sonstwas
}; |
|
Deswegen...
Der Bezeichner ist nur egal wie sonstwas, weil du den Singleton drum herum hast. Würdest du x außerhalb (und nicht innerhalb eines namespaces) definieren, hättest du ebendieses Namensproblem nicht. Wie bei Namespaces.
Um es in deinen "Worten" auszudrücken:
CPP: | global x;
global x; // fehler => Namespace
namespace foo
{
global x; // klappt!
}
class Singleton
{
global x; // klappt auch!
}; |
Siehst du hier nicht, dass ein Singleton genau dieselben Probleme beseitigen kann wie ein Namespace?
Auch wenn ein Singleton nicht dafür geschaffen ist (aber das ist im Moment unerheblich) und auch wenn vllt. durch einen Singleton neue Probleme auftauchen (aber das ist im Moment unerheblich)...
Siehst du hier nicht die Parallele zwischen Singleton und Namespace?
Dann versuche bitte mal, den Rest auszublenden. Es geht nicht darum, ob Singletons als "Namenskollisionslösungen" eingesetzt werden sollten oder nicht, es geht mir nur darum, dass - wie du hoffentlich an dem obigen Codebeispiel siehst - Namenskollisionen aufgelöst werden.
Im Übrigen wäre es denke ich hilfreich, wenn du direkt auf meine Fragen eingehen würdest, sonst reden wir aneinander vorbei
Erklär mir bitte, ob du an der markierten Codezeile ein gelöstes Namenskollisionsproblem siehst oder nicht.
Wenn du es nicht siehst, erklär mir bitte, warum das keines sein soll.
Wenn du es siehst, wäre ich froh zu erfahren, wieso du dich so vehement gegen dieses eine Detail wehrst, das ich hier mit dir zu erörtern versuche  _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
David Super JLI'ler
Alter: 40 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 20.06.2007, 18:33 Titel: |
|
|
The Lord of Programming hat Folgendes geschrieben: |
Siehst du hier nicht, dass ein Singleton genau dieselben Probleme beseitigen kann wie ein Namespace?
Auch wenn ein Singleton nicht dafür geschaffen ist (aber das ist im Moment unerheblich) und auch wenn vllt. durch einen Singleton neue Probleme auftauchen (aber das ist im Moment unerheblich)...
|
Ich seh nur die Paralelle die du, unnötigerweise, schaffen willst. Ist doch ganz egal ob du gleiche Bezeichner verwendest, das interessiert doch auch nich bei sämmtlichen anderen Klassenmembern. Du wirst nie auch nur einmal auf den Bezeichner direkten Zugriff haben (es sei denn du hast das Prinzip der Kapselung nicht verstanden und bei Singletons wärs ohnehin unsinnig).
Namespaces sind da um Namenskonflikte zu lösen. Singletons (Klasse und Strukturen) nicht! |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 20.06.2007, 19:00 Titel: |
|
|
David hat Folgendes geschrieben: | Ich seh nur die Paralelle die du, unnötigerweise, schaffen willst. |
Gut, mehr wollte ich auch nicht wissen.
Ob das unnötig ist, sei mal dahingestellt. Ich finde es wichtig, einen abstrakteren Blick "hinter die Kulissen" zu werfen. Wenn immer getrötet wird, Singletons seien sch***, dann will ich das auch ordentlich begründen können.
Es hilft mir nicht, wenn ich vorgekaute Halbwahrheiten wiederkäue, anderen zum Fraß vorwerfe und nicht mal weiß, was wirklich dahinter steckt. Was ist dagegen einzuwenden, auch mal abstrakter querzudenken und Details losgelöst vom Rest zu betrachten?
Was wär aus den ganzen Innovationen geworden, wenn man nicht auch mal die Perspektive wechseln will und Dinge betrachtet, die aus menschlicher Vernunft vielleicht blödsinnig erscheinen, aber sehr wohl Erkenntnisse bringen können?
Wenn man "richtig" programmieren will, finde ich es wichtig, so viele Details wie möglich zu wissen. Nicht nur "überlieferte" Sätze wie:
Zitat: | Namespaces sind da um Namenskonflikte zu lösen. Singletons (Klasse und Strukturen) nicht! |
Natürlich ist das auch wichtig zu wissen (das hättest du nebenbei auch nicht so oft wiederholen müssen, darum ging es mir wie gesagt gar nicht).
Der Mensch redet viel, wenn der Tag lang ist (Das soll sich jetzt übrigens nicht gegen dich richten ) und es gibt so viele Vorurteile, die im Internet kursieren, weil irgendjemand mal etwas gesagt hat, aber die (u.u. unsinnigen) Details unter den Tisch fallen lassen hat.
Es gab auch hier im Forum viele Diskussionen über DirectX Extensions. Auch hier bringt es nichts zu sagen: "Die sind cool" oder "Die sind scheiße"
Viel mehr sollten alle Details gesondert betrachtet werden, um sie besser in den Gesamtzusammenhang bringen zu können.
Genau das wollte ich erreichen im Hinblick auf "Parallelen zwischen Singletons und Namespaces und seien sie noch so unsinnig im Spiegel ihrer eigenen (Un-)Sinnigkeit und ihrer 'Possibilität'"
<edit>
Ich muss mich korrigieren. Der Gesamtzusammenhang hätte den Rahmen dieses Threads noch mehr als diese Diskussion gesprengt. Mir ging es nur um das gesonderte Detail
</edit> _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
David Super JLI'ler
Alter: 40 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 20.06.2007, 19:50 Titel: |
|
|
Wenn du meinst. Ich finde nicht das ich die Nachteile von Singletons wie Halbwahrheiten erklärt hab. Im übrigen ist es mein Job richtig zu Programmieren, ich vermute mal das ich aus der Erfahrung die ich über die Jahre in der Entwicklung bekommen konnte dennoch einen Blick hinter die Kulissen werfen konnte.
Und Sätze wie:
Zitat: |
Namespaces sind da um Namenskonflikte zu lösen. Singletons (Klasse und Strukturen) nicht!
|
Wiederhole ich gern noch so oft wie es notwendig ist es anderen Leuten klarzumachen. Und das hat nichts mit überlieferten Sätzen zu tun, sondern spricht einfach aus Erfahrung (die in diesem Fall sogar Anfänger haben sollten). |
|
Nach oben |
|
 |
manu Super JLI'ler

Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
Verfasst am: 20.06.2007, 20:51 Titel: |
|
|
David hat Folgendes geschrieben: | Und das hat nichts mit überlieferten Sätzen zu tun, sondern spricht einfach aus Erfahrung (die in diesem Fall sogar Anfänger haben sollten). |
nein zu beidem..
1. Es sind überlieferte Sätze. Überliefert von dir, und bist du Gott? nein. Andere Leute mit viel Erfahrung können dieses Thema sicherlich auch auf eine ganz andere Weise beleuchten.
2. nein, wieso sollten Anfänger in solchen, eher komplexen und tiefgründigen, Bereichen schon großartig Erfahrung haben. |
|
Nach oben |
|
 |
David Super JLI'ler
Alter: 40 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 20.06.2007, 21:06 Titel: |
|
|
1. und 2. Der Sinn und Unsinn von Namespaces sollte jedem, auch einem Anfänger, bekannt sein. |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 20.06.2007, 21:22 Titel: |
|
|
Besteht denn hier wirklich noch Diskussionsbedarf?, ich werde den Thread mal etwas abtrennen, geht mir zu weit vom eigentlichen Thema weg. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 09.07.2007, 12:14 Titel: |
|
|
Im Grunde ist die Diskussion ja abgeschlossen, aber ich habe dennoch eine Frage zu einer Bemerkung von dir, david:
David hat Folgendes geschrieben: | Noch eine Anmerkung: Besser als Singletons oder globale Variablen sind globale Referenzen!! |
Kannst du das bitte nochmal kurz erläutern, und die Vorteile, die du darin siehst auflisten? Danke schön
Gruß DXer |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|