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

14.09.2010, 14:28

@PCShadow
Ich wollte eigentlich schon exceptions einbauen, aber ich habe irgendwo gelesen, dass es nicht so gut sein soll exceptions aus einer dll zu werden und diese dann in einer anderen exe abzufangen, stimmt das?

Wäre mir neu, abgesehen davon, das viele Bibliotheken wie z.B. Ogre oder boost, die man ja auch als dll linken kann, das so machen, und die werden auch wissen was sie tun.
Sonst würde ich einfach überall, wo ich etwas ins log schreibe noch ne exception werden.

Du könntest auch den log eintrag in den konstruktor deiner jeweiligen exceptions packen, und dann nur die exception werfen.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

12

14.09.2010, 16:16

Du könntest auch den log eintrag in den konstruktor deiner jeweiligen exceptions packen, und dann nur die exception werfen.


Würd ich nicht machen. Ich würde nur unbehandelte Exceptions loggen oder solche die gefangen wurden (also aus dem catch-block heraus). Letzteres ist meistens die Aufgabe vom Nutzer. (@newby)Ausserdem entspricht das Einsatzgebiet für Exceptions nicht dem von Lognachrichten, ein einszueins austauschen macht meiner Meinung nach kein Sinn. Beispielsweise müssen Warnungen den normalen Programmfluss nicht unbedingt beeinflussen.

Was ich gleich im Beispiel sehe: Komm weg von "Create" und "Destroy" Funktionen. Dafür gibt es Konstruktoren und Destruktoren. Genau für das sind die nämlich da!


Das stimmt zwar, aber nicht generell. Ein Objekt erst spät vollständig zu initialisieren ist ja nicht ungewöhnlich (Subsysteme hoch/runter fahren etc). Grad bei dem Beispiel mit dem Fenster finde ich die Create-Methode recht gut, weil ich das Erzeugen des Fensters ggf verzögern möchte. Destroy könnte natürlich zusätzlich im Destruktor aufgerufen werden.
Im Allgemeinen kommt dieses "Create - Destroy" Pattern aber doch zu häufig in diesem Simple2D Framework vor.
@D13_Dreinig

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

13

14.09.2010, 16:37

Das stimmt zwar, aber nicht generell. Ein Objekt erst spät vollständig zu initialisieren ist ja nicht ungewöhnlich (Subsysteme hoch/runter fahren etc). Grad bei dem Beispiel mit dem Fenster finde ich die Create-Methode recht gut, weil ich das Erzeugen des Fensters ggf verzögern möchte.

Nein, ein Objekt sollte mit dem erfolgreichem ausführen des Konstruktors vollständig initialisiert sein (du benutzt hier wahrscheinlich initialisieren ungünstig). Das widerspricht natürlich nicht dem vorhaben, dass man gewisse Systeme erst bei Bedarf nachlädt, aber das ist schon ein Unterschied, weil diese Systeme dann für das Objekt selbst (anscheinend) nicht essentiell sind.

Von einer Destroy Funktion würde ich absehen. Wenn, dann kann man eine "clean" Funktion oder so einabauen, die bei Bedarf z.B gecachte Sachen freigibt (wie ich es z.B bei Firefox wünschen würde..), aber ein Objekt ist erst zerstört, wenn der Destruktor aufgerufen wurde.

Es ist grundsätzlich falsch (aus OO Sicht) öffentliche "create", "init" oder "destroy" Funktionen zu haben, denn die beschreiben genau die Aufgaben von Konstruktoren/Destruktoren.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

14

14.09.2010, 17:48

Das widerspricht natürlich nicht dem vorhaben, dass man gewisse Systeme erst bei Bedarf nachlädt, aber das ist schon ein Unterschied, weil diese Systeme dann für das Objekt selbst (anscheinend) nicht essentiell sind.


Eben, darum gehts ja...


Von einer Destroy Funktion würde ich absehen. Wenn, dann kann man eine "clean" Funktion oder so einabauen, die bei Bedarf z.B gecachte Sachen freigibt (wie ich es z.B bei Firefox wünschen würde..), aber ein Objekt ist erst zerstört, wenn der Destruktor aufgerufen wurde.


