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, and so on. Clearly nobody wants that.
What we do instead is connect things together, and there are different ways of doing that. For example, if object color is simply a trait, we create an enum. If color has mutable ...