Design an object-oriented system for a card game built on the traditional 52-card deck, with room to extend it later (for example, jokers or multi-card hands).
Expose a Game class that owns the cards created during play. Cards are added by suit and value, where suit is one of "Hearts", "Spades", "Clubs", or "Diamonds", and value is one of "A", "2" through "10", "J", "Q", or "K". Each new card is referred to by an integer index equal to the number of cards created before it.
The Game class should support adding a card by suit and value, returning a card's string representation in the form "<value> of <suit>", and reporting whether one card strictly beats another, where A is lowest and K is highest.
Favor a class hierarchy that lets you introduce new card kinds (such as jokers with their own ordering) and richer concepts (such as a Hand of several cards compared against another Hand) without rewriting the core Game logic.