构成和聚合引用相同的类(UML / TypeScript)

时间:2018-01-18 08:03:55

标签: typescript uml

是否有可能并且Hero是否具有聚合和组合关系是否有意义?

我的目标是保留每个英雄的权力列表,但是在创建一个时,它应该只能添加一个Power而不是多个Powers。这就是我为一个电源创建私有属性的原因。

我的问题是关于UML类图的有效性。这是显示我打算的正确方法吗?

电源是聚合的原因是它可能是另一个类使用相同的电源实例(我已经实现了一些缓存,总是返回相同的电源实例,为简单起见,我没有显示该部分)。

权力是一个组合的原因是它强烈依赖于英雄实例。如果英雄被摧毁,也应该清除权力。

Hero UML Composition, Aggregation

UML的代码看起来像那样(TypeScript):

hero.ts

$conn = pg_connect($connStr)

power.ts

import { Power } from './power';

export class Hero {
  powers: Power[] = [];

  constructor(private power?: Power) {
    if (power) {
      this.addPower(power);
    }
  }

  addPower(power: Power) {
    this.powers.push(power);
  }

}

2 个答案:

答案 0 :(得分:2)

首先:可以在两个类之间进行聚合和组合。正如您所说的那样,如果我们的part class应该用whole class删除,我们应该使用Composition,如果没有,我们可以使用Aggregation(或Association)。可以在一个方向上进行(如您所知,只有递归关系是不可能的)

根据您的解释:

  

我的目标是保留每个英雄的权力列表,但 时   创建一个只能添加一个Power而不是   多个权力。这就是我创建私人网站的原因   仅为一种力量赋予权力。

HeroPower之间进行汇总。那只是  它们之间的依赖关系关系。根据您的代码和说明,您不会在代码中保存 ONE power ,而只会在POWERS中将实例设置为Hero。这意味着您的Hero没有任何单Powerpart class


然而,您之间的构图绝对正确。因为你说:

  

它强烈依赖于英雄实例。如果英雄被摧毁,权力   也应该清理。

答案 1 :(得分:0)

根据UML中接受的答案

解决方案http://www.google.com/ig/calculator?hl=en&q=

在TypeScript中,最好不要实例化Power类型的属性,因为它没有其他用途。因此构造函数只需获得一个Power并将其添加到powers数组中。

hero.ts

import { Power } from './power';

export class Hero {
  powers: Power[] = [];

  constructor(power?: Power) {
    if (power) {
      this.addPower(power);
    }
  }

  addPower(power: Power) {
    this.powers.push(power);
  }

}