PDA

Click to See Complete Forum and Search --> : Classes, and where to put code


wossname
Mar 19th, 2004, 02:09 PM
Lets say I have a chess game in development, I have all the game logic worked out but not the graphics.

===

Would it be better OOP practice to put the code for drawing each chess piece within the various chesspiece classes and pass a Graphics object to the class for drawing on...


//pseudocode
for each piece on chessboard
piece.DrawSelf(chessboard.Graphics)
next piece


Or...

Have a single central drawing routine and pass each chess piece to it in turn?


//pseudocode
for each piece on chessboard
DrawPiece(piece)
next piece


===

If it is the latter, how would you get all the classes info into the drawing function, since much of the classes would be private or protected.

This would be an applicable question if instead of graphics, it was file input/output or several other things.

how would you go about it?:wave:

MyGeneration
Mar 22nd, 2004, 01:23 PM
The first method is better, OOP is basically three things

1) Encapsulation
2) Polymorphism
3) Inheritance

The second option you list above in which you have a method called DrawPiece that knows how to draw each piece is a C api, the data is not encapulated because DrawPiece will have to have access to the underlying data of the piece, there is no polymorphism or inheritance needed either, just make 'Piece' a struct with all it's data public, that's tantamount what your second approach suggests.

If you use the OOP way (first method) then you can introduce a new piece (yea, so chess is due for a change after all these years) without changing your architecture, the non OOP way would force you to go into your architecture (DrawPiece) and add another case to your 'c' api.

shunt
Mar 24th, 2004, 09:21 AM
Investigate MVC (Model, View, Controller).

wossname
Mar 28th, 2004, 06:50 AM
Thanks for explaining, MyGeneration. :thumb:

shunt
Apr 2nd, 2004, 06:11 AM
You guys need to investigate MVC. MyGeneration's idea is not a hot way of doing it. MVC is the pattern initially used in Java and was so successful that now M$ are using it in their ASP.NET architecture.

Trust me Read up on this one before you go putting your display code in your business objects....

wossname
Apr 2nd, 2004, 07:37 AM
OK, I will.

Ta.

MrNorth
Apr 27th, 2004, 07:51 AM
May I suggest reading up on the grasp patterns as well.

Aspecially the Expert! I have a poster of the grasp patterns on my wall... it is of great help when assigning responsibilities to classes... I use vb.net


kind regards
Henrik