OOP Denkblockade
-
Hallo,
ich komme gerade nicht wirklich weiter, wie ich die Klassenhirarchie aufbaue.
Folgende problemstellung:ich habe eine (abstrakte) Basisklasse für die GrafikAPI : cBaseGfx
davon abgeleitet: cDirectXGfx und cOpenglGfxdann habe ich die Klassen: cVertexBuffer(abstrakt) . davon abgeleitet cDirecXVertexBuffer und cOpenglVertexBuffer.
ich möchte nun eine Terrain-Klasse schreiben die von der cVertexBuffer-(Basis-) Klasse abgeleitet ist(also API unanhängig). Ich möchte also nicht 2 verschiedene terrain-Klassen schreiben (für DirectX und Opengl), sondern nur eine Api unabhängige. wenn ich dann eine Instanz der Terrain-Klasse erzeuge, will (muss) ich aber eine Grafik_API verwenden.
geht das überhaupt? wenn ja wie?
-
So vielleicht?
cTerrain(cVertexBuffer& vertexBuffer); //soll DX basierten vertex buffer benutzen: cDirecXVertexBuffer vertexBuffer(/*...*/); cTerrain terrain(vertexBuffer); //soll ogl basierten vertex buffer benutzen: cOpenglVertexBuffer vertexBuffer(/*...*/); cTerrain terrain(vertexBuffer);Also im Kartext: Ich würde hier eine Assoziation benutzen, und keine Vererbung. Dann wäre Dein
VertexBuffer-Interface auch sinnvoller.Edit: Auch aus OOP-Sicht ist es so sinnvoller, denn Vererbung bildet ja eine
Is A-Beziehung nach. Ein Terrain dürfte aber rein abstrakt gesehen wohl kaum ein Vertexbuffer sein. Sonst dürftest Du an allen Stellen, an denen Du ein Vertexbuffer benutzen kannst, stellvertretend auch ein Terrain benutzen. Klingt nicht so sinnig, oder?
-
hi (namensvetter :))
ja sowas habe ich mir auch gedacht. jedoch hat mich dabei gestört, dass ich das Terrain-Objekt dann nicht wie ein VertexBuffer-Objekt nutzen kann (meine Render-Klasse erwartet in der render-funktion ein (unter anderem) VertexBuffer-Objekt).
aber da muss ich die struktur wohl nochmals komplett überarbeiten.
darum geht es mir bei dem projekt auch nur: rausfinden wie ich die Klassenhirarchy bei der engine aufbaue.
danke