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

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

21

12.10.2011, 16:32

Getter weglassen: ich habe nie etwas anderes behauptet =)
nehmen wir eine Klasse, die eine Information speichert, die von außen nicht zugänglich sein darf (auch nicht schreibgeschützt)


falls du denkst, ich hätte dir widersprechen wollen:
ich habe nur zu spät bemerkt, dass du bereits eine Antwort geschrieben hattest und habe mich deswegen auf deinen Vorposter (buggypixels) bezogen (guck dir deswegen mal meine Editierung ganz unten an ;) )
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

22

12.10.2011, 16:35

Ah ok, ja ich habs mir fast gedacht, aber war mir nicht ganz sicher, ob du jetzt für oder gegen Getter argumentierst ;)
Aber gut, ich denk wir sind uns dann einig, dass man Getter vermeiden sollte :)

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

23

12.10.2011, 16:39

und ich konnte mir irgendwie schon denken, dass ein Missverständnis auftreten könnte... v.v (warum habe ich nicht gleich im ersten Beitrag darauf darauf hingewiesen, dass ich nicht auf dich losgeh... ich meine eingehen wollte... =/)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

24

12.10.2011, 16:51

lol, auch wenns in einer Diskussion mal heiß hergeht, so würd ich mich niemals persönlich angegriffen fühlen (zumindest solange es ums Thema und nicht um meine Mutter geht, oder so) und hoff auch, dass sich niemand von mir angegriffen fühlt, denn das ist auf garkeinen Fall meine Absicht, wenn ich auch gern manchmal etwas übertreibe.
Also no worries was das angeht ;)

XelVair

Frischling

Beiträge: 46

Beruf: Student

  • Private Nachricht senden

25

12.10.2011, 19:11

Was spricht denn gegen Getter/Setter methoden bzw. was schlägst du als Alternative vor?
Ich bin eine Siegnatur, ihr kriegt mich nicht unter!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

26

12.10.2011, 19:17

Na, das haben wir ja auf der vorigen Seite ja schon ausführlich diskutiert ;)
Alternative: Das Design so bauen, dass es möglichst ohne auskommt.

XelVair

Frischling

Beiträge: 46

Beruf: Student

  • Private Nachricht senden

27

12.10.2011, 19:24

Das ist ein wenig oberflächlich beschrieben, wäre nett wenn du mir das in dem Thread nochmal erklären könntest, den ich soeben eröffnet habe :)

OOP und die Struktur eines Spiels

Danke im Voraus :)
Ich bin eine Siegnatur, ihr kriegt mich nicht unter!

Saik0

Treue Seele

  • »Saik0« ist der Autor dieses Themas

Beiträge: 171

Beruf: Anwendungsentwickler

  • Private Nachricht senden

28

13.10.2011, 09:15

Man man was habe ich da für ne Diskussion in meinem Thread ^^

Bezüglich der beiden Konstruktoren sollte Du Deinen Code ändern:

C-/C++-Quelltext

1
Paddle::Paddle() : x(0) , y(0) , paddle_w(0), paddle_h(0) {}




Werde ich so umändern. Macht für mich auch einen besseren Eindruck. Private Variablen habe ich auch mit einer Namenskonvention versehen. Sollte mich nur überall daran halten.


Warum ist in der Paddle Klasse eine draw Methode? Sie ändert ja keine Daten in der Instanz, also warum hast Du sie in der Klasse?


Ich hatte die draw Methode in der Klasse, damit mein Objekt sich selber zeichnen kann ohne jetzt diese Methode an anderer Stelle aus zu lagern und damit ich einfach paddle->draw() benutzen kann. Jetzt habe ich eine seperate Klasse, die eine loadImage Methode hat. Diese Methode läd das Bild in eine Bitmap und übergibt das Bitmap an das Paddle Objekt.


Ich habe da noch einen Link zu einem interessanten Artikel gefunden: How Non-Member Functions Improve Encapsulation


Danke für den Link. Werde mir den genauer an schauen ^^


Ja, in der Tat ein interessanter und sehr empfehlenswerter Artikel. Der Inhalt ist mir persönlich allerdings nicht neu, sondern Teil meiner alltäglichen Praxis ;)
Warum Getter und Setter keine so tolle Idee sind, wird ja in dem Artikel auch schon angerissen. Und genau da seh ich eben ein großes Problem mit der draw Funktion. Damit die freie Funktion dein Paddle zeichnen kann, benötigt sie den getImage() Getter. Damit wird nicht nur die Tatsache, dass das Paddle intern ein einzelnes ALLEGRO_BITMAP hält nach außen propagiert, obwohl es eigentlich ein Implementierungsdetail ist, sondern auch sämtlicher Zeichencode von dieser Tatsache abhängig (und wer weiß was noch alles, immerhin gibt es ja diesen bequemen Getter und ich will ja doch nur schnell mal ...). Wenn du nun plötzlich gerne zwei ALLEGRO_BITMAPs hättest, z.B. weil der Paddle eine magnetische Aura bekommen soll, wirds haarig. Mit den anderen Gettern, die die Position liefern, verhält sich das nicht anders. Getter und Setter sollte man imo so gut es geht vermeiden. Methoden sollten dazu dienen, mit den Daten der Klasse zu arbeiten und nicht dazu, die Daten an dritte weiterzureichen. Ich seh jedenfalls nicht, wo genau die Vorteile der freien draw Funktion liegen. Im Gegenteil, anstatt die Kapselung zu erhöhen, musstest du, um draw() als freie Funktion implementieren zu können, das Interface der Klasse um Getter erweitern, durch die nun jedermann Zugriff auf Teile des internen State des Objektes hat. Wenn du dir das Beispiel mit dem Wombat im von dir verlinkten Artikel genau anschaust, wird dir auffallen, dass dort keine Getter zum Einsatz kommen. Das ist kein Zufall ;)


Guter Hinweis. Habe dementsprechend noch einiges an Umbauarbeiten zu erledigen ^^ Danke nochmal für die vielen Antworten. Sehr lehrreich das ganze ^^

grüße
Saik0

Werbeanzeige