javaumlassociationsaggregationclass-diagram

How to represent a Map<Enum, Class> relationship in a UML class diagram?


I have a class Car, an enum Position, and a class Wheel. In Car, I have a map attribute: private Map<Position, Wheel> wheels;

I want to represent this structure in a UML class diagram. My questions are:

  1. Since the Map uses Position (an enum) as a key and Wheel as a value, does this automatically create a relationship between Car and both Position and Wheel?

  2. Should I explicitly show an association to Position, or is it implied? Would this relationship between Car and Wheel be considered an aggregation since Car "contains" multiple Wheel instances and a Wheel could exist independently of Car?

  3. How should I best represent this in UML? Any insights would be appreciated!

I tried representing Car with an association to Wheel, using an aggregation (a hollow diamond) since Car could contain multiple Wheel objects. For Position, I considered showing it as an enumeration without a direct association, assuming that its use in the Map is implicit.


Solution

  • In your case, the UML diagram should definitely show a relationship between Car and Wheel, since Car explicitly manages wheels through Map<Position, Wheel>. This relationship makes the most sense as aggregation (a hollow diamond ◇), because Wheel can exist independently of Car (e.g., stored in a warehouse or used on another vehicle). Composition (a filled diamond) would be appropriate only if Wheels were destroyed along with Car, but that’s not the case here.

    As for Position, it's just an enum used as a key in the Map, and it’s not really a standalone object in this context. Typically, such things aren’t explicitly represented in UML, so there’s no need to show an association between Car and Position. If you want to emphasize that Car uses Position, you could add a dependency (a dashed line), but that’s more of an optional detail rather than a requirement. Overall, your idea of using aggregation is correct, and Position can simply be shown as an enum without a direct association.