UML 与泛型和可为空字段的关系

UML relationships with generics and nullable fields

本文关键字:字段 关系 泛型 UML      更新时间:2023-10-16

(0( 当类Foo包含 Predicate<Bar> 或类似类型的字段时,FooBar的关系是什么?

class Foo {
    Predicate<Bar> validator;
}


(1(如果一个类Foo包含一个通用容器(不一定是一个列表;可能是一个Bar Bar的盒子(,FooBar有什么关系?

class Foo {
    SomethingThatHasA<Bar> barContainer;
}


(2(如果一个类Foo有一个类型为Bar的可为空的成员,Foo是否仅仅依赖于Bar,与有关联,或者是一个组合?

class Foo {
    Bar bar; // may be null
}


(3((这在C++可能比其他地方更有意义(如果一个类Foo通常由一个Bar对象组成(即不能没有Bar(,但允许有一个默认的构造函数,将所有字段清零/无效,作为一种空白的石板状态,直到以后填充才有用, Foo还会和Bar有构图关系吗?

class Foo {
  private:
    Bar* bar; // or possibly just a non-pointer Bar
  public:
    Foo() : bar(nullptr) {}
    Foo(/* whatever */) : bar(/* something */) {}
};

(0( 和 (1( : UML 依赖关系在这里是合适的:从 Foo 指向 Bar 的虚线箭头。

(2(至少是一个协会。如果Foo和Bar的含义是这样的,那么Bar可以被认为是Foo的一部分,那么您可以使用聚合(开放菱形(,例如在汽车和发动机的情况下。此外,如果 Foos 提到的酒吧实例的寿命不比它们的 Foos 长,那么您可以使用组合物(填充菱形(,即使不是每个 Foo 都有一个酒吧,即使不是每个酒吧都包含在 Foo 中。

(3( 是

(0( none - Foo只知道通过验证器验证 Bar 的实例。

(3(是的。 Foo -s 具有无效Bar s 属于不死类别(因为...即没有酒吧就活不下去(