【问题标题】:Associations between the classes with aggregation具有聚合的类之间的关联
【发布时间】:2019-06-01 01:48:05
【问题描述】:

我需要创建一个 UML 类图,但我不确定我是否做得正确。

我将向您展示示例。 所以 ClassA 有一个 ClassB 的实例,并且 ClassA 调用来自 ClassC 的方法,这些方法将来自 ClassA 和 ClassB 的属性变量作为属性变量。我是否也应该将 ClassC 与 ClassB 连接起来? ClassA 和 ClassB 之间的关联是否应该定向?下面代码的实现:

ClassB {
    constructor() {
        this.str1 = "Hello";
    }
}

ClassA {
    constructor() {
        this.str2 = "World";
        this.objB = new ClassB();
    }
    funA() {
        let objC = new ClassC();
        objC.function1(this.objB.str1);
        objC.function2(this.str2);
    }
}

ClassC {
    constructor() {}
    function1(stringFromB) {
        console.log(stringFromB);
    }
    function2(stringFromA) {
        console.log(stringFromA);
    }
}

let objA = new ClassA();
objA.funA();

感谢您的帮助:)

【问题讨论】:

    标签: class uml associations diagram


    【解决方案1】:

    复合聚合与对象的生命周期有关。您的代码中有注释表明需要这样做。

    (注意,我不知道 Java 范围规则,所以我将 this.objB 视为私有。)有一个关联是 ClassA(由点显示)的所有属性,名为 objBClassC 的依赖来自(临时使用的)objC,它不在类级别。可以讨论关联是否匹配(老实说,我不得不更深入地研究规范),但是在任何情况下依赖都没有错(因为它比关联弱,并且绝对 A 依赖于 B )。

    另一个 N.B.回覆。您的 CD:代码中的函数接受字符串,而不是对象,其中一个函数错过了结尾的 1

    【讨论】:

    • 复合聚合(在 UML 的意义上)NOT关于对象的生命周期(这是由于 C++ 社区中的术语传统而引起的广泛误解)。相反,复合聚合是关于部件/组件是否可共享的问题。
    • @GerdWagner 阅读第 4 页的方框。 110
    • 在同一页面上,他们说:“注意。在删除复合对象之前,可以(在其他允许的情况下)从复合对象中删除部分对象,因此不会作为复合对象的一部分被删除目的。”虽然规范在生命周期依赖问题上是矛盾的,但在部件的不可共享性问题上却很清楚。因此,正如我在stackoverflow.com/questions/734891/… 中所说,生命周期依赖性不是定义特征
    • @GerdWagner 我宁愿选择最佳答案。聚合只是不值得在几乎所有情况下使用它。所以(除非你有明确的用途)你不应该使用它。
    • 我的意思不是要使用聚合,而是要避免重复您所说的“复合聚合与对象的生命周期有关”的误解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多