2.7. UML Relationship

  • Arrow with empty triangle (but on picture is filled)

  • <|-- - Inheritance

  • *-- - Composition

  • o-- - Aggregation

  • --> - Association

  • -- - Link (Solid)

  • ..> - Dependency

  • ..|> - Realization

  • .. - Link (Dashed)

../../_images/uml-mermaid-classdiagram-relations.png

2.7.1. Inheritance

class Vehicle:
    def engine_start(self): pass
    def engine_stop(self): pass


class Car(Vehicle):
    pass

class Truck(Vehicle):
    pass

class Motorcycle(Vehicle):
    pass
```mermaid
classDiagram
    Vehicle <|-- Car
    Vehicle <|-- Truck
    Vehicle <|-- Motorcycle

    class Vehicle {
        engine_start()
        engine_stop()
    }
```
../../_images/uml-relations-inheritance-simple.png

2.7.2. Linear Inheritance

class Vehicle:
    def engine_start(self): pass
    def engine_stop(self): pass

class VehicleWithWindows(Vehicle):
    def window_open(self): pass
    def window_close(self): pass


class Car(VehicleWithWindows):
    pass

class Truck(VehicleWithWindows):
    pass

class Motorcycle(Vehicle):
    pass
```mermaid
classDiagram
    Vehicle <|-- Motorcycle
    Vehicle <|-- VehicleWithWindows
    VehicleWithWindows <|-- Car
    VehicleWithWindows <|-- Truck

    class Vehicle {
        engine_start()
        engine_stop()
    }

    class VehicleWithWindows {
        window_open()
        window_close()
    }
```
../../_images/uml-relations-inheritance-linear.png

2.7.3. Multiple Inheritance

  • Also know as Mixin Classes

class Vehicle:
    pass

class HasEngine:
    def engine_start(self): pass
    def engine_stop(self): pass

class HasWindows:
    def window_open(self): pass
    def window_close(self): pass

class Car(Vehicle, HasEngine, HasWindows):
    pass

class Truck(Vehicle, HasEngine, HasWindows):
    pass

class Motorcycle(Vehicle, HasEngine):
    pass
```mermaid
classDiagram
    HasWindows --* Car
    HasWindows --* Truck

    Vehicle --* Car
    Vehicle --* Truck
    Vehicle --* Motorcycle

    class Vehicle {
        engine_start()
        engine_stop()
    }

    class HasWindows {
        window_open()
        window_close()
    }
```
../../_images/uml-relations-composition.png

2.7.4. Composition

class Vehicle:
    pass

class Engine:
    def engine_start(self): pass
    def engine_stop(self): pass

class Windows:
    def window_open(self): pass
    def window_close(self): pass


class Car(Vehicle):
    engine: Engine
    window: Windows

class Truck(Vehicle):
    engine: Engine
    window: Windows

class Motorcycle(Vehicle):
    engine: Engine
```mermaid
classDiagram

    class Engine {
        engine_start()
        engine_stop()
    }

    class Car {
        engine: Engine
    }

    class Truck {
        engine: Engine
    }

    class Motorcycle {
        engine: Engine
    }
```

2.7.5. Aggregation

class Group:
    gid: int
    name: str


class User:
    firstname: str
    lastname: str
    groups: list[Group]
class Vehicle:
    pass

class Part:
    pass

class Engine(Part):
    def engine_start(self): pass
    def engine_stop(self): pass

class Windows(Part):
    def window_open(self): pass
    def window_close(self): pass


class Car(Vehicle):
    parts: list[Part] = [Engine, Windows]

class Truck(Vehicle):
    parts: list[Part] = [Engine, Windows]

class Motorcycle(Vehicle):
    parts: list[Part] = [Engine]
```mermaid
classDiagram

    class User {
        firstname: str
        lastname: str
        groups: list[Group]
    }

    class Group {
        gid: int
        name: str
    }

    User *--|> Group
```
../../_images/uml-relations-aggregation.png

2.7.6. Dependency

  • Somewhere in User class you are using Spaceship class

class Group:
    name: str


class User:
    firstname: str
    lastname: str

    def join(group: Group):
        pass
```mermaid
classDiagram
    User ..> Group

    class User {
        firstname: str
        lastname: str
        join(group: Group)
    }

    class Group {
        name: str
    }
```
../../_images/uml-relations-dependency.png

2.7.7. Cardinality

  • 0 - Exactly 0

  • 0..1 - Zero or one

  • 0..n - Zero to n (where n > 1)

  • 0..* - Zero or more

  • 1 - Only one

  • 1..n - One to n (where n > 1)

  • 1..* - One or more

  • * - Many

  • n..n - {where n>1}