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

09.08.2013, 22:51

Wenn Dich die OOP nicht weiterbringt, denke mal über eine komponentenbasiertes Design nach. Allerdings scheint es da keine allgemeingültige Herangehensweise zu geben, folgt aber dem Mantra composition-over-inheritance.

Zitat

Ich bin nicht der Messias.
Ich sage, du bist es, Herr. Und ich muss es wissen, denn ich bin schon einigen gefolgt.

https://bitbucket.org/bwbg

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

12

09.08.2013, 23:20

Allgemein ist es so, dass Vererbung etwas sehr tolles ist. Ich nutze es aber zumindest bei kleinen Spielen ziemlich moderat. Nämlich genau da, wo ich wirklich einen Vorteil sehe. Vererbung hat den Nachteil, dass du eine sehr enge Bindung zu deinen Vaterklassen erzeugst. Wenn man zu große Klassen vererbt, kann das in einem ziemlich wüsten überschreiben von Eigenschaften enden - über mehrere Ebenen. Manchmal ist es klüger, eine hat-Beziehung zu verwenden, wie es dein Beispiel gerade zeigt. Durch die Vererbung hast du dir sehr viel Einengung erzeugt.

Also: Nutze Vererbung weise. Im Zweifel nutze eine hat-Beziehung (auch Containment genannt) und du sparst dir viel Ärger. Ich habe bei meinen Spielen konkret selten mehr als 3 Vererbungsebenen - wovon 2 abstrakt waren. Das muss aber nicht immer so sein ;)

EDIT: Zusätzlich, wo ich den Titel noch einmal lese: Öffentliche Schnittstellen sind meiner Erfahrung nach ein ziemlich guter Indiz, ob deine Klassen gut aufgebaut sind. Damit meine ich natürlich alle öffentlichen Methoden einer Klasse.

- Initialisieren kontruktoren deine Objekte vollständig?
- Hast du wenn möglich weniger als eine Hand voll Parameter für alle deine öffentlichen funktionen?
- Ist Redundanzfreiheit konsequent gewährleistet?
- Hast du deine Zuständigkeiten in den Klassen möglichst sauber getrennt?
- Kannst du nach zwei Monaten deiner Methode noch ansehen, was sie zumindest in etwa tun soll?

Ich habe bei jedem veröffentlichen einer Methode im Kopf, ob das wirklich notwendig ist. Prinzipiell ist es so, dass man bei der Verwendung eines objektes nämlich genau auf diese schaut. Je weniger es gibt, umso besser kann man das Objekt benutzen.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »TrommlBomml« (09.08.2013, 23:28)