Search code examples
umlassociationsrelationshipclass-diagram

Relation between Address class and Person class in a Class Diagram?


I am making a class diagram. I have a Person class and an Address class. I am thinking there is a 'Has-A' relation between the Person class and Address class (Aggregation):

  1. Am I right in marking the relationship as association?

  2. Does it depend on us how we want the model the relationship? For example, if I have two classes, Book and Library, I could say that Books shall not exist without a Library (composition) or I could say that Books may exist independent of library(Aggregation).


Solution

  • Is the association right?

    Yes, you are right: a simple association expresses perfectly that a Person has an Address. Nobody could claim on the base of your narrative that your model would be wrong.

    But modeling is a form of communication: You may well chose a different notation to add nuance in what you express, and you may decide for different semantics to tell how you see things in view of your needs.

    Does it depend on us? Notation

    In our example, you may want to clarify what you mean with the association by giving it a name:
    enter image description here

    Or you may prefer to clarify the role of the address in the association:
    String

    Or in complex diagrams you may prefer the shorter but equivalent property notation, nevertheless keeping in mind that "A useful convention for general modeling scenarios is that a Property whose type is a kind of Class is an Association end, while a property whose type is a kind of DataType is not":

    enter image description here

    Does it depend on us? Semantics

    You could go for aggregation, but I'd strongly discourage it since UML does not define any semantic for it. So there's no benefit compared to a simple association.

    You could consider composition. It might in general not be the best choice, as addresses exist independently of the persons. But in an application that creates separate Address objects for each Person, it could reveal how you intend to manage addresses.

    Or you may want some richer semantics, for example with an association class to tell that people could have plenty of addresses of different kinds:

    enter image description here