One very common situation that occurs when designing software is the so-called state space explosion where the number of related entities required to represent all possible states “explodes” in a Cartesian product fashion. For example, if you have circles and squares of different colors, you might end up with classes such as RedSquare, BlueSquare, RedCircle, BlueCircle, etc. Clearly, nobody wants that.
What we do instead is we connect things together, and there are different ways of doing that. For example, ...