Über die Begrifflichkeit "Destroy" kann man sich natürlich streiten. Die Methode muss ja nicht aussagen das Objekt zu zerstören, sondern nur diverse Resourcen über die das Objekt verfügt.


Es ist grundsätzlich falsch (aus OO Sicht) öffentliche "create", "init" oder "destroy" Funktionen zu haben, denn die beschreiben genau die Aufgaben von Konstruktoren/Destruktoren.


Nein, das ist überhaupt nicht grundsätzlich falsch... Wie gesagt geht es nicht um das Erzeugen des Objekts sondern um spätes (nach-)initialisieren von Teilfunktionalität. Das ist aus OO Sicht vollkommen korrekt.
@D13_Dreinig

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

15

14.09.2010, 18:37

Über die Begrifflichkeit "Destroy" kann man sich natürlich streiten. Die Methode muss ja nicht aussagen das Objekt zu zerstören, sondern nur diverse Resourcen über die das Objekt verfügt.

Klar geht es um Begrifflichkeiten und die genannten Funktionen sind dafür schlichtweg falsch. Sie vermittel einen völlig falschen Eindruck. Darum habe ich ja bereits eine "clean" Funktion vorgeschlagen.

Nein, das ist überhaupt nicht grundsätzlich falsch... Wie gesagt geht es nicht um das Erzeugen des Objekts sondern um spätes (nach-)initialisieren von Teilfunktionalität. Das ist aus OO Sicht vollkommen korrekt.

Das sagte ich auch bereits, dass ich dem zustimme, aber eine Funktion, die "create" ist schlichtweg falsch. Entweder sie macht das, was man erwartet und initialisiert das Objekt (was wir uns ja einig sind nicht gut ist) oder aber sie macht etwas anderes und dann ist sie völlig falsch benannt.

Bei mir geht die Bennenung oftmals stark einher was die Funktion tut oder eben nicht tut und eine "create" Funktion kann meiner Meinung nach nichts anderes beschreiben, wie eben das, was man im Konstruktor tut (selbiges für destroy/Destruktor).

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

16

14.09.2010, 19:37

Das sagte ich auch bereits, dass ich dem zustimme, aber eine Funktion, die "create" ist schlichtweg falsch. Entweder sie macht das, was man erwartet und initialisiert das Objekt (was wir uns ja einig sind nicht gut ist) oder aber sie macht etwas anderes und dann ist sie völlig falsch benannt.


Im Allgemeinen stimm ich dir da zu. Bei diesem Beispiel find ich "create" allerdings nicht so abwegig, weil klar hervorgeht, dass ein Fenster erzeugt wird (nicht das Window-Object). Sicher hätte man die Funktion auch anders benennen können..
Wie auch immer, ich glaub wir sind uns egtl einig. ;)
@D13_Dreinig

17

14.09.2010, 21:36

Wie will man denn sonst ein Fenster kontrolliert erstellen/zerstören? Das würde mit Pointer und new/delete gehen, aber das find ich ehrlich gesagt nicht schöner.
stɪl traɪ tuː θɪŋk ˈpɒzətɪv

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

18

14.09.2010, 21:41

@Sergius, ok du hast mich überzeugt, Exceptions sind besser.

new und delete finde ich schon besser, wenn man das Fenster nicht gleich zerstören will, kann man ja noch 2 Methoden Show() und Hide() bzw. Close() implementieren.

19

15.09.2010, 19:34

so kleines update:

das framework wirft jetzt exceptions, welche kann man in der ErrorCodes.txt Datei lesen. Außerdem habe ich in den meißten Klassen Konstruktor und Destruktor implementiert, anstelle der Create-Delete funktionen. Mich interessieren immernoch alle Fehler die ihr findet, egal ob grober Designfehler, Implementierungsfehle oder Rechtschreibfehler :)
Link steht noch im ersten Post.

Bene

20

15.09.2010, 20:36

Hört sich ganz nett an ... ABER:

1. Wie hier glaub ich schon geschrieben wurde, mach mal ein Beispiel (EXE, Code dazu)
2. Bitte kommentiere deinen Code, ansonsten werden viele, die helfen wollen, nicht helfen können, weil sie sich nicht zurecht finden
3. Der Link klappt bei mir nicht ;)

Ansonsten find ich gut was du tust :)

Werbeanzeige