User:Douglas Wall
Douglas Wall (Talk | contribs) m (Adding deck of cards photo, which is a bit large but who really cares.) |
|||
Line 8: | Line 8: | ||
Disclaimer: I make no claim to know what I am doing. Most diagrams will be missing details. Some may even cause dysentery. | Disclaimer: I make no claim to know what I am doing. Most diagrams will be missing details. Some may even cause dysentery. | ||
+ | |||
+ | The essence of a deck of cards:<br> | ||
+ | [[Image:essence.jpg]]<br><br> | ||
Naturally, the solution could be as simple, yet horrific as this: [[Image:Bad Cards.jpg]] | Naturally, the solution could be as simple, yet horrific as this: [[Image:Bad Cards.jpg]] |
Revision as of 23:34, 4 August 2009
Coming soon, some sort of design project decision, for the mean time I shall consider the cards problem.
Cards as a minor design study (project warm-up)
Someone asked me this question after they were asked it in a job interview: "Can you draw a UML diagram for a deck of cards including the Jokers". Sounds simple right? Well after my mind imploded while trying to deal with the Joker (no pun intended), which complicates everything, I have resolved to try and crack that nut in an OO manner. I have a loose context for the design, that being that it must be reasonably extendible/reusable and easily maintained. It should feature no game specific behaviour, and I will probably ignore graphic representation entirely.
Disclaimer: I make no claim to know what I am doing. Most diagrams will be missing details. Some may even cause dysentery.
The essence of a deck of cards:
Naturally, the solution could be as simple, yet horrific as this:
To start with I have constructed an inheritance monster:
Problems/Observations:
- What does the abstract class Card actually contribute to its subclasses? If I ignore physical details (dimensions, materials etc) and visual items (symbols, images, colour) then there appears to be nothing else significant that it can have. The same thing applies to the Joker. The Joker card itself has no specific methods or fields that I can depict, a joker is simply a particular card with no suit or value. This problem also affects most of the other objects.
- There seems to be a need for a Strategy pattern in here, around ValueCard and its subclasses and possibly including the joker in some rework of the structure.
- It is seems huge and unnecessarily complex for something that should be simple. See above.
- Perhaps an approach from the point of view of suits would be better.
Hmmmmm... An interesting problem... I have some questions. Face cards may or may not have a value given their usage, can this be taken into account? Certain games require that Jokers be given an in game value or that they act like a wild card holding some suit/value. Does a suit need a subclass? Could you just use a enum? If I was going to subclass it, I would want to also take into account that two suits are red, two black. Why, in the first design, are the cards a set and in the second a list? Should they be either if their usage isn't know? why not just a collection... Looks good :) --Matthew Harward 04:04, 4 August 2009 (UTC)