UML域模型:如何区分属性和类?

时间:2018-05-27 13:52:55

标签: uml domain-model

我目前正在制作一款战斗游戏的领域模型,我很难确定某些元素应该是他们自己的类还是某类的属性。例如,我使用类别列表来确定以下想法/对象:战斗机,等级,武器,护甲,属性,技能,竞技场,游戏模式,游戏日志,对手。

例如,我无法判断水平,武器,护甲,属性,技能是否应该简单地说明为战斗机的属性,还是应该将它们划分为自己的对象。我不知道对手是否应该是一个独特的阶级,因为它最终是一个战斗机对象,与另一个战斗机有“攻击/防御”关联。

如何确定类别列表中每个元素的正确选择?这些可能是主观的吗?

仅供参考,我使用Craig Larman的“应用UML和模式”第3版作为信息来源。

1 个答案:

答案 0 :(得分:5)

暂时澄清您的问题 - 您的域模型中的每个类都将具有一组属性。我想你问的问题是,每个属性的 Type 本身应该是一个类,还是其他一些数据结构(例如结构,枚举,原语等)

如果这是正确的,那么答案归结为来自您的分析的设计选择;没有一个'正确的方法' - 这是软件设计的艺术。但是,在做出决定时,您可能需要寻找一些关键的事项:

  1. 行为要求的证据。 Attribute引用的对象是否需要封装行为本身?显然,某些数据结构不可能封装行为,这可能会导致您对可能的行为做出选择(例如,类与结构)。
  2. 数据结构的复杂性。 Attribute引用的对象是否需要封装复杂数据结构? (例如,各种基元和/或复杂类型的多个,可能是分层的数据)或者它是否简单? (例如,单个整数值)。同样,结构的复杂性将限制你如何表现它。
  3. 您系统的非功能性要求是什么? (例如性能要求?)性能,可扩展性和安全性等NFR可能会限制您的设计选择,因此您可以选择以简单的方式表示复杂类型或消除行为需求等。
  4. 设计选择是帮助您还是阻碍您?以过于复杂的方式表达阻碍你的工作或系统的事情是没有意义的。
  5. 受众。这可能是最重要的一点 - 你将域名模型放在一起,以及你想与他们沟通的是什么?
  6. 因此,例如,您可以将“武器”表示为类型或使用简单类型的属性。 “武器”是否有自己的行为?它是否包含多个复杂数据?是否存在NFR,这意味着它只能被视为枚举?等等。