UML领域模型:如何区分属性和类?
UML Domain Model : How to distinguish attributes and classes?
我目前正在制作一款战斗游戏的领域模型,我很难确定某些元素应该是它们自己的 class 还是某些 class 的属性。例如,我使用类别列表来确定以下内容ideas/objects:战士、等级、武器、护甲、属性、技能、竞技场、游戏模式、游戏日志、对手。
比如Level、Weapon、Armor、Attributes、Skills,我就分不清是简单的表述为一个战士的属性,还是应该单独划定一个对象。我也不知道对手是否应该是一个独特的 class,因为它最终是一个战斗机对象,与另一个战斗机有 'attack/defend' 关联。
如何确定类别列表中每个元素的正确选择?这些可以是主观的吗?
仅供参考,我使用 Craig Larman 的 "Applying UML and Patterns" 第 3 版作为信息来源。
暂时澄清您的问题 -- 您领域模型中的每个 Class 都将具有一组属性。我想你问的问题是每个属性的 Type 本身应该是 Class 还是其他一些数据结构(例如结构、枚举、原始数据等) .)
如果这是正确的,那么答案归结为源于您的分析的设计选择;没有人'correct way'——这就是软件设计的艺术。但是,您在做出决定时可能需要考虑一些关键事项:
- 行为要求的证据。一个Attribute所指的对象是否需要自己封装behaviour?显然,某些数据结构不可能封装行为,这可能会导致您对可以封装的行为做出选择(例如 class 与结构)。
- 数据结构的复杂性。 Attribute所指的对象是否需要封装复杂的数据结构? (例如,多种原始数据 and/or 复杂类型的多个,可能是分层的)还是简单的? (例如,单个整数值)。同样,结构的复杂性将限制您表示它的方式。
- 您的系统有哪些非功能性要求? (例如性能要求?)性能、可伸缩性和安全性等 NFR 可能会限制您的设计选择,因此您可能会选择以简单的方式表示复杂类型或消除行为需求等。
- 设计选择对您有帮助还是阻碍?以过于复杂的方式表示某些东西会阻碍您的工作或系统是没有意义的。
- 观众。这可能是最重要的一点——你将领域模型放在一起是为了谁,你想与他们交流什么?
因此,例如,您可以将 "Weapon" 表示为类型为 class 的属性或使用简单类型。 "Weapon" 有自己的行为吗?它包含多个复杂数据吗?是否有 NFR 意味着它只能真正被视为枚举?等等。
我目前正在制作一款战斗游戏的领域模型,我很难确定某些元素应该是它们自己的 class 还是某些 class 的属性。例如,我使用类别列表来确定以下内容ideas/objects:战士、等级、武器、护甲、属性、技能、竞技场、游戏模式、游戏日志、对手。
比如Level、Weapon、Armor、Attributes、Skills,我就分不清是简单的表述为一个战士的属性,还是应该单独划定一个对象。我也不知道对手是否应该是一个独特的 class,因为它最终是一个战斗机对象,与另一个战斗机有 'attack/defend' 关联。
如何确定类别列表中每个元素的正确选择?这些可以是主观的吗?
仅供参考,我使用 Craig Larman 的 "Applying UML and Patterns" 第 3 版作为信息来源。
暂时澄清您的问题 -- 您领域模型中的每个 Class 都将具有一组属性。我想你问的问题是每个属性的 Type 本身应该是 Class 还是其他一些数据结构(例如结构、枚举、原始数据等) .)
如果这是正确的,那么答案归结为源于您的分析的设计选择;没有人'correct way'——这就是软件设计的艺术。但是,您在做出决定时可能需要考虑一些关键事项:
- 行为要求的证据。一个Attribute所指的对象是否需要自己封装behaviour?显然,某些数据结构不可能封装行为,这可能会导致您对可以封装的行为做出选择(例如 class 与结构)。
- 数据结构的复杂性。 Attribute所指的对象是否需要封装复杂的数据结构? (例如,多种原始数据 and/or 复杂类型的多个,可能是分层的)还是简单的? (例如,单个整数值)。同样,结构的复杂性将限制您表示它的方式。
- 您的系统有哪些非功能性要求? (例如性能要求?)性能、可伸缩性和安全性等 NFR 可能会限制您的设计选择,因此您可能会选择以简单的方式表示复杂类型或消除行为需求等。
- 设计选择对您有帮助还是阻碍?以过于复杂的方式表示某些东西会阻碍您的工作或系统是没有意义的。
- 观众。这可能是最重要的一点——你将领域模型放在一起是为了谁,你想与他们交流什么?
因此,例如,您可以将 "Weapon" 表示为类型为 class 的属性或使用简单类型。 "Weapon" 有自己的行为吗?它包含多个复杂数据吗?是否有 NFR 意味着它只能真正被视为枚举?等等。