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

时间:2016-08-28 17:03:12

标签: java c# c++ generics uml

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

class Foo {
    Predicate<Bar> validator;
}


(1)如果一个类Foo包含Bar的通用容器(不一定是列表;可能是一个Bar的一个框),那么Foo&#39 ;与Bar的关系?

class Foo {
    SomethingThatHasA<Bar> barContainer;
}


(2)如果类Foo具有Bar类型的可空成员,Foo是否仅依赖于Bar,是否与class Foo { Bar bar; // may be null } 有关联? ?

Foo


(3)(这可能在C ++中比其他地方更有意义)如果一个类Bar通常由一个Bar对象组成(即没有Foo就不能生活) ,但是允许有一个默认构造函数,它将所有字段作为一种空白平板状态归零/无效,直到稍后填充,Bar仍然与class Foo { private: Bar* bar; // or possibly just a non-pointer Bar public: Foo() : bar(nullptr) {} Foo(/* whatever */) : bar(/* something */) {} }; 具有组合关系?

let amount = _
    .chain(selectedItemsArray)
    .map(item => _.find(availableItems, {id: item.id})
    //how can I determine that ALL items were found right here?
    .filter('price_money')
    ...

2 个答案:

答案 0 :(得分:1)

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

(2)至少一个关联。如果Foo和Bar的含义是这样的,那么Bar可以被认为是Foo的一部分,那么你可以使用聚合(开放钻石),例如在Car和Engine的情况下。此外,如果Foos提到的Bars实例的寿命不比它们的Foos长,那么你可以使用一个合成(填充钻石),即使不是每个Foo都有一个Bar,即使不是每个Bar都包含在Foo中

(3)是

答案 1 :(得分:0)

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

(3)是的。 Foo - 包含无效Bar的s属于不死类别(因为...即没有条形码就无法生存